速報

Dokployで組織をまたぐ認可不備|最新版でも修正取り込みを確認

CATEGORY

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

※本ページのリンクにはプロモーションが含まれています。

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

目次

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

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アドレスが取れない場合の対処法のご紹介でした!

この記事を書いた人

Ryohei

Webエンジニア / アプリ開発者 / 技術ブログ運営者

福岡のWeb制作会社に勤務するWebエンジニアです。10年以上にわたりWeb制作・開発に携わり、ヒアリングや進行管理から、コーディング、CMSの構築、システム開発、サーバーの構築・保守・運用まで、Webサイト制作の工程を幅広く担当しています。Webサイトは、これまでに100以上の構築・保守を手がけてきました。

個人でもWebサイトの制作・改修やWebアプリの開発・運用を行い、AIを活用した開発にも取り組んでいます。近年はWebセキュリティにも注力しています。

2015年から技術メディア「Into the Program」を運営し、実務や開発で得た知識をもとに、プログラミングの実装方法やWebサイトの運用・セキュリティ情報を発信しています。

主な分野
Webサイト構築・保守・運用 / HTML/CSS / JavaScript / PHP / WordPress / サーバー構築・保守・運用 / アプリ開発 / セキュリティ対策
資格・試験合格
情報セキュリティマネジメント試験
基本情報技術者試験
AWS認定ソリューションアーキテクト アソシエイト
PHP8技術者認定ウィザード
メディア運営
2015年〜

記事の作成・更新について

セキュリティ記事は、ベンダーの公式アドバイザリやCVE・JVNなどの一次情報を参照し、出典と情報確認日を記載します。実環境での検証を行った場合は、その環境と確認範囲を明示します。重要な追加情報や誤りを把握した場合は、内容を確認して追記・訂正します。

関連する記事

おすすめの書籍

キーワードから探す

スポンサーリンク

クラウド

サーバーやソフトウェアを自分で持たずに、インターネット経由で必要な分だけ利用する形態。AWSやGoogle Cloudなど。

詳しく見る

IPアドレス

インターネットなどのネットワークで、機器を識別するための番号。通信の宛先や送信元を表す。

詳しく見る

ロードバランサー

複数のサーバーにアクセスを振り分け、負荷を分散させる装置や仕組み。障害時に別のサーバーへ切り替える役割も持つ。

詳しく見る