IP アドレスによるアクセス制限
IP アドレスは、クライアント/サーバー型の HTTP リレーションシップを確立するための一要素だ。送信中
に変更
することはできないし、ネットワーク システムへ割り込む協力者なしには偽装するのは難しいので、非任意制
御とみな
されている。そのため、Apache のディストリビューションには、mod_access などのアクセス制
限用モ
ジュールが含まれている。
mod_access モジュールを使えば、アクセスを許可/拒絶するドメインやアドレス、および 2
つのリ
スト (許可と拒絶) が評価される順序を指定することができる。Allow と Deny
指示子
の基本的な構文を以下に示す。
Allow from host-or-network
host-or-network に指定できるのは次のようなものだ。
- ホストまたはドメイン名 (
www.foo.com)
- IP アドレス (
10.0.72.3)
- IP アドレスとサブネット マスク (
10.0.0.0/255.0.0.0)
- IP アドレスと CIDR マスク サイズ (
10.73.128.0/18)
できれば常にドメイン名ではなく IP アドレスを使うほうがいい。ドメイン名を使用すると、Apache サー
バーはそ
れをクライアントの IP アドレスへ変換するために二重逆引きを行う必要があるからだ。(二重逆引きとは、セ
キュリテ
ィに関連した状況でホスト名を扱う際に、Apache が常に行う作業だ。名前をいったん IP アドレスへ
変換して
、それをまた名前へ戻す。この双方向の変換がうまくいかなかったら、Apache はホスト/ドメイン名の一致に
失敗した
とみなす。)
他にも Allow および Deny 指示子を使った指定方法がある。「
from env=[!]envariable-name」を使えば、環境変数の有無をもとにして可/不可の決定
ができるのだ。環境変数はサーバー全体の環境に対して設定することもできるし、mod_setenvif
のよ
うなモジュールを使えば、各要求に対して設定することもできる。
Order 指示子は、Allow および Deny 指示子のリストが並んで
いる
場合に、その解釈方法を制御する。順序が Allow,Deny (キーワードの間にはスペースを入れて
はいけ
ない!) の場合、初期状態は Deny from All と同じであり、Allow の条件
リストが処理された後、Deny の条件リストが処理される。Order Deny,Allow は
その逆で、初期状態では「すべて許可」 であり、Deny の条件リストが処理された後、
Allow の条件リストが処理される。
デフォルトの状態を覚えておくための簡単な方法は、それが最後のキーワードと一致するということを思い
出せばい
い。つまり、Deny,Allow は「許可」で、Allow,Deny は「拒否」となる。
Order 指示子の設定には、もう 1 つある。mutual-failure だ。このキーワー
ドで
は「デフォルトの状態」がない。アクセスが許可されるクライアントは、どの Deny 指
示子に
もなく、少なくとも 1 つの Allow 指示子にある必要がある。
ユーザー認証による制限
保護されたページへの訪問者はユーザー名とパスワードを入力する必要があるように設定する場合は、
mod_auth モジュールが役に立つ。これは、任意制御モジュールの中でも、もっともシンプルで
簡単に
使えるものの 1 つだ。
アクセス制御を確立する上で重要な指示子は、認証データベースの場所の定義と承認されたユ
ーザー
の確認に関するものだ。mod_auth モジュールでは、それらの指示子は
AuthUserFile
と Require だ。他のモジュールにも同様の役割を持つ指示子がある。
AuthUserFile 指示子は、フルパスで指定したファイル名をとる (例:
/home/foo/.htpasswd-foo)。これは、現在の保護領域でモジュールが使用するテキスト形式の認
証フ
ァイルの場所を指定するものだ。パスの省略形や相対パスによるファイル指定は許可されていない。
Require 指示子は、実は mod_auth に特有なものというよりはコア サーバー
の一
部であり、<http://www.apache.org/docs/mod/core.h
tml#require>に説明されている。Require については、次のセクションでもう少し
詳しく
説明する。
次は
ラベルと継承
>>