CentOS7、Apache2.4の環境で
Dos攻撃に対処するための mod_dosdetectorを導入する方法です。
ネット上で導入サンプル記事は たくさんあるのですが、どうしてもmod_dosdetectorが動かず。いくつかの情報を合わせ、動きましたので、まとめました。
インストール
オリジナルのhttps://github.com/stanaka/mod_dosdetector では、Apache2.4に未対応のため、そこからForkして作成されたmod_dosdetector-forkをインストールします。
◆ダウンロード/インストール
1 2 3 4 5 |
$ cd /usr/local/src $ git clone git://github.com/tkyk/mod_dosdetector-fork.git $ cd mod_dosdetector-fork $ make $ make install |
◆設定ファイルのサンプルをコピーして配置
$ cp dosdetector-sample.conf /etc/httpd/conf.d/dosdetector.conf
◆設定
$ vi /etc/httpd/conf.d/dosdetector.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# Usualy apxs will add this line automatically in httpd.conf LoadModule dosdetector_module modules/mod_dosdetector.so # Exclude images, stylesheets and javascript files <IfModule setenvif_module> SetEnvIf Request_URI "\.(gif|jpe?g|ico|js|css|png)$" NoCheckDoS </IfModule> # Mod_DoSDetector configuration DoSDetection on DoSPeriod 10 DoSThreshold 50 DoSHardThreshold 100 DoSBanPeriod 600 DoSTableSize 100 # If you want to use named shared memory, uncommet this line. DoSShmemName mod_dosdetector #<IfModule !setenvif_module> # DoSIgnoreContentType image|javascript|css #</IfModule> # You can customize mutex configuration by Mutex directive. #Mutex flock:/var/run/httpd dosdetector-shm # You can log requests which are suspected to be DoS attacks #LogFormat "%{SuspectHardDoS}e %a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" dosdetector #CustomLog logs/dos_suspect_log dosdetector env=SuspectDoS # send a 503 response with mod_rewrite # サンプルだと囲んでませんが、<Directory> or <VirtualHost>内に書かないと有効になりません <Directory /var/www> RewriteEngine On RewriteCond %{ENV:SuspectHardDoS} =1 RewriteRule .* - [R=503,L] RewriteCond %{ENV:SuspectDoS} =1 RewriteRule .* - [R=503,L] </Directory> |
※.htaccess の中で RewriteEngine On している場合、mod_rewrite部分は .htaccessに記述しないと有効になりません。
1 2 3 4 |
RewriteCond %{ENV:SuspectHardDoS} =1 RewriteRule .* - [R=503,L] RewriteCond %{ENV:SuspectDoS} =1 RewriteRule .* - [R=503,L] |
設定項目の説明
DoSDetection
DoS判定を行うかの設定。offにして apache再起動すれば停止する
DoSPeriod
DoS判定を行う時間を設定。(秒)
DoSThreshold
DoSPeriodの間に、この数だけアクセスがあると環境変数SuspectDoS=1がセットされます
DoSHardThreshold
DoSPeriodの間に、この数だけアクセスがあると環境変数SuspectHardDoS=1がセットされます
DoSBanPeriod
DoS判定されたIPを解除するまでの時間(秒)
環境変数SuspectDoS=1 の維持時間
※SuspectHardDoS=1 を維持する時間ではない
SuspectHardDoSは、アクセス数が DoSHardThreshold より少なくなったら直ちに解除される模様。
DoSTableSize
保持するIPアドレスの数。多すぎるとその分リソースを消費する。
apache構文チェック/反映
$ apachectl configtest
$ systemctl reload httpd
reloadで反映されない場合は
$ systemctl restart httpd