Apacheの Order Allow,Denyはもう古い

2017年7月1日server,ブログ

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>