Outbound Port 25 Blocking 対策
July 31, 2010 – 2:58 pm自宅に設置しているメールサーバへの接続ができない不具合が生じていた。原因は、スパムメール対策としてISPにより導入されているOP25B(Outbound Port 25 Blocking)であった。これに対応するため、我がメールサーバでもSubmission Port 587番を通じたメールの受付を可能にした。関連情報そして一連の作業内容についてメモしておいた。
Outbound Port 25 Blocking【OP25B】とは何か?:IT用語辞典で、OP25Bの項を見ると、次のように解説されている:
ネットワークの境界にあるルータなどの機器で、ネットワーク内から外部のコンピュータのTCPポート25番への通信を禁止すること。インターネットサービスプロバイダ(ISP)などが会員のパソコンからスパムメールが送信されるのをブロックするために行っている。
TCPポート25番を介した通信を禁止することになると、この通信ポートを介して特定のISPネットワークの内側からメールを投函しようとすると、投函の対象とするメールサーバはこのネットワークの内側にあるものだけに限定される。
具体的な例として、我が家のネットワーク構成のもとで考えてみよう:
我が家では、二つのISP(OCNとAsahi-net)と契約し、前者OCNのもとで作業用のPCを用いており、後者のAsahi-netにプライベートな(メール)サーバを設置している。OCN上にある作業(クライアント)用PC上でメールを作成し、これをAsahi-net上にあるメールサーバに投函しようとする、即ち、OCNのネットワークから外側にあるAsahi-netのネットワークに向けメールを送信しようとすると、OP25Bにより、これがブロックされてしまう。
ISPの全てがOP25Bというスパムメール対策を採ると、我が家に設置しているメールサーバにはAsahi-netのネットワーク内からしかメールを投函できなくなってしまうということになる。これでは、個人的にメールサーバを自宅に設置する意味が半減してしまう。
OP25B対策にはMessage Submission を使えばよい: 大部分のISPでは、TCPポート25番へのメールの投函に代えて、Message Submission用のTCPポート587番を介してネットワーク外に設置されているメールサーバへのメールの投函を可能にしている。いいかえると、外部のコンピュータのTCPポート587番への通信は許されており、これを使えばよい。
このMessage Submissionの導入、いろいろ調べてみると、結構、根が深い問題のようだ。TCPポート25番はSMTP(Simple Mail Transfer Protocol)用に準備されている通信ポートである。SMTPは、本来、メッセージの転送、配信用に定義されているプロトコールであり、通信を行う主体MTA(Message Transfer Agents(MTAs)は、メッセージの転送、配信に際して、単にRecieved, Return-Path, その他のヘッダーを付加する以外、メッセージの内容を変更するなどの役割を持たないものと想定されていた。
ところが、このSMTP、本来の役割を超え、メッセージの投函(submission)に対しても広く使われるようになってきた。SMTPのもとでは、メールメッセージとして当然持つべき情報、例えば、送信日時、ドメイン名などが不明で、不完全なメッセージであっても投函可能になってしまう。こうした弱点が迷惑メールをはびこらせるひとつの原因になったようだ。
SMTPの持つこうした弱点を補うため、メールメッセージの投函(submission)とMTA間のメッセージの転送、配信を分離し、submission機能についてはTCPポート587番を、転送、配信機能についてはこれまでの25番を割り当てて分離することになった(Message SubmissionについてRFC2476において標準化されている)。
こうして、メールメッセージの投函にたいして、より明確な基盤が提供されることになった。最近では、クライアントのメーラそしてメールサーバの大部分がMessage submission機能に対応可能になってきており、電子メールを投函する際には、この専用のプロトコールを用いるのが当然と考えるべきだろう。
PostfixをMessage Submission対応にするための設定: 我がサイトでは、メールサーバ用のソフトとしてPostfix(v.2.3.3)を用いている。Postfixを我がメールサーバーとして最初にインストールした際の設定については、「Postfixの設定とSASL認証」に記述している。
これをMessage Submission対応にするには、/etc/postfix/master.cf において、コメントアウトされているservice、submissionを有効にしてやればよい(具体的には、submission の前についている#、ならびに関連するオプション部の#を取り除く)。
関連する部分を以下に示す:
# # Postfix master process configuration file. For details on the format # of the file, see the master(5) manual page (command: "man 5 master"). # # ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n - n - - smtpd submission inet n - n - - smtpd -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject
以上のように設定したのちPostfixをreloadすれば、submission用TCPポート587番を介したメールメッセージの投函が可能になる。