mod_access_compat
ホスト (名前もしくは IP アドレス) に基づいたグループ承認
Extension
mod_access_compat.c
access_compat_module
Apache 2.3 (Apache 2.x の以前のバージョンとの互換性のためのモジュールとして)。 このモジュールで提供するディレクティブは、承認の仕組みの一新に伴い、非推奨になったものです。 mod_authz_host も見てください。

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

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

# Note

mod_access_compatが提供するディレクティブは、 承認の仕組みの一新に伴い、非推奨になったものです。 mod_authz_host も見てください。 デフォルトの承認の取り扱い機能を使用するために mod_authz_default モジュールもロードされなければなりません。

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

Require
mod_authz_host
mod_authz_core
Allow
サーバのある領域にアクセスできるホストを制御する
Allow from all|host|env=[!]env-variable [host|env=[!]env-variable] ...
directory
.htaccess
Limit

Allow ディレクティブは、どのホストが サーバのある領域にアクセスできるかに影響を与えます。 アクセスはホスト名、IP アドレス、IP アドレスの範囲や、 環境変数などのクライアントのリクエストの 特徴に基づいてアクセス制御することができます。

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

ドメイン名 (の一部)

  # 例

  Allow from apache.org
  Allow from .net example.edu

  この文字列に合うか、これで終わる名前のホストのアクセスが許可されます。 各部分が完全に合うものだけに適用されますので、上の例は `foo.apache.org` にはマッチしますが、 `fooapache.org` にはマッチしません。 この設定をすると、Apache は HostnameLookups の設定に関わらず、クライアントの IP アドレスに対して DNS の 2 重逆引きを行ないます。 ホスト名からオリジナルの IP アドレスを順引きします。 順引きと逆引きが一致し、ホスト名が該当した場合にのみ、 アクセスが許可されます。

完全な IP アドレス

  # 例

  Allow from 10.1.2.3
  Allow from 192.168.1.104 192.168.1.205

  アクセスを許可する IP アドレスです。

IP アドレスの一部

  # 例

  Allow from 10.1
  Allow from 10 172.20 192.168.2

  サブネットの制限用の、IP アドレスの最初の一つから三つまでのバイトです。

ネットワーク/ネットマスク の対

  # 例

  Allow from 10.1.0.0/255.255.0.0

  ネットワーク a.b.c.d とネットマスク w.x.y.z です。 より細粒度のサブネット制限用です。

ネットワーク/nnn CIDR 指定

  # 例

  Allow from 10.1.0.0/16

  ネットマスクが nnn の上位ビットが 1 となっているものからなること以外は前のものと同じです。

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

IPv6 アドレスと IPv6 のサブネットは以下のように指定できます:

Allow from 2001:db8::a00:20ff:fea7:ccea
Allow from 2001:db8::a00:20ff:fea7:ccea/10

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

# Example:

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
サーバがアクセスを拒否するホストを制御する
Deny from all|host|env=[!]env-variable [host|env=[!]env-variable] ...
directory
.htaccess
Limit

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

Order
デフォルトのアクセス可能な状態と、Allow と Deny が評価される順番を制御する
Order ordering
Order Deny,Allow
directory
.htaccess
Limit

Order ディレクティブは Allow ディレクティブとDeny と共に"3段階アクセス制御システム" を制御します。第1段階目では Order ディレクティブで1番目に 指定したディレクティブ(Allow または Deny)を全て処理します。 第2段階目で、残りのディレクティブ(Deny または Allow) を全て処理します。第3段階目で、第1段階目と第2段階目で マッチしなかったリクエストを処理します。

全ての Allow と Deny が処理され、結局のところ最後にマッチ した条件が有効となることに注意してください。これは最初にマッチした条件だけが有効 となる、典型的なファイアウォールの動作とは異なっています。 また、設定ファイルに書く順番には意味はありません。Allow 行は全部一つのグループとして扱われ、 Deny 行はもう一つのグループとみなされます。 またデフォルト状態は単独で一つのグループとみなされます。

Order 設定は以下のどれかです。

`Allow,Deny`
  まず Allow ディレクティブが適用されます。どれにもマッチしなかった場合、この時点で リクエストは拒否されます。次に、全ての Deny ディレクティブが適用されます。どれか一つでもマッチした場合は、 リクエストは拒否されます。 最後に、 Allow にも Deny にもマッチしなかったリクエストは デフォルト設定が適用されるので拒否されます。
`Deny,Allow`
  まず Deny ディレクティブが適用されます。どれか一つでもマッチした場合は、 Allow のどれにも マッチしなければ、アクセスは拒否されます。 どの Allow にも Deny にもマッチしないリクエストは 許可されます。
`Mutual-failure`
  これは `Order Allow,Deny` と全く同じ効果を持ち、 そのため非推奨となっています。

キーワードの間に置けるのはコンマだけです。 間に空白があってはいけません。

マッチ | Allow,Deny 時の結果 | Deny,Allow 時の結果
--- | --- | ---
Allow だけにマッチ | 許可 | 許可
Deny だけにマッチ | 拒否 | 拒否
どちらにもマッチしない | 2番目のディレクティブがデフォルト: 拒否 | 2番目のディレクティブがデフォルト: 許可
Allow と Deny 両方にマッチ | 最後にマッチしたほう: 拒否 | 最後にマッチしたほう: 許可

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

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

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

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 セクションの動作方法 を参照してください。

Satisfy
ホストレベルのアクセス制御とユーザ認証との相互作用を指定
Satisfy Any|All
Satisfy All
directory
.htaccess
AuthConfig
バージョン 2.0.51 以降では Limit ディレクティブと LimitExcept ディレクティブの影響を受ける

Allow と Require の両方が使われているときの アクセスポリシーを設定します。パラメータは `All` か `Any` です。このディレクティブはある場所へのアクセスがユーザ名/パスワード とクライアントのホストのアドレスで制限されているときにのみ 役立ちます。デフォルトの動作 (`All`) はクライアントがアドレスによる アクセス制限を満たし、かつ正しいユーザ名とパスワードを入力することを 要求します。`Any` では、クライアントはホストの制限を満たすか、 正しいユーザ名とパスワードの入力をするかをすればアクセスを許可されます。 これは、ある場所をパスワードで保護するけれど、特定のアドレスからの クライアントにはパスワードの入力を要求せずにアクセスを許可する、 というようなときに使用できます。

例えば、同じネットワーク上にいる人にはウェブサイトのある部分について 無制限のアクセスを許したいけれど、外のネットワークの人には パスワードを提供させるようにするためには、次のような設定をすることが できます:

Require valid-user
Allow from 192.168.1
Satisfy Any

バージョン 2.0.51 からは Limit セクションと LimitExcept セクションを使用することで Satisfy ディレクティブが 適用されるメソッドを制限することが できるようになりました。

Allow
Require