タグ別アーカイブ: DoS対策

ApacheをDoS攻撃(田代砲)から守るための対策モジュール「mod_evasive」

Apache1.3~2.xでDoS対策をするためのモジュール「mod_evasive」。
バージョンによりインストール方法が違うので、ファイル同梱のREADMEを参照されたし。

Linux(ここではRedHat系ディストリ)+Apache 2.x系での導入方法は以下の通り。
※その前に、http-develをインストールしておくこと。

1.インストール

・epelレポジトリからインストールする場合

sudo rpm -Uvh http://ftp.riken.jp/Linux/fedora/epel/epel-release-latest-7.noarch.rpm
sudo yum --enablerepo=epel install mod_evasive

・ソースからコンパイルする場合

wget http://www.zdziarski.com/blog/wp-content/uploads/2010/02/mod_evasive_1.10.1.tar.gz
tar xvzf mod_evasive_1.10.1.tar.gz
cd mod_evasive_1.10.1
#Apache2.4系は「mod_evasive20.c」内の文字列「remote_ip」を「client_ip」に変換してください。
sudo apxs -iac mod_evasive20.c
sudo chmod 755 /usr/lib64/httpd/modules/mod_evasive20.so

※ Windows版のDLLライブラリは現在行方不明です(´・ω・`)

2.Apacheのコンフィグにモジュールを追加する

#sudo vi /etc/httpd/conf/httpd.conf
#Windowsでは「.so」を「.dll」に置換
LoadModule evasive20_module modules/mod_evasive20.so

3.コンフィグ作成

#sudo vi /etc/httpd/conf.d/mod_evasive.conf
DOSHashTableSize 4096
DOSPageCount 3
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 5
DOSBlockingPeriod 30
DOSLogDir /var/log/httpd/mod_evasive

※コンフィグ内訳:

DOSHashTableSize → ハッシュテーブルのサイズ
DOSPageCount   → 同一ページへのリクエスト数
DOSSiteCount   → 同一サイトへのリクエスト数
DOSPageInterval  → DOSPageCount値の計測間隔(秒)
DOSSiteInterval  → DOSSiteCount値の計測間隔(秒)
DOSBlockingPeriod → アクセス禁止時間(秒)
DOSEmailNotify  → メール通知先
DOSSystemCommand → ブラックリストに乗ったときにコマンドを起こす
DOSLogDir     → DOSのログ、デフォは/tmp
DOSWhitelist   → モジュールから除外するIP。複数指定可

以上の設定例では、同一のユーザから
同一ページへ3回以上/1秒のアクセス、またはサイトへ50回以上/5秒のアクセスがあった場合に、30秒間アクセスを弾きます。
その際ユーザへ送られるHTTPリクエストは、403 Forbiddenとなります。
abコマンドで負荷テストをするなりして、いい具合に設定しましょう( ^ヮ^)ノ

4.Apache再起動

sudo systemctl restart httpd

実はもうひとつ、似たようなモジュールがありまして。
5年以上前に(株)はてなのエンジニアさんが作った「mod_dosdetector」なる中級者向けのそれ。
DoS判定が立つと、Apacheのリライトルールに使用できる環境変数が発生し
同じくリライトルールでアクセス対応をする。といった代物。
コンフィグは、mod_evasiveと似たり寄ったりです。
http://www.trajectory.jp/tech/server/dosdetector.php