自宅サーバーでメールサーバーを立てる場合のOP25B対策設定(Postfix編)です。
■ OP25B対策とは?
インターネット接続プロバイダによってはOP25Bというのが施されています。
OP25B(Outbound Port 25 Blocking)とは、インターネット接続プロバイダが、自社のメールサーバー以外のポート25を使おうとするユーザーを自社の回線レベルで遮断するものです。
これによって、迷惑メール送信業者が自分を追跡されないようにプロバイダ以外のサーバーを使うという行為を規制するわけです。
ところで、これは自宅サーバーでメールサーバーを立てる場合に大きな障害となります。
ルーターでポート25を開けても、それで外側(インターネット)から内側(自宅サーバー)には繋がりますが、内側(自宅サーバー)から外側(インターネット)へは出られません。
自宅サーバーのポート25からメールが出せないのですからメールサーバーとして機能しないことになり困ります。
そこで、自宅サーバーでメールサーバーを立てる場合にOP25B対策という少々特殊な設定を行う必要が出てきます。
OP25B対策はプロバイダによって若干の設定調整が必要かもしれません。
大手プロバイダの有名どころOCNなどがその代表なのですが、OCNだと
(1)OCN以外サーバーの25ポートを使ってメール送信できない Connection timeout になる (2)OCNのメールサーバーを使うときFromの判定が厳しい ※接続元のサーバー名が存在しない場合など 554 5.7.1:Sender address rejected のエラーになる
この(2)は、自宅サーバーのhostnameの設定がいい加減だと駄目だということにもなりますので注意が必要です。
Postfixが@マークの後ろにデフォルトのホスト名を付ける場合に、DNSで引けないホスト名を付けるとプロバイダーのSMTPサーバーからリレー拒否されます。
■ Postfix OP25B対策設定
さて、PostfixのOP25B対策設定の方法です。
前提として
・普通の環境ならSMTPサーバーとして正しく設定済み ・SMTP-Auth(SMTP認証)ありで運用するように設定済み ・SMTP-Authにはdovecot-saslを使う(saslauthdは使わない)
対策の方法は
・ルータで普通のSMTPポート 25 は開放したまま (他所のサーバーからのメールリレーを自宅サーバーで受けるのに必要) ・ルータでサブミッションポート 587 を開放する (PCのメールソフトで自宅サーバーへSMTP接続してメール送信するのに必要) ・自宅サーバー内部からのメール送信はプロバイダのSMTPサーバーを中継して送る (メールサーバーの設定ファイルに中継サーバーとSMTP認証情報を追加)
ということになります。
まず、サブミッションポート 587 を使うには
/etc/postfix/master.cf 修正
submission inet n - n - - smtpd
↑コメント外す
SMTP認証の設定変更は以下のように
/etc/postfix/main.cf 修正
... # SMTP-Auth smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination # dovecot-sasl smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth
↑普通は大体こうなっているはずなので
↓こう変更します。
... # SMTP-Auth (ここは今までどおり) smtpd_sasl_auth_enable = yes smtpd_sasl_local_domain = $myhostname smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination # dovecot-sasl (ここは今までどおり) smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth # OP25B対策 relayhost = [プロバイダのSMTPサーバー名] smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_sasl_mechanism_filter = LOGIN,PLAIN,CRAM-MD5
/etc/postfix/sasl_passwd 作成
プロバイダのSMTPサーバー名 ユーザー名:パスワード
保存したらハッシュマップ化します。
# postmap /etc/postfix/sasl_passwd
最後に postfix を再起動します。
# /etc/init.d/postfix restart
★重要なのは、プロバイダのSMTPサーバー名とSMTP認証のユーザー名/パスワードを正しく設定することです。
★OCNの場合、少し癖があって、プロバイダから送られてきた資料のSMTPサーバー名が vcxxxxocn.ne.jp のように vc で始まっていたらこの vc を抜いて設定します。
★OCNの場合、relayhost にはポートを指定せず、デフォルトの25を使います。
(587にするとうまくいきません。たぶん)
★ポイントは、PCのメールソフトから自宅サーバーへはポート587、 自宅サーバー内部からプロバイダのSMTPサーバーへリレーするときは25です。
■ テスト
(1)自宅サーバー内部から外へメールが送れるか
# mailx 外のサーバのメールアドレス Subject: test aaa bbb . # tail /etc/log/maillog
ログを見てメールが送れているかチェック
(2)PCからSMTPに自宅サーバー指定でメールが送れるか
Windows Mailの場合
[サーバー]タブで
サーバー情報 ------------------------------- 受信メール(POP3)サーバー: 自宅サーバー名 送信メール(SMTP)サーバー: 自宅サーバー名 受信メールサーバー ------------------------- ユーザー名: 自宅サーバーのユーザー名 パスワード: 自宅サーバーのパスワード 送信メールサーバー ------------------------- □ このサーバーは認証が必要 ... これをチェック
[詳細設定]のタブで
サーバーのポート番号 ----------------------- 送信メール(SMTP): 587
これで送信できるかチェック
(3)他のサーバーからメールが届くか
gmail, yahooメールなどのWebメールから自宅サーバーのメールアドレス宛にメールを出して届くかチェック。
(1)(2)(3)がうまくいったら完了です。