TOP

基本的なセキュリティ

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で上書き





TOPへ