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
ディレクティブが
適用されるメソッドを制限することが
できるようになりました。