LPIC202において、Apacheのアクセス制御が出題されるため、ログにまとめる。 2.2系と2.4系の2つのルールについて出題されるので、それぞれのルールを学習して、両者の違いも把握する。 なにか具体的なサンプルをそれぞれ作成して、4つの定番パターンから学習を展開する。

2.2系のアクセス制御

全許可

後ろ=Allow がデフォルト動作。Deny 行なし → 全員許可

<Directory "/var/www/html">
    Order Deny,Allow
</Directory>

全拒否

後ろ=Deny がデフォルト動作。Allow 行なし → 全員拒否

<Directory "/var/www/html/secret">
    Order Allow,Deny
</Directory>

特定だけ許可=ホワイトリスト

まず全員拒否、後から 192.168.10.0/24 だけ許可で上書き → 該当サブネットのみアクセス可

<Directory "/var/www/html/pv">
    Order Deny,Allow
    Deny from all
    Allow from 192.168.10.0/24
</Directory>

特定だけ拒否=ブラックリスト

まず全員許可、後から 192.168.10.0/24 だけ拒否で上書き → 該当サブネットのみアクセス不可

<Directory "/var/www/html/pv">
    Order Allow,Deny
    Allow from all
    Deny from 192.168.10.0/24
</Directory>

2.4系のアクセス制御

全許可

<Directory "/var/www/html">
    Require all granted
</Directory>

全拒否

<Directory "/var/www/html/secret">
    Require all denied
</Directory> 

ホワイトリスト=特定だけ許可

<Directory "/var/www/html/pv">
    Require ip 192.168.10.0/24
</Directory>

これ一行でOK。2.2の3行(Order+Deny all+Allow X)が1行に圧縮される

ブラックリスト=特定だけ拒否

<Directory "/var/www/html/pv">
    <RequireAll>
        Require all granted
        Require not ip 192.168.10.0/24
    </RequireAll>
</Directory>

「全員許可」AND「そのIPでない」を両立 → X以外を許可 Require not ip X は単独で書けず、必ず<RequireAll>(または<RequireNone>)で囲む。

対応表:2.2系と2.4系

2.2系と2.4系統の違いをまとめると下記の対応表になる。

パターン2.22.4
全許可Order Deny,AllowRequire all granted
全拒否Order Allow,DenyRequire all denied
ホワイトリスト(特定だけ許可)Order Deny,Allow+Deny all+Allow XRequire ip X
ブラックリスト(特定だけ拒否)Order Allow,Deny+Allow all+Deny X<RequireAll> Require all granted + Require not ip X </RequireAll>

互換モジュール(mod_access_compat)

2.4 で 2.2系の Order/Allow/Deny をそのまま動かすための後方互換モジュールがmod_access_compat
字義どおり access(アクセス制御)+ compat(compatibility=互換)
2.4 で旧構文を残したいならLoadModuleする。