セキュリティ対策(アクセス制限)

現状使用している環境(Apache2.4)でファイル単位での細かなアクセス制限を設定するには,Order/Allow/Denyディレクティブを利用する方法がある。しかしApache 2.2 以前にアクセス制限を行うために使用していたディレクティブなのでApache 2.4 では非推奨となっているらしいが,モジュールを組み込むことで利用可能となる。
そのモジュールがhttpd.conf ファイル内にコメントで記載されている。
それをコメントアウトしてモジュールを読み込むことでOrder/Allow/Denyディレクティブが利用可能となる。下記の#を削除してコメントアウトする。

#LoadModule access_compat_module modules/mod_access_compat.so

実際の使用方法についてメモる。
記載できる場所は「Directory」と「 .htaccess」のみ。「 .htaccess」に記載の場合はAllowOverrideであらかじめ指定許可が必要。
記載方法の基本はOrder/Allow/Denyの3つを1セットとして記載する。
まず Order で許可と拒否の順番を指定。①と②でそれぞれの条件で記す。

① Order Allow,Deny     許可してから拒否
② Order Deny,Allow     拒否してから許可

①の「許可してから拒否」は,不特定多数は許可して,一部特定されたアクセスは拒否する。
②の「拒否してから許可」は,不特定多数は拒否して,一部特定されたアクセスは許可する。
次に指定するのは上記「Order」記載の1番目のパラメータAllow又はDenyを指定した条件

① Allow from all     全て許可
② Deny from all      全て拒否

上記の条件は一例としてall指定しているが,他の条件も指定できる。
次に指定するのは上記の条件のただし書きとしての条件を指定する。

① Deny from xxx.xxx.xxx     ただしxxx.xxx.xxxからのアクセスは拒否
② Allow from xxx.xxx.xxx    ただしxxx.xxx.xxxからのアクセスは許可

xxx.xxx.xxxはipアドレスをイメージしているが,ドメインでのアクセス制限もできる。

<Files ~ "\.(gif|png|jpg|jpeg|php)$">
SetEnvIf Referer "^https://ドメイン名" allow_ref
order deny,allow
deny from all
allow from env=allow_ref
</Files>

上記指定は指定したドメインに画像フアイルを直接url指定でアクセス許可する。
通常のページ閲覧には影響しない。直リンクでのアクセスのみ制限。
#1の<Files ~で画像フアイルを指定
#2のSetEnvIfでドメイン指定
#5のallow fromで#2のドメインに許可を与える。
  #2の末尾で指定したallow_ref(任意の文字列)を#5のenv=allow_refで指定。
この設定をファイ名「.htaccess」として制限をしたいフォルダーに配置する。
配置したフォルダーと配下の子フォルダー以下に制限が掛かる。

上記の古い記載方法ではApache2.4のエラーログで [access_compat:error] が出ることがある。
Apache 2.4 では非推奨なので,今後は下記の記載に変更が必要。

Apache 2.4以降の記載例
  2.4は基本アクセス禁止なので許可のみ定義

<Files ~ "\.(gif|png|jpg|jpeg|php)$">
SetEnvIf Referer "^https://ドメイン名" allow_ref
Require env allow_ref
</Files>

検索エンジンの許可を追加

<Files ~ "\.(gif|png|jpg|jpeg|php)$">
## 関連サイトを許可
SetEnvIf Referer "^https://ドメイン名" chk_url
## アナリティクス用
SetEnvIf Referer "^http://google" chk_url
SetEnvIf Referer "^https://google" chk_url
SetEnvIf User-Agent "Google-Site-Verification" allowbot
## 検索エンジンをまとめて許可
SetEnvIf User-Agent "Googlebot" allowbot
SetEnvIf User-Agent "msnbot" allowbot
SetEnvIf User-Agent "bingbot" allowbot
SetEnvIf User-Agent "Slurp" allowbot
## 
Require env chk_url
Require env allowbot
</Files>

この「.htaccess」ファイルは配置したフォルダー以下に有効となる。