質問: 「check_client_access」を使えばクライアントの送信元IPアドレスに対して何かしらの振る舞いができそうだというところまで理解したのですが、 それ以上のことが分かりませんでした。。。 提供できる情報が少なくて大変恐縮ですが、お力添えをいただけますと大変助かります。 よろしくお願いいたします。
回答: envelope sender で配送先を振り分けるパラメーター `sender_dependent_relayhost_maps` はありますが、接続元 IPアドレスで振り分けるパラメーターはなさそうです。 `check_client_access` は smtpd でメールを受ける際には使用できますが、incoming キューに入ったあと、qmgr + trivial-rewrite で配送先を決める際には使用できないと思います。 Postfix Architecture Overview > > 特定の送信元IPアドレスを持つクライアントからのメールだけ特定のIPアドレス宛てへリレーし、 > > 上記の送信元IPアドレスのメールは、指定したリレー先以外には送らないようにしたいです。 > > > 前段に 25 番ポートで受ける SMTP プロキシーを配置して、接続元 IPアドレスで振り分ける構成が考えられます。 SMTP プロキシーは、例えば、Nginx の `ngx_stream_proxy_module` + `ngx_stream_geo_module` など。 特定の送信元 IPアドレスならば特定の IPアドレス(MTA)へ、それ以外はローカルの postfix (例えば 10025 番ポート)へ。 ただし、postfix から見た接続先は 127.0.0.1 (nginx) になるので、mynetworks による制御が効かなくなります。 ``` (nginx 設定例) stream { geo $relay_server { default 127.0.0.1:10025; 192.168.0.0/24 special.relay.host:25; } server { listen 25; proxy_pass $relay_server; } } ``` それがダメなら、`postmulti` で 1サーバーに 2インスタンス稼働させ(例えば、それぞれ 10025, 20025 番ポート)、それぞれリレー先を設定しておき、iptables の REDIRECT で、接続元 IPアドレスにより振り分ける方法が考えられます。 ``` iptables -t nat -A PREROUTING -s 192.168.0.0/24 -p tcp --dport 25 -j REDIRECT --to-port 20025 iptables -t nat -A PREROUTING -p tcp --dport 25 -j REDIRECT --to-port 10025 ```