性善説はとうの昔に崩壊し,メール送信時に認証をしないとあっと言う間に SPAM の踏み台にされる昨今です.
以前はメール送信時の認証として,POP before SMTP などがよく使われていました
(私もこんなの作りましたしね.).
しかし POP before SMTP はいちいち POP 認証するのも面倒,
かつ POP の認証機構もいまいちです(POP は平文,RPOP は論外 ;-p).
というわけで,SMTP Auth を使いましょう.
SMTP Auth は,RFC2554 ``SMTP Service Extention for Authentication''で定義されています.
まず,認証に使う SASL を入れます.SSL が入っていないのであれば,そっちを先に入れましょう.
SASL は Simple Authentication and Security Layer の略で,RFC2222, RFC2444 あたりに書かれています.
何がどう Simple なのかは私には分かりません.
いくつか実装はありますが,Cyrus-SASL を使うことにします.
% tar zxvf cyrus-sasl-1.5.28.tar.gz
% cd cyrus-sasl-1.5.28
% ./configure --enable-login --enable-gssapi=no
% make
# make install
# touch /etc/sasldb
# chmod 600 /etc/sasldb
# cd /usr/lib
# ln -s /usr/local/lib/sasl
SASL を入れたあと,Sendmail で SASL を使えるようにするために設定ファイルを置く必要があります.
chmod は要らないかも.
% cd /usr/lib/sasl
# vi Sendmail.conf
pwcheck_method: sasldb
# chmod 600 Sendmail.conf
SASL が入ったら,SASL 対応で sendmail を作ります.
devtools/Site/site.config.m4 に -DSASL とか付けるだけです.
% tar zxvf sendmail.8.12.7.tar.gz
% cd sendmail-8.12.7
% cd devtools/Site
% cp ../OS/Linux ./site.config.m4
% vi site.config.m4
% diff -ur ../OS/Linux site.config.m4
--- ../OS/Linux Fri Mar 22 08:59:25 2002
+++ site.config.m4 Sat Jan 4 18:10:21 2003
@@ -6,8 +6,10 @@
define(`confDEPEND_TYPE', `CC-M')
define(`confSM_OS_HEADER', `sm_os_linux')
define(`confMANROOT', `/usr/man/man')
-define(`confLIBS', `-ldl')
+define(`confLIBS', `-ldl -lssl -lcrypto -lsasl')
+define(`confLIBDIRS', `-L/usr/local/ssl/lib -L/usr/local/lib/sasl')
define(`confEBINDIR', `/usr/sbin')
+define(`confENVDEF', `-DSASL')
APPENDDEF(`confLIBSEARCH', `crypt nsl')
define(`confLD', `ld')
あとは,普通に make しましょう.
% cd ../../
% sh ./Build
# sh ./Build install
最後に sendmail.cf を作りましょう.
sendmail.mc に下のように書き加えます.
define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 PLAIN LOGIN ANONYMOUS')dnl
define(`confAUTH_OPTIONS', `A')dnl
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5')dnl
これで,MD5 認証だけ信用するようになります.
あとは普通に sendmail.cf を作りましょう.
% cd cf/cf
# make install-cf
saslpasswd コマンドで,ユーザ登録します.
登録されているユーザの確認は,sasldblistusers です.
sendmail をデーモンで上げて,SMTP Auth できるか確認しましょう.
とりあえず,telnet でつないで EHLO で確認できます.
telnet localhost 25 して,EHLO localhost した時に
250-AUTH DIGEST-MD5 CRAM-MD5 PLAIN LOGIN ANONYMOUS
が表示されれば,たぶん SMTP Auth は動いています.
それでも認証が失敗する場合は,SASL のユーザ登録,
認証メカニズムなどを調べましょう.
Digest-MD5 を使っているのにドメインを渡していない,などもありがちです.