Apache 2.4系 DoS攻撃対策 mod_dosdetector 導入

mod_dosdetector について

以前にも同じような記事(DoS攻撃対策 Apacheモジュール mod_dosdetector 導入)DoS攻撃対策を書きましたが、内容的は同じ内容になります。こちらはCentOS 7系のサーバーでApache 2.4系に「mod_dosdetector」を導入した記事となります

mod_dosdetectorは、一定の時間内に同一IPアドレスからリクエスト数の閾値を超えた場合に環境変数に値をセットして、その環境変数を見てmod_rewriteに403, 503 のステータスを返します

mod_dosdetector インストール

GitHubからダウンロードしてインストールをします

$ cd /usr/local/src
$ sudo git clone https://github.com/stanaka/mod_dosdetector.git
$ cd mod_dosdetector/

apxsのパスの確認して、MakeFileを編集します

$ which apxs
/usr/bin/apxs

$ sudo vim Makefile
APXS=/usr/bin/apxs

make install を実行して、mod_dosdetector をインストールします

$ sudo make install

以上でインストールは終了です。次に設定を行っていきます

mod_dosdetector 設定

Apacheで、「mod_dosdetector.so」をロードして、DoS攻撃の判定をする閾値の設定をおこないます

$ sudo vim /etc/httpd/conf/httpd.conf

# mod_dosdetector.soを読み込むように設定します
LoadModule dosdetector_module /usr/lib64/httpd/modules/mod_dosdetector.so

# 60秒間で100アクセスで環境変数SuspectDoSに1をセット(Dos攻撃の疑いあり)
# 60秒間で200アクセスで環境変数SuspectHardDoSに1をセット
# 300秒間で対象アドレスを解除
*.js|png|jpe?g|gif|css|ico のファイルは除外対象
<IfModule dosdetector_module>
  DoSDetection on
  DoSPeriod 60
  DoSThreshold 100
  DoSHardThreshold 200
  DoSBanPeriod 300
  DoSTableSize 100
  DoSIgnoreContentType .(js|png|jpe?g|gif|css|ico)
</IfModule>
  • DoSDetection on・・・mod_dosdetector モジュールを有効にします。
  • DoSPeriod(単位:秒)・・・設定した秒数でアクセス数をカウントします。
  • DoSThreshold・・・DoSPeriod で設定した秒数で、指定したアクセス数があると、環境変数「SuspectDoS」に 1 がセットされます。
  • DoSHardThreshold・・・DoSPeriod で設定した秒数で、指定したアクセス数があると、環境変数に「SuspectHardDoS」に 1 がセットされます。
  • DoSBanPeriod(単位:秒)・・・環境変数「SuspectDoS」、「SuspectHardDoS」に 1 がセットされ続ける秒数を指定します。指定した秒数をこえるとDoS攻撃判定が解除されます
  • DoSIgnoreContentType・・・DoS攻撃の検出から除外するコンテンツタイプを指定します。

カスタムログ出力設定とDoS攻撃にアクセス制限

mod_dosdetectorでDoS攻撃の判定があったアクセスのログをカスタムログとして出力するようにします。また、DoS攻撃あった場合に「403」、「503」のステータスを返すようにします。
私の環境では、Wordpressを利用しているドメインのバーチャルホストのみに設定するので、VirtuslHostディレクティブに設定しています

下記では、環境変数に「SuspectHardDoS」と設定された場合は、403のステータスを返すようしています。

設定が変更するとApacheの再起動を行います

$ sudo vim /etc/httpd/conf.d/vhosts/example.com

<VirtualHost *:443>

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

# dosdetector_module
  RewriteEngine On
  RewriteCond %{ENV:SuspectHardDoS} =1
  RewriteCond %{REMOTE_ADDR} !127.0.0.0
  RewriteRule .*  - [R=403,L]

</VirtualHost>

$ systemctl restart httpd

 

 

 

スポンサーリンク