Apache Mod Dosdetector でDOS攻撃対策を行う
ApacheのMod Dosdetectorを使用し大量リクエストを拒否する設定を行う。
目次
1.概要
2.構成図
3.前提
4.Mod Dosdetectorインストール
5.Apache設定
6.Mod Dosdetector設定ファイル編集
7.Mod Dosdetector設定適用
8.設定確認
1.概要
ApacheのMod Dosdetectorを使用し、同一IPアドレスの一定数以上のリクエストを拒否する設定を行う。
2.構成図
構成図は以下の通り。
OS | CentOS 7 |
Apache | 2.4.46 |
apr | 1.6.5 |
mod dosdetector | 1.1.0 |
3.前提
・OSがCentOSであること
・Apacheがインストールされていること
・aprがインストールされていること
・apr-utilがインストールされていること
・Apache、Tomcatが稼働している場合は停止していること
4.Mod Dosdetectorインストール
Githubよりソースコードを取得(今回はmod_dosdetector-fork-1.1.0.tar.gz)
◎ Mod Dosdetector配布サイト(Github)
アップロードを行い、解凍する
[root@Server1 ~]# cd /usr/local/src ※アップロード先
[root@Server1 ~]# tar -xvf mod_dosdetector-fork-1.1.0.tar.gz
必要モジュールのインストール
[root@Server1 ~]# yum install lynx
インストール済Apacheのapachectlコマンドとapxsコマンドのパスを確認する
[root@Server1 ~]# ll /usr/local/httpd-2.4.46/bin/apachectl
-rwxr-xr-x 1 apache apache 3452 3月 25 22:02 /usr/local/httpd-2.4.46/bin/apachectl
[root@Server1 ~]# ll /usr/local/httpd-2.4.46/bin/apxs
-rwxr-xr-x 1 apache apache 23889 3月 25 22:02 /usr/local/httpd-2.4.46/bin/apxs
Mod Dosdetectorの「Makefile」を編集する
[root@Server1 ~]# cd mod_dosdetector-fork-1.1.0
[root@Server1 ~]# vi Makefile
「Makefile」にapachectlコマンドとapxsコマンドのパスを追記する
~略~
# the used tools
APXS=/usr/local/httpd-2.4.46/bin/apxs
APACHECTL=/usr/local/httpd-2.4.46/bin/apachectl
~略~
Mod Dosdetectorのビルド・デプロイ(各コマンド実行時にでエラーメッセージが出なければOK)
※「make test」コマンドは正常にmakeできているかのテストであり、時間がかかる為スキップしても良い。
[root@Server1 ~]# make
[root@Server1 ~]# make test
[root@Server1 ~]# make install
Apache設定ファイル「httpd.conf」に下記のmod_dosdetector.so読み込み行が追記されていることを確認する
確認ファイル | {Apacheインストールディレクトリ}/conf/httpd.conf |
確認対象文字列 | LoadModule dosdetector_module modules/mod_dosdetector.so |
5.Apache設定
必要モジュールがApacheインストールディレクトリ内に存在するか確認
[root@Server1 ~]# ll /usr/local/httpd-2.4.46/modules/mod_rewrite.so
Apache設定ファイル「httpd.conf」を編集する
編集対象ファイル | {Apacheインストールディレクトリ}/conf/httpd.conf |
「httpd.conf」に記載のmod_rewrite.so読み込み行のコメント「#」を解除する
LoadModule rewrite_module modules/mod_rewrite.so |
「httpd.conf」にMod Dosdetectorの設定ファイルのパスを記載
<IfModule dosdetector_module> Include conf/mod_dosdetector.conf </IfModule> |
~略~
#LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule security2_module modules/mod_security2.so
LoadModule dosdetector_module modules/mod_dosdetector.so
~略~
6.Mod Dosdetector設定ファイル編集
Mod Dosdetector設定ファイル「dosdetector.conf」を編集する。
編集対象ファイル | {Apacheインストールディレクトリ}/conf/extra/dosdetector.conf |
<dosdetector.conf 設定プロパティ>
DoSDetection on |
DoS検出設定を有効にする |
DoSPeriod 3600 |
DoS検出する時間単位(秒):3600秒(1時間) |
DoSThreshold 100 |
警告発生させるアクセス回数:100回 ※指定した秒数の間にDoSThreshold回以上のアクセスがあるとSuspectDoS=1がセットされる |
DoSHardThreshold 200 |
アクセス不可とするアクセス回数:200回 ※DoSHardThreshold回以上のアクセスがあるとSuspectHardDoS=1がセットされる |
DoSBanPeriod 300 |
規制解除時間:300秒(5分) ※DoS判定されるとDoSBanPeriodで指定した秒数の間SuspectDoS=1がセットされ続け、指定時間経過後に規制がクリアされる |
DoSTableSize 100 |
保持するIP一覧の数:100個 ※共有メモリに領域を確保し保管される |
RewriteEngine On |
リライトを有効にする |
RewriteCond %{ENV:SuspectHardDoS} =1 |
SuspectHardDoSに1がセットされたらリライトする |
RewriteRule .* – [R=503,L] |
503エラーとしてリライトする |
# 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 3600
DoSThreshold 100
DoSHardThreshold 200
DoSBanPeriod 300
DoSTableSize 100
# If you want to use named shared memory, uncommet this line.
#DoSShmemName
#<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
RewriteEngine On
RewriteCond %{ENV:SuspectHardDoS} =1
RewriteRule .* - [R=503,L]
7.Mod Dosdetector設定適用
Apache・Tomcatを起動
[root@Server1 ~]# /usr/local/tomcat/bin/shutdown.sh
[root@Server1 ~]# /usr/local/tomcat/bin/startup.sh
[root@Server1 ~]# /usr/local/src/modsecurity-2.9.3/bin/apachectl start
8.設定確認
Mod Dosdetectorを設定したサーバへ、別サーバから設定値を超過する量のリクエストを送り、設定した通り300リクエストほどが200以外のHTTPステータスで返却されることを確認する。
[root@Server2 ~]# cd /usr/local/apache/bin/
[root@Server2 ~]# ./ab -n 500 -c 100 http://{Server1のIPアドレス}:80/
This is ApacheBench, Version 2.3 <$Revision: 1879490 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.x.xx (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Finished 500 requests
Server Software:
Server Hostname: 192.168.x.xx
Server Port: 80
Document Path: /
Document Length: 45 bytes
Concurrency Level: 100
Time taken for tests: 0.423 seconds
Complete requests: 500
Failed requests: 301
(Connect: 0, Receive: 0, Length: 301, Exceptions: 0)
Non-2xx responses: 301
Total transferred: 194598 bytes
HTML transferred: 98954 bytes
Requests per second: 1181.19 [#/sec] (mean)
Time per request: 84.660 [ms] (mean)
Time per request: 0.847 [ms] (mean, across all concurrent requests)
Transfer rate: 448.94 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 7 6.2 5 25
Processing: 7 36 31.2 30 236
Waiting: 2 31 29.6 24 210
Total: 18 44 31.8 37 247
Percentage of the requests served within a certain time (ms)
50% 37
66% 43
75% 48
80% 51
90% 65
95% 96
98% 211
99% 215
100% 247 (longest request)
Mod Dosdetectorを設定したサーバのApacheログ「error_log」にエラーログが出力されていることを確認する
確認ログ | {Apacheインストールディレクトリ}/logs/error_log |
[Fri May 28 17:26:25.188479 2021] [dosdetector:notice] [pid 30383:tid 139724180457216] [client 192.168.x.xx:60648] '192.168.x.xx' is suspected as DoS attack! (counter: 101)
[Fri May 28 17:26:25.235703 2021] [dosdetector:notice] [pid 30385:tid 139724172064512] [client 192.168.x.xx:60812] '192.168.x.xx' is suspected as Hard DoS attack! (counter: 201)