そもそもX-Forwarded-Forを使う場合ですが基本はロードバランサを使っているときです
Webサーバに到達した際にアクセス元のIPがロードバランサになってしまうので
本当のアクセス元IPを取得するためにX-Forwarded-Forの設定を実施します
今回はログの出し方とX-Forwarded-Forを使ったIP制限の方法を紹介します
またapacheのインストールはchefを元に実施しているものとします
Webサーバに到達した際にアクセス元のIPがロードバランサになってしまうので
本当のアクセス元IPを取得するためにX-Forwarded-Forの設定を実施します
今回はログの出し方とX-Forwarded-Forを使ったIP制限の方法を紹介します
またapacheのインストールはchefを元に実施しているものとします
■前提条件
X-Forwarded-Forはhttpで受ける際に取得することができる値です
http(LB)→http(server)
httpsでX-Forwarded-Forを使いたいときには
SSLアクセラレータ付きのLBを使用しておりかつサーバ証明書を取得しておりかつサーバ側は80番ポートで受ける必要があります
https(LB + SSLアクセラレータ + 証明書)→http(server)
http(LB)→http(server)
httpsでX-Forwarded-Forを使いたいときには
SSLアクセラレータ付きのLBを使用しておりかつサーバ証明書を取得しておりかつサーバ側は80番ポートで受ける必要があります
https(LB + SSLアクセラレータ + 証明書)→http(server)
■ログの出し方
vim /etc/httpd/conf/httpd.conf
vim /etc/httpd/sites-enabled/000-default
000-defaultは環境によって異なります
VirtualHostを設定している設定ファイルを編集してください
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined ↓ LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{X-Forwarded-For}i\"" combined
vim /etc/httpd/sites-enabled/000-default
000-defaultは環境によって異なります
VirtualHostを設定している設定ファイルを編集してください
CustomLog /var/log/httpd/access_default.log combinedcombined になっていることを確認する
■X-Forwarded-Forを使ったIP制限方法
あるIPの場合はdenyするようにしてみます
vim /etc/httpd/sites-enabled/000-default
SetEnvIfでX-Forwarded-ForでフィルタリングするIPを指定します(正規表現での指定も可能なのでCIDR指定出来ます、今回はしてません)
当たり前ですが、80番のVirtualHostで受けています
「/」のLocationに対しては指定のIPを拒否する設定をしています
ポイントとしては allow,deny の順番で指定することで全許可してから指定のIPだけ許可しています
「/*/test/」のLocationに対しては指定のIPを許可する設定をしています
ポイントとしては deny,allow の順番で指定することで全拒否してから指定のIPだけ許可しています
LocationMatchディレクティブを使うと更に高度な正規表現を使用することができます
vim /etc/httpd/sites-enabled/000-default
<VirtualHost *:80> SetEnvIf X-Forwarded-For "192.168.10.101" deny_ip SetEnvIf X-Forwarded-For "192.168.10.102" deny_ip <Location /> Order allow,deny Allow from all Deny from env=deny_ip ProxyPass ajp://192.168.20.100:8009/sample-app/ </Location> <Location /*/test/> Order deny,allow Deny from all Allow from env=deny_ip ProxyPass ajp://192.168.20.100:8009/sample-app/ </Location> </VirtualHost>
SetEnvIfでX-Forwarded-ForでフィルタリングするIPを指定します(正規表現での指定も可能なのでCIDR指定出来ます、今回はしてません)
当たり前ですが、80番のVirtualHostで受けています
「/」のLocationに対しては指定のIPを拒否する設定をしています
ポイントとしては allow,deny の順番で指定することで全許可してから指定のIPだけ許可しています
「/*/test/」のLocationに対しては指定のIPを許可する設定をしています
ポイントとしては deny,allow の順番で指定することで全拒否してから指定のIPだけ許可しています
LocationMatchディレクティブを使うと更に高度な正規表現を使用することができます
リバースプロキシ配下でIP制限が出来ずに困っていました。
返信削除■X-Forwarded-Forを使ったIP制限方法 で実現できました。
ありがとうございます。