smtpd_proxy_filterを設定することで勝手にXFORWARD コマンド送ってくれるの?
/etc/postfix/master.cfで
-o smtpd_proxy_filter=127.0.0.1:10024
-o smtpd_client_connection_count_limit=10
とかやって
smtp(25)->amavisd(10024)->smtp(10025)の時、postfixのlogを見るとsmtp(10025)でちゃんと元のSMTPクライアントのIPアドレス拾えてるんだけど。
smtp(25)でsmtp_send_xforward_command=yesにする必要ないのかな?
1/15追記
client(x.x.x.x) -(1)-> smtp(25) -(2)-> amavisd(10024) -(3)> smtp(10025) の時、
amavisdは(3)でsmtp(10025)に対して XFORWARD ADDR=x.x.x.x を送っていることがログから確認出来た。
またtcpdumpで(2)の通信をキャプった結果、以下の通りであった。
EHLO (amavisd-newに設定してあるFQDN)
250-[127.0.0.1]
250-VRFY
250-PIPELINING
250-SIZE
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 XFORWARD NAME ADDR PROTO HELO
XFORWARD NAME=(x.x.x.xの逆引きホスト名) ADDR=x.x.x.x HELO=(x.x.x.xの逆引きホスト名) PROTO=SMTP
250 2.5.0 Ok XFORWARD
MAIL FROM: <Fromアドレス>
250 2.1.0 Sender <Fromアドレス> OK
RCPT TO: <Toアドレス>
250 2.1.5 Recipient <Toアドレス> OK
DATA
354 End data with .
CentOS 5のパッケージ「amavisd-new-2.5.4-1.el5.rf(DAGリポジトリ)」に含まれる amavisd.conf-sample を見ると
# IP address belongs to our internal networks, i.e. mail is coming from inside.
# It is much like the Postfix parameter ‘mynetworks’ in semantics and similar
# in syntax, and its value should normally match the Postfix counterpart.
# It only affects the value of a macro %l (=sender-is-local),
# and the loading of policy ‘MYNETS’ if present (see below).
# Note that ‘-o smtp_send_xforward_command=yes’ (or its lmtp counterpart)
# must be enabled in the Postfix service that feeds amavisd, otherwise
# client IP address is not available to amavisd-new.
という記述があったので、amavisd-newにfeedするPostfix serviceであるところのsmtp(25)の設定で ‘-o smtp_send_xforward_command=yes’ を有効にしないといけないのかな?と思ったのだけれど、どうやらこの記述は smtp(25)に設定したcontent_filter経由で、例えば content_filter=amavis-smtp:127.0.0.1:10024 とした時のSMTPクライアントである amavis-smtpに設定するものであるようだ。
なるほど、確かにsmtpd_proxy_filterはその名の通り SMTPのProxyであるので、デフォルトでXFORWARDを付与してくれており(HTTP ProxyがProxy先にX-Forwarded-Forを付与するイメージ)、content_filterの場合は SMTP Proxyというわけではないので(結果、SMTP Proxyとして動作するにせよ)明示的に smtp_send_xforward_command=yes を設定する必要がある、と。
よくよくPostfixのマニュアルを読むと
- smtp_send_xforward_command (デフォルト: no)
- Postfix SMTP サーバの EHLO 応答で XFORWARD サポートが通知された場合に、 非標準的な XFORWARD コマンドを送ります。
これにより、コンテンツフィルタにメールを投入するのに使われる “smtp” 配送エージェントが元のメールの名前やアドレス、プロトコル、HELO 名を コンテンツフィルタや下流でキューに入れる SMTP サーバに渡すことが できます。これは localhost[127.0.0.1] 等よりも便利なログを生成する ことができます。
と書かれている。まさしくSMTPエージェント(クライアント)の設定項目であった。
smtpd_proxy_filterを設定したSMTPデーモン(サーバー)もProxyする際はまさにSMTPクライアントとして動作するのだけど、その場合はデフォルトでXFORWARDを付与してくれるのでsmtp_send_xforward_command=yesを設定する必要はない、というのが結論。




