Apache httpd は、2.4系以降 .htaccess や httpd.confで記述するアクセス制御の記述方法が変わりました。
httpd 2.2などが動いている古いOSから httpd 2.4系にアップグレードしたときに、アクセス制御の記述方式によりエラーになったり、正しくアクセス制御ができないことがあります。
アクセス制御の記述の違い
Apache httpd 2.0/2.2と2.4では、次のように記述が異なります。
Apache httpd 2.0/2.2
Order deny,allow deny from all allow from xxx.xxx.xxx.xxx
Apache httpd 2.4
Require all denied Require ip xxx.xxx.xxx.xxx
Requireの記述
Require all granted | 全てのアクセスを許可。 |
Require all denied | 全てのアクセスを拒否。 |
Require [not] env [env-var] [env-var] … | 指定した環境変数が定義されていればアクセスを許可。not を指定した場合には、指定した環境変数が提起されていた場合にアクセスを拒否。 RequireAny を指定した場合には、notを指定することはできない。 |
Require method [HTTP-METHOD] … | 指定された HTTP-METHOD(メソッド)である場合にはアクセスを許可 |
Require valid-user | BASIC認証などで認証が通り有効なユーザーの場合にはアクセスを許可。 |
Require ip [IPADDRESS] | クライアントのIPアドレスが指定されたIPアドレスの場合にアクセスを許可 |
RequireAll | RequireAny | RequireNone
アクセス制御は、RequireAll, RequireAnym, RequireNone ディレクティブで、複数のRequire条件 を AND もしくは OR の指定ができます。
RequireAll (AND) | ディレクティブ内の、全ての条件にマッチしたときにアクセスを許可 |
RequireAny (OR) | ディレクティブ内の、いずれかの条件にマッチしたときにアクセスを許可 |
RequireNone | いずれかの条件にマッチする場合には、アクセスを拒否 |
RequireNoneだけが、拒否の条件を記述することになるので注意が必要です。
環境変数のセット SetEnvIf ディレクティブ
Require env で指定する環境変数は、SetEnvIf ディレクティブで設定します。
SetEnvIf attribute regex [!]env-variable[=value] [[!]env-variable[=value]] ...
SetEnvIfの使用例
SetEnvIf Referer “DOMAINNAME” refcheck=true | 表示しているページのリファラーが DOMAINNAME からであれば refcheck 環境変数にtrueを設定する |
SetEnvIf Request_URI “\.png$” pngfile | アクセスしたURIが png画像ファイルの時に pngfile 環境変数にtrueを設定する |
詳しい設定方法は、Apache httpd mod_setenvif のマニュアルを参照ください。
設定の例
ここからは、いくつかのケースで 設定方法を見ていきます。
全てのアクセスを許可する
全てのアクセスを許可するには、単純に以下の記述だけで問題ありません。
一般公開しているコンテンツなどは、.htaccess や Directory ディレクティブで、以下の設定を追加します。
Require all granted
特定のディレクトリにBASIC認証をかける
AuthType Basic AuthName "Authentication Directory" AuthUserFile /path/to/.htpasswd SetEnvIf Request_URI "^/*" allow_page SetEnvIf Request_URI "^/auth-dir/*" !allow_pageRequire env allow_page Require vaild-user Require all denied
特定IPアドレスかBASIC認証でアクセスを許可
オフィスや拠点からのアクセスの時にはアクセスを許可し、それ以外のネットワークからのアクセスの場合にはBASIC認証で認証してアクセスを許可したい場合には、次のように記述します。
AuthType Basic AuthName "Authentication Directory" AuthUserFile /path/to/.htpasswdRequire valid-user Require ip xxx.xxx.xxx.xxx Require all denied