先日に続いて、どうもディーネットの山田です。
前回は、mod_remoteipを組み込むところだけで動作確認の結果はお預けでしたので今回ご紹介します。
目次
環境の情報を以下の通りで、定義しておきます
セキュリティ上実際のIPは、お教えできないので置き換えておりますご了承下さい。
- 私の拠点IP:192.0.2.100
- サーバのIP:198.51.100.200
- ロードバランサーのIP:203.0.113.10
- ロードバランサーの内部IP:192.0.2.170
簡単な動作確認を行います。
①、mod_remoteipが組み込まれていない状態でのアクセスログを確認
サーバのIPにアクセス
192.0.2.100 - - [27/Nov/2017:16:58:52 +0900] "GET / HTTP/1.1" 200 67 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0" 1530
-> サーバ直接なので、送信元IPに私の拠点IPがアクセスログ上に現れている
ロードバランサーのIPにアクセス
192.0.2.170 - - [27/Nov/2017:16:59:23 +0900] "GET / HTTP/1.1" 200 64 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0" 1219
-> リバースプロキシ型のロードバランサーを経由したので、送信元IPにロードバランサーの内部IPが表示されてしまっている、これでは誰がアクセスしてきたか判断できないね
②、mod_remoteipが組み込まれた状態でのアクセスログを確認
サーバのIPにアクセス
192.0.2.100 - - [27/Nov/2017:17:04:31 +0900] "GET / HTTP/1.1" 200 67 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0" 1095
-> サーバ直接なので、mod_remoteipを組み込んでいない場合と同じですね
ロードバランサーのIPにアクセス
192.0.2.100 - - [27/Nov/2017:17:04:42 +0900] "GET / HTTP/1.1" 200 67 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0" 1129
-> mod_remoteipを組み込んだのでApache内部で送信元IPを書き換えてくれて私の拠点IPがアクセスログ上に現れている
応用編
以下のような.htaccessを設置して私の拠点IP以外からは、表示させないようにしてみます。
Order Deny,Allow Deny from all Allow from 192.0.2.100
①、mod_remoteipが組み込まれていない状態でのアクセスログを確認
サーバのIPにアクセス
192.0.2.100 - - [27/Nov/2017:17:25:04 +0900] "GET / HTTP/1.1" 200 67 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0" 1408
-> 私の拠点IPからは問題なく、コンテンツが表示された
ロードバランサーのIPにアクセス
210.131.4.26 - - [27/Nov/2017:17:25:14 +0900] "GET / HTTP/1.1" 403 202 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0" 447
-> 私の拠点IPからだけど、送信元IPがリバースプロキシ型ロードバランサーのIPアドレスに置き換えられているので、正しくコンテンツが表示できない
②、mod_remoteipが組み込まれた状態でのアクセスログを確認
サーバのIPにアクセス
192.0.2.100 - - [27/Nov/2017:17:25:38 +0900] "GET / HTTP/1.1" 200 67 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0" 1204
-> 私の拠点IPからは問題なく、コンテンツが表示された
ロードバランサーのIPにアクセス
192.0.2.100 - - [27/Nov/2017:17:25:47 +0900] "GET / HTTP/1.1" 200 67 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0" 1221
-> mod_remoteipを組み込んだのでApache内部で送信元IPを書き換えてくれて私の拠点IPから正しくコンテンツが表示された
まとめ
X-Forwarded-Forが付与されていた場合、mod_remoteipがApache内部でうまく"アクセス元のIPアドレス"を置き換えてくれているので、LogFormatを工夫する必要がなくなります。
また、mod_remoteipを使うことで、ロードバランサーを意識することなく.htaccessの設置も可能だしアクセスログの出力形式も工夫する必要がなくなりました。最後に
Apache2.4系だとデフォルトで組み込まれている、モジュールなので設定ファイルを設置するだけで使用開始できます。