X-Forwarded-Forヘッダーの処理についての理解を確認するために、Apache mod_proxyとmod_remoteipを試しています。内部IPアドレス(例:10.xxxまたは192.168.xxの範囲)が処理されています。mod_proxyがX-Forwarded-Forヘッダーに内部IPアドレスを追加する場合があるのはなぜですか?
mod_proxyは常に内部IPアドレスをX-Forwarded-Forヘッダに追加するとは限りませんが、期待される動作を説明しているドキュメントは見つかりませんでした。
私の知る限り、要求が内部IPアドレスから開始されると、mod_proxyは内部IPアドレスをX-Forwarded-Forヘッダに追加しますが、最初の要求がパブリックIPから来た場合、mod_proxyはX-Forwarded-Forに内部IPアドレスを追加していないようです。
質問
私の質問は:mod_proxyのは、X-転送さ-用ヘッダに呼び出し元のIPアドレスを追加するかどうかを管理するルールは何。
は言う:(例えば、ProxyPassディレクティブを使用して)リバースプロキシモードで動作し、mod_proxy_httpがオリジンサーバに情報を渡すために、いくつかのリクエストヘッダを追加します。これらのヘッダーは次のとおりです。
X- Forwarded-For - クライアントのIPアドレスです。
Xフォワードホスト - ホストHTTP要求ヘッダーでクライアントが要求した元のホスト。
Xフォワードサーバ - プロキシサーバのホスト名。
オリジナルのリクエストに既にこれらのヘッダーのいずれかが含まれていた場合は、複数の(カンマ区切りの)値が含まれるため、これらのヘッダーをオリジナルサーバーで使用する場合は注意が必要です。たとえば、元のサーバーのログ形式文字列に%{X-Forwarded-For} iを使用して元のクライアントのIPアドレスを記録できますが、要求が複数のプロキシを通過する場合、複数のアドレスを取得する可能性があります。
これは、クライアントのIPアドレスが常にX-Forwarded-Forヘッダーに追加されると言っていますが、これは私が観察している動作ではありません。
残りの質問は、私が行ったテストと私が観察した動作です。
セットアップ
私はmod_proxyをインストールしてApacheを実行している両方のセットアップ二つのサーバをしました。私はこれらを1と2と呼んでいます。
- 一つは、2つは(内部)IPアドレス10.0.7を持っている(内部)IPアドレスに10.0.7.1
- を持っています。2
一つは/ proxyToTwoのサブパスへの要求を二
<Location "/proxyToTwo">
ProxyPass http://10.0.7.2/proxyToOne
</Location>
つ上/ proxyToOne下等価サブパスに送信されるように、以下のProxyPassディレクティブを有しているので、次のProxyPassディレクティブを有します/ proxyToOneのサブパスへの要求は一つではなく/ proxyToOneプレフィックス
<Location "/proxyToOne">
ProxyPass http://10.0.7.1
</Location>
ずに送り返されていることを
この効果は、私がhttp://One/proxyToTwo/foo
に要求を発行したとき、それはプロキシだということです
- 一つは、要求を受信
http://10.0.7.2/proxyToOne/foo
- 2つは要求を受信し、2つに次のリクエストを発行し、次のように、バック一つ
http://10.0.7.1/foo
- 一つに次のリクエストを発行
/foo
要求を受信すると、実際にリソースを提供してい
したがって、すべてのリクエストは1から2にバウンスされ、2つに応答する前に1に戻る。
curl http://10.0.7.1/proxyToTwo/foo
X-転送さ-用とX-転送さ-ホスト:上記の設定を使用して内部IP
で呼び出す
は、私はそれが内部IPアドレスだ使って二つから一つを呼び出します一つは、最終的に/foo
リソースに対する要求を取得するときにヘッダが、私は以下の期待される受信:
X-Forwarded-For: 10.0.7.2, 10.0.7.1
X-Forwarded-Host: 10.0.7.1, 10.0.7.2
これは私が期待していることですが、最初にOne2を介して要求がプロキシされ、要求元のIPアドレスが最初にTwo(curl)からの最初の要求で、One(mod_proxy)からの要求と最後の要求それは外部のIP
予期しない動作を呼び出す2つ(のmod_proxy)からのもの接続
のクライアントIPだからパブリックIPから呼び出されたときにmod_proxyの動作が異なるように見えるということです。だからではなく、二つから一つを呼び出すので、私はパブリックアドレスを使用して、私のローカルマシンから一つを呼び出す
curl http://35.162.28.102/proxyToTwo/foo
X-転送さ-ホストは、私が期待するものはまだです:
あるX-Forwarded-Host: 35.162.28.102, 10.0.7.2
、要求をOneを介して最初に(外部アドレスを使用して)、次にTwoを経由してプロキシされました。
しかし、X-Forwarded-Forヘッダーには唯一の私の(外部)IPアドレス表示されます。
X-Forwarded-For: 35.163.25.76
これはmod_proxyの最初の実行がでX-Forwarded-Forヘッダーを追加していることを私に示唆をクライアントのIPアドレス。しかし、その後の2つのプロキシは、1のアドレスを追加しません。
この動作はおそらく、内部IPアドレスをヘッダに付加するよりも便利だと思いますが、どこに文書化されているのかわかりませんので、完全に理解したいと思います。
mod_proxyコードの検査を行っても、上記の動作を引き起こすものは何も表示されません。私の実際の理論は、これは実際にはmod_proxyとmod_remoteipの間の相互作用によって引き起こされるということです。 – EdC