通常 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 を使用してリレーするのと、直接リレーするのとで、挙動が違うのかなぁ。まぁ、すぐ気付いて良かった・・・。
もし認識に間違っているなどがあれば、ご指摘いただけると嬉しいです。