基本的なセキュリティ
httpd.conf 〜 その2 応用設定〜
制限の詳細設定
Directory(DirectoryMatch)、Location、Files(FilesMatch) セクションで
名前の通りファイル、ディレクトリを指定した細かい設定が可能です。
「Directory」セクション
-- 上書設定用のファイル名を指定する。(AllowOverride で許可されている場合のみ有効)
AccessFileName .htaccess
-- Directoryセクションの設定です。
-- この中で、アクセス許可等の設定を細かく指定します。
-- 有効範囲はホスト上のディレクトリで表現します。
-- デフォルトとは違いますが、下記のようにルートディレクトリは全て拒否をお勧めします。
<Directory />
Deny from all
</Directory>
-- 下位ディレクトリを指定した、設定の上書きが可能です。
<Directory "/var/www/html"> # 指定するディレクトリは、ホスト内のパスです。
Options All # Optionsディレクティブで設定可能なものを全て許可する場合
Options -FollowSymLinks # パス内にシンボリックリンクを含む場合拒否する
Options -Indexes # ブラウザでのファイル一覧の表示を無効にする
AllowOverride None # .htaccessでの設定上書きを許可する。
上書き許可内容は、(All | None | Options | Limit)などで指定する。
Order allow,deny # Allow、Denyの処理順序を指定します。
Allow from all
</Directory>
メモ:deny allowについて
上にも書きましたが、まずはルートディレクトリは拒否しておきましょう。
制御の仕方ですが、「ホワイトリスト」を作りたいのか「ブラックリスト」を作りたいのかで分ければ、
理解しやすいと思います。
例:特定のホストからのリクエストだけ許可(ホワイトリスト)
Order deny,allow
Deny from all
Allow from 192.168.0.1
例:特定のホストからのリクエストだけ拒否(ブラックリスト)
Order allow,deny
Allow from all
Deny from 192.168.0.1
こんな書き方もOK
Deny from .jp
Deny from 192.168.0.0/16
Deny from 192.168.
しかし、IPアドレス以外の制限は無駄にDNSリクエストによるサーバーリソースを消費するので、控えましょう。
拒否されると、アクセスログ・エラーログともに吐き出します。
アクセスログの例:
192.168.0.1 - - [16/Feb/2014:19:59:41 +0900] "GET / HTTP/1.1" 403 202
エラーログの例:
[Sun Feb 16 19:59:41 2014] [error] [client 192.168.0.1] client denied by server configuration: /www/docs/www.grot3.com/
「Location」セクション
-- Locaionセクションの設定です。
-- Directoryセクションと同じですが、有効範囲をURLで表現します。
<Locaion /hoge/var> # 指定するディレクトリは、URL上のパスです。
Options FollowSymLinks
AllowOverride None
</Locaion>
「Files」セクション
-- Filesセクションの設定です。
-- ファイル名を指定しますが、正規表現が使用可能です。
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</Files>
メモ:
Files、FilesMatchの使い分けと、使用例
完全一致であればFiles。正規表現の利用であればどちらでも良いが、FilesMatchが推奨されています。
.htaccessを配置した場合の有効範囲は、配置したディレクトリ以下です。
上位ディレクトリのファイルには無効です。
--完全一致
index.html という名前のファイルに対する制御であれば、以下のように書きます
<Files "index.html">
--正規表現
Filesで正規表現を使用する場合、~を付けます。FilesMatchは ~を付けません
<Files ~ "正規表現"> or <FilesMatch "正規表現">
例:
<FilesMatch "^¥.(htaccess|htpasswd)$"> … よく使う、.htaccess、.htpasswd ファイルに対する制御
<FilesMatch "^¥.ht"> … 上記は、これでも良いでしょう。
<FilesMatch "\.(gif|jpe?g|png)$"> … 一般的な画像ファイルに対する制御
※注意:正規表現にした場合はもともと部分一致ですので*の使用は不要です。
<FilesMatch ~ "a">のように記述したら、ファイル名に a を含むもの全てが対象になります。
※注意:.(ドット)の前には¥を入れて「¥.」としてください。
メモ:
処理順序:指定が被るものがあった場合、以下の順で処理されます。
後に出現するもので上書きされるため、下位が優位です。
<Directory>※正規表現でないもの
階層の浅い順(記述順序は無関係)
※同じディレクトリ指定の場合、記述順序で下にあるもので上書き
<VirtualHost>内で上書き
<DirectoryMatch>※正規表現のもの
魯irectoryの3つと同じ
<Files>、<FilesMatch>
鷲ttpd.conf内の記述順序で下にあるもので上書き
<VirtualHost>内で上書き
.htaccessで上書き