BIGLOBEがOutbound Port 25 Blockingをはじめてくれたおかげで、野良サーバーのsendmailがメールの配送ができなくなってしまった。これを回避するためにSubmission Port(587)にメールを送る様に設定する必要があるが、困ったことにSubmission Portは一般にSMTP AUTHで認証される上に、BIGLOBEのSMTPサーバーはFromアドレスがBIGLOBEユーザーでないと中継を拒否しやがる。
前者はsendmail.cfをSMTP AUTHを利用するように設定すれば回避できる。後者は、差出人書き換えはしたくないので、外部でSMTP AUTHで認証すればFromアドレスを問わずに中継してくれるプロバイダーを探したところ、asahi-netが使えることがわかったので、asahi-netを契約した。
で、sendmail.cfの改造。
sendmail.mcに以下の記述を追加する。
define(`SMART_HOST’, `esmtp:[mail.asahi-net.or.jp]’)
define(`RELAY_MAILER_ARGS’, `TCP $h 587′)
define(`ESMTP_MAILER_ARGS’, `TCP $h 587′)
FEATURE(`authinfo’)
SMART_HOSTの設定で、すべてのメールをasahi-netのメールサーバーに転送する様に設定する。そのままではPort 25に接続しようとしてBIGLOBEのフィルタに引っかかってしまうので、次の二行でSubmission Portに接続するようにする。多分、下の一行で十分だと思うが、esmtpでなくsmtpでリレーしないといけない場合に備えて両方書いておく。こう書いてしまうと、外部には587でしか接続しなくなってしまうと思われる。ということは、mailtertableで特定のアドレスだけ転送先を変えるとその先にも587で接続するしかなくなるので、全体のオプションでなく、接続先ごとに接続ポートを書ける様にしてほしいと思うが、まあ、どうせBIGLOBEからは587でしか出れないのであきらめよう。SMTPを25で、ESMTPを587で接続するようにして、BIGLOBE向け配送だけSMTPでBIGLOBEのサーバーに送ってもいいが、ちゃんと動くか確かめるのも面倒なので、全部asahi-netに頼ることにする。
最後の行がSMTP AUTHの認証を利用する設定。この設定を有効にすると、/etc/mail/authmap.dbにある認証情報のハッシュを元に接続先とSMTP AUTHで認証をしてくれる。
さて、このauthinfoを設定する。
まず、touch /etc/mail/authinfoして空ファイルを作成してから、chmod 600 /etc/mail/authinfoしてroot以外読み書き不可にする。セキュリティ上、先にこれをやってから編集すること。
このファイルに認証情報を書く。
AuthInfo:mail.asahi-net.or.jp “U:username” “P:password” “M:CRAM-MD5”
の様に、サーバーのFQDN、username、passwordを平文で記述しておく。最後のCRAM-MD5は暗証化方法だが、これは
telnet mail.asahi-net.or.jp 587
して、EHLO bam-system.ddo.jpとするとどの様な暗証化方法が可能か表示される。それを見るとDIGEST-MD5とCRAM-MD5が使えるみたいなので、ここではCRAM-MD5に設定しておく。
最後に、面倒なので自動化するために、/etc/mail/Makefileにauthinfoのハッシュ化もするように変更を加える。
SENDMAIL_MAP_SRC+= mailertable domaintable bitdomain uucpdomain
genericstable virtusertable access authinfo
最後のauthinfoを書き加えておくと、このファイルに変更があればmakemapでハッシュ化してauthinfo.dbを作成してくれる。
後は、/etc/mailに移動して、make all;make install;make restartで新しい設定でsendmailを有効化する。
うまくいったかどうか、外部からメールを投げてみて、/var/log/maillogで確認する。