はじめに
ALBの後ろにいるEC2で、クライアントの送信元IPを確認する方法について記載します。
デフォルトではロードバランサーを経由する通信は、EC2(ウェブサーバー)のアクセスログには、ロードバランサーのIPアドレスが記載されます。
構成
簡単ですが、以下のような構成を想定します。
この構成でEC2にアクセスした通信の送信元IPを確認できるようにしたいと思います。
前提
・AWSの操作権限があること
・ALBやEC2などはすでに作成済みであること
・EC2にSSH接続できること
・EC2はapacheサーバーを想定
前提
やることは以下になります。
・現在の設定を確認
・httpd.confのLogFormatの編集
・accesslogの確認
現在の状態の確認
ALB XFF(X-Forwarded-For) が有効(付加)のステータスであること
AWSマネジメントコントローラーで、ロードバランサーの「属性」タブで「X-Forwarded-For ヘッダー」のステータスが「付加」であることを確認します。
ALBではデフォルトが「付加」になっています。
XFF ( X-Forwarded-For )についてはこちらを参照ください
LogFormatの編集
AWSの公式のページに設定方法が記載されています。
apacheの設定ファイル(httpd.conf)を編集します。
sshなどでEC2(apache)サーバーにアクセスします。
httpd.confの場所は設定によって異なりますが、/etc/httpd/conf/配下などにあります。
httpd.confファイルをvimなどで開きます。
LogFormat セクションで、次のように %{X-Forwarded-For}i を追加します。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
変更を保存して閉じます。
Apache サービスを再ロードします。
systemctl reload httpd
アクセスログの確認
アクセスログの場所も設定によって異なります。
/var/log/apache2もしくは/var/log/httpd配下などにあります。
クライアントからアクセスを実行して、アクセスログに記載されるか確認します。
アクセスログに以下のような記載があれば送信元IPが見えるようになっています。
A.A.A.A B.B.B.B - - ログメッセージ
※A.A.A.A は送信元のグローバルIP、B.B.B.BはALBのIPになります。
※VirtualHost(バーチャルホスト)を使用しており、VirtualHost内にLogFormatの設定がある場合、httpd.confで編集したLogFormatのニックネームとVirtualHostのLogFormatのニックネームを一致させることで、VirtualHostのアクセスログに送信元IPを記録することができます。
(先ほどhttpd.confで設定したLogFormatのnicknameはcombinedになります)
まとめ
LogFormatの設定を変更することで、アクセスログに送信元IPを記録できるようになります。
ALBの背後にあるEC2で送信元IPを確認したい場面で、本記事の内容が参考になれば幸いです。