LoginSignup
8
7

More than 3 years have passed since last update.

Apacheのmod_rewriteでアクセス制御

Last updated at Posted at 2017-08-15

免責事項

自分向け備忘録。
今時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処理を終了し、レスポンスを返す。
8
7
1

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
8
7