本記事「Apacheのmod_dosdetectorでDoS対策」は3部で構成されています。
第1部:①選定
第2部:②インストールと設定
第3部:③パラメータとログ
設定と確認。最後に調整
ログチェック
# tail -f /var/log/httpd/error_log
でApacheのエラーログを見つつ、F5アタックをかけると。。。
[Wed Jan 28 23:16:33 2015] [notice] dosdetector: 'クライアントIPアドレス' is suspected as DoS attack! (counter: 101) [Wed Jan 28 23:16:39 2015] [notice] dosdetector: 'クライアントIPアドレス' is suspected as Hard DoS attack! (counter: 301)
と出力。
1行目と2行目で、2段階で検出されています。
さらにアタック中のページは503が表示されました。
設定したパラメータの解説
mod_dosdetectorで指定できるパラメータ
パラメータ名 | 概要 | 値 |
DoSDetection | 検出を有効にする | on/off |
DoSPeriod | 閾値を検出する判定間隔。この指定時間の間のアクセス数をカウントして判定する | 秒 |
DoSThreshold | 第1段階の閾値(アクセス数)。閾値を超えると環境変数「SuspectDoS」が設定される。 | アクセス数 |
DoSHardThreshold | 第2段階の閾値(アクセス数)。閾値を超えると環境変数「SuspectHardDoS」が設定される。 | アクセス数 |
DoSBanPeriod | ブラックリストの保持時間。この時間を経過後、フラグは一旦クリアされる | 秒 |
DoSTableSize | 共有メモリサイズ(保持するIPアドレスの数) | IPアドレス数 |
DoSIgnoreContentType | DoS判定の対象外とするContentType | MIME Type |
DoSIgnoreIpRange | DoS判定対象外とするIPアドレス | サブネット/サブネットマスク。サブネット/サブネットマスク(短縮表記)。IPアドレスで記述可。※1 |
※1 記載例
192.168.1.0/255.255.255.0 192.168.1.0/24 192.168.1.1
複数併記も可能
DoSIgnoreIpRange 192.168.1.1 DoSIgnoreIpRange 192.168.1.2 DoSIgnoreIpRange 192.168.1.3
設定例
----ここから--- DoSDetection on DoSPeriod 1 ←1秒間に DoSThreshold 100 ←100回アクセスがあったら「SuspectDoS」フラグオン DoSHardThreshold 300 ←300回アクセスがあったら「SuspectHardDoS」フラグオン DoSBanPeriod 30 ←フラグオンされたら30秒間ブラックリストに保持 DoSShmemName dosshm ←クライアントの情報を保持する共有メモリ名。何でもよい。書かなくてもいい。 DoSTableSize 500 ←500個までIPアドレスをテーブルに保持する。 DoSIgnoreContentType image|javascript|css|application/json ←「Webページに対するアクセス数」をカウントしたいので、html以外は除外してもいいので除外。 DoSIgnoreIpRange 127.0.0.1 ←ローカルホストからabコマンドを使用する要件があったので追加。 DoSIgnoreIpRange 自分のIPアドレス ←上記と同じ。自分からのアクセスは除外する。 ----ここまで---
検出にひっかかったIPアドレスは、
フラグに従って任意のページにリダイレクトさせる
----ここから--- RewriteEngine On ←リダイレクト有効 ############################### # Dos Detector ############################### RewriteCond %{ENV:SuspectHardDoS} =1 ←「SuspectHardDoS」フラグがオンだったら RewriteRule ^.*$ - [R=503,L] ←503にリダイレクト。URLは変えない。 RewriteCond %{ENV:SuspectDoS} =1 ←「SuspectDoS」フラグがオンだったら RewriteRule ^.*$ - [R=503,L] ←503にリダイレクト。URLは変えない。 ----ここまで---
ポイントはSuspectHardDoSを先に書くこと。
SuspectHardDoSがオンになっているということはSuspectDoSもオンになっているので
SuspectDoSのリダイレクト設定が先にあると、SuspectHardDoSにたどりつかない
考えればわかることなのですが、気持ち的にHardを後ろに書きたくなる。うっかり逆に書いてHardが検出されないなー??なんてことアリマシタ。。。
ここでは両方とも503リダイレクトですが
mod_rewriteモジュールで好みのリダイレクト設定が可能です。
最終調整
あとは検出状況に合わせて
DoSPeriod 1 ←1秒間に DoSThreshold 100 ←100回アクセスがあったら「SuspectDoS」フラグオン DoSHardThreshold 300 ←300回アクセスがあったら「SuspectHardDoS」フラグオン DoSBanPeriod 30 ←フラグオンされたら30秒間ブラックリストに保持
ここらへんを調整します。
設定の反映はgracefulで有効可能です。
ここまで3回に渡り「mod_dosdetector」に書かせていただきました。
最初のけしからんIPからのけしからんアクセスによって奪われていた睡眠時間を
取り戻すことができ、平和な日々を送れるようになりました。
本記事「Apacheのmod_dosdetectorでDoS対策」は3部で構成されています。
第1部:①選定
第2部:②インストールと設定
第3部:③パラメータとログ