Apacheのmod_dosdetectorでDoS対策~導入までの道のり ③パラメータとログ

無断転載禁止 Apacheのmod_dosdetectorでDoS対策~導入までの道のり ③パラメータとログ
pic by pixabay

本記事「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が検出されないなー??なんてことアリマシタ。。。
-shared-img-thumb-tsuruno34_TP_V

ここでは両方とも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部:③パラメータとログ