Apacheでip制限をする方法|httpd.confとhtaccessでのやり方を解説する
本記事では、Apacheでip制限をする方法を解説していく。
RequireまたはAllow, Denyを使う
Apacheでip制限をする場合は、バージョンが2.2以前の場合はAllow、Denyディレクティブを使い、
2.4以降の場合はRequireディレクティブを使うと良い。
// 2.2系以前のApache
Order deny,allow
Deny from all
Allow from xxx.xxx.xx.xx
// 2.4系以降のApache
Require all denied
Require ip xxx.xxx.xx.xx
xxx.xxx.xx.xxの部分にはアクセスを許可するipアドレスを入力すること。もし、複数のipアドレスのアクセスを許可したい場合は、
Require ip xxx.xxx.xx.xxを複数書いていけばよい。
もし、特定のURLやファイルのみip制限をしたい場合は、
LocationMatchやFilesMatchを併用すると良い。
LocationMatchはip制限をしたいURLを正規表現で指定でき、FilesMatchはファイル名を正規表現で指定できる。
ただし、LocationMatchはhttpd.confでは使用ができるが、.htaccessでは使用できないので注意が必要。
(FilesMatchはどちらも使える。)
// /admin/ 以下のURLのアクセス制限
<LocationMatch "/admin/.*">
Require all denied
Require ip xxx.xxx.xx.xx
</LocationMatch>
// login.phpとadmin/配下のphpファイルのアクセス制限
<FilesMatch "login\.php|admin/.*\.php">
Require all denied
Require ip xxx.xxx.xx.xx
</FilesMatch>
RewriteCond, RewriteRuleでのip制限
上記のやり方以外ではRewriteCondとRewriteRuleを使う方法がある。こちらの方法は、
httpd.confと.htaccessの両方で使える。
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/admin/.*$
RewriteCond %{REMOTE_ADDR} !^xxx\.xxx\.xx\.xx$
RewriteRule ^.*$ - [R=404,L]
上記ではadmin/以下のURLに対してip制限を行っている。
先ほど紹介したRequireディレクティブを使った方法は、HTTPステータスコードは403を返すが、
RewriteRuleであれば404を返してくれる。