最近流行の Outbound Port25 Blocking (OP25B) ではないが、自宅サーバから直にメールを送ると相手によっては受け取ってもらえないようになってきた。調べてみると、自宅サーバの sendmail を使ってプロバイダのメールサーバ経由で外部へ送る際にsendmail をクライアントとして SMTP 認証させるノウハウが広く公開されているようなのでそれを試してみた。
まず、プロバイダのメールサーバの仕様を確認する。
$ telnet <smtpserver> 25 <略> 220 xxx.xxx.xxx.xxx ESMTP Sendmail; xxx, xx Feb 2008 xx:xx:xx +0900 EHLO localhost 250-xxx.xxx.xxx.xxx Hello xxx.xxx.xxx.xxx [xxx.xxx.xxx.xxx], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 10485760 250-AUTH PLAIN LOGIN CRAM-MD5 250-STARTTLS 250 HELP QUIT 221 2.0.0 xxx.xxx.xxx.xxx closing connection Connection closed by foreign host. <略>
認証には PLAIN, LOGIN, CRAM-MD5 が利用できるようである。
SMTP 認証させるには SASL をリンクした sendmail が必要だそうだ。NetBSD 3.1 付属の sendmail は SASL がリンクされていないそうなので、pkgsrc から sendmail をインストールする。最近リリースされた NetBSD 4.0 では sendmail が外され、postfix のみになったらしい。どちらにせよ、SASL はリンクされていないので pkgsrc などから入れる必要がある。
PKG_OPTIONS.sendmail に sasl と tls を追加して sendmail をインストールする。SASL のライブラリは自動的にインストールされるが、認証モジュールは個別にインストールする必要がある。つまり、CRAM-MD5 を有効にするためには cy2-crammd5 を追加でインストールする必要がある。
/etc/mk.conf への追加内容
PKG_OPTIONS.sendmail=sasl tls
sendmail, cy2-crammd5 のインストール
$ cd <pkgsrcdir>/mail/sendmail $ make install $ cd <pkgsrcdir>/security/cy2-crammd5 $ make install # ln -fs /usr/pkg/share/examples/sendmail/mailer.conf /etc/mailer.conf
/etc/mtree/special.local:
./etc/mailer.conf type=link mode=0444
sendmail.mc への追加項目
define(`SMART_HOST', `relay:<smtpserver>')dnl define(`confRELAY_MAILER', `esmtp')dnl define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl FEATURE(authinfo, DATABASE_MAP_TYPE` -o 'MAIL_SETTINGS_DIR`authinfo') define(`confAUTH_MECHANISMS', `CRAM-MD5 DIGEST-MD5 LOGIN PLAIN')dnl
/etc/mail/authinfo の内容
AuthInfo:<smtpserver> "U:<user>" "P:<password>" "M:CRAM-MD5"