.htaccess - mod_authz_host

Allow ディレクティブ

Allow ディレクティブは、クライアントのアクセスを許可するサーバの領域を指定できます。本ディレクティブの最初の引数は常に from になります。それに続く引数は 3 つの異なる形式があります。Allow from all が指定されていれば、すべてのホストにアクセスを許可し、アクセス制限は後述する Deny ディレクティブと Order ディレクティブの設定で決まります。以下は 本ディレクティブの構文となります。

# Allow ディレクティブの構文
Allow from all|host|env=env-variable [host|env=env-variable] ...
Allow ディレクティブの構文

サーバへのアクセスを許可するには、以下のいずれかの形式で host を指定できます。

# ホスト名の一部
Allow from apache.org
Allow from .net example.edu
Allow ディレクティブの設定例

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

ホスト名を指定する方法では、パフォーマンスに影響を与えることに注意して下さい。Apache の設定では、パフォーマンスを優先するためにデフォルトの設定では DNS の逆引きを行わない設定になっています。しかし、ホスト名を指定することで逆引きの処理が発生します。そのため、リクエスト回数に比例して逆引きの処理が多くなるため、パフォーマンスが劣化します。ただし、HTTP/1.1 に対応されているブラウザであれば keep-alive 機能によって問い合わせ回数は少なくなります。次の IP アドレス指定では、逆引き処理は発生しないため、パフォーマンスに影響を与えません。

# 完全な IP アドレス
Allow from 10.1.2.3
Allow from 192.168.1.104 192.168.1.205

# IP アドレスの一部
Allow from 10.1
Allow from 10 172.20 192.168.2

# IP アドレス / ネットマスク
Allow from 10.1.0.0/255.255.0.0

# IP アドレス / CIDR ブロック
Allow from 10.1.0.0/16

# IP アドレス (IPv6)
Allow from 2001:db8::a00:20ff:fea7:ccea
Allow from 2001:db8::a00:20ff:fea7:ccea/10
Allow ディレクティブの設定例

上記の例では、完全な IP アドレス、IP アドレスの一部、ネットマスク表現、CIDR ブロック表現、IPv6 表現に一致すれば、アクセスが許可されます。

# 環境変数
SetEnvIf User-Agent ^KnockKnock/2\.0 let_me_in
Order Deny,Allow
Deny from all
Allow from env=let_me_in
Allow ディレクティブの設定例

上記の例では、user-agent の文字列が KnockKnock/2.0 で始まるブラウザのみがアクセスを許可され、他のブラウザはアクセスを拒否されます。Allow from env=env-variable が指定されていると、環境変数 env-variable が存在した場合にリクエストはアクセスを許可されます。そのため、クライアントの User-Agent、Referer、他の HTTP リクエストのヘッダなどによりアクセス許可を行うことができます。

Deny ディレクティブ

Deny ディレクティブは、クライアントのアクセスを拒否するサーバの領域を指定できます。その他は、Allow ディレクティブとまったく同じであるため、Allow ディレクティブを参照して下さい。

Order ディレクティブ

Order ディレクティブは、Allow ディレクティブと Deny ディレクティブが評価される順番を制御します。以下は 本ディレクティブの構文となります。

# Order ディレクティブの構文
Order ordering
Order ディレクティブの構文

上記の構文で ordering に指定できる設定値は以下のいずれかです。

Order ディレクティブの設定値一覧
ステータス値説明
Deny,AllowDeny ディレクティブが Allow ディレクティブの前に評価されます。アクセスはデフォルトで許可されます。Deny ディレクティブで指定した条件にマッチせず、Allow ディレクティブで指定した条件にマッチするクライアントはアクセスを許可されます。
Allow,DenyAllow ディレクティブが Deny ディレクティブの前に評価されます。アクセスはデフォルトで拒否されます。Allow ディレクティブで指定した条件にマッチせず、Deny ディレクティブで指定した条件にマッチするクライアントはアクセスを拒否されます。
Mutual-failureAllow のリストに現れて、Deny のリストに現れないホストのみがアクセスを許可されます。この順番付けは Order Allow,Deny と同じ効果を持ち、その設定の方が好ましいために非推奨となっています。

キーワードは , で分割し、間にスペースを含まないように注意しましょう。どの場合でも、Allow と Deny は、すべて評価されるということに注意してください。以下の例では、apache.org ドメインのすべてのホストはアクセスを許可され、他のすべてのホストはアクセスを拒否されます。

# Order ディレクティブの設定例
Order Deny,Allow
Deny from all
Allow from apache.org
Order ディレクティブの設定例

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

# Order ディレクティブの設定例
Order Allow,Deny
Allow from apache.org
Deny from foo.apache.org
Order ディレクティブの設定例

上記の例で Order が Deny,Allow にした場合、すべのホストにアクセスが許可されます。これは、設定ファイル中の順番に関わらず、Allow from apache.org が最後に評価され、Deny from foo.apache.org を上書きするためです。apache.org ドメインにないホストも、デフォルトの状態が allow に変化するため、アクセスを許可されます。

また、本ディレクティブの処理順について注意して下さい。例えば、<Location> セクションの Allow ディレクティブや Deny ディレクティブは、Directory セクションや .htaccess ファイルの後に評価されます。そのため、後続で評価されるディレクティブによって、設定が上書きされる場合があります。

関連記事

Category:
プログラミング
公開日:
更新日:
Pageviews:
6
Shares:
0
Tag:
.htaccess
Apache
HTTP
Server