質問: apacheの設定でDos対策としてmod_dosdetectorを設定しましたがうまく動作しません 原因切り分けの方法についてご教授いただけますでしょうか。 環境: Red Hat Enterprise Linux Server release 6.6 (Santiago) Apache/2.4.12 (Red Hat) httpd.confに以下設定を追加 ###### ################# DoSDetection on DoSPeriod 10 DoSThreshold 20 DoSHardThreshold 20 DoSBanPeriod 30 DoSTableSize 3000 DoSIgnoreContentType image|javascript|css LogLevel alert rewrite:trace8 RewriteEngine On RewriteCond %{ENV:SuspectHardDoS} =1 RewriteRule .* - [R=503,L] ErrorDocument 503 "Server is busy.(SuspectHardDoS)" LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio CustomLog "logs/dos_suspect_log" combined RewriteCond %{ENV:SuspectDoS} =1 RewriteRule .* - [R=503,L] ErrorDocument 503 "Server is busy.(SuspectDoS)" ###### ############################################ 想定では、Topページ(ログインページ)に対して10秒間に20回以上のアクセスをされた場合、 閾値を超え"Server is busy"を表示させようとしていますが、思うように動作しません。 操作としてはIEでTopページを表示し、F5キー連打でアクセス数をあげようとしています。 原因切り分けの方法などありましたらよろしくお願いします。
回答: Apache の 2.4.Xと理解して回答します。 まず本来のこのオプションの目的はDos攻撃に対してのサーバーの挙動制限です。 このオプションが出来る事をまず理解。 1. クライアントのIPアドレス一覧を共有メモリに保持 2. IPに紐付けてアクセス数やアクセス時間を記録 3. 一定時間内のアクセス数が設定した閾値を超えたらSuspectDoSという環境変数に1をセットする さて、このオプションを正常動作させるための設定は? 貴殿は"httpd.conf"の設定を示されています。 ではそのディレクティブに関しての設定を確認します。 本オプションでは <DoSIgnoreIpRange> を用いてDoS検査の対象から除外するIP範囲を指定。 これは複数行の記述が可能です。 まあ既知のつなぐべきマシンのIPを列挙。 続いて <IncludePath/ExcludePath> DoS検査を行う対象をrequest_uriで絞り込み。 1. ExcludePath優先、ExcludePathにマッチしたらDoS検査を行わない。 2. IncludePathを次に検査、IncludePathが1つも設定されていない場合はIncludePathに / が指定されているのと同じ動作をする。 3. IncludePathが1つ以上ある場合は明示的にIncludePathに指定されたパスのみDoS検査の対象とします。 この設定は”OR”設定ですのでどれか条件が当てはまったら動作。 続いて X-Forwarded-Forに複数IPを含む場合の処理を変更します。 X-Forwarded-Forヘッダの末尾からIP候補を探します。カンマ区切りで順に取得して、IPとして無効な文字列やDoSIgnoreIpRangeに含まれるIPを除外した最初(より末尾に近い)のIPをDoS検査対象とします。 これで X-Forwarded-Forヘッダを偽装されても正しくDoS検査を行うことができます。 DoSForwardedがOnでX-Forwarded-Forが存在しない場合の処理を変更。 DoSForwardedがONの場合は、X-Forwarded-Forが存在しなければDoS検査を行わないようになってます。 詳しくは”mod_dosdetector”の設定を確認して下さい。 ここら辺が怪しいと思いましたので。