N-LAB.

ApacheアクセスログでクライアントのIPアドレスを表示する方法

投稿日:2023/04/26

目標

  • クライアントがロードバランサー経由でWebサーバーにHTTP/HTTPSアクセスしてきた際に、アクセスログにクライアント(接続元)のIPアドレスを表示する。


前提

  • WebサーバーのソフトウェアはApacheを使用します。


目次

  1. Apache設定ファイルの編集
  2. X-Forwarded-For


1. Apache設定ファイルの編集

  • ロードバランサーを経由してApacheへアクセスした場合、アクセスログにはロードバランサーのIPアドレスが出力されてしまい、クライアントのIPアドレスが出力されません。ロードバランサーのIPアドレスではなく、クライアントのIPアドレスを表示するには以下の手順を実施します。


1. Apacheの設定ファイル(httpd.conf/apache2.conf)をテキストエディタで開き、変更後の内容に修正して保存します。
<変更前>

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

<変更後>

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined


2. Apacheを再起動します。

3. ApacheにHTTP/HTTPSアクセスした際に、ロードバランサーのIPアドレスではなく、クライアントのIPアドレスがアクセスログに出力されていることを確認します。
※ロードバランサーにAWSのApplication Load BalancerまたはClassic Load Balancerを利用している場合でも上記の設定を行うことで、クライアントのIPアドレスをアクセスログに出力することが可能です

2. X-Forwarded-For

  • HTTPヘッダーフィールドの1つであり、クライアントがロードバランサーを経由してアクセスした場合に、クライアントのIPアドレスを特定する際に利用されます。X-Forwarded-Forにはアクセス元のクライアントIPアドレスが格納されています。
X-Forwarded-For: xxx.xxx.xxx.xxx


  • X-Forwardedを冠したヘッダーフィールドにはX-Forwarded-For以外に以下の3つが存在します。


X-Forwarded-Host:クライアントによってリクエストされた元のホストとポートを格納します。リバースプロキシ (ロードバランサー、 CDN) のホスト名とポート番号が異なる場合に元のホストを判別することが可能です。

X-Forwarded-Host: www.foo.com:8080


X-Forwarded-Proto:クライアントがプロキシやロードバランサーに接続するために使用したプロトコルを識別します。

X-Forwarded-Proto: https


X-Forwarded-Port:クライアントがプロキシやロードバランサーへの接続に使用したリスナー・ポート番号を識別します。

X-Forwarded-Port: 443