Apache によるアクセス制御

スポンサーリンク

まぁ SetEnvIf ディレクティブを用いて「Order Allow,Deny」とかしちゃって
Apache の設定に手を加えるわけですが、ややこしい。

今日なって盲点を見つけたので Fix してみた。
12:05 もう一箇所追記してみた。

自分は ErrorDocument ディレクティブも使ってエラーページもカスタマイズ
させているんだけど、特定ホストを遮断するとこのエラーページまでをも遮断
してしまっていたというのが「盲点」でした。

修正してみた設定はこんな感じ (パスやホストは例として置き換えています)

# 以下 2 行でレスポンスに対するエラーページを指定。
ErrorDocument 403 /hogehoge/403.html
ErrorDocument 404 /hogehoge/404.html

# 特定参照元からのアクセスが有った場合、環境変数「acl_ng」が定義される。
SetEnvIf Referer "http://ng_site\.example\.com" acl_ng

# 特定リモートホストからのアクセスにマッチした場合、環境変数「acl_ng」が定義される。
SetEnvIf Remote_Host "ng_host\.example\.com$" acl_ng

# ごにょごにょ~
SetEnvIf Remote_Host "\d+$" acl_ng

# 指定 URI へのアクセスに対し、環境変数「acl_ng」を無効化させる。
# この場合はエラーページへのアクセス。「盲点」だったポイントになる。
SetEnvIf Request_URI "/hogehoge/" !acl_ng

# アクセス制御に関する判定順序を設定。
Order Allow,Deny

# とりあえず全て許可させる。
Allow from all

# 環境変数「acl_ng」が定義されたアクセスは不許可にする。(遮断)
Deny from env=acl_ng

という感じで REFERER と Remote_Host で同一環境変数を定義しているが、
複数の要素が絡む場合は別な物を定義してそれぞれ処理してあげた方が良い。
うちの環境ではどちらも重複定義されたところで望む動作をするのでこのままです。

2007/06/29 12:08 追加設定ごにょごにょ。
逆引きできないと Remote_Host にはそのまんま IP アドレスが入るのね。

スポンサーリンク