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を返してくれる。