!!! sendmailで専任MSA
{{category mail}}
{{category FreeBSD}}
----
プロバイダでport25の制限とかはじめる動きがあって、
そろそろMSAもあったほうがいいねとかそんな感じなので、
とりあえずsendmailでMSAをageてみるテスト。
現行のMTAはそのまま使いつづけて、
MSAが受けたメールはlocalだろうがremoteだろうが
全てlocalhostのMTAに転送するようにする。
とりあえずはインストール。
portsつかってやったので詳細略。
cyrus-sasl2 と cyrus-sasl2-saslauthd と sendmail with sasl2.
sasl2がBerkeleyDB要求するのがうざいが、
まぁまとめてportsでいれておく。
ついでなんでsendmailもBDB利用にしておく。
魔法の呪文 for /usr/local/etc/pkgtools.conf
MAKE_ARGS = {
'mail/sendmail' => [
"CFLAGS='-O -pipe -s'",
'SENDMAIL_WITH_SMTPS=yes',
'SENDMAIL_WITH_SASL2=yes',
'SENDMAIL_WITH_BERKELEYDB_VER=42',
],
'security/cyrus-sasl2' => [
'WITH_BDB_VER=42',
],
'security/cyrus-sasl2-saslauthd' => [
'WITH_BDB_VER=42',
],
}
詳細略じゃなかったのか(ぉ
んで、cfの作成。
いろいろ試した結果、こんな感じのmcでいける模様。
divert(-1)
#
# This is a generic configuration file for FreeBSD 4.X and later systems.
# If you want to customize it, copy it to a name appropriate for your
# environment and do the modifications there.
#
divert(0)
include(`/usr/local/share/sendmail/cf/m4/cf.m4')
VERSIONID(`$Id: sm-msa.cf for mail.chinmai.net 2005/02/03 Exp $')
OSTYPE(freebsd4)
DOMAIN(generic)
dnl
Dwmail
Dmchinmai.net
define(`confDOMAIN_NAME', `$w.$m')dnl
dnl
define(`confPID_FILE', `/var/run/sm-msa.pid')
define(`STATUS_FILE', `/var/log/sm-msa.st')
define(`QUEUE_DIR',`/var/spool/msaqueue')
define(`confCF_VERSION', `MSA')
define(`SMTP_MAILER_FLAGS', `k')
define(`LOCAL_MAILER_FLAGS', `k')
FEATURE(`no_default_msa')
dnl
dnl Enable for both IPv4 and IPv6 (optional)
DAEMON_OPTIONS(`Name=MSAv4, Port=587, Family=inet, M=E')
DAEMON_OPTIONS(`Name=MSAv6, Port=587, Family=inet6, M=E')
dnl
dnl The group needs to be mail in order to read the sasldb2 file
define(`confRUN_AS_USER',`root:mail')
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5')
define(`confAUTH_MECHANISMS',`DIGEST-MD5 CRAM-MD5')
define(`confDONT_BLAME_SENDMAIL',`GroupReadableSASLDBFile')
dnl
undefine(`ALIAS_FILE')
define(`MAIL_HUB', `localhost.')
define(`SMART_HOST', `localhost.')
define(`confFORWARD_PATH', `')
ifdef(`confFROM_HEADER',, `define(`confFROM_HEADER', `<$g>')')
define(`_DEF_LOCAL_MAILER_FLAGS', `lsDFM5q')
MAILER(`local')
MAILER(`smtp')
LISTEN Portはv4とv6の587番のみ。
MSA専任で受信したメールは全てlocalhostのMTAに転送する設定。
最初は FEATURE(`nullclient') を使ってたんだけど、
漏れなくMASQUERADEがついてくるので、
nullclient.m4の中身を一部拝借してみた。
MAIL_HUBとSMART_HOSTは単に localhost とだけ書くとどうも動作しない模様。
最後に . をつけると動作するんだけど、なぜかは知らん(ぉ
あと、localhost宛の転送になるので、 MAILER_FLAGS に k を追加してやらないと
mail loopを検出してきて転送エラーになるので注意。
認証については、普通にsasl2を使えばよろしい。
saslauthd を -sasldb で起動して、
# saslpasswd2 -c -u chinmai.net testuser
でユーザ登録。SMTP認証はユーザ名 testuser@chinmai.net でないと認証とおらない。
魔法の呪文 for /etc/rc.conf
saslauthd_enable=YES
saslauthd_flags="-a sasldb"
----
あと無保証の何か。コワイヨー(ぉ
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <pwd.h>
main() {
struct passwd *pwd;
size_t len = 200;
char cmd[len];
char *fqdn = "example.com";
pwd = getpwuid(getuid());
printf("SMTP AUTH password for user %s\n",pwd->pw_name);
setuid(geteuid());
snprintf(cmd,len,"/usr/local/sbin/saslpasswd2 -u %s %s",fqdn,pwd->pw_name);
system(cmd);
}