Postfix で relayhost を使用すると aliases が参照されない件

通常 Postfix では /etc/aliases ファイルに転送先を書いておくと、それを参照してしかるべきアドレスに配送してくれますが、main.cf で relayhost にて他のメールサーバにメール配送を依頼する場合、これが参照されない様でした。

例えば、server.test というローカルサーバにおいて、

  • /etc/postfix/main.cf 中「relayhost = mail.example.com」の様にして、メールの処理を mail.example.com にリレーする様にしている。

  • かつ、/etc/aliases ファイルに root: hoge@example.jp と書いてある。

  • この設定で、ローカルサーバ上から、mail root などで、root あてにメールを送ると、root → hoge@example.jp をいうエイリアス処理が行われず、mail.example.com に対して、そのまま「root@test」あてに配送するようにしてリレーしてしまう。

    ※つまり、hoge@example.jp に配送するつもりが、root@test という存在しないメールアドレスに配送してしまう事になる。

と言う現象が発生します。

これを回避するためには、「Postfix manual – transport(5)」の「例」を参照して、下記のようにすれば良いことがわかりました。

  • /etc/postfix/main.cf 中「relayhost = mail.example.com」の設定をやめる。

  • /etc/postfix/transport ファイルを下記の書式で作成する

    test		:
    server.test	:
    *		smtp:mail.example.com

    つまり、内部的に使用している test ドメインや、自分自身である server.test あてに届いたメールは、一旦自分自身で処理し、それ以外は mail.example.com にリレーすると言うことになり、/etc/aliases の設定が効くようになる様です。

  • # postmap transport の実行。

  • /etc/postfix/main.cf 中で、「transport_maps = hash:/etc/postfix/transport」と設定し、postfix を再起動する。

これに気付いたのは、固定 IPv6 アドレスを持っているローカルサーバから、これまた固定 IPv6 アドレス (6to4 だけど) を持っている自 VPS へのメールリレーを、IPv4 (もちろん OP25B がかかっている) 経由でサブミッションポートで SASL による認証を行ってリレーしていたのを、IPv6 (こっちは OP25B がかかっていないので) 経由で直にリレーするようにしたら、しかるべきメールが届かなくなっていたからと言う・・・。

SASL を使用してリレーするのと、直接リレーするのとで、挙動が違うのかなぁ。まぁ、すぐ気付いて良かった・・・。

もし認識に間違っているなどがあれば、ご指摘いただけると嬉しいです。