Postfixでテスト用に外部配送させない設定

Postfixでメール送信テストを行う場合、本番の宛先へ誤ってメールを送らないように、外部配送を止めたい場合があります。

その場合、transport_maps を使って、一部のドメインだけ通常のSMTP配送を許可し、それ以外はローカル配送にします。

main.cf の設定

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

# ローカル配送で不明なユーザを拒否しない
local_recipient_maps =

# ローカル配送で不明なユーザ宛のメールを指定ユーザへ転送する
luser_relay = devel@example.com

# 宛先ドメインごとに配送方法を変更する
transport_maps = hash:/etc/postfix/transport

transport ファイルの作成

cp -arp /etc/postfix/transport /etc/postfix/transport.org
vi /etc/postfix/transport

/etc/postfix/transport に以下を記載します。

# このホスト名宛は通常配送にする
mail.example.net        :

# example.net 宛と、そのサブドメイン宛はSMTP配送する
example.net             smtp:
.example.net            smtp:

# example.org 宛と、そのサブドメイン宛はSMTP配送する
example.org             smtp:
.example.org            smtp:

# 上記以外の宛先はすべてローカル配送にする
*                       local:

transport.db の作成

transport ファイルを編集しただけでは反映されないため、postmap を実行します。

postmap /etc/postfix/transport

これにより、以下のDBファイルが作成されます。

/etc/postfix/transport.db

最後にPostfixを再読み込みします。

systemctl reload postfix

動作の意味

この設定では、宛先によって配送方法が変わります。

mail.example.net 宛        → 通常配送
example.net 系             → SMTP配送
example.org 系             → SMTP配送
その他すべて               → ローカル配送

* local: に該当したメールは外部には配送されません。

また、ローカル配送先に存在しないユーザ宛のメールは、luser_relay で指定した devel@example.com に転送されます。

注意点

この設定は、あくまでテスト環境向けです。

example.netexample.org のように smtp: を指定したドメイン宛は、外部SMTP配送されます。

完全に外部へ送信したくない場合は、smtp: を指定するドメインを作らず、すべて local: にする必要があります。

コメント