"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

https://blogs.iis.net/anilr/archive/2009/03/03/client-ip-not-logged-on-content-server-when-using-arr.aspx

インストーラーをダウンロード後、起動してください。

 

インストール完了後、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

 

以上です。