OP25B対策(Outbound Port 25 Blocking対策)

Outbound port 25 Blocking(以下、OP25B)とは、文字どおり外向きのTCP 25番ポートをブロックすることを意味しており、ISPの加入者のパソコンがウイルスに感染したり乗っ取られたりして迷惑メールを配信するのを防止するための技術です。OP25Bが導入されたとしても、ISPのSMTPサーバを利用しているユーザには全く影響がありませんが、自宅サーバでSMTPサーバを動かしている場合は何らかの対策が必要になります。

■2種類の対策

OP25B導入に対する自宅SMTPサーバでの対策としては、大きく分けて2つの対策が必要となります。
ひとつは自分が契約しているISPが導入した場合であり、もうひとつは、自宅SMTPサーバを自宅以外の外部から使用する場合にのみ関係する話ですが、使用するクライアントが接続されているISP側がOP25Bを導入した場合です。どちらもOP25Bにより自宅SMTPサーバに関する通信が阻害されるという点では同じですが、前者は自宅SMTPサーバから外部へ送信する場合であり、後者は外部から自宅SMTPサーバに接続(メールを受けとるという意味では受信)する場合であり、全く異なる形態の通信のためそれを解決するための要件も全く異なり、それぞれに対策が必要です。OP25B対策という言葉だけで、両方がゴチャゴチャになっていて勘違いされている方がBBS等を見ると多く見受けられます。



◆対策1. 自宅SMTPサーバが接続されているISPがOP25Bを導入した場合

このケースでは、従来、自宅サーバからメールを送信する場合に相手のSMTPサーバに25番ポートを使用して直接送信していたが、その通信がOP25Bにより遮断されてしまうため通信できなくなってしまう。対策としては、固定IP契約に変更するか、動的IP契約の場合は全てのメールを自分が契約しているISPのSMTPサーバ経由で送信するように対策を講じる必要がある。ここでは、当然動的IPのままでの対処方法を述べる。
自宅サーバではなくホスティングしているような場合は、サーバがADSLやFTTH等の一般的なISPのインターネットサービスでつながっているわけではないため、本対策は不要である。但し、自宅のクライアントがOP25Bで25番ポートでは外部に出られなくなる(ホスティングサーバへの接続ができなくなる)ので、サーバ側の対策(対策2)は必須となる。
上記の対策を実施してもうまくいかない場合は、原点に戻り、プロバイダでOP25B対応時のOE等のメーラの設定方法が解説されているはずなので、そのとおり設定してプロバイダのSMTPサーバ経由で送信できるかテストしてみると良い。自鯖でのOP25B対策は、まさにこのメーラの動作を擬似するだけなので、メーラでうまくいかない場合は、いくら自鯖のSMTPサーバで設定してもうまくいくはずはなく、何かしらの要件が抜けているはずなのでメーラで試験すれば切り分けが容易になるはずである。

[注意事項]
  1. Postfixを使用していてプロバイダがOCNの場合、Submissionポート(587番)の中継用SMTPサーバに転送する必要があるが、SMTP-AUTH時にPostfixがデフォルトでMAIL FROM: に"AUTH=<>"を付加するため、「said:555 Unsupported option: AUTH=<> (in reply to RCPT TO command)」と拒否されてしまう。
    対策としては、PostfixにパッチをあてMAIL FROM: に"AUTH=<>"を付加しないようにするか、条件付で外部でSMTP中継をしてくれるサービスがあるのでそれを使用する方法もある。

    [Postfixでのパッチ例(Postfix2.3.11ベース)]

    --- src/smtp/smtp_proto.c.orig	2007-06-14 20:41:11.023125000 +0900
    +++ src/smtp/smtp_proto.c	2007-06-14 20:33:54.304375000 +0900
    @@ -1206,11 +1206,13 @@
     	    /*
     	     * We authenticate the local MTA only, but not the sender.
     	     */
    +/*
     #ifdef USE_SASL_AUTH
     	    if (var_smtp_sasl_enable
     		&& (session->features & SMTP_FEATURE_AUTH))
     		vstring_strcat(next_command, " AUTH=<>");
     #endif
    +*/
     	    next_state = SMTP_STATE_RCPT;
     	    break;
    


    [SMTP中継をしてくれるサービスの利用]

    これは、MyDNSのメールリレーサービスを利用する方法である。但し、試験サービスという位置づけなのでいつまで利用できるか不明なため、各人のリスクで使用するか検討してほしい。下記参照先を見ればどういうものかわかるはず。簡単にいうと、MyDNSにユーザ登録した上で、dice等でそのサブドメインのIPアドレスを登録すると、 MyDNSのメールリレー用SMTPサーバを利用できるようになるというもの。 その際、送信メアドはMyDNSドメインでなくてもできるので利用させてもらう方法である。こんなことを書くと、MyDNSドメイン以外は止められてしまうかもしれませんが、参考まで・・・。

     http://www.mydns.jp/info20060328.html

  2. Yah○○で自鯖のメアドで送信する場合は、そのアドレスを登録しないとSMTP-AUTH対策しても送信できないので注意が必要である。上記のSMTP中継サービスを利用するのも手である。


◆対策2. 自宅SMTPサーバを利用しているクライアント側のISPがOP25Bを導入した場合

こちらは、外部から自宅サーバを利用していない場合は当然のことながら対処不要である。もし、利用している場合、自分が契約しているISP以外のことであり導入連絡があるわけでもなく、ある日突然利用できなくなるので早めの対応が必要である。
なお、対処方法は、各ISPが他のISPの配下から自社のSMTPサーバアクセスができるようにしている対策と全く同じである。つまり、OP25Bで自宅サーバに接続しようとする25番ポートが遮断されるので、替わりのポートで待ち受けるという単純な対策を行えばよい。これでわかるとおり、自宅サーバではなくホスティングしているような場合でも、そのサーバにクライアントが接続しようとする25番ポートがクライアント側のISPで遮断されてしまうので、自宅サーバと同様に対策が必要であり、クライアント側でもポート変更等の対策が必要である。
対策方法としては2種類あり、いずれも25番ポート以外のポートで自宅サーバを使用できるようにする方法である。

以下に、おやじのところで取り上げている主要なサーバソフトについて対策の概略を示します。
サーバソフト

対策1

対策2-1
Submission(587)

対策2-2
SMTPS(465)

備 考

転 送

認 証

Postfix

SMTP-AUTHしか認証対応していないが実害はないはず
MercuryMail

Stunnelを使用すれば何も問題なし
Xmail

さすがにUNIXベース
Radish3

× 認証は3.0.0-b32以降。ルータでポート変換すればSubmissionポート対応可
【認証】: ISPのSMTPサーバが認証対応
 ○: SMTP-AUTH/POP before SMTPのいずれにも対応可能
 △: SMTP-AUTHのみ可能
 ×: ISPのSMTPサーバが認証要の場合は対応不可

【Submission(587)】: Submissionポート:587番 対応(SMTP-AUTH必須)
 ○: 設定で対応可能
 △: ルータのポート変換で対応可能(ルータに機能が必要)
 ×: 対応不可

【SMTPS(465)】: SMTPS:465番 対応(SMTP-AUTH必須)
 ○: 設定等で対応可能
 △: Stunnelで対応可能
 ×: 対応不可(SMTP-AUTH不可)

■Postfixでの対応

PostfixでのOP25B対策は、以下のとおり簡単である。

【転送】
  1. relayhostディレクティブで全てのメールを自分が契約しているISPのSMTPサーバに中継する。具体的には、/etc/postfix/main.cfで下記を定義する。
    SMTPサーバ名を[ ] でくくるのは、これにより MX 検索を抑え、そのマシンがドメイン名(example.com)のプライマリ MX ホストである場合にメールルーティングのループを防止するためのものであり、くくった方がベター。

    # プロバイダから指定されているSMTPサーバ名を [ ] 内に指定
    relayhost = [mail.example.com]

    ※ relayhost = [mail.example.com]:587 とすると、Submissionポートへも転送できる。

【認証】

プロバイダが導入している認証方式には、POP before SMTP と SMTP-AUTH があるが、Postfix 単体で対応できるのは SMTP-AUTH だけである。POP before SMTP については、うまく連携する方法がわからない(Fetchmailで周期的にPOPする方法は? スクリプトを書けばいい?)が、実態はほとんどのISPでSMTP-AUTHで対応できるはずであり、ここでは設定だけで済むSMTP-AUTH への対応策を示す。
具体的な方法は、上記で転送をする際にpostfixのsmtpクライアントの処理でプロバイダのsmtpサーバ向けはSMTP-AUTHするようにするだけである。
  1. /etc/postfix/isp_passwd (他のファイルとダブらなければどんな名称でも可) というファイルを下記の形式で作成する。
    ここに記載されたホストまたはドメインに一致すると、後ろで指定されたパラメータで認証する。

    # 上記で設定した [プロバイダのsmtpサーバ名] プロバイダのアカウント:プロバイダのパスワード
    [mail.example.com] isp_acount:isp_password


  2. 下記コマンドでDB化する。

    # postmap /etc/postfix/isp_passwd


  3. 下記を/etc/postfix/main.cfに追記する。ここで設定するのは、SMTPクライアントに関する設定(ISPのSMTPサーバに対して自宅サーバのPostfixはクライアントとして動作している)なので、先頭が「smtp_xxxxx」であることに注意。特に最初の「smtp_sasl_auth_enable = yes」は、自分がサーバとしてSMTP-AUTHをサポートするときの「smtpd_sasl_auth_enable = yes」と勘違いしやすいが全く別なので必ず設定が必要である。設定が完了したらpostfixをreloadしてテストする。

    # Postfix SMTP クライアントの SASL 認証を有効にする。
    smtp_sasl_auth_enable = yes

    # 前項で作成したSMTP クライアント検索テーブルを指定
    smtp_sasl_password_maps = hash:/etc/postfix/isp_passwd

    # Postfix SMTP クライアントで使うことが許される認証メカニズム。
    # デフォルトではnoplaintextが有効になっているが多くのプロバイダは
    # plain認証のためanonymousのみ不可とする。
    smtp_sasl_security_options = noanonymous

    # ISPのSMTPサーバ側のSASLメカニズムと自宅サーバ側のSASLメカニズムが不一致だと認証に失敗
    # することがあるので、下記で使用するメカニズムを固定する。
    # ISPのSMTPサーバがサポートしているSASLメカニズムは、下記で確認できるので、確認した内容に従って
    # 設定すればよい。
    # 特にdigest認証はISPではサポートされていないことが多いようであり、どのISPもサポートしているのは
    # plain, login なので、この2つのみとするとよい。(2.2以降の機能)
    smtp_sasl_mechanism_filter = cram-md5, digest-md5, plain, login


    [ISPのSMTPサーバ側のSASLメカニズムを確認方法]

    ISPのSMTPサーバ側のSASLメカニズムを確認するには、telnetでISPのSMTPサーバのポート25(submissionの場合は587)番に接続して、「EHLO ISPのSMTPサーバ名」と入力した時に、「250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5」で表示されるメカニズムを「smtp_sasl_mechanism_filter」に設定すればよい。

    $ telnet mail.example.com 25 [Enter]
    Trying xxx.xxx.xxx.xxx...
    Connected to mail.example.com.
    Escape character is '^]'.
    220 mail.example.com ESMTP Postfix
    EHLO mail.example.com [Enter]
    250-mail.example.com
    250-PIPELINING
    250-SIZE 10240000
    250-STARTTLS
    250-ETRN
    250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5 ←この内容に合わせる
    250-AUTH=PLAIN LOGIN DIGEST-MD5 CRAM-MD5 ←この内容に合わせる
    250 8BITMIME
    QUIT

【Submissionポート(587)対応】

Submissionポート(587)を使用できるようにするには、大前提として25番ポートでSMTP-AUTH対応ができていなければならない。何故なら、Submissionポートは単に25番ポートの代替ポートなのでポート番号だけが違うだけだからである。

  1. 具体的な設定は、/etc/postfix/master.cfで下記のようにsubmissionポート(587)関係のコメントを外し有効にするだけで良い。

    # ==========================================================================
    # service type  private unpriv  chroot  wakeup  maxproc command + args
    #               (yes)   (yes)   (yes)   (never) (100)
    # ==========================================================================
    smtp      inet  n       -       n       -       -       smtpd
    # -o content_filter=filter:dummy
    submission inet n      -       n       -       -       smtpd
          -o smtpd_etrn_restrictions=reject
          -o smtpd_client_restrictions=permit_sasl_authenticated,reject


【SMTPS(465)対応】

SMTPS(465)への対応は、おやじのPostfix+SSLの他のコンテンツのとおりである。

■MercuryMailでの対応

SMTPS対応以外は、本体の機能で対応可能である。

【転送・認証】

MercuryMailでのISPのSMTPサーバへの転送は、「MercuryC SMTPリレークライアント」で行う。メイン画面から、「設定」->「MercuryC SMTPリレークライアント」を選択すると、管理画面が表示されるので、以下で設定・内容を確認する。特に記述してないところは自分の環境に合わせて設定する。

  1. Smartホスト名
    メールをリレーするプロバイダのSMTPサーバを指定。インストール時に設定したなら、その内容が入っているはず。

  2. TCP/IPポート
    プロバイダから指定されている上記サーバのSMTP用のポート(Port 25)を指定。サブミッションポートを使用するなら 587を指定。

  3. ユーザ名/パスワード
    プロバイダのSMTPサーバでSMTP認証が必要な場合に設定。

  4. POP3接続による認証
    プロバイダのSMTPサーバがPOP befor SMTPの場合、ここにチェックをいれPOP3ホストとポートを設定する。

  5. TCP/IPタイムアウト、ポーリング間隔
    TCP/IPタイムアウトはプロバイダのSMTPとの接続監視時間であり、ポーリング間隔は、Mercuryが送信するメールがキューにないか監視する時間なので、TCP/IPタイム≦ポーリング間隔とすること。基本的には、プロバイダのサーバの応答時間や自分の負荷等を考えるデフォルトの30秒のままが良い。


【Submissionポート(587)対応】

Submissionポート(587)を使用できるようにするには、「MercuryS SMTPサーバ」で設定を行う。サブミッションポートの設定は、メイン画面から、「設定」->「MercuryS SMTPサーバ」を選択し、「一般」タブの代替ポートに「587」を設定すればよい。ルータ等でこのポートを開けるのを忘れないこと。


【SMTPS(465)対応】

SMTPS(465)への対応は、おやじのStunnelによるメールサーバのSSL化のコンテンツのとおりである。

■Xmailでの対応

SMTPS対応以外は、本体の機能で対応可能である。

【転送・認証】
XMail の SMTP フォワーダ機能を利用して、契約 プロバイダ のSMTP サーバに転送すればよい。

  1. XMailCFG の "オプション" から "SMTP フォワーダ"を選択する。

  2. "新しい定義の追加"で、"ドメイン名"に "*.*"(*だけではフォーマットエラーになる) を指定し、"SMTP フォワーダ" に ISP の SMTP サーバのホスト名またはIPアドレスを指定し、"この定義を追加"ボタンを押す。

  3. プロバイダのSMTPサーバでSMTP認証が必要な場合は、XMailCFG の "オプション" から "SMTP クライアント認証"を選択する。

  4. "新しい定義の追加"で、"接続先SMTPサーバ"に 上記で設定したISP の SMTP サーバを指定し、"ユーザID・パスワード" に ISP の ユーザIDとパスワードを設定する。"認証タイプ"はデフォルトの"平文認証(plain)"で良い。ISPによっては、CRAM-MD5が使えるのでそちらを利用したほうがセキィリティ上は良い。以上を設定したら、"この定義を追加"ボタンを押す。
     
【Submissionポート(587)対応】

Submissionポート(587)を使用できるようにするには、XMail の 待ち受けポートの設定を行う。但し、本設定は古いXmailCFGでは対応していないため、最新化(2.23は対応済み)すること。
  1. XMailCFG の "環境設定" から "XMailCFG 環境設定"を選択する。

  2. "SMTPポート(変更注意!!)"がデフォルトでは"25"となっているが、それを587番でも待ち受けるように変更する。複数ポートを設定する場合は、待ち受けIPも指定する必要があるため、ここでは、"anyhost(0.0.0.0)"で待ち受けることにする。anyhost設定ではサーバ機が有している全てのアドレスで待ち受けることになるため、アドレスを限定したい場合は個別に設定すること。
    設定は、"0.0.0.0:25 0.0.0.0:587"と、アドレスとポートをコロンで区切り、半角スペース区切りで列挙するれば良い。設定したら、"環境を保存"ボタンを押す。

  3. Xmailを再起動するよう促されるので、再起動する。

  4. 再起動したら、コマンドプロンプトで "netstat -an "と入力して587番でlistenしていることを確認する。

  5. 実際使用する場合はSMTP認証が必要であり、ローカルユーザで SMTP 認証を利用する場合、クライアントの設定だけでできるように記載があるが、おやじの場合、"セキュリティ"の"SMTP サーバアクセスコントロール"内にある"SMTP 認証アカウント管理"で個別登録しないと利用できなかった。
     
【SMTPS(465)対応】

XmailのSMTPS(465)への対応方法は、2つある。一つは、おやじのStunnelによるメールサーバのSSL化のコンテンツにあるとおりStunnelを使用する方法である。もう一つの方法は、メールサーバの構築(XMail編)のSSL化による方法であり、いずれでも対応可能なので各自判断してください。

■Radish3での対応

対策2(Submissionポート/SMTPS対応)以外は、本体の機能で対応可能である。

【転送・認証】
Radish3のホスト機能(認証は3.0.0-b32以降)を利用して、契約 プロバイダ のSMTP サーバに転送すればよい。

  1. 「設定」→「ホスト」で設定画面を開く。

  2. "対象ドメイン"に "*"(*:自分のドメイン以外の全てのあて先が対象になる) を指定し、"転送サーバ" に ISP の SMTP サーバのホスト名またはIPアドレスを指定し、"ポート番号" に ISP から指定されているの 転送用SMTP サーバのポート番号を設定する。ISP の SMTP サーバで認証(SMTP-AUTH)が必要な場合は、"ユーザ名・パスワード" に ISP の ユーザIDとパスワードを設定し、"追加"ボタンを押す。



【Submissionポート(587)対応】

Radish3自体では、Submissionポート(587)をサポートしていないので、Submissionポート(587)を使用できるようにするには、ルータでSubmission Port(ポート:587)をサーバの25ポートにポートフォワーディングするしかない。但し、ポート変換ができるルータでないと対応はできない。



Top Pageへ