Apacheでip制限をする方法|httpd.confとhtaccessでのやり方を解説する

本記事では、Apacheでip制限をする方法を解説していく。

RequireまたはAllow, Denyを使う

Apacheでip制限をする場合は、バージョンが2.2以前の場合はAllowDenyディレクティブを使い、 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制限をしたい場合は、 LocationMatchFilesMatchを併用すると良い。

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制限

上記のやり方以外ではRewriteCondRewriteRuleを使う方法がある。こちらの方法は、 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を返してくれる。

参考