犬ターネット

mod_rewrite を使ったアクセス拒否いろいろ

2014-05-26 apache mod_rewrite

(いろいろっつうか、どんな環境変数使えるかってだけだな...)

基本形は以下。RewriteCond の条件に一致した場合に 403 Forbidden を返す。

# 基本系
RewriteEngine On
RewriteCond 条件
RewriteRule ^.*$ - [F,L]

# 条件1,2,3全部満たす場合にアクセス拒否 (AND条件)
RewriteEngine On
RewriteCond 条件1
RewriteCond 条件2
RewriteCond 条件3
RewriteRule ^.*$ - [F,L]

# 条件1,2,3いずれか満たす場合にアクセス拒否 (OR条件)
RewriteEngine On
RewriteCond 条件1 [OR]
RewriteCond 条件2 [OR]
RewriteCond 条件3
RewriteRule ^.*$ - [F,L]

IPアドレス関連

# 192.168.0.100 からのアクセスを拒否
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^192\.168\.0\.100$
RewriteRule ^.*$ - [F,L]

# 192.168.0.100 以外からのアクセスを拒否
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^192\.168\.0\.100$
RewriteRule ^.*$ - [F,L]

# 192.168.0.100, 192.168.0.101, 192.168.3.* からのアクセスを拒否
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^192\.168\.0\.100$ [OR]
RewriteCond %{REMOTE_ADDR} ^192\.168\.0\.101$ [OR]
RewriteCond %{REMOTE_ADDR} ^192\.168\.3\.
RewriteRule ^.*$ - [F,L]

ユーザエージェント関連

# ユーザエージェントに Test が含まれていたら拒否
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} Test
RewriteRule ^.*$ - [F,L]

# ユーザエージェントがからっぽだったら拒否
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule ^.*$ - [F,L]

リファラ関連

# リファラが http://example.com で始まってなかったら拒否
RewriteEngine On
RewriteCond %{HTTP_REFERER} !(^http\:\/\/example\.com)
RewriteRule ^.*$ - [F,L]

# リファラが空だったら拒否
RewriteEngine On
RewriteCond %{HTTP_REFERER} ^$
RewriteRule ^.*$ - [F,L]

リクエストメソッド関連

# HEAD/GET/POST以外のリクエストメソッドは拒否
RewriteEngine On
RewriteCond %{REQUEST_METHOD} !(^(HEAD|GET|POST)$)
RewriteRule ^.*$ - [F,L]

認証関連

# Basic認証時、ユーザ名が「hoge」以外はアクセス拒否
RewriteEngine On
RewriteCond %{AUTH_TYPE} ^Basic$
RewriteCond %{REMOTE_USER} !(^hoge$)
RewriteRule ^.*$ - [F,L]

リクエストURI関連

# IPアドレスが 192.168.0.101 以外の場合、/login へのアクセスは拒否
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !(^192\.168\.0\.101$)
RewriteCond %{REQUEST_URI} ^\/login
RewriteRule ^.*$ - [F,L]

クエリストリング関連

# クエリストリングにNULバイト文字(\0, URLエンコードで%00 )が含まれていたらアクセス拒否
# 例えば http://example.com/?param=abc%00123 とか
RewriteEngine On
RewriteCond %{QUERY_STRING} %00
RewriteRule ^.*$ - [F,L]

その他

# ブラウザが gzip 圧縮対応してない場合はアクセス拒否
RewriteEngine On
RewriteCond %{HTTP:ACCEPT-ENCODING} !(gzip\,\s*deflate)
RewriteRule ^.*$ - [F,L]

詳しい仕様は以下を参照。

mod_rewrite - Apache HTTP Server

カチカチ山
あいつの写真