postfixでメール送信先ドメインを制限する


テスト環境などで意図せずメール誤爆しないようにメール送信先ドメインを制限したいことがあります。

ぐぐったところ設定方法はいろいろあるようですが、rejectしちゃうとアプリケーション側にエラーが返ってしまって困るケースがあったので、受け付けて捨てる方法で設定します。

例として @example.com にはメールを許可するけど、その他のドメイン宛は捨てる設定は以下のとおりです。postfixは2.6系です。

/etc/postfix/main.cf に以下の設定を追加します。

/etc/postfix/main.cf
transport_maps = hash:/etc/postfix/transport

/etc/postfix/transport に以下の設定を追加します。
ローカル配送も不要な場合はlocalの行もなくてよいかもです。

example.com               smtp:
localhost                 local:
localhost.localdomain     local:
*                         discard: "discard received email"

transportファイルをコンパイルします。

[root]$ postmap /etc/postfix/transport
[root]$ echo $?
0

postfixの設定をリロードします。

[root]$ /etc/init.d/postfix reload
postfix を再読み込み中:                                    [  OK  ]

設定は以上です。

試しにsendmailコマンドで疎通確認してみます。

[root]$ echo "mail test1" | sendmail -f [email protected] -t [email protected]
[root]$ echo "mail test1" | sendmail -f [email protected] -t [email protected]

[email protected] にメールが届いて、 [email protected] にメールが届かなければ成功。

ログで確認すると /var/log/maillog にこんな感じの出力が出てる。

Jan 27 14:47:13 myhost postfix/smtp[26538]: 9A42F42B1D: to=<[email protected]>, relay=smtp.example.com[XXX.XXX.XXX.XXX]:25, delay=1.1, delays=0.02/0/0.41/0.68, dsn=2.0.0, status=sent (250 2.0.0 OK 1453873633 lm9si7024058pab.142 - gsmtp)

Jan 27 14:47:29 myhost postfix/discard[26551]: 9D42342B1D: to=<[email protected]>, relay=none, delay=0.02, delays=0.01/0/0/0, dsn=2.0.0, status=sent ("discard received email")

これでメール誤爆しなくて安心してテストできますね。

参考
postfixのsmtpd_recipient_restrictionsの宛先制限はsendmailコマンド使用時には有効にならない