免責事項
自分向け備忘録。
今時Apache httpdかよ、時代はNginxだろとか言わない。
目的
Apacheのmod_rewriteを使って特定IPアドレスからのアクセスをブロックする
前提条件
ApacheのフロントにAWSのELBなどのロードバランサが存在すること。
概要
ELB経由のアクセスになるので、HTTPリクエストヘッダの
X-Forwarded-Forヘッダの値を条件として書き換えを行うする。
※ REMOTE_ADDRにはELBのアドレスが入るので目的が達成できない。
設定例
記述例
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-For} ^111\.111\.111\.111$ [OR]
RewriteCond %{HTTP:X-Forwarded-For} ^222\.222\.222\.222$ [OR]
RewriteCond %{HTTP:X-Forwarded-For} ^123\.123\.123\.123$ [OR]
RewriteCond %{HTTP:X-Forwarded-For} ^234\.234\.234\.234$
RewriteRule ^.* - [F,L]
やろうとしていること
RewriteCondで設定している4つのIPアドレスからのアクセスは403 Forbiddenで返す。
記述内容をざっくり説明
- RewriteEngine onでmod_rewriteによる書き換え処理を開始。
- RewriteCondで書き換え対象か否かの条件を指定。
- 今回はHTTPリクエストヘッダに含まれるX-Forwarded-Forの値で判定している。(値はダミー)
- [OR]でRewriteCondをつなぐことで複数の条件(RewriteCond)のうちのいずれかが満たされればRewriteRuleを適用する。([OR]がない場合は暗黙的にAND扱いになる)
- RewriteRuleの記述について
- RewriteRuleでは、正規表現(^.*)がリクエストパスに指定されており、あらゆるパスに対して書き換え処理を行う。
- - でパスの書き換えは行わないの意味。
- [F, L]のフラグ指定に合わせてレスポンスを返す。
- Fは403 Forbiddenでアクセス拒否していることを表す。
- Lで以降のRewrite処理を終了し、レスポンスを返す。