Postfixで送信者(From:)によってルーティングを変更する

メールのエンベロープ From: を見て、次のリレー先 SMTP サーバを変更するような設定をしたい。例えば、組織内の foo@example.com からのメールは送信リレーサーバ1へ、bar@example.com からのメールは送信リレーサーバ2へ振り分けるといった設定を行いたい。

利用例としては、ライセンス数制限のあるメールセキュリティアプライアンスを、一部のユーザに対してだけ適用したい場合に使う。他にも、大学などで教職員ユーザはセキュリティポリシー緩めのメールサーバへ、学生は厳しめのサーバへ転送したいなど、応用方法は様々。

設定項目としては、sender_dependent_default_transport_maps と sender_dependent_relayhost_maps がある。どちらを使っても同等の動作を実現できるが、少し書式が異なる。

1. sender_dependent_default_transport_maps を使う場合

/etc/postfix/main.cf:

sender_dependent_default_transport_maps = hash:/etc/postfix/sender_dependent_transport

/etc/postfix/sender_dependent_transport:

@example.co.jp            smtp:[リレーサーバ1]:25
@sub.example.co.jp        smtp:[リレーサーバ2]:25

メールの送信者が foo@example.co.jp の場合はリレーサーバ1に、bar@sub.example.co.jp の場合はリレーサーバ2に送られる。

この設定は、default_transport (デフォルト値: smtp) をエンベロープ From: 次第で上書き変更するというものである。上記のような書き方もできるし、master.cf で別の transport を定義しておき右辺に使うことも可能。

2. sender_dependent_relayhost_maps を使う場合

/etc/postfix/main.cf:

sender_dependent_relayhost_maps = hash:/etc/postfix/sender_dependent_relayhost

/etc/postfix/sender_dependent_relayhost:

@example.co.jp           [リレーサーバ1]:25
@sub.example.co.jp       [リレーサーバ2]:25

これは relayhost の設定を From: 次第で上書きするという機能なので、テーブルの右辺は relayhost を書くときの形式でなければならない。つまり、 transport:host:port の形式ではなく、host:port だけの形式となる。

ただし、「この情報は relay_transport、default_transport および transport(5) テーブルで上書きされます。」とのことなので、transportテーブルを併用する場合は思った通りに動作しないかもしれない。