"X-Forwarded-For" ヘッダーを IISログに出力したい!
こんにちは。
日本マイクロソフト、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
以上です。