Apache HTTP サーバ バージョン 2.4

Apache > HTTP サーバ > ドキュメンテーション > バージョン 2.4 > モジュール

# Apache モジュール mod_access_compat

翻訳済み言語: en | fr | ja

この日本語訳はすでに古くなっている 可能性があります。 最近更新された内容を見るには英語版をご覧下さい。

説明: | ホスト (名前もしくは 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>` セクションの中にディレクティブを書くことで、 一部のメソッドにのみ制限をかけることもできます。

### ディレクティブ

### Bugfix checklist

- httpd changelog
- Known issues
- Report a bug

### 参照

- `Require`
- `mod_authz_host`
- `mod_authz_core`
- コメント

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

### 参照

- `Allow`
- `Require`

翻訳済み言語: en | fr | ja

## コメント

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our mailing lists.