Groove Labo
  • Home
  • About

カテゴリー

  • Active Directory (1)
  • FastCGI (2)
  • IIS (2)
  • javascript (5)
  • kickstart (1)
  • MySQL (3)
  • PHP (2)
    • CakePHP (1)
  • postfix (1)
  • Python (7)
  • Ruby on Rails (3)
  • Trac (5)
  • Webサーバー (4)
    • Apache (2)
    • lighttpd (1)
    • pound (1)
    • proxy (1)
  • はじめまして (1)
  • サーバーインフラ (6)
    • Amazon EC2 (2)
    • ZABBIX (3)
  • ソフトウェア開発 (12)
    • テスト (4)
  • ツール (9)
    • backup (1)
    • capistrano (1)
    • CMS (2)
    • couchdb (2)
    • MODx (2)
    • rsync (1)
    • tiddlywiki (1)
    • Wiki (2)
  • デザイン (1)
  • プロジェクト管理 (7)
  • 仮想環境 (5)
    • EC2 (1)
    • VMware (1)
    • Xen (3)
  • 読書 (3)

最近の投稿

  • Railsのdatetime_selectの保存の仕組みを調べてみる
  • [メモ] CentOS5 にkeepalived を設定する
  • ドッグフードを食べる – BTS & SCM
  • CakePHP で連結テーブルのモデルは先に宣言すること
  • ActiveRecord の conditions を作成するためのクラスを作ってみた

Twitter

  • blog: Trac : プラグイン一覧 http://blog.ciklone.com/2010/08/15/trac-%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e4%b8%80%e8%a6%a7/ 2010-08-25
  • blog: Trac プラグイン : Awesome Attachments Plugin http://bit.ly/aR3AXc 2010-08-25
  • blog: 機能紹介「ダッシュボード」 http://bit.ly/csA7pU 2010-07-01
  • More updates...

Powered by Twitter Tools

ブログロール

  • Cubo
  • OpenGroove
  • zeera document search
  • zeera document search 診断
mod_dosdetector でDoS対策
投稿日 2009年11月18日 水曜日 カテゴリ Apache 投稿者 sugimotoコメントは受け付けていません。 

sugimotoです。

Apache のDoS対策として mod_dosdetector を使ったのでメモです。

1. mod_dosdetector の設定

インストールの方法などは「dos対策のmod_dosdetectorで特定のContentTypeは、対象外にする方法」というBlogがあったので参考にしました。

設定の書き方もいろいろなサイトに載っていましたが、静的ファイルをアクセス回数の対象外にする方法が正しくないところが多いようです。

静的ファイルの除外は DoSIgnoreContentType ディレクティブで設定しますが、

<IfModule dosdetector_module>
    ... 省略 ...
    DoSIgnoreContentType .(js|png|jpe?g|gif|css|ico)
</IfModule>

のような設定をしてテストしたところ、設定追加前と同じ回数でDoS判定されてしまいました。

このディレクティブは名前の通り Content-Type を設定するのが正しいので、次のように静的ファイルの Content-Type を設定すると正しく認識されました。

<IfModule dosdetector_module>
    ... 省略 ...
    DoSIgnoreContentType ^(image/|application/|text/javascript|text/css)
</IfModule>

2. 利用可能なディレクティブ

利用可能なすべてのディレクティブは以下の通りです。

DoSDetection
DoS判定をする/しないのフラグ(On/Off)
DoSThreshold
判定の閾値 – 注意レベル(回)
DoSHardThreshold
判定の閾値 – 警告レベル(回)
DoSPeriod
DoS判定をする基準時間(秒)
DoSBanPeriod
DoS認定したクライアントを再度開放するまでの時間(秒)
DoSShmemName
クライアントを保存するために保持するシェアードメモリの名前
DoSTableSize
クライアントを保存するためのテーブルのサイズ
DoSIgnoreContentType
アクセス回数としてカウントしないContent-Typeの指定

3. DoS認定されたクライアントの処理を追加する

Apache の設定ファイルに以下の設定を追加して、DoS認定(警告レベル)となったクライアントを「403 (FORBIDDEN)」にします

    RewriteEngine On
    RewriteCond %{ENV:SuspectHardDoS} .+
    RewriteCond %{REMOTE_ADDR} !^192\.168\.1\. # ローカルネットワークからのアクセスは無視
    RewriteCond %{REMOTE_ADDR} !^xxx\.xxx\.xxx\.xxx$ # テストユーザーからのアクセスは無視
    RewriteCond %{HTTP_USER_AGENT} !Googlebot
    RewriteCond %{HTTP_USER_AGENT} !Yahoo
    RewriteRule .* – [F,L]

なお、以下の場合はDoS判定しないように設定しています

  1. 192.168.1.* : ローカルネットワークからのアクセスは監視サーバーなどの自動アクセスがあるため除外
  2. xxx.xxx.xxx.xxx : 自社オフィスなどのIPアドレスからのアクセスはテストなどで頻繁にアクセスすることがあるため、除外しました
  3. Googlebot : Googleはインデックスされないと困るので。。。除外
  4. Yahoo : Yahooもインデックスされないと困るので。。。

4. DoS対策のテスト

設定のテストは Apache Bench を使うと簡単に実行できます。

> ab -n 1000 -c 3 -k http://xxxx.ciklone.com/xxxx
  • -n 1000 : 1000アクセスする負荷テストを実行
  • -c 3 : 同時アクセス数を 3 に設定

5. その他の負荷対策モジュール

最後にその他の負荷対策モジュールについても書いておきます。

  • mod_cband : 帯域と同時接続の制限
    • mod_cband (LIN Networks)
  • mod_limitipconn : 同一IPからの同時接続を制限する
    • mod_limitipconn.c
    • 接続数/帯域制限で無法なダウンローダを撃退(4/4) - @IT
    • Apache mod_limitipconnでIPの最大接続数制限をする
  • mod_bwshare : 同一IPの帯域、接続数を制限する
    • 活動してるのか・・・.. => http://www.netnice.org/pukiwiki.php?mod_bwshare
    • 接続数/帯域制限で無法なダウンローダを撃退(3/4) - @IT
    • トラフィック制御する方法(bwshare)
  • mod_access_limit : 全アクセス数を制限?? – 活動していないかも。。
    • Apache-Users 880 mod_access_limit (アクセスリミットモジュール)

ソフトウェアエンジニアのためのバグトラッキングシステム : Ciklone

ソフトウェアエンジニアのためのバグトラッキングシステム

ソフトウェアエンジニアのためのバグトラッキングシステム

Comments are closed.

Copyright © 2004-2010 OpenGroove,Inc. All rights reserved.