とある人気ホームページのお引越しを担当することになり、そこであがっている問題点を解決しなくてはいけなくなりました。
何かというとトップページのカウンターをぐるぐる回す人たちの対策をしないと、サーバが落ちてしまうということ。
Dos対策としては色々なモジュールが出ている様子だけれど有名なのはmod_evasiveだと思います。実際に会社に勤めてたときは実際に使用していました。しかし、画像が多いページだと、その画像を読み込んでいるだけでDos攻撃と判定されてしまって、普通のアクセスも一部が欠けるとか、css の読み込みだけ拒否されて、デザインが崩れてしまうとかという弊害も出ていました。
そこで、mod_dosdetector を試してみることにしました。これは、Dos攻撃判定から除外するMIME type を設定できるという点がとても気に入ったからです。
さらに最近は?と思ったら、とてもすごい人が改良してくれていました。
http://wp.serpere.info/archives/tag/mod_dosdetector
この情報もBlogのタグで拾えたので本当にうれしい。本家になかったREADMEやサンプルも追加してあってとても嬉しい。
http://wp.serpere.info/archives/715 ←最新の話。改造版公開
FreeBSDを使っているので、apxsは/usr/local/sbin に入っています。root 権限ならPATHも通っているので、本家のMakefileよりもスマートでした。※本家のMakefile は/usr/sbin/apxs だったので、修正が必要でした。
インストールについても、設定についても改造版を作った人のページのほうが詳しいのでそっちを見てもらったほうがいいと思います。
mod_rewriteは使用していたので問題なし。mod_setenvif も当然使えたので問題なし。
今回はVirtualhostに適用しました。Rewriteの適用範囲で自由に設定できるというのも素晴しいなぁと感心しました。リダイレクト先(というよりエラードキュメントのページ)に画像が入っていたので、RewriteRuleは多少サンプルと違う感じに書きました。もうちょっと要素が必要な場合は(xxxx)(xxxx) と増やしていく必要があるのが面倒かな。
RewriteEngine On
RewriteCond %{ENV:SuspectHardDoS} =1
RewriteRule [^(/image/warning.JPG)] – [R=503,L]ErrorDocument 503 /warning.html
追記。ディレクトリが変わってしまうと画像がやっぱり出ないので、ErrorDocumentのところを相対表記からhttp:// 付の絶対表記に。しかしこれだと、リダイレクトなのでAccessログが増えたりして、ログ解析しているようなサイトでは不便なんですよね。
そうすると、setenvif でこのwarning ページは別ログに出すとかの操作を・・・って面倒ですねー
※mod_dosdetector をmod_detectorと誤記していたことに気がついて、修正。タグも。