Apache HTTP サーバ バージョン 2.4

Apache モジュール mod_access_compat
| 説明: | ホスト (名前もしくは IP アドレス) に基づいたグループ承認 |
|---|---|
| ステータス: | Extension |
| モジュール識別子: | access_compat_module |
| ソースファイル: | mod_access_compat.c |
| 互換性: | 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>
セクションの中にディレクティブを書くことで、
一部のメソッドにのみ制限をかけることもできます。
Allow ディレクティブ
| 説明: | サーバのある領域にアクセスできるホストを制御する |
|---|---|
| 構文: | Allow from all|host|env=[!]env-variable
[host|env=[!]env-variable] ... |
| コンテキスト: | ディレクトリ, .htaccess |
| 上書き: | Limit |
| ステータス: | Extension |
| モジュール: | mod_access_compat |
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] ... |
| コンテキスト: | ディレクトリ, .htaccess |
| 上書き: | Limit |
| ステータス: | Extension |
| モジュール: | mod_access_compat |
このディレクティブはホスト名、IP
アドレス、環境変数に基づいてサーバへのアクセスを制限します。
Deny ディレクティブの引数は Allow
ディレクティブとまったく同じです。
Order ディレクティブ
| 説明: | デフォルトのアクセス可能な状態と、Allow と
Deny が評価される順番を制御する |
|---|---|
| 構文: | Order ordering |
| デフォルト: | Order Deny,Allow |
| コンテキスト: | ディレクトリ, .htaccess |
| 上書き: | Limit |
| ステータス: | Extension |
| モジュール: | mod_access_compat |
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 |
| コンテキスト: | ディレクトリ, .htaccess |
| 上書き: | AuthConfig |
| ステータス: | Extension |
| モジュール: | mod_access_compat |
| 互換性: | バージョン 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 ディレクティブが
適用されるメソッドを制限することが
できるようになりました。


