Apache のアクセス制御

投稿者: | 2018年2月20日

昨日、adminerの設定で<Directory>ディレクティブに触れました
その際、恥ずかしながら調べながら書いたので、自分用に内容を記載します。

アクセスコントロール

アクセスコントロールのモジュールには、従来から使われている「mod_access_compat」とバージョン2.4から採用された「mod_authz_host」があります。
※実際には、Apache 2.4でも「mod_access_compat」が組み込まれていれば、従来のアクセスコントロールが可能です

mod_access_compat

base on Apache モジュール mod_access_compat

mod_access_compatにより提供されるディレクティブはサーバの特定の部分へのアクセスを制御するために , , と.htaccessファイルで使用されます。
クライアントのホスト名、IPアドレスや、環境変数などのリクエストの特徴に基づいてアクセス制御を行なうことができます。
AllowとDenyディレクティブを使って、どのようなクライアントにアクセスを許可する、しないを指定します。
またOrderディレクティブを使って、デフォルトのアクセス状態と、AllowディレクティブとDenyディレクティブとのお互いへの影響の仕方を設定します。

ホストによるアクセス制限とパスワードによる認証を、同時に組み合わせて使うこともできます。
この場合、その二つの制限の関係を指定するためにSatisfyディレクティブを使用します。

mod_access_compatが提供するディレクティブは、承認の仕組みの一新に伴い、非推奨になったものです。mod_authz_hostも見てください。デフォルトの承認の取り扱い機能を使用するためにmod_authz_defaultモジュールもロードされなければなりません。

mod_authz_host

base on Apache Module mod_authz_host

The authorization providers implemented by mod_authz_host are registered using the Require directive. The directive can be referenced within a , , or section as well as .htaccess files to control access to particular parts of the server. Access can be controlled based on the client hostname or IP address.

mod_authz_hostによって実装される認証プロバイダは、Requireディレクティブを使用して登録されます。このディレクティブは、、またはセクションおよび.htaccessファイル内で参照して、サーバーの特定の部分へのアクセスを制御することができます。アクセスはクライアントのホスト名またはIPアドレスに基づいて制御できます。

新旧の設定方法について

以下の公式ドキュメント(Apache 2.4)がとても参考になります。

base on Upgrading to 2.4 from 2.2

In 2.4, such access control is done in the same way as other authorization checks, using the new module mod_authz_host.
The old access control idioms should be replaced by the new authentication mechanisms, although for compatibility with old configurations, the new module mod_access_compat is provided.

Mixing old directives like Order, Allow or Deny with new ones like Require is technically possible but discouraged.

2.4では、このようなアクセス制御は、新しいモジュールmod_authz_hostを使用して、他の権限チェックと同じ方法で行われます。
古い構成との互換性のために、新しいモジュールmod_access_compatが提供されていますが、古いアクセス制御イディオムは新しい認証メカニズムに置き換えてください。

Orderのような古いディレクティブと、Requireのような新しいディレクティブを混在させることは、技術的に可能ですが推奨されません。

In this example, there is no authentication and all requests are denied.
この例では、認証はなく、すべての要求は拒否されます。

2.2 configuration:
Order deny,allow
Deny from all

2.4 configuration:
Require all denied

In this example, there is no authentication and all requests are allowed.
この例では、認証はなく、すべての要求が許可されています。

2.2 configuration:
Order allow,deny
Allow from all

2.4 configuration:
Require all granted

In the following example, there is no authentication and all hosts in the example.org domain are allowed access; all other hosts are denied access.
次の例では、認証はなく、example.orgドメイン内のすべてのホストにアクセスが許可されています。他のすべてのホストはアクセスが拒否されます。

2.2 configuration:
Order Deny,Allow
Deny from all
Allow from example.org

2.4 configuration:
Require host example.org

以下も参考になります。