アクセス制限の記述(Order, Allow, Deny)

広告

Apacheで使われている全てのファイルを対象としてアクセスの制限を設定することが出来ます。アクセスの制限はセクションコンテナなどを使うことでディレクトリ単位やファイル単位で設定することが可能です。

※セクションコンテナについては『設定が有効な範囲を指定する(セクションコンテナ)』を参照して下さい。

例えば次のような記述方法となります。

<Directory "D:/Apache Group/Apache2.2/htdocs">
    Order allow,deny
    Allow from all
    Deny from 192.168.1.0/24
</Directory>

アクセス制限をかける場合には許可と拒否を組み合わせて記述を行って行きます。そこでまず許可と拒否の順番を設定するのが「Order」です。

例えば「全てを許可」してから「特定のアドレスを拒否」や「全てを拒否」してから「特定のアドレスを許可」などがよく使われる設定ですが、許可してから拒否なのか、拒否してから許可なのかを「Order」を使って記述します。具体的には次の通りです。

Order allow,deny     許可してから拒否
Order deny,allow     拒否してから許可

次に許可と拒否の対象を指定して行きます。許可の対象を指定するのが「Allow」、拒否の対象を指定するのが「Deny」です。記述方法は次の通りです。

Allow from 対象
Deny from 対象

対象として指定できるものには次のようなものがあります。

all

「all」を指定した場合は全てのアクセスが対象となります。「Allow from all」であれば全てのアクセスが許可されます。「Deny from all」であれば全てのアクセスが拒否されます。

IPアドレス

IPアドレスを指定した場合は、そのIPアドレスを持つクライアントからのアクセスが対象となります。「Allow from 192.168.1.1」であればIPアドレス「192.168.1.1」からのアクセスだけが許可されます。

IPアドレスの記述方法には次のようなものがあります。

192.168.1.2
192.168.1
192.168.1.0/255.255.255.0
192.168.1.0/24

1番目は個別のIPアドレスの指定です。2番目のように記述した場合は「192.168.1.0/24」と同等です。3番目と4番目はネットマスクを使った記述方法で、どちらも「192.168.1.0~192.168.1.255」のアドレスが対象となります。(※IPアドレスに関する説明は省略させて頂きます)。

ドメイン名

ドメイン名又はホスト名で指定することも可能です。アクセス元のIPアドレスを逆引きし(逆引きとはIPアドレスからホスト名を求めることです)そのIPアドレスのホスト名を取得します。そのホスト名と対象に指定したドメインやホスト名が後方一致するものが対象となります。

Allow from adminweb.jp

例えば上記のように記述した場合には、アクセス元のIPアドレスから逆引きして求めたホスト名の後ろの部分が「adminweb.jp」と一致すれば許可されます。一致するとは例えば「host1.adminweb.jp」とか「www.sub.adminweb.jp」などのように後ろから比較して一致するものです。

設定の優先順位

<Directory>を使ったディレクトリに対するアクセス制限の設定の場合は、指定したディレクトリ及び全てのサブディレクトリが対象となります。例えばサブディレクトリに対して別のアクセス制限の設定を行った場合には下位のディレクトリに対する設定によって上書きが行われていきます。

ではデフォルトの設定がどのようにされているのかを「httpd.conf」ファイルで見てみましょう。アクセス制限に関する記述だけを抜粋してみます。

<Directory />
    Order deny,allow
    Deny from all
    Satisfy all
</Directory>

<Directory "D:/Apache Group/Apache2.2/htdocs">
    Order allow,deny
    Allow from all
</Directory>

<FilesMatch "^¥.ht">
    Order allow,deny
    Deny from all
</FilesMatch>

<Directory "D:/Apache Group/Apache2.2/cgi-bin">
    Order allow,deny
    Allow from all
</Directory>

まずルートディレクトリに対して全てのアクセスを拒否に設定しています。先に記述した通りディレクトリに対してアクセス許可の設定は全てのサブディレクトリも含まれるため、ルートディレクトリに対するこの設定によってApacheに含まれる全てのファイルに対するアクセスが拒否に設定されます。

次にドキュメントルートである「htdocs」ディレクトリに対して全てのアクセスが許可に設定されています。ドキュメントルートのディレクトリ及びそのサブディレクトリは外部に公開するためのものですのでアクセスを許可しておかなければなりません。

また先に書いた通り下位のディレクトリに対する設定によって上書きされていきますのでルートディレクトリに対して設定された「全てを拒否」の設定は、ドキュメントルート以下のディレクトリに対しては「全て許可」に上書きされています。

同じく「cgi-bin」ディレクトリも全てのアクセスが許可になっています。このディレクトリにはCGIなどが置かれるディレクトリです。

FilesMatchを使って「.ht」で始まる全てのファイルに対して、全てのアクセスが拒否になっています。これは置かれているディレクトリに関わらず「.htaccess」と言うファイルは外部からアクセス出来ないようにするためです。「.htaccess」はアクセス制限を記述する特別なファイルで別途詳細に見ていきます。

( Written by Tatsuo Ikura )