Postfix の OP25B 対策
うちで使っているプロバイダは制限が緩い所で、これまでメール送信についてなにも対策されていなかったのですが、ついに時代の流れか、 Outbound Port 25 Blocking が始まることになり、Postfix+mailmanで運用していたメーリングリストがうまく動かなくなりました。
情報を探して、以下の設定を /etc/postfix/main.cf に加えてみるも、うまく行かず。
smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/saslpass smtp_sasl_security_options = noanonymous
通信状態を tcpdump で見ると、リレー先であるプロバイダのSMTPサーバに対して DIGEST-MD5 方式で認証を行おうとして失敗しているのが分かりました。
telnetでプロバイダのSMTPサーバで利用可能な認証方式を確認すると、GSSAPI、DIGEST-MD5、CRAM-MD5、LOGIN、PLAIN の5つです。
220 MTA ESMTP EHLO localhost 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 10240000 250-DSN 250-AUTH GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN 250-DELIVERBY 250 HELP
PLAIN認証ならどうかと思い、ruby で試してみました。
require 'net/smtp' smtp = Net::SMTP.new("smtp.example.com", 587) smtp.set_debug_output($stderr) smtp.start("localhost", "user", "password", :plain) smtp.finish
$ ruby smtpauthtest.rb opening connection to smtp.example.com... -> "220 MTA ESMTP\r\n" <- "EHLO localhost\r\n" -> "250-smtp.example.com Hello xxxxx.ne.jp , pleased to meet you\r\n" -> "250-ENHANCEDSTATUSCODES\r\n" -> "250-PIPELINING\r\n" -> "250-8BITMIME\r\n" -> "250-SIZE 10240000\r\n" -> "250-DSN\r\n" -> "250-AUTH GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN\r\n" -> "250-DELIVERBY\r\n" -> "250 HELP\r\n" <- "AUTH PLAIN xxxxxxxxxxxxxxxxxx==\r\n" -> "235 2.0.0 OK Authenticated\r\n" <- "QUIT\r\n" -> "221 2.0.0 smtp.example.com closing connection\r\n"
PLAIN認証は成功しています。なお、'net/smtp'ライブラリでは、PLAIN,LOGIN,CRAM-MD5が利用可能ですが、PLAIN,LOGINで認証成功、CRAM-MD5は認証失敗となりました。
ともかく、DIGEST-MD5ではなくPLAIN認証を使用すればうまくいきそうだと分かったんですが、調べてみたところ Postfix 2.2 以降なら smtp_sasl_mechanism_filter というパラメータで認証方式を限定できるようなのですが、これまで使っていた Debian sarge に入っている Postfix 2.1.x での設定方法はよく分かりませんでした。
結局、サーバをsargeから、Postfix 2.3.x が使われている etch にアップグレードして、以下の設定を main.cf に追加することで、PLAIN認証が使用されるようになりました。
smtp_sasl_mechanism_filter = plain, login
でもちょっとすっきりしないかな?できればDIGEST-MD5認証を使いたいし。