Warning: Undefined array key "from_tecreport" in /home/xs116511/verification01.net/public_html/wp-content/themes/a_frontier/single.php on line 5
エーフロンティア|Apache Mod Dosdetector でDOS攻撃対策を行う

CONTACT
お問い合わせ

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)