Apache module mod_access

### Apache HTTP Server Version 1.3

# mod_access モジュール

このモジュールはクライアントのホスト名、IP アドレス、その他のクライアントのリクエストの特徴に基づいた アクセス制御機能を提供します。

ステータス: Base
ソースファイル: mod_access.c
モジュール識別子: access_module

## 概要

mod_access により提供されるディレクティブはサーバの特定の部分への アクセスを制御するために `<Directory>, <Files>`, `<Location>` と `.htaccess` ファイルで使用されます。クライアントのホスト名、IP アドレスや 環境変数として取得された、その他のリクエストの特徴に基づいて アクセス制御を行なうことができます。`Allow` と `Deny` ディレクティブはどのようなクライアントにアクセスを 許可する、しないかを指定するために使用されます。一方、 `Order` ディレクティブはデフォルトのアクセス状態と、 `Allow` ディレクティブと `Deny` ディレクティブとのお互いへの影響の仕方を設定します。

ホストによるアクセス制限とパスワードによる認証を同時に 行なうことが可能です。その場合、その二つの制限の関係を指定するために Satisfy ディレクティブを使用します。

一般的には、アクセス制限ディレクティブはすべてのアクセスメソッド (`GET`, `PUT`, `POST` など) に適用されます。そして、ほとんどの場合これが望ましい動作です。 しかし、<Limit> セクションの中にディレクティブを書くことで、 一部のメソッドにのみ制限をかけることもできます。

## ディレクティブ

- Allow
- Deny
- Order

Satisfy と Require も参照してください。

## Allow ディレクティブ

構文: Allow from all|host|env=env-variablename [host|env=env-variablename] ...
コンテキスト: ディレクトリ、 .htaccess
上書き: Limit
ステータス: Base
モジュール: mod_access

`Allow` ディレクティブはどのホストが サーバのある領域をアクセスできるかに影響を与えます。 アクセスはホスト名、IP アドレス、IP アドレスの範囲や、 環境変数として取得された、その他のクライアントのリクエストの 特徴によって制御することができます。

このディレクティブの最初の引数は常に `from` です。 それに続く引数は三つの違った形式があります。`Allow from all` が指定されていれば、すべてのホストにアクセスを許可し、 アクセス制限は下で説明されているように、`Deny` ディレクティブと `Order` ディレクティブの設定で決まります。 特定のホストやホスト群にのみサーバへのアクセスを許可するためには、 以下のどれかの形式で host を指定することができます:

ドメイン名 (の一部)
  例: `Allow from apache.org`
  この文字列に合うか、これで終わる名前のホストのアクセスが許可されます。 各部分が完全に合うものだけに適用されますので、上の例は `foo.apache.org` にはマッチしますが、 `fooapache.org` にはマッチしません。 この設定をすると、サーバは HostnameLookups の設定に関わらず、クライアントの IP アドレスに対して DNS の二重の逆引きを行ないます。これは IP アドレスで DNS の逆引きを行なってそれに関連付けられたホスト名を見つけ、 それからホスト名で正引きを行なってオリジナルの IP アドレスと一致するか確認します。アクセスは正引きと逆引きに矛盾が無く、 ホスト名が一致した場合に限り許可されます。
完全な IP アドレス
  例: `Allow from 10.1.2.3`
  アクセスを許可する IP アドレスです。
IP アドレスの一部
  例: `Allow from 10.1`
  サブネットの制限用の、IP アドレスの最初の一つから三つまでのバイトです。
ネットワーク/ネットマスク の対
  例: `Allow from 10.1.0.0/255.255.0.0`
  ネットワーク a.b.c.d とネットマスク w.x.y.z です。 より細粒度のサブネット制限用です。(Apache 1.3 以降)
ネットワーク/nnn CIDR 指定
  例: `Allow from 10.1.0.0/16`
  ネットマスクが nnn の上位ビットが 1 となっているものからなること以外は前のものと同じです。 (Apache 1.3 以降)

注: 最後の三つの例はまったく同じホストに合います。

`Allow` ディレクティブの引数の三つ目の形式は、 環境変数 の存在によりアクセスの制御を行なえるようにするものです。 `Allow from env=`variablename が指定されていると、環境変数 variablename が存在した場合にリクエストはアクセスを許可されます。サーバは mod_setenvif のディレクティブにより、クライアントのリクエスト の特徴に基づいて柔軟に環境変数を設定する機能を提供します。 ですから、このディレクティブはクライアントの `User-Agent` (ブラウザの種類)、`Referer` や他の HTTP リクエストのヘッダフィールドなどに基づいて アクセス許可をするために使うことができます。

例:

>     SetEnvIf User-Agent ^KnockKnock/2\.0 let_me_in
>     <Directory /docroot>
>         Order Deny,Allow
>         Deny from all
>         Allow from env=let_me_in
>     </Directory>

この場合、user-agent の文字列が `KnockKnock/2.0` で始まるブラウザのみがアクセスを許可され、 他のものはアクセスを拒否されます。

Deny, Order, SetEnvIf ディレクティブも参照してください。

## Deny ディレクティブ

構文: Deny from all|host|env=variablename [host|env=variablename] ...
コンテキスト: ディレクトリ、 .htaccess
上書き: Limit
ステータス: Base
モジュール: mod_access

このディレクティブはホスト名、IP アドレス、環境変数に基づいてサーバへのアクセスを制限します。 `Deny` ディレクティブの引数は Allow ディレクティブとまったく同じです。

Allow, Order, SetEnvIf も参照してください。

## Order ディレクティブ

構文: Order ordering
デフォルト: `Order Deny,Allow`
コンテキスト: ディレクトリ、 .htaccess
上書き: Limit
ステータス: Base
モジュール: mod_access

`Order` ディレクティブはデフォルトのアクセスの状態と Allow ディレクティブと Deny ディレクティブが評価される順番を制御します。 Ordering は以下のどれかです。

Deny,Allow
  `Deny` ディレクティブが `Allow` ディレクティブの前に評価されます。 アクセスはデフォルトで許可されます。`Deny` ディレクティブに合わないか、`Allow` ディレクティブに合うクライアントはアクセスを許可されます。
Allow,Deny
  `Allow` ディレクティブが `Deny` ディレクティブの前に評価されます。 アクセスはデフォルトで拒否されます。`Allow` ディレクティブに合わないか、`Deny` ディレクティブに合うクライアントはアクセスを拒否されます。
Mutual-failure
  `Allow` のリストに現れて、`Deny` のリストに現れないホストのみがアクセスを許可されます。 この順番付けは `Order Allow,Deny` と同じ効果を持ち、 その設定の方が好ましいために非推奨となっています。

キーワードはコンマで分離することだけが可能です。 間に空白があってはいけません。どの場合でも、`Allow` と `Deny` 文は全て評価されるということに注意してください。

以下の例では、apache.org ドメインのすべてのホストはアクセスを許可されます。 他のすべてのホストはアクセスを拒否されます。

> `Order Deny,Allow
> Deny from all
> Allow from apache.org
> `

次の例では、foo.apache.org サブドメインにあるホスト以外の、 apache.org ドメインのすべてのホストがアクセスを許可されます。 apache.org ドメインでないホストは、デフォルトの状態がアクセス拒否のため、 サーバへのアクセスを拒否されます。

> `Order Allow,Deny
> Allow from apache.org
> Deny from foo.apache.org
> `

一方、上の例の `Order` が `Deny,Allow` に変わっていれば、すべのホストにアクセスが許可されます。 これは、設定ファイル中の実際の順番に関わらず、 `Allow from apache.org` が最後に評価されて、 `Deny from foo.apache.org` を上書きするからです。 `apache.org` ドメインにないホストも、デフォルトの状態が allow に変化するために、アクセスを許可されます。

`Order` ディレクティブはデフォルトのアクセスの状態に影響を与えるので、 `Allow` ディレクティブと `Deny` ディレクティブが無くても、サーバのアクセスに影響を与えることができます。 たとえば、

> `<Directory /www>
> Order Allow,Deny
> </Directory>`

はデフォルトのアクセス状態が deny になるため、 `/www` ディレクトリへのすべてのアクセスを拒否します。

`Order` ディレクティブはサーバの設定処理の各段階でだけ アクセスディレクティブの処理の順番を変更します。これは、たとえば、 `Order` ディレクティブの設定に関わらず、 <Location> セクションの `Allow` ディレクティブや `Deny` ディレクティブは、<Directory> セクションや `.htaccess` ファイルの `Allow` ディレクティブや `Deny` ディレクティブよりも常に後に評価されるということを意味します。 設定セクションのマージの詳細については、 Directory,Location, Files セクションの動作方法 を参照してください。

Deny と Allow も参照してください。

### Apache HTTP Server Version 1.3