smtpd_proxy_filterを設定することで勝手にXFORWARD コマンド送ってくれるの?

/etc/postfix/master.cfで

smtp inet n - n - - smtpd
-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)の通信をキャプった結果、以下の通りであった。

220 [127.0.0.1] ESMTP amavisd-new service ready
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 を見ると

# @mynetworks is an IP access list which determines if the original SMTP client
# 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を設定する必要はない、というのが結論。

関連する投稿

このエントリは 2009年1月14日 08:40:43に投稿されました。 amavisd-new, postfix, unix, 独り言の下にカテゴリされています。 RSS 2.0フィードを通してこのエントリのコメントをフォローすることが出来ます。 コメントするか、あなた自身のサイトからトラックバック出来ます。

add to hatena hatena.comment (1) add to del.icio.us (0) add to livedoor.clip (0) add to Yahoo!Bookmark (0) Total: 1

コメントする?