SMTP AUTH
教授から「ノートPCを持ち歩いても、研究室のメールサーバからメールを送りたい」という要望があったので、いろいろ検討してみる。
サーバには OpenVPN が入れてあるので、VPN でつないでからメールを送ってもらえば大丈夫なんだが、教授の Mac にインストールするのは面倒そうなので没。
となると、POP before SMTP か SMTP AUTH ってところになる。
Webでいろいろ情報を見てみると、POP before SMTP より SMTP AUTH のほうが導入が楽そうだったので、そっちにしてみた。ちなみに、OS は FreeBSD 5.3 です。
参考にしたのは「SMTP認証の設定メモ.(TLS SSL) [FreeBSD](fkimura.com)」とかその周辺。あとは、それっぽいキーワードでぐぐれ。
1. cyrus-sasl の導入と sendmail の作り直し
とは言っても /usr/ports/mail/sendmail-sasl で make install すれば、依存する security/cyrus-sasl2 とか security/cyrus-sasl2-saslauthd もまとめて入ります。
もとの sendmail は /usr/libexec/sendmail/sendmail だけど、ports で入れると /usr/local/sbin/sendmail に入るので、make の最後に出てくるメッセージにしたがって、make mailer.conf もしておく。
2. /usr/local/lib/sasl2/Sendmail.conf
pwcheck_method: saslauthd
に修正。これで saslauthd 経由でパスワードを確認するようになるらしい。
3. /etc/rc.conf の書き換え
sendmail_enable="YES" sendmail_program="/usr/local/sbin/sendmail" sendmail_procname="/usr/local/sbin/sendmail" saslauthd_enable="YES" saslauthd_flags="-a sasldb"
sendmail_enable="NONE" にして、/usr/local/etc/rc.d/sendmail.sh.sample を sendmail.sh にリネームしてもいいけど、上の設定でもちゃんと動いているようだ。
saslauthd_flags は、パスワードをどう扱うかによって変わる。今回は sasldb を使った。
4. sendmail.cf の作り直し
/usr/local/share/doc/cyrus-sasl2/Sendmail.README に書いてあるように /etc/mail/freebsd.mc と freebsd.submit.mc に設定を追加して make install。
→本当は hostname.mc に書くのが行儀がいい方法みたい?
freebsd.mc に追加
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5')dnl define(`confAUTH_MECHANISM', `DIGEST_MD5 CRAM-MD5')dnl define(`confDONT_BLAME_SENDMAIL', `GroupReadableSASLDBFile')dnl ※ define(`confRUN_AS_USER',`root:mai') は ※ saslauthd を使う場合は無くても大丈夫みたい
freebsd.submit.mc に追加
DAEMON_OPTIONS('Name=NoMTA, Addr=127.0.0.1, M=EA')dnl
5. 起動&再起動
/usr/local/etc/rc.d/saslauthd.sh start /etc/rc.d/sendmail restart
6. パスワード設定
saslpasswd2 username でパスワードを設定。
7. 確認
Thunderbird だと SMTP サーバの設定で、「ユーザ名とパスワードを利用する」をチェックしておけばいい。あとは、自分宛にでもテストメールを送ってみる。
SMTP AUTH で受け付けられると、Recieved: が普段とちょっと変わりますねぇ。うちのサーバだとこんな感じ。
Received: from [127.0.0.1] (***.um.u-tokyo.ac.jp [133.11.***.***]) (authenticated bits=0) by ***.sakamura-lab.org (8.13.4/8.13.1) with ESMTP id ****** for <*****@*****>; Fri, 15 Apr 2005 12:00:00 +0900 (JST) (envelope-from ***@****)
ちなみに、最初は telnet でつないで確認しようと思ったけど、CRAM-MD5 とか DIGEST-MD5 の計算が面倒なんで、EHLO で、ちゃんと sendmail が SMTP AUTH 対応でこんぱいる出来てるか見るだけでやめました^^;
8. おまけ STARTTLS (TLS) サポート
Sendmail.README にあるように、Outlook Express は AUTH Mechanism に LOGIN が必要だそうで、いちおうこれでもパスワード垂れ流しにならないように対策ってことで、TLS も使えるように試してみる。
証明書の作成
というか、imap over SSL や pop3 over SSL 用に証明書があるので、それを使い回すことにした。
ln -s /usr/local/certs/imap.pem /usr/local/certs/sendmail.pem
ちなみに、手作業で作るなら多分次のコマンド。作られた sendmail.pem は chmod 600 しておく。
openssl req -new -x509 -days 365 -nodes -out sendmail.pem -keyout sendmail.pem
それから、FreeBSD の sendmail の ports では、make tls-install でキーの生成を行ってくれるそうです。
sendmail.cf の作り直し
freebsd.mc の TRUST_AUTH_MECH と confAUTH_MECHANISM に LOGIN を追加。
証明書の場所の指示を追加。
dnl STARTTLS (TLS) Support define(`confCACERT_PATH',`/usr/local/certs') define(`confCACERT',`confCACERT_PATH/sendmail.pem') define(`confSERVER_CERT',`confCACERT_PATH/sendmail.pem') define(`confSERVER_KEY',`confCACERT_PATH/sendmail.pem')
修正したら、make install restart。
Outlook Express 設定
メールアカウントの「サーバ設定」タブで、「このサーバは認証が必要」をチェック。其の横の「設定」も必要に応じて直す。「詳細設定」タブで、SMTP に SSL を使うようにチェックを入れる。(「SMTP認証の設定メモ.(TLS SSL) [FreeBSD](fkimura.com)」に画像があります)
これで Outlook Express でも、暗号化されるので一応安心。ちなみにアンチウィルスソフトを使っていて「発信電子メールをスキャン」などを設定していると(たぶんデフォルトONになってる)、送信失敗するみたいなので、試す前に OFF にしておきましょう。