sendmail8.11.0 with SMTP AUTH and smtpfeed の導入

SMTP AUTH を導入するため、cyrus-sasl をインストール。
sendmail 単体ではメール配送が遅いので smtpfeed も入れときます。 sendmail.cf は WIDE CF では SMTP AUTH の設定ができないので sendmail 付属の cf tool で sendmail.cf を作成。
インストールは http://www.sendmail.org/~ca/email/auth.html も参考にしましょう。

○cyrus-sasl をインストール。

http://asg.web.cmu.edu/sasl/ から cyrus-sasl-1.5.24.tar.gz を拾ってきました。
多くの MUA は CRAM-MD5 で認証してきますが LOGIN 認証してくるへっぽこな MUA もあるため LOGIN 認証を一応有効にしておく。また、sendmail はデフォルト設定では /usr/lib/sasl を見に行くのでライブラリを /usr/lib/sasl にインストールして手を抜いときます。(^^;

#tar zxf cyrus-sasl-1.5.24.tar.gz
#cd cyrus-sasl-1.5.24
#./configure --enable-login --prefix=/usr
#make
#su
$make install

○sendmail と smtpfeed のインストール

sendmail 本体は ftp://ftp.kyoto.wide.ad.jp/mail/sendmail/
sendmail の WIDE patch と smtpfeed は ftp://ftp.kyoto.wide.ad.jp/mail/smtpfeed/ から拾ってくる。

#tar zxf smtpfeed-1.07.tar.gz
#cd smtpfeed-1.07
#./configure
#make
#su
$make install

/usr/libexec/smtpfeed ができる。
次に sendmail に WIDE patch を当てる。これがないと smtpfeed が使えない。

#gunzip sendmail8.11.0+3.3W.patch.gz
#tar zxf sendmail.8.11.0.tar.gz
#cd sendmail.8.11.0/sendmail
#patch -p1 < ../../sendmail8.11.0+3.3W.patch

devtools/Site/site.config.m4 を書く。

APPENDDEF(`confENVDEF',`-DSASL')
APPENDDEF(`conf_sendmail_LIBS',`-lsasl')

sasl のインストール場所が /usr/lib/sasl でない場合は他にも設定が必要らしい。

#cd sendmail.8.11.0
#./Build
#./Build install

ちなみに私は Build install はやってない。sendmail のバイナリを /usr/sbin/sendmail に上書きしただけ。どうでもいいけど。

○sendmail.cf の作成

conf.mc を書く。

cf/README を参考に conf.mc を書く。smtpfeed の設定は smtpfeed の INSTALL.j を参照。

define(`SMTP_MAILER_MAX',`1000000')dnl  … 送受信最大サイズを1MBに制限
define(`confAUTH_MECHANISMS',`LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl …利用可能な認証方法を指定
define(`SMART_HOST', `smtpf:LMTP')dnl  … smtpfeed の設定
include(`cf/generic-linux.mc')dnl  … OS の設定を取り込む
FEATURE(`access_db',`hash -o /etc/mail/access')dnl  … access_db の設定
FEATURE(`always_add_domain')dnl  … ユーザ名だけの場合ドメイン(実際にはFQDN)を付加する
TRUST_AUTH_MECH(`LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl  … メール中継を許す認証方法を指定
FEATURE(nocanonify)dnl  … 以下、smtpfeed の設定
MAILER_DEFINITIONS
Msmtpf, P=/usr/libexec/smtpfeed, F=mDFMuXz, S=11/31, R=21, E=\n, L=990,
        T=DNS/RFC822/SMTP, A=smtpfeed -V
MAILER(smtp)dnl

sendmail.cf を作成する。

#m4 m4/cf.m4 conf.mc > sendmail.cf

できた sendmail.cf は /etc/mail/ に置く。
access_db の設定もしてあるので /etc/mail/access を書く。

tenchi.ne.jp RELAY

と書いておき、(上記は認証なしでも中継を許可するドメイン)

$makemap hash /etc/mail/access < /etc/mail/access

としてアクセスDBを作成する。詳しくは cf/README 参照。

/etc/mail/local-host-names について。
m4 cf ではこのファイルが必要。中には FQDN を書いておく。
generic なメールアドレスを使用する場合はドメイン名も書いておく。

○sasl の設定

/usr/lib/sasl/Sendmail.conf に

pwcheck_method: sasldb

を書いておく。これは認証に /etc/sasldb を使う設定。
shadow や PAM などもあるが CRAM-MD5 などの暗号化された認証は sasldb でないと使えない。

○動作確認

sendmail を再起動し、telnet で動作確認する。

#telnet localhost smtp
EHLO localhost

とやって
250-AUTH LOGIN PLAIN

といった返事が返ってくればOK。DIGEST-MD5 や CRAM-MD5 などはパスワードを登録しないと出てこないので注意。

○パスワード登録

パスワードは root になり、

$saslpasswd ユーザ名

で登録します。(できた /etc/sasldb は chmod 600 しておきましょう。)
この場合、アカウントは「ユーザ名@ホスト名」になります。クライアントはユーザ名だけ指定した場合、「ユーザ名@FQDN」と指定してくるようなので、

$saslpasswd -u tuna.tenchi.ne.jp ユーザ名

というように FQDN を指定してやるとアカウントは「ユーザ名」または「ユーザ名@FQDN」にできるようです。
登録したアカウントは

$sasldblistusers

で見ることができます。

○パスワード登録ツールの作成

このままでは管理者以外にパスワードの登録、変更ができません。 私としてはパスワード管理などやりたくないので(^^; 一般ユーザからパスワードを変更するコマンド(wrapper)を作りました。saslpasswd を呼んでるだけなので短いです。

smtppasswd.c をコンパイルします。

変数 fqdn をサーバの FQDN に書き換えたあと、
#gcc smtppasswd.c -o smtppasswd
#su
$cp smtppasswd /usr/local/sbin/
$chmod 4755 /usr/local/sbin/smtppasswd

とします。
あとは一般ユーザから smtppasswd を実行すれば「saslpasswd -u [FQDN] ユーザ名」が setuid されて呼び出され、パスワード変更ができるようになります。


戻る