.htaccessでIPアドレスを指定してアクセス制限をする

2023年10月02日 更新

概要: Apache2.4でRequireディレクティブを使用した例。インターネット上で一般化している非推奨の使用例も挙げる。

ネット上で推奨とされている例

.htaccess によるアクセス制御について調べると、下記のような設定が多く見られる。

非推奨の使用例 (1)

Allow from ip_addr

非推奨の使用例 (2)

Order deny,allow

deny from all

allow from ip_addr

問題点

2023年10月の時点で、上記2つのコードはApacheの互換モジュール"mod_access_compat"が必要であり、非推奨の記法である。そのまま使用を続けると最新のApacheに移行した際にエラーなったり、Apacheが起動しなかったり、セキュリティ上の問題が発生する可能性がある。

Apache 2.4 でのアクセス制御

Apache 2.4では、authz_host_module モジュールを使用し、Require ディレクティブを用いてアクセス制御をする。

全てのアクセスを拒否する場合

Require all denied

全てのアクセスを許可する場合

Require all granted

特定のIPアドレスを許可する場合

Require ip ip_addr

### 特定のIPアドレス以外を許可する場合(=特定のIPを拒否する)

Require not ip ip_addr

全てのアクセスを拒否した上で、特定のIPアドレスのみは許可する場合(複数の条件を指定)

RequireAnyディレクティブで条件を列挙する

<RequireAny>

Require all denied

Require ip ip_addr

</RequireAny>

正規表現とSetEnvIfディレクティブを使用した例

"192.168.10.x" と "192.168.20.x" のIPアドレスからのアクセスは許可

SetEnvIf Remote_Addr ^192\.168\.10\. ip_list

SetEnvIf Remote_Addr ^192\.168\.20\. ip_list

<RequireAll>

Require env ip_list

</RequireAll>

"Remote_Addr"は、「クライアントのIPアドレスの指定」を意味する。

"ip_list"の部分は任意の文字列にできる。