背景
インターネットに公開しているサーバには、望んでないアクセスが大量に来ます。望むアクセスだけを受け入れる方法としてアクセス元IPアドレスで判断する方法があります。
<DirectoryMatch / >
SetEnvIf Remote_Addr "^192\.168\." AllowIP
Order deny,allow
Deny from all
Allow from env=AllowIP
</DirectoryMatch>
アクセスを受け入れるIPアドレスが増えた場合には、 SetEnvIf Remote_Addr
を追加します。追加した結果のテストを行うには、本物のネットワークからアクセスを行えばいいのですが、それを行えない場合があります。
管理しているWebサーバが ロードバランサー配下にあり、X-Forward-forを設定している のであれば、 リクエストヘッダーの X-Forward-for に許可したいIPアドレスを設定することで動作確認を行えます。
前提となる apacheの設定
mod_remoteip を使って リモートIPを取得できる状態にしておきます。
RemoteIPHeader X-Forwarded-For
また、access_logの %h
を %a
に変更して、リモートIPをアクセスログで確認できる状態にしておきます。
擬似的なアクセス
webサーバ内でcurlを使ってapcaheにアクセスします。curlの -H
オプションで X-Forwarded-For
に 許可したいIPアドレスを設定します。
curl -H "X-Forwarded-For:192.168.1.2" \
http://localhost/path/contents
総当たりでテストしたい
SetEnvIf
で正規表現で許可するIPアドレスを指定するので、正規表現を間違えてしまうかもしれません。また、192.168.1.0/24
や 192.168.0.0/16
などネットワーク単位に許可することもあります。そうした場合はIPアドレスを変えながら全IPでアクセスします。
HTTPステースコードは許可したIPアドレスであれば200、許可していないIPアドレスであれば403になります。総当たりテストの結果は HTTPステータスだけ得られれば十分です。
curl -H "X-Forwarded-For:192.168.1.2" \
-o /dev/null \
-s \
-w '%{http_code}\n' \
http://localhost/path/contents
追加したオプションは下の通りです。
-
-o
で レスポンスのbodyを/dev/null
に捨てます -
-s
で進捗表示を抑止します -
-w
で HTTPステータスコードを表示します