Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
こんにちは。
日本マイクロソフト、IIS サポートの鈴木です。
今回は、お問い合わせの多い、HTTP の拡張ヘッダー " X-forwarded-For " をログに出力する方法をご紹介します。
※X-Forwarded-For (XFF) は、HTTPヘッダーフィールドの一つです。
HTTPプロキシサーバー、または、負荷分散装置(ロードバランサ)を経由して、ウェブサーバーに接続するクライアントの送信元IPアドレスを特定する際に使用されます。
イメージはこんな感じです。
" X-Forwarded-For " の ログ出力方法
" X-Forwarded-For " をログに出力するには、以下の方法があります。
1. Advanced Logging ※IIS 7.0 以降
2. Enhanced Logging ※IIS 8.5 以降
3. ARR Helper ※IIS 7.0 以降
4. サードパーティ製の ISAPI フィルター(F5XForwardedFor)
<<お選びいただく際のポイント>>
IISのバージョンによって、お使いいただける機能が異なります。
Windows Server 2012 R2 (IIS 8.5) 以降をご利用であれば、標準機能として搭載されている 2. Enhanced Logging をお使いいただく事をお勧めします。
IISログにフィールドを追加していただくのみなので、設定も軽微で、可読性も高いと思います。
それ以前のバージョンをお使いの場合は、以下のそれぞれのメリット・デメリットを考慮いただき、お選びください。
1. Advanced Logging
"X-Forwarded-For "以外にも、独自のログ記録モジュールを実装したり、既存のログ記録オプションを拡張したり置き換える事が可能です。
ただし、出力先ファイルは、IIS ログとは別ファイルになります。
3. ARR Helper、及び、4. サードパーティ製の ISAPI フィルター
IISログの"c-ip" フィールドをクライアントのIPアドレスに置き換えることが可能なため、可読性は高くなると思います。
ただし、3. ARR Helperは、コミュニティでのサポートのみ、4. サードパーティ製の ISAPI フィルターは、サポート対象外となります。
それぞれの手順をご説明します。
1. Advanced Logging ※IIS 7.0 以降
IIS 拡張機能の一つの Advanced logging は、ユーザーが要求するクライアント データを柔軟に記録する事ができるツールです。
IIS 7.0 用 Advanced Logging - カスタム ログ
https://technet.microsoft.com/ja-jp/library/ee175732.aspx
Advanced Logging インストール手順
以下の2通りがあります。
・Web Platform Installer
・スタンドアロンのインストーラー
・Web Platform Installer
1) IIS 拡張機能をインストールする為に、下記のリンクから Web Platform Installer をダウンロードし、インストールします。
Microsoft Web Platform Installer 5.0
https://www.microsoft.com/web/downloads/platform.aspx
2) ダウンロードを行い、インストールが完了したら、[スタート] - [管理ツール] - [IIS マネージャー] を実行します。
3) 左ペインからコンピューター名をクリックし、中央ペインの管理セクションにある [Web Platform Installer] を実行します。
4) Web Platform Installer の画面が表示されたら、右上にある検索フィールドに [advanced logging] と入力しEnter を押します。
5) 検索結果に、[詳細ログ] が表示されます。詳細ログを選択し、インストールします。
・スタンドアロンのインストーラー
下記のリンクより、ダウンロードしてください。
IIS 詳細ログ (32 ビット)
https://www.microsoft.com/ja-jp/download/details.aspx?id=18374
IIS 詳細ログ (64 ビット)
https://www.microsoft.com/ja-JP/download/details.aspx?id=7211
Advanced logging 設定手順
1) IIS マネージャーを開きます。
2) 接続ペインでコンピュータ名を選択し、機能ビューの IIS セクションにある [詳細ログ] をダブル クリックします。
3) 操作ペインの [詳細ログを有効にする] をクリックします。
4) 操作ペインの [ログ記録フィールドの編集] をクリックします。
5) [フィールドの追加] をクリックします。
6) 以下の通り、情報を入力します。
フィールド ID: X-Forwarded-For
カテゴリ: Default
ソースの種類 : 要求ヘッダー
ソース名 : X-Forwarded-For
7) [OK] を 2 回クリックします。
8) 操作ペインの [ログ定義の追加] をクリックします。
9) [ベース ファイル名] に任意の名前を入力します。
10) [フィールドの選択] をクリックします。
11) ログ記録フィールドの選択 ウィンドウでログに出力したい項目を選択し、[OK] をクリックします。
12) 操作ペインの [適用] をクリックします。
2. Enhanced Logging ※IIS 8.5 以降
上記1. で、Advanced Loggingについてご案内いたしましたが、Windows Server 2012 R2 (IIS 8.5) 以降にはその機能が標準で組み込まれています。
Enhanced Logging for IIS 8.5
https://www.iis.net/learn/get-started/whats-new-in-iis-85/enhanced-logging-for-iis85
このEnhanced Loggingという機能により、IISログに “ X-Forwarded-For ” フィールドを追加することが可能です。
IIS ログに “X-Forwarded-For” フィールドを追加する手順
1) IIS マネージャーを開きます。
2) 当該 Web サイトを選択の上、[ログ記録] をダブルクリックします。
3) [フィールドの選択] をクリックします。
4) [W3C ログ記録フィールド] ダイアログより [フィールドの追加] をクリックします。
5) 以下を設定の上、[OK] をクリックします。
フィールド名 : X-Forwarded-For (ここで指定したフィールド名で IIS ログに記録されます)
ソースの種類 : 要求ヘッダー
ソース : X-Forwarded-For
6) 画面右の [操作] ペインより “適用” をクリックし、設定を反映させます。
3. ARR Helper ※IIS 7.0 以降
弊社製品の ARR に含まれる ARR Helper を利用することで、X-Forwarded-For ヘッダーの値を IIS ログの c-ip に記録することが可能です。
※ARR(Application Request Routing: アプリケーション要求ルーティング処理)は、モジュール名の通り、リクエストに対するルーティング機能のほか、負荷分散、ディスクキャッシュの機能を利用できます。
ARR を利用していない場合でも、当該機能を利用することができます。
また、ARR Helper はコミュニティ ベースで公開しているツールであり、コミュニティでのサポートのみ提供しております。
ARR Helper インストール手順
ARR がインストールされている環境の場合、以下のフォルダにあるインストーラーを該当環境にコピーし、起動します。
C:\program files\IIS\Application Request Routing\
requestrouterhelper_x64.msi (64 ビット環境)
requestrouterhelper_x86.msi (32 ビット環境)
ARR がインストールされている環境がない場合、下記の URL より ARR Helper のインストーラーをダウンロードすることができます。
Client-ip not logged on application server when using ARR
インストーラーをダウンロード後、起動してください。
インストール完了後、IIS に到着するリクエストの X-Forwarded-For ヘッダーの IP アドレスが、IIS ログの c-ip の項目に置き換わることをご確認ください。
ARR Helper をアンインストールする場合は、コントロールパネルの [プログラムと機能] の「ARR Helper for IIS 7」を削除します。
4. サードパーティ製の native HTTP モジュール (F5XFFHttpModule)
サードパーティが公開している native HTTP モジュールではありますが、X-Forwarded-For ヘッダーを IIS ログに記録する native HTTP モジュールが公開されています。
マイクロソフトでサポートを提供するものではありませんが、こちらを元に新規に HTTP モジュールを開発していただく際のサポートは弊社でも提供しておりますので、方法の一つとしてあわせてご紹介いたします。
X-Forwarded-For HTTP Module For IIS7, Source Included!
https://devcentral.f5.com/articles/x-forwarded-for-http-module-for-iis7-source-included
登録手順
1. 上述の F5 社のサイトのリンク "X-Forwarded-For Http Module Binary Distribution" から、カスタムの HTTP モジュールを含む zip ファイル (F5XFFHttpModule.zip) をダウンロードし、対象の IIS サーバーの任意のパスに展開します。
2. 管理者権限でコマンド プロンプトを開き、下記の 4 つのコマンドを実行して、カスタムの HTTP モジュール (F5XFFHttpModule.dll) を登録します。
64bit モジュール用の登録
----------
>%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/globalModules /+"[name='F5XFFHttpModule-64',image='<F5XFFHttpModule.zip の展開先のパス>\x64\Release\F5XFFHttpModule.dll',preCondition='bitness64']" /commit:apphost
>%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/modules /+"[name='F5XFFHttpModule-64',preCondition='bitness64']" /commit:apphost
32bit モジュール用の登録
----------
>%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/globalModules /+"[name='F5XFFHttpModule-32',image='<F5XFFHttpModule.zip の展開先のパス>\x86\Release\F5XFFHttpModule.dll',preCondition='bitness32']" /commit:apphost
>%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/modules /+"[name='F5XFFHttpModule-32',preCondition='bitness32']" /commit:apphost
以上です。




