Apache2.4以降でIP制限をかける

はじめに

この記事は、ApacheでIP制限をかける(2022/11/2 追記)で触れられているように、Apache2.4以降で推奨されているIP制限のかけ方の記事である。

IP制限のかけ方

IP制限に関するApacheの記述は.htaccessファイルもしくは.cofファイルに書く。この記事では.cofファイルを編集する方法を紹介する。

.confファイルの記述例

特定のドメインもしくはアドレスからのアクセスを許可するか拒否するかによって書き方は異なる。

特定のドメインもしくはIPアドレスからのアクセスを許可したい場合

<Directory /var/www/html>
  <RequireAny>
    Require ip aaa.bbb.ccc.ddd
  Require host www.example.com
  </RequireAny>
</Directory>

特定のドメインもしくはIPアドレスからのアクセスを拒否したい場合

<Directory /var/www/html>
  <RequireAll>
   Require all granted
     Require not ip aaa.bbb.ccc.ddd
   Require not host www.example.com
  </RequireAll>
</Directory>

解説

1. DirectoryでIPアドレス制限を行う場所の設定

上の例の場合、/var/www/htmlディレクトリ下にある全てのファイルに対して制限がかかる。

Directoryと同じような設定でLocationと呼ばれるものがあるが、これはパスに対して制限をかける。

Locationディレクティブ/LocationMatchディレクティブ:設定が適用されるURLパスを指定する

2. RequireAny:いずれかの条件にマッチすればアクセスを許可

<RequireAny>
 *        *        *
 *        *        *
</RequireAny>

の間に記述された条件のうち一つでも満たすアクセスは許可をする。

注意

RequireAnyディレクティブのブロック内でRequire not xxxのような not を付けた Requireディレクティブを記述すると、 Apacheの起動時に次のようなエラーメッセージが出て起動することができない。

negative Require directive has no effect in <RequireAny> directive
  

3. RequireAll:すべての条件にマッチした場合だけアクセスを許可する。

<RequireAll>
 *        *        *
 *        *        *
</RequireAll>

の間に記述されたすべての条件を満たすアクセスのみ許可をする。

注意

RequireAllディレクティブのブロック内でRequire not xxxのような not を付けた Requireディレクティブだけを記述すると、 Apacheの起動時に次のようなエラーメッセージが出て起動することができない。 notを付けたRequireディレクティブを記述する場合は一緒にRequire all grantedを記述する必要がある。

<RequireAll> directive contains only negative authorization directives
  

4. Require ip:指定のIPアドレスからのアクセスを許可/拒否する

許可する場合
完全な指定
Require ip 192.168.0.1
Require ip 10.1.1.5
一部の指定
Require ip 192.168.0
Require ip 10
Net Mask または CIDR での指定
Require ip 172.16.0.0/255.255.0.0
Require ip 172.16.0.0/16
拒否する場合
Require not ip 192.168.0.1
Require not ip 10.1.1.5

5. Require host:指定のドメインからのアクセスを許可する

許可する場合
Require host example.com
拒否する場合
Require not host example.com

参考文献