Apache によるアクセス制御

Linux
この記事は約2分で読めます。
この記事は最終更新日より 1 年以上経過しています。
画像やリンクが無効になっている可能性もあるのでご了承下さい。

まぁ 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 アドレスが入るのね。

著者プロフィール
ぶっち

本格的に PC へ触れ始めてたのは 1990 年位から。
興味は PC 全般。OS は Windows と Linux などを嗜む。
プログラマやネットワークエンジニアを経てフリーに活動している 2 児の父な 40 代半ばのおじさんです。

ぶっちをフォローする

コメント

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.