February 11(Sat), 2012
■[etc] Apacheでアクセス制限をする
Apacheでアクセス制限をしようと頑張った結果こうなりました.
1. やりたいこと
私がやりたかったのは以下のことです.
ここでのアクセス制限とは,192.168.0.0/24なら自由にアクセスできる,ただしそれ以外の場合はBASIC認証が必要というやつです.
また,/docroot/{foo,bar}は指定した拡張子(ここでは.htmlと.php)のみ外部から参照できます.
2. 勘違いしてたこと
アクセス制限がホスト制限と認証しかないということです.
<Directory>とか<Files>とかはただ単にその2種類の制限を操作するかどうかのif文でしかなかった,というのに気付くのにえらい時間がかかってしまいました.
3. アクセス制限書く
<Directory /docroot> Order Deny,Allow Deny from All Allow from 192.168.0.0/24 AuthUserFile /path2pass AuthName "Nyan" AuthType Basic require valid-user Satisfy Any </Directory>
4. 拡張子の制限を書く
<Directory /docroot/foo>
<Files "*">
Order Deny,Allow
Deny from All
Satisfy All
</Files>
<Files "">
Order Deny,Allow
Allow from All
Satisfy Any
</Files>
<FilesMatch "\.(html|php)$">
Order Deny,Allow
Allow from All
Satisfy Any
</FilesMatch>
</Directory>
<Files>と<FilesMatch>は同時に適用&上書きされるらしいのでこう書きました.
ちなみに,""はttp://example.com/foo/の様にDirectoryIndexを省略した時用です.
5. モウヒトコエ
ただし上記のままではttp://example.com/fooの様に最後にバックスラッシュが付いていない場合にアクセスできません.
なぜなら<Files "*">にfooとしてマッチしてしまうからです.
そこで,<Files "*">を<Files "^(((([^f]*)*(f+[^o][^f]*)*)*)*(f+[^o][^f]*)*)*$">にしてもいいのですが,よくわからないのでfooを許可します.
<Files "foo">
Order Deny,Allow
Allow from All
Satisfy Any
</Files>
6. 最後に
これだとttp://example.com/fooでアクセスできますが,ttp://example.com/foo/fooにもアクセスできてしまいます.
なので,次のやつを書きました.
<Location /foo/foo> Order Deny,Allow Deny from All Satisfy All </Location>
<Location>は<Files>の後に評価されるので上書きされてアクセスが禁止されます.
これでだいたいうごくとおもいます.
ちゃんと動いていなかったり,もっと上手い方法がある,まちがってる,とか教えていただけるとうれしいです.
mod_rewriteとかでできそう?
あと,私が実際にやった環境ではVirtualHostがからんでたりするのでちょっと違うかもしれないです.
7. 関係ないこと
httpd.confを0から書くというのをやってみたらおもしろかったです.
Apache3.0になるとこの辺をもっときれいに書けるみたい?
参考書:Apache公式サイト
Apacheセキュリティ
Apacheクックブック
- 5 http://t.co/RNxqVOKE
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cts=1331747752994&ved=0CCkQFjAA&url=http://d.hatena.ne.jp/graighle/&ei=k9tgT5qXM63JmAXxiqmfCA&usg=AFQjCNHdFgO-N6jko8ss5ajNRrtOBT2lNw
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=24&ved=0CD4QFjADOBQ&url=http://d.hatena.ne.jp/graighle/20120211/1328976217&ei=IIZpT8vBIOjnmAW2mYCPCQ&usg=AFQjCNG0azlmDYjsQikkR38WYxUDv1L1CQ
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0CEMQFjAC&url=http://d.hatena.ne.jp/graighle/?of=7&ctbs=lr:lang_1ja&ei=FEhrT_f3I8fEmAWMkuzFBg&usg=AFQjCNFYEScEgxp3BKXLjDbvABzu5iE2WA&sig2=CpgcOTkOmbKBWGuXH_x8vg
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=_ITERATOR_DEBUG_LEVEL&source=web&cd=37&ved=0CFcQFjAGOB4&url=http://d.hatena.ne.jp/graighle/?of=7&ei=P75dT9PONKT2mAWNopGrDw&usg=AFQjCNFYEScEgxp3BKXLjDbvABzu5iE2WA
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=apache アクセス制限&source=web&cd=2&ved=0CDoQFjAB&url=http://d.hatena.ne.jp/graighle/20120211/1328976217&ctbs=qdr:y&ei=CGdpT77TN-OgmQXb2K3mCA&usg=AFQjCNG0az
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=files satisfy any&source=web&cd=12&ved=0CDUQFjABOAo&url=http://d.hatena.ne.jp/graighle/20120211/1328976217&ei=WhmhT5uRIoXZiQK_0PmMAg&usg=AFQjCNG0azlmDYjsQikkR38WYxUDv1L1CQ&cad=rja
- 2 http://www.google.com/search
- 1 http://d.hatena.ne.jp/
- 1 http://d.hatena.ne.jp/keyword/BASIC認証