Apacheの Order Allow,Denyはもう古い
WebサーバのApacheですが、2.4からディレクティブの書き方が変わっていたんですね。
アパッチのサーバをいじったことのある人なら一回は目にしたことがると思われるこの書き方
Order Allow,Deny Allow from All
古いアクセスコントロールのモジュールが、 mod_access_compat に入って新規に mod_authz_host に変わったとか。
2.4になっても mod_access_compat が入っていれば今までと同じように動作するのですが、もはや時代は変わってモダンな書き方に変更していったほうがいいみたいです。
基本的に覚えるのが難しかったのですが、これからは、基本が全て拒否になっていて、許可の項目を入れていくというスタイルになります。
まだ翻訳されてません。
このページの目次
Order Allow,Denyは
いままで
Order Allow,Deny Allow from All
2.4では
Require all granted
これだけで全てのアクセスがOK。
特定のIPやホストを拒否する
いままで
Order Allow,Deny Allow from All Deny from 169.254.123.123 Deny from 169.254.321 Deny from example.com
2.4では「RequireAll」を使ってくくって全て許可した上で 「not」で拒否します。
<RequireAll> Require all granted Require not ip 169.254.123.123 Require not ip 169.254.321 Require not host example.com </RequireAll>
環境変数を使って特定の許可をする
あまり使いませんが、特定の条件のみアクセスを許可する場合です。
いままで
SetEnvIf User-Agent "Wget" ok_env SetEnvIf User-Agent "Google" ok_env Order Deny,Allow Deny from All Allow from ok_env Allow from 169.254.0.0/16 Allow from example.com
2.4では
SetEnvIf User-Agent "Wget" ok_env SetEnvIf User-Agent "Google" ok_env require env ok_env require ip 169.254.0.0/16 require host example.com
許可の項目を入れていくだけなのでこうなります。
環境変数を使って特定の拒否をする
環境変数を入れて全て許可した上で拒否の項目を入れていきます。
SetEnvIf User-Agent "Wget" x_env SetEnvIf User-Agent "Google" x_env <RequireAll> Require all granted Require not ip 169.254.123.123 Require not ip 169.254.321 Require not host example.com Require not host .cn Require not env x_env Require not ip 169.254.222.0/24 Require not method POST </RequireAll>
ローカルホストだけ許可する
127.0.0.0/8 と ::1 のみアクセス許可
Require local
特定のファイルのみ拒否する
データベースやシークレットな内容が書いてあるファイルなど、特定の拡張子を拒否します。
Require all granted <Files ~ "\.(sql|log|dat|sqlite)$"> Require all denied </Files>