0%

How to mitigate Slow HTTP Dos Attack on Apache 2.4 in Ubuntu

緣起

最近接到一個任務,是要把對外網站的一些安全漏洞補起來,而其中我拿到兩個 issue 要解:

  1. disable website directory listing
  2. mitigate Slow HTTP Dos Attack

拜請 Google 大神之後大致上看起來應該是不太難
主要參考了這兩篇:

  1. How do I disable directory browsing
  2. Apache 如何防護 Slow HTTP DOS 攻擊

實作第一個問題

基本上在 Apache 的環境下面就是兩個做法最普遍

  1. 在 .htaccess 裡面加上

    1
    Options -Indexes
  2. 在 virtualhost 資訊裡拿掉 Indexes

1
2
3
4
5
6
7
8
9
10
11
12
13
# before
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

# after
<Directory /var/www/>
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>

然後重啟 Apache 就搞定了

實作第二個問題

在上面的文章裡面提供了三種方法

  1. mod_reqtimeout
  2. mod_qos
  3. mod_security

這三種我都試了一輪
1 最簡單
在 virtualhost 裡面直接加上去就行了

1
2
3
<IfModule mod_reqtimeout.c>
RequestReadTimeout header=20-40,MinRate=500 body=20-40,MinRate=500
</IfModule>

2 mod_qos 在 Apache 2.4 已經不支援了,所以不用玩了

3 的部分功能最多,做起來也最麻煩

1
sudo apt-get install libapache2-mod-security2

(如果你在這邊沒有遇到其他問題的話,事情其實也不難搞定,但是我在這邊遇到一連串問題搞了我非常多時間,解決的過程因為文獻被我搞丟了,所以請大家自求多福了XD)

弄好之後一樣把下面加進去 virtualhost 設定檔裡面重啟 Apache 就搞定

1
2
3
4
5
<IfModule mod_security2.c>
SecRule RESPONSE_STATUS "@streq 408" "phase:5,t:none,nolog,pass, setvar:ip.slow_dos_counter=+1, expirevar:ip.slow_dos_counter=60, id:'1234123456'"

SecRule IP:SLOW_DOS_COUNTER "@gt 5" "phase:1,t:none,log,drop, msg:'Client Connection Dropped due to high number of slow DoS alerts', id:'1234123457'"
</IfModule>

備註

最後附上一個測試 slow http dos attack 的工具
SlowHTTPTest