Edited at

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

More than 3 years have passed since last update.

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

ぐぐったところ設定方法はいろいろあるようですが、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 no-reply@myhost.example.com -t hoge@example.com

[root]$ echo "mail test1" | sendmail -f no-reply@myhost.example.com -t hoge@gmail.com

hoge@example.com にメールが届いて、 hoge@gmail.com にメールが届かなければ成功。

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

Jan 27 14:47:13 myhost postfix/smtp[26538]: 9A42F42B1D: to=<hoge@example.com>, 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=<hoge@gmail.com>, 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コマンド使用時には有効にならない