多くの場合、ウェブサイトへのアクセスは、単にユーザーのブラウザから直接サーバーへのアクセスではなく、CDN、WAF、高防御の途中で展開されることがあります。例えば、「ユーザー>CDN/WAF/ハイディフェンス>ソースサーバー」というアーキテクチャです。では、プロキシを何重にも重ねた後、サーバはどのようにしてリクエストを開始した本当のクライアントのIPを取得するのでしょうか?
トランスペアレントプロキシサーバは、ユーザのHTTPリクエストをチェーンの次のサーバに転送するときに、"X-Forwarded-For: visitor's real IP, proxy server 1-IP, proxy server 2-IP, proxy server 3-IP, "." の形式で、ユーザの実際のIPを記録するためにHTTPヘッダに "X-Forwarded-For "レコードを追加します。Forwarded-For: 訪問者の実際のIP、プロキシサーバ1-IP、プロキシサーバ2-IP、プロキシサーバ3-IP、......"。
したがって、対応する最初のIPを取得することで、訪問者の本当のIPを取得することができます。
Webアプリケーションファイアウォールサービスをすでに利用している場合、WAFサービスを通じて直接訪問者の実IPを取得することもできますが、Webサーバの設定によって訪問者の実IPを取得することもできます。以下では、WAFを通じて直接実IPを取得する方法と、それに対応するX-Forwarded-Forの設定方式、およびTomcat、Apache、Nginx、IISサーバそれぞれの訪問者の実IPの取得方法について説明します。Forwarded-Forの設定方式と実IPの取得方法。
WAFによる実IPの直接取得
WAFはデフォルトでクライアントの実IPを取得する機能を提供していますが、クライアントのソースIPを取得するには、以下の2つの方法を推奨します:
- WAFサービスは、クライアントの実際のIPアドレスを取得するためにX-Forwarded-Forを使用します。
実際のクライアントIPは、WAFサービスによってHTTPヘッダーのX-Forwarded-Forフィールドに以下の形式で配置されます:
X-Forwarded-For: ユーザ実IP、プロキシサーバ1-IP、プロキシサーバ2-IP、...
この方法でクライアントの実IPを取得する場合、最初に取得されるアドレスがクライアントの実IPとなります。
SDKインターフェイスを呼び出すことで、様々な言語がX-Forwarded-Forフィールドを取得する方法:
Request.ServerVariables("HTTP_X_FORWARDED_FOR")
Request.ServerVariables["HTTP_X_FORWARDED_FOR"]を参照してください。
サーバ["http_x_forwarded_for"]。
request.getHeader("HTTP_X_FORWARDED_FOR")
- WAFサービスは、クライアントのソースIPを取得するためのX-Real-IP変数の使用もサポートしています。
SDKインターフェースを呼び出すことで、様々な言語がX-Real-IPフィールドを取得します:
Request.ServerVariables("HTTP_X_REAL_IP")
Request.ServerVariables["HTTP_X_REAL_IP"]を参照してください。
$_SERVER["HTTP_X_REAL_IP"]
request.getHeader("HTTP_X_REAL_IP")
Tomcatがアクセスログから実クライアントのIPアドレスを取得する方法
ソースサイトがTomcatサーバーを配備している場合、TomcatのX-Forwarded-For機能を有効にすることで、訪問者の実際のIPアドレスを取得することができます。
prefix="localhost_access_log." suffix=".txt"
/>
prefix="localhost_access_log." suffix=".txt"
pattern= %h %l %u %t "%r" %s %b" />。
Apacheがアクセスログから実際のクライアントのIPアドレスを取得する方法
ソース・サイトに Apache サーバーが導入されている場合は、コマンドを実行し、http.conf ファイルを修正してクライアントの IP アドレスを取得することで、Apache のサードパーティ・モジュール mod_rpaf をインストールできます。
tar xvfz mod_rpaf-0.6.tar.gz
mod_rpaf-0.6
RPAFenable On
RPAFsethostname オン
RPAFproxy_ips 127.0.0.1 <反向代理ips>
RPAFheader
CustomLog "/[apacheディレクトリ]/logs/$access.log" common
/apachedディレクトリ]/httpd/bin/apachectl restart
Nginxがアクセスログから実クライアントのIPアドレスを取得する方法
Nginxリバースプロキシが導入されている場合、NginxリバースプロキシにLocation情報を設定することで、バックエンドのウェブサーバは同様の機能でクライアントの実際のIPアドレスを取得することができます。
場所 ^ /
proxy_pass ....;
proxy_set_header $proxy_add_x_forwarded_for;
}
request.getAttribute("")
IIS 6がアクセスログに本当のクライアントのIPアドレスを取得する方法
ソースサイトにIIS 6サーバーが導入されている場合、「F5XForwardedFor.dll」プラグインをインストールすることで、IIS 6サーバーが記録するアクセスログから訪問者の実際のIPアドレスを取得することができます。
1.プラグイン「F5XForwardedFor.dll」をダウンロードし、インストールします。
2.サーバーのオペレーティングシステムのバージョンに応じて、「x86/Release」または「x64/Release」ディレクトリにある「F5XForwardedFor.dll」ファイルを指定のディレクトリにコピーし、IISプロセスにこのディレクトリへの読み取り権限があることを確認します。x86Release" または "x64Release" ディレクトリのファイルを指定のディレクトリに移動し、IIS プロセスにこのディレクトリへの読み取り権限があることを確認します。
3.IISマネージャーを開き、現在開いているウェブサイトを見つけ、ウェブサイトを右クリックして「プロパティ」を選択し、「プロパティ」ページを開きます。
4. "プロパティ "ページで、"ISAPIフィルター "に切り替え、"追加 "をクリックし、ポップアップウィンドウで、以下の情報を設定します:
- 「フィルタ名": "F5XForwardedFor";
5.OKをクリックして、IIS 6サーバーを再起動します。
6.IIS6サーバーが記録したアクセスログを表示し、該当する訪問者の実際のIPを取得します。
IIS 7 アクセスログで実際のクライアントのIPアドレスを取得する方法
ソースサイトにIIS 7サーバーを導入している場合、「F5XForwardedFor」モジュールをインストールすることで、IIS 7サーバーが記録するアクセスログから訪問者の実際のIPアドレスを取得することができます。
1.F5XForwardedForモジュールをダウンロードしてインストールします。
2. "F5XFFHttpModule.dll "および "F5XFFHttpModule.ini "ファイルを、サーバーのオペレーティングシステムのバージョンに応じて、"x86/Release "または "x64/Release "ディレクトリ内の指定されたディレクトリにコピーし、IISプロセスがそのディレクトリに読み取りアクセスできることを確認します。x86Release」または「x64Release」ディレクトリ内の「F5XFFHttpModule.dll」および「F5XFFHttpModule.ini」ファイルを指定されたディレクトリに移動し、IISプロセスがそのディレクトリに対して読み取り権限を持っていることを確認します。
3.IISサーバーの選択で、「モジュール」をダブルクリックして「モジュール」インターフェイスに入ります。
4.ローカルモジュールの設定 "をクリックし、ポップアップダイアログボックスで "登録 "をクリックし、オペレーティングシステムに応じて、"モジュールの登録 "を選択し、ダウンロードしたDLLファイルを登録します。
- x86オペレーティング・システム:モジュール「x_forwarded_for_x86」の登録。
- 名前: x_forwarded_for_x86
- パス: "C:∕∕∕∕∕∕HttpModule.dll"
- x64オペレーティング・システム:モジュール "x_forwarded_for_x64 "を登録。
- 名前: x_forwarded_for_x64
- パス: "C:∕∕∕∕∕∕HttpModule.dll"
5.登録が完了したら、新しく登録したモジュールにチェックを入れ、「OK」をクリックします。
6.ISAPIとCGIの制限 "で、オペレーティングシステムに従って登録されたDLLファイルを追加し、"制限 "を "許可 "に変更します。
- x86オペレーティングシステム:
- 説明: x86
- x64オペレーティングシステム:
- 説明: x64
7.IIS 7 サーバーを再起動し、構成が有効になるまで待ちます。
8.IIS7サーバーが記録したアクセスログを表示し、該当する訪問者の実際のIPを取得します。