apacheでdeny fromのand条件を設定する方法をわかりやすく書いてみる


apacheの設定でやディレクティブで111.111.111.111又は222.222.222.222のアクセスを切断したいといったようなOR条件は簡単に設定できますが、123.123.123.123からwgetを使ったアクセスを遮断したいといったAND条件で設定したいこともよくあると思います。
そのdeny fromのAND条件の設定方法を書いてみます。※もちろんallow fromも同じように設定可能です。

■wget && 123.123.123.123 を遮断したい

$ vi httpd.conf
————————————-
Order allow,deny
Allow from all

# UA がwget かつ 特定のIP(123.123.123.123)を遮断
SetEnvIf User-Agent “^Wget” is_wget
SetEnvIf Remote_Addr “123.123.123.123” is_badip

# UA がwget じゃなければ、is_badip を未設定状態(つまり遮断しない)
SetEnvIf is_wget 0 !is_badip #1

Deny from env=is_badip #2
————————————-
#1
is_wgetが0(つまり未設定)の場合、is_badipを未設定状態にする。
※マニュアルより
varname ・・・値は”1”に設定される。
!varname ・・・値が定義されていればそれを取り除く
varname=value ・・・変数をvalueの与えられた値に設定する

#2
is_badipが設定されていれば、is_badipのアクセスを拒否する
※マニュアルより
Deny from env=env-variableが指定されていると、
環境変数env-variableが存在した場合にアクセスを拒否する

この設定にあった時は、なるほど、よく考えてると思いました。
まぁパッと見、わかりづらいですけど。。。