.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"の部分は任意の文字列にできる。