LoginSignup
3
3

More than 5 years have passed since last update.

SetEnvIf Remote_Addr を使ってホワイトリスト方式でアクセス元を許可する場合のテスト方法。但しロードバランサー配下に限る

Posted at

背景

インターネットに公開しているサーバには、望んでないアクセスが大量に来ます。望むアクセスだけを受け入れる方法としてアクセス元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/24192.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ステータスコードを表示します

参考ページ

SetEnvIfでHTTPヘッダー情報をもとに制御する
cURLでHTTPステータスコードだけを取得する

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3