HAProxy-X-Client-IPおよびX-Forwarded-ForヘッダーにクライアントIPを追加する方法


10

HAProxyサーバーに問題があります。ヘッダーでクライアントIPを転送したい。ほぼ完了しましたが、興味深いケースがあり、理解できません。X-CLIENT-IPおよびX-FORWARDED-FORタグのヘッダーの2箇所にクライアントIPを書き込む必要があります。

問題は次のとおりです。

option http-server-close
option forwardfor

ターゲットサーバーでヘッダーX-FORWARDED-FOR = xxx.xxx.xxx.xxx(client ip)が表示されますが、x-client-ipヘッダーがありません。

私が使うとき:

option forwardfor header X-Client-IP
option http-server-close

ターゲットサーバーでヘッダーX-CLIENT-IP = xxx.xxx.xxx(client IP)が表示されますが、X-FORWARDED-FOR = xxx.xxx.xxx.xxx(HAProxy ip)

X-CLIENT-IPおよびX-FORWARDED-FORにクライアントIPの値があるターゲットヘッダーを確認する必要があります。

私は構成を混ぜてみます

 option forwardfor
 option forwardfor header X-Client-IP
 option http-server-close

影響なし。モジュールもインストールできません。ターゲットはIISです。

何か案は?:(

回答:


12

次のようにカスタムヘッダーを設定してみてください。

http-request set-header X-Client-IP %[src]

または、X-Forwarded-Forヘッダーからコピーすることもできます。構文は次のようになると思います。

http-request set-header X-Client-IP req.hdr_ip([X-Forwarded-For])

2番目のオプションは、ヘッダーx-client-ip = req.hdr_ip(%5bX-Forwarded-For%5d)で私に与えるので、何かが間違っています。しかし、私は最初のものを試します。
KacproSo

最初の解決策http-request set-header X-Client-IP%[src]は完璧に動作します。
KacproSo

最後の例は間違っています。正しいルールは次のとおりです。http-requestset-header X-Client-IP%[req.hdr_ip(X-Forwarded-For)]
Rfraile

X-Client-IPとX-Forwarded-Forには異なる目的があります。HAProxyはクライアントから送信された値を返すことができるため、X-Forwarded-Forをコピーするのは安全ではありません。
Der_Meister

5

両方を使用する場合は、http-requestキーワードを使用して2番目を追加する必要があります。

# add X-FORWARDED-FOR
option forwardfor
# add X-CLIENT-IP
http-request add-header X-CLIENT-IP %[src]

クライアントから送信された悪意のあるヘッダーを削除するにはset-headerの方が良いと思います。
Der_Meister

@Der_Meisterあなたは正しいかもしれませんが、それがこの質問または回答にどのように関連しているかはわかりません。詳しく説明しますか?
GregL、

1
X-Client-IPヘッダーの目的は、着信ヘッダーからのランダムな値ではなく、接続の実際のIPアドレスをバックエンドに伝えることです。質問には触れられていませんが、将来の読者に警告したいだけです。
Der_Meister

繰り返しになりますが、この例では、これX-CLIENT-IPはクライアントによって設定されているのではなく、ソースIPに基づくHAProxyによって設定されています。それはどこ私が質問にこれらのコメントを残すことをお勧めしたいです混乱の読者にないようrelevent。
GregL、

add-headerX-CLIENT-IPクライアントによって設定された可能性があるものは削除しません。これが@Der_Meisterがset-header代わりに使用することを推奨した理由です。set-header代わりに使用するように回答を編集することをお勧めします。
ピスタッシュ

0

KacproSoでは機能しなかった上記の推奨回答は、を追加して値を読み取るだけ&[...]でよいので、これは正常に機能するはずです。

http-request set-header X-Client-IP %[req.hdr_ip([X-Forwarded-For])]

0

HAproxy 1.7を試してみると、これは、X-Forwarded-Forの周りの四角いブレイケットなしでこの機能を実行する正しい構文です

   http-request set-header X-Client-IP %[req.hdr_ip(X-Forwarded-For)]

-2

mod_rpafというモジュールをバックエンドサーバーにインストールできます。これにより、X-FORWARDED-FOR IPがX-CLIENT-IPにコピーされます。詳細については、参照、これを。Windowsでは、X-Forwarded-For ASAPIフィルターのような同様のモジュールが必要です。


彼はモジュールをインストールできません
。.– neutrinus
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.