寄稿しました。
もくじ
条件
- Amazon Linux2
- ALB配下
mod_dosdetectorのインストール
# yum install git httpd-devel gcc
# httpd -M | grep rewrite rewrite_module (shared)
# which apxs /usr/bin/apxs
# ln -s /usr/bin/apxs /usr/sbin/apxs
※Apache2.4の場合
cd /usr/local/src/ git clone https://github.com/stanaka/mod_dosdetector.git cd mod_dosdetector/ make install
※Apache2.2の場合
cd /usr/local/src/ curl -LO http://downloads.sourceforge.net/project/moddosdetector/moddosdetector/version-0.2/mod_dosdetector-0.2.tar.gz tar xzvf mod_dosdetector-0.2.tar.gz cd mod_dosdetector-0.2 make make install
ALB配下なので接続元IPを取得する
# vi /etc/httpd/conf.d/GlobalSetting.conf # ALB利用中に接続元IPを取得してログへ LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
mod_dosdetectorの設定をしよう
5秒間で60リクエストで503を返す設定を行う
# vi /etc/httpd/conf.d/mod_dosdetector.conf #LoadModule dosdetector_module /usr/lib64/httpd/modules/mod_dosdetector.so <IfModule mod_dosdetector.c> DoSDetection on # DoS攻撃判定計測時間 DoSPeriod 5 # DOS攻撃の嫌疑をかける判定計測時間の閾値 閾値を超えると変数SuspectDoSが1になる DoSThreshold 60 # DOS攻撃と確定するアクセスカウント 変数SuspectHardDoSが1になる DoSHardThreshold 60 # アクセス禁止時間 DoSBanPeriod 60 # 嫌疑をかけるIPの最大保存数 DoSTableSize 100 # X-Forwarded-For headerをIPとして扱うかどうかのチェック # ●ALB(ELB)配下ではない場合は無効化して下さい! DoSForwarded on # ホワイトリスト DoSIgnoreContentType ^(image/|application/|text/javascript|text/css) </IfModule>
# vi /etc/httpd/conf.d/mod_dosdetector_rewrite.conf ## リライトルール RewriteEngine On # for DoS attack RewriteCond %{ENV:SuspectDoS} .+ [OR] RewriteCond %{ENV:SuspectHardDoS} .+ # クラスAのローカルIPアドレス帯を全て除外 RewriteCond %{REMOTE_ADDR} !^(10\.[0-9]+\.[0-9]\.[0-9])$ # クラスBのローカルIPアドレス帯を全て除外 RewriteCond %{REMOTE_ADDR} !^(172\.(1[6-9]|2[0-9]|3[0-1])\.[0-9]+\.[0-9]+)$ # クラスCのローカルIPアドレス帯を全て除外 RewriteCond %{REMOTE_ADDR} !^(192\.168\.[0-9]+\.[0-9]+)$ # 対クローラー排除 RewriteCond %{HTTP_USER_AGENT} !(google|yahoo|msn|bing) [NC] RewriteRule .* - [R=503,L]
# vi /etc/httpd/conf.d/example.net <VirtualHost *:80> ServerAdmin root ServerName example.net DocumentRoot /var/www/vhost/example.net/httpdocs/ #※ 下記を追加して下さい-------------------------------------- <IfModule mod_rewrite.c> Include /etc/httpd/conf.d/mod_dosdetector_rewrite.conf </IfModule> #※ ここまで-------------------------------------------------- </VirtualHost>
設定の反映
httpd -t systemctl restart httpd
F5を行って60リクエストで503が返ってきたら成功
ログを確認
# tail -f /var/log/httpd/error_log | grep dosdetector [Mon Feb 18 15:01:39.414772 2019] [so:warn] [pid 3996] AH01574: module dosdetector_module is already loaded, skipping [Mon Feb 18 15:01:53.625046 2019] [:notice] [pid 3997] dosdetector: 'xxx.xxx.xxx.xxx' is suspected as DoS attack! (counter: 16) [Mon Feb 18 15:01:54.458100 2019] [:notice] [pid 4045] dosdetector: 'xxx.xxx.xxx.xxx' is suspected as Hard DoS attack! (counter: 21)