apacheでDos攻撃を防ぐ!

mod_dosdetectorを使う!


  • wget http://ncu.dl.sourceforge.net/sourceforge/moddosdetector/mod_dosdetector-0.2.tar.gz

  • tar xvzf mod_dosdetector-0.2.tar.gz

  • cd mod_dosdetector-0.2

  • make

  • make install



httpd.confの設定


LoadModule dosdetector_module modules/mod_dosdetector.so

DoSDetection on
DoSPeriod 5
DoSThreshold 10
DoSHardThreshold 25
DoSBanPeriod 30
DoSTableSize 100
DoSIgnoreContentType .(js|png|jpe?g|gif|css|ico)


httpd.confの設定解説


上記例は


1. 同一IPアドレスから5秒間に10回以上のアクセスがあった場合「DoS攻撃の疑いあり」と見なし、その後30秒間のアクセスに対しては環境変数 SuspectDoS をセットする(値は”1″)

2. さらに5秒間のアクセス回数が25回に達した場合、「DoS攻撃の疑い濃厚」と見なし、環境変数 SuspectHardDoS もセットする(値は”1″)

3. 初めに「DoS攻撃の疑いあり」と判定してから30秒が経過したら、次のアクセスでもう一度判定をやり直す。直近5秒のアクセスが10回を下回っていれば、疑いは晴れる


という意味。


DoSDetection
DoS判定機能の有効・無効を設定。on で有効

DoSTableSize
クライアントの追跡記録の最大保存数。
この数値を大きくし過ぎるとメモリ使用量と負荷が上昇する

DoSShmemName
クライアントの追跡記録を保存しておくための共有メモリの名前。
(設定しなくても問題なし)


※icoを次のように AddType を追加しておけば image と判定される。


AddType image/vnd.microsoft.icon .ico


DoS攻撃に対する防御設定


mod_dosdetector が行うのはあくまでも攻撃の”検出”だけなので、防御する方法はまた別に設定する必要。
「DoS攻撃の疑い濃厚」なアクセスに対してステータスコード503 + 静的なHTMLを返す場合は次のように設定(Apache 2.2 only)。


RewriteEngine On
RewriteCond %{ENV:SuspectHardDoS} =1
RewriteRule .* - [R=503,L]

ErrorDocument 503 /server_is_busy.html



最後に

ログの設定をする。これを設定しておかないときっとこのモジュールが動いてんだかなんだか分からない・・・

DoS攻撃の疑いありなアクセスを普通のログと分けて記録。


LogFormat "%{SuspectHardDoS}e %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" dos_suspect
CustomLog logs/dos_suspect_log dos_suspect env=SuspectDoS


実際に使ってみて


何故か
DoSIgnoreContentType
で指定したcontent-typeがignoreされませんでした。
ログを仕込んでみたところ、gifでもcssでもtext/plainと判断していることが分かりました。
が、AddType image/gif .gif や AddHandler image/gif .gif しても一向に現象が変わらず
困り果てていたときに、以下の改造版を使ったらうまくいった!感謝!

http://wp.serpere.info/archives/483

0 コメント: