【AWS/ELB】X-Forwarded-Forを設定してもクライアントIPアドレスが取れない

こんにちは、ryohei(@ityryohei)です!

本記事では、AWSのロードバランサー経由のアクセスに対してX-Forwarded-Forを設定してもクライアントIPアドレスが取れない場合の対処法をご紹介しています。

LogFormatにX-Forwarded-Forを設定してもクライアントIPアドレスが取れないな…。どうすればいんだろう?

上記の疑問にお答えします。

では、解説していきます。

ロードバランサー経由のアクセスについて

ロードバランサーを経由してインスタンスにアクセスすると、ログにはロードバランサーのIPアドレスが記録されます。アクセスの経路としては「クライアント」→「ロードバランサー」→「インスタンス」となります。インスタンスに記録されるログのIPアドレスは、手前のロードバランサーのIPアドレスとなってしまうため、デフォルトの状態ではクライアントのIPアドレスを取ることはできません。

クライアントのIPアドレスを取るためには

とりあえずAWSのナレッジセンターに解決方法がないか検索します。キーワードは「ELB IPアドレス」として検索したところ、下記の記事がヒットしました。

参考:https://aws.amazon.com/jp/premiumsupport/knowledge-center/elb-capture-client-ip-addresses/

解決したい内容がそのままナレッジセンターに投稿されていました。対応内容も設定ファイルを少し修正するだけで済むため、工数をかけずに対応できそうです。

これならいけそうな気がする!

私が検証した環境は下記の通りです。

OSAmazon Linux 2018.03
WebサーバーApache2.4

WebサーバーはApacheのため、Apacheの設定例を参考に設定ファイルを修正します。

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

設定ファイルを修正後、下記コマンドを実行して設定を反映。

sudo /etc/init.d/httpd reload

反映完了後、再度稼働しているサイトにアクセスしてログを確認したところ……

ロードバランサーのIPアドレスが記録されていました。設定ファイルの内容とナレッジセンターの投稿内容を何度も見直しましたが、修正内容に間違いはありません。

他に追加で設定が必要なのだろうと思い、しばらくネットの海をさまよったところ、海外の記事に解決方法がありました。

接続元IPを取るにはRemoteIPHeaderの設定が必要

クライアントIPアドレスを取るためには、RemoteIPHeaderの設定が必要とのこと。

RemoteIPHeaderについてはこちらをご参照いただければと思いますが、対象のモジュールがインストールされていれば、設定ファイルに一行追加すればクライアントIPアドレスが取れるみたい。ものは試しということで、設定ファイルに追記してみました、

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

更新した設定ファイルをサーバーに反映して、再びサイトにアクセスしてログを確認したところ……

きちんとクライアントのIPアドレスが記録されていました!無事に解決してほっとしました。

ちなみにLogFormatは下記の記述でも問題ないようですので、わかりやすい方を採用してくださいね。

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

最後に

AWSで困ったときはナレッジセンターを見るようにしていますが、インターネット上で活動しているクラウドエンジニアの方はレベルも高くて参考になる記事が多いですね。最近は海外の記事でも翻訳機能を使って手軽に見ることができるようになったので、英語サイト検索用のプロファイルを作るもの悪くないもしれませんね。

以上、AWSのELB経由のアクセスに対してX-Forwarded-Forを設定してもクライアントIPアドレスが取れない場合の対処法のご紹介でした!

Adobe Creative Cloudを通常価格で購入していませんか?

Adobe Creative Cloud(Adobe CC)はAdobe社が提供するクリエイター向けのサービスです。WEB制作の幅を広げる「Photoshop・Illustrator・XD」Youtuberや動画クリエイターの編集作業に欠かせない「Premiere Pro・After Effects」など全20以上のアプリが提供されており、幅広いプランが用意されています。

コンプリートプランはAdobe CCの全20以上のアプリが使用できるプランです。多くのアプリが使用できるため定価で購入すると年間7万円以上するプランですが、デジタルハリウッドのAdobeマスター講座では「基礎動画教材+Adobe CC コンプリートプラン(12ヵ月)」がセットになって39,980円(税込)で利用できます。定価より安価にAdobe Creative Cloudのライセンスを購入でき、以降のライセンス更新も可能。動画教材で基礎スキルを習得できるので、入門する方にも便利な講座です。詳しくは下記のリンクからチェックしてみてくださいね。

Adobeマスター講座はこちら

おすすめの書籍