DoS攻撃対策 Apacheモジュール mod_dosdetector 導入

2021-06-18

仕事でお客様からの特定のIPアドレス帯から大量アクセスが有りサーバーが不安定になるて相談があり、
Apacheモジュールの【mod_dosdetector】を導入したのでその際の作業メモです

mod_dosdetectorは、『サーバ/インフラを支える技術』で知ったDoS攻撃判定モジュール mod_dosdetector の使い方が載っています
自分はこちらの本でそのモジュールを知りました


24時間365日サーバ/インフラを支える技術 [ 伊藤直也 ]

mod_dosdetector インストール

パッケージをダウンロードして、make, make install の一般的な流れです

# cd /usr/local/src
# wget http://ncu.dl.sourceforge.net/sourceforge/moddosdetector/mod_dosdetector-0.2.tar.gz
# tar -xzvf mod_dosdetector-0.2.tar.gz
# cd mod_dosdetector-0.2
# make
# make install

※ apachectl のパスを変更してインストールしている場合はMakefileを編集してパスを修正します

# vi /usr/local/src/mod_dosdetector-0.2/Makefile
APXS=/usr/local/apache2/bin/apxs
APACHECTL=apachectl

mod_dosdetector 設定

設定は以下のようにしました
編集箇所はhttpd.conf の最終行に追記

  • 10秒間(DoSPeriod)で20アクセス(DoSThreshold)で環境変数SuspectDoSに1をセット(Dos攻撃の疑いあり)
  • 10秒間で50アクセス(DoSThreshold)で環境変数SuspectHardDoSに1をセット
  • 10秒間(DoSBanPeriod)で対象アドレスを解除
  • クライアントの追跡記録の最大保存数(DoSTableSize)は、100
  • *.js|png|jpe?g|gif|css|ico のファイルは除外対象
# vi /usr/local/apache2/conf/httpd.conf
DoSDetection On
DoSPeriod 10
DoSThreshold 20
DoSHardThreshold 50
DoSBanPeriod 10
DoSTableSize 100
DoSIgnoreContentType .(js|png|jpe?g|gif|css|ico)

バーチャルホストごとにDoS攻撃対策ができますが、今回はバーチャルホストの設定をしていない
サーバーにインストールしたので、バーチャルホストごとに設定はしていません
編集箇所はhttpd.conf の最終行に追記

  • 環境変数SuspectHardDoSが付与されたIPは、503(ErrorDocument)のステータスを返す
  • REMOTE_ADDR,REQUEST_URI で指定したIP,URIは除外
  • ログは、logs/surugaya/dos_suspect_log に保存
# vim /etc/httpd/conf/httpd.conf
RewriteEngine On
RewriteCond %{ENV:SuspectHardDoS} =1
RewriteRule .* - [R=503,L]
RewriteCond %{REMOTE_ADDR} !127.0.0.0
RewriteCond %{REMOTE_ADDR} !192.168.0
RewriteCond %{REQUEST_URI} !^/hoge
ErrorDocument 503 "Server is busy."

LogFormat "%{SuspectHardDoS}e %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" dos_suspect
CustomLog "logs/dos_suspect_log" dos_suspect env=SuspectDoS

mod_dosdetector 設定

最後にapache を再起動して有効にします

# /etc/init.d/httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]

あとは設定したURLをブラウザで開いて「F5」連打して、503のステータスが変えればOKです

LinuxApache,CentOS 5,CentOS 6

Posted by admin