ApacheアクセスログでクライアントのIPアドレスを表示する方法
投稿日:2023/04/26
目標
- クライアントがロードバランサー経由でWebサーバーにHTTP/HTTPSアクセスしてきた際に、アクセスログにクライアント(接続元)のIPアドレスを表示する。
前提
- WebサーバーのソフトウェアはApacheを使用します。
目次
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