web-dev-qa-db-ja.com

REMOTE_ADDRをX-Forwarded-Forinapacheに設定します

Apacheがリバースプロキシ(Squidなど)の背後にある状況では、cgi環境変数REMOTE_ADDRはクライアントではなくプロキシのアドレスを取得します。

ただし、プロキシはX-Forwarded-Forというヘッダーを設定して、クライアントの元のIPアドレスを含め、Apacheがそれを認識できるようにします。

問題は、すべてのWebアプリケーションが正しいアドレスを透過的に認識できるように、ApacheでREMOTE_ADDRX-Forwarded-Forヘッダーの値に置き換えるにはどうすればよいかということです。

13
tylerl

そのためにmod_rpafを使用できます。 http://stderr.net/Apache/rpaf/

14
maciekb

リクエストが複数のプロキシを通過した場合、X-Forwarded-ForヘッダーにlistのIPアドレスが含まれる場合があることに注意してください。この場合、通常は左端のIPが必要です。これは、SetEnvIfを使用して抽出できます。

SetEnvIf X-Forwarded-For "^(\d{1,3}+\.\d{1,3}+\.\d{1,3}+\.\d{1,3}+).*" XFFCLIENTIP=$1

$ 1を使用して、XFFCLIENTIP環境変数を設定し、正規表現(括弧内)の最初のグループの内容を保持することに注意してください。

次に、環境変数の値を使用してヘッダーを設定できます(または、ログに実際のクライアントIPが含まれるようにApacheログ形式で使用します)。

7
Ben Last

現在、Apacheモジュールmod_remoteipがこれを行うための推奨される方法です。 rpafは確実に保守されておらず、問題を引き起こす可能性があります。

4
Kirrus

前述の mod_rpaf に加えて、 mod_extract_forwarded もこの機能を実行するようです。

mod_extract_forwardedの利点の1つは、RHEL/CentOSサーバーでは [〜#〜] epel [〜#〜] から利用できるのに対し、mod_rpafでは利用できないことです。

これらの2つのモジュールのどちらでも、プロキシサーバーのサブネット全体をホワイトリストに登録できないようです。そのため、CloudFlareの人々は独自のプラグインを作成しました。 mod_cloudflare これはnot他の2つのような汎用ツール。 CloudFlareサブネットのハードコードされたリストが含まれています。

4
tylerl

はい、できます。

auto_prepend_file = "c:/prepend.php"のようにPHP.iniにauto_prepend_fileを追加し、このファイルに次を追加します。

if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}

Apache幅RemoteIPHeader X-Real-IPのMOD_REMOTEIPが必要です。

乾杯、

ギレマッハ

3
Guiremach

残念ながら、

この記事の執筆時点では、freshports.org、people.Apache.org、Gist.github.comのバックポートとフォークはいずれも機能していませんでした。これらはすべて、現在のバージョンの2.2または2.4と互換性のないApache httpd2.3の初期のアルファバージョンに基づいていました。

そのため、バックポートを調整してhttpd 2.2で実際に機能するものを作成しようとして何時間も時間を無駄にした後、httpd2.4に移行することにしました。 httpd 2.4内では、ロードバランサーに永続的なキープアライブ接続があり、それを使用してさまざまな実際のクライアントIPアドレスからバックエンドにリクエストをプロキシする場合でも、mod_remoteipはスムーズに機能します。他のモジュールがこの状況を処理できるかどうかはわかりません(同じ接続内の各要求でクライアントIPアドレスを変更します)。

2
Marten Lehmann

この値はなりすましの可能性があることに注意してください。クロスサイトスクリプティングの結果を伴う実際の例については、 http://blog.c22.cc/2011/04/22/surveymonkey-ip-spoofing/ を参照してください。

1
Daniel Miller

モジュールmod_extract_forwardedをインストールし、MEFacceptパラメーターをallに設定できます。

0
freemanpolys