Apache モジュール mod_access_compat
ホストによるアクセス制限とパスワードによる認証を、 同時に組み合わせて使うこともできます。 この場合、その二つの制限の関係を指定するために
が提供するディレクティブは、 承認の仕組みの一新に伴い、非推奨になったものです。 modaccesscompat
など) に適用されます。そして、ほとんどの場合これが望ましい動作です。 しかし、
Allow from all|host|env=[!]env-variable [host|env=[!]env-variable] ...
ディレクティブは、どのホストが サーバのある領域にアクセスできるかに影響を与えます。 アクセスはホスト名、IP アドレス、IP アドレスの範囲や、 環境変数などのクライアントのリクエストの 特徴に基づいてアクセス制御することができます。
です。 それに続く引数は三つの違った形式があります。 Allow from all
ディレクティブの設定で決まります。 特定のホストやホスト群にのみサーバへのアクセスを許可するためには、 以下のどれかの形式で Orderhost を指定することができます:
Allow from .net example.edu
この文字列に合うか、これで終わる名前のホストのアクセスが許可されます。 各部分が完全に合うものだけに適用されますので、上の例は foo.apache.org
にはマッチしません。 この設定をすると、Apache は
の設定に関わらず、クライアントの IP アドレスに対して DNS の 2 重逆引きを行ないます。 ホスト名からオリジナルの IP アドレスを順引きします。 順引きと逆引きが一致し、ホスト名が該当した場合にのみ、 アクセスが許可されます。HostnameLookups
Allow from 192.168.1.104 192.168.1.205
Allow from 10 172.20 192.168.2
Allow from 10.1.0.0/255.255.0.0
ネットワーク a.b.c.d とネットマスク w.x.y.z です。 より細粒度のサブネット制限用です。
ネットマスクが nnn の上位ビットが 1 となっているものからなること以外は前のものと同じです。
IPv6 アドレスと IPv6 のサブネットは以下のように指定できます:
Allow from 2001:db8::a00:20ff:fea7:ccea
ディレクティブの引数の三つ目の形式は、 環境変数 の存在によりアクセスの制御を行なえるようにするものです。 Allow from env=
が指定されていると、環境変数 env-variableenv-variable が存在した場合にリクエストはアクセスを許可されます。 Allow from env=!
が指定されていると、環境変数 env-variableenv-variable が存在しない場合にアクセス許可されます。 サーバは
のディレクティブにより、クライアントのリクエスト の特徴に基づいて柔軟に環境変数を設定する機能を提供します。 ですから、このディレクティブはクライアントの mod_setenvifUser-Agent
や他の HTTP リクエストのヘッダフィールドなどに基づいて アクセス許可をするために使うことができます。
SetEnvIf User-Agent ^KnockKnock/2\.0 letmein
このディレクティブはホスト名、IP アドレス、環境変数に基づいてサーバへのアクセスを制限します。 Deny
ディレクティブが適用されます。どれにもマッチしなかった場合、この時点で リクエストは拒否されます。次に、全ての Deny
ディレクティブが適用されます。どれか一つでもマッチした場合は、 リクエストは拒否されます。 最後に、 Allow
にもマッチしなかったリクエストは デフォルト設定が適用されるので拒否されます。Deny,Allow
にもマッチしないリクエストは 許可されます。Mutual-failure
と全く同じ効果を持ち、 そのため非推奨となっています。 キーワードの間に置けるのはコンマだけです。 間に空白があってはいけません。
| マッチ | Allow,Deny 時の結果 | Deny,Allow 時の結果 | |---|---|---| | Allow だけにマッチ | 許可 | 許可 | | Deny だけにマッチ | 拒否 | 拒否 | | どちらにもマッチしない | 2番目のディレクティブがデフォルト: 拒否 | 2番目のディレクティブがデフォルト: 許可 | | Allow と Deny 両方にマッチ | 最後にマッチしたほう: 拒否 | 最後にマッチしたほう: 許可 |
以下の例では、apache.org ドメインのすべてのホストはアクセスを許可されます。 他のすべてのホストはアクセスを拒否されます。
の両方が使われているときの アクセスポリシーを設定します。パラメータは RequireAll
です。このディレクティブはある場所へのアクセスがユーザ名/パスワード とクライアントのホストのアドレスで制限されているときにのみ 役立ちます。デフォルトの動作 (All
) はクライアントがアドレスによる アクセス制限を満たし、かつ正しいユーザ名とパスワードを入力することを 要求します。Any
では、クライアントはホストの制限を満たすか、 正しいユーザ名とパスワードの入力をするかをすればアクセスを許可されます。 これは、ある場所をパスワードで保護するけれど、特定のアドレスからの クライアントにはパスワードの入力を要求せずにアクセスを許可する、 というようなときに使用できます。
例えば、同じネットワーク上にいる人にはウェブサイトのある部分について 無制限のアクセスを許したいけれど、外のネットワークの人には パスワードを提供させるようにするためには、次のような設定をすることが できます:
バージョン 2.0.51 からは
モジュール | ディレクティブ | FAQ | 用語 | サイトマップ
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_authz_host
概要
mod_access_compat により提供されるディレクティブは サーバの特定の部分への アクセスを制御するために <Directory>, <Files>, <Location> と .htaccess ファイルで使用されます。クライアントのホスト名、IP アドレスや、環境変数などのリクエストの特徴に基づいて アクセス制御を行なうことができます。Allow と Deny ディレクティブを使って、 どのようなクライアントにアクセスを 許可する、しないを指定します。また Order ディレクティブを使って、 デフォルトのアクセス状態と、 Allow ディレクティブと Deny ディレクティブとのお互いへの影響の仕方を設定します。
mod_access_compat
<directory></directory>
<files></files>
Allow
Order ディレクティブは Allow ディレクティブとDeny と共に"3段階アクセス制御システム" を制御します。第1段階目では Order ディレクティブで1番目に 指定したディレクティブ(Allow または Deny)を全て処理します。 第2段階目で、残りのディレクティブ(Deny または Allow) を全て処理します。第3段階目で、第1段階目と第2段階目で マッチしなかったリクエストを処理します。
Allow
全ての Allow と Deny が処理され、結局のところ最後にマッチ した条件が有効となることに注意してください。これは最初にマッチした条件だけが有効 となる、典型的なファイアウォールの動作とは異なっています。 また、設定ファイルに書く順番には意味はありません。Allow 行は全部一つのグループとして扱われ、 Deny 行はもう一つのグループとみなされます。 またデフォルト状態は単独で一つのグループとみなされます。
Deny
次の例では、foo.apache.org サブドメインにあるホスト以外の、 apache.org ドメインのすべてのホストがアクセスを許可されます。 apache.org ドメインでないホストは、デフォルトの状態が Deny のため、 サーバへのアクセスを拒否されます。
Allow
一方、上の例の Order が Deny,Allow に変わっていれば、すべのホストにアクセスが許可されます。 これは、設定ファイル中の実際の順番に関わらず、 Allow from apache.org が最後に評価されて、 Deny from foo.apache.org を上書きするからです。 apache.org ドメインにないホストも、デフォルトの状態が Allow なので、アクセスを許可されます。
Allow
Order ディレクティブはデフォルトのアクセスの状態に影響を与えるので、 Allow ディレクティブと Deny ディレクティブが無くても、サーバのアクセスに影響を与えることができます。 たとえば、
Deny
はデフォルトのアクセス状態が Deny になるため、 /www ディレクトリへのすべてのアクセスを拒否します。
Order ディレクティブはサーバの設定処理の各段階でだけ アクセスディレクティブの処理の順番を変更します。これは、たとえば、 Order ディレクティブの設定に関わらず、