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.2 | 2.4 |
|---|---|---|
| 全許可 | Order Deny,Allow | Require all granted |
| 全拒否 | Order Allow,Deny | Require all denied |
| ホワイトリスト(特定だけ許可) | Order Deny,Allow+Deny all+Allow X | Require 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する。