一、mod_evasive 介紹
mod_evasive 是Apache(httpd)服務器的防DDOS的一個模塊。對於WEB服務器來說,是目前比較好的一個防護DDOS攻擊的擴展模塊。雖然並不能完全防禦DDOS攻擊,但在一定條件下,還是起到緩服Apache(httpd)服務器的壓力。如配合iptables、硬件防火牆等防火牆設備配合使用,可能有更好的效果。
mod_evasive 的官方地址: http://www.zdziarski.com/
二、mod_evasive 工作原理
Apache模塊mod_evasive利用Hash表儲存相應的HTTP請求,利用設定規則判斷是否拒絕對方的請求。
三、mod_evasive 安裝
wget http://www.zdziarski.com/blog/wp-content/uploads/2010/02/mod_evasive_1.10.1.tar.gz
tar zxvf mod_evasive_1.10.1.tar.gz
cd mod_evasive/
apxs -i -a -c mod_evasive20.c
#編譯、安裝、並加載模塊
#注:apxs 用於編譯模塊工具;如果是用系統自帶的軟件包,一般位於/usr/sbin目錄。如果您是自己編譯安裝Apache(httpd)的,你應該自己來指定路徑;
在編譯安裝完成後,會自動插入一行到Apache 配置文件中,對於Apache 2.x 版本中,應該在其配置文件中有類似下面的一行;
四、配置mod_evasive
[root@localhost ~]# vi /etc/httpd/conf/httpd.conf
#加入以下配置
<IfModule mod_evasive20.c>
DOSHashTableSize 3097 #表大小
DOSPageCount 2 #限制單位時間內同一IP請求同一網頁次數
DOSSiteCount 10 #限制單位時間內同一IP請求網站次數
DOSPageInterval 1 #網頁存取間隔
DOSSiteInterval 1 #網站存取間隔
DOSBlockingPeriod 10 #限制訪問時間
DOSEmailNotify #疑似攻擊時郵件通知
DOSSystemCommand "su - onovps -c iptables -I INPUT -s %s --dport 80 -j DROP"
#疑似攻擊時用防火牆限制IP訪問80端口
DOSLogDir "/var/log/ #日誌目錄
DOSWhiteList 127.0.0.1 #添加白名單
</IfModule>
如果您不知道把這些插入到哪,用下面的辦法做也是可以的;
在/etc目錄中創建一個文件,比如mod_evasive.conf;
然後把根據自己的Apache版本來加入相應的內容;
接着我們再修改 httpd.conf ,在最後一行加入
修改完成後,我們要重啓Apache服務器使配置生效:
五、測試mod_evasive
防DDOS的模塊做好後,我們可以要驗證,可以用Apache 自帶的ab工具,系統默認安裝在/usr/sbin目錄中;比如;
注:上面的例子的意思是,如果您的服務器是百度的WEB服務器,我們要發送數據請求包,總共1000個,每次併發50個;
另外一個測試工具就是mod_evasive的解壓包的目錄中,有個test.pl ,你可以修改IP地址,然後用
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
是不是有效果,請根據 ab工具或 測試腳本出來的結果來查看;
注:因爲我們編譯mod_evasive時,用的是默認配置,所以日誌被存放在/tmp目錄中。如果有DDOS攻擊,會在/tmp產生日誌。日誌的文件是以 dos-開頭的;
六、配置參數詳解
DOSHashTableSize 3097:定義哈希表大小。
DOSSiteCount 50:允許客戶機的最大併發連接。
DOSPageCount 2:允許客戶機訪問同一頁的間隔。
DOSPageInterval 1:網頁訪問計數器間隔。
DOSSiteInterval 1:全站訪問計數器間隔。
DOSSiteInterval 60:加入黑名單後拒絕訪問時間。
DOSEmailNotify [email protected]:有IP加入黑名單後通知管理員。
DOSSystemCommand "sudo iptables -A INPUT -s %s -j DROP":IP加入黑名單後執行的系統命令。
DOSLogDir "/tmp":鎖定機制臨時目錄,日誌目錄。
DOSWhiteList 127.0.0.1:防範白名單,不阻止白名單IP。
七、mod_evasive 的高級配置
如果想更改一些適合自己的參數,有些必要的參數,並不是通過配置文件修改就一下起作用的,我們要修改源碼包中的 mod_evasive.c(Apache 1.x用之) 或 mod_evasive20.c (Apache 2.x用之);
#define DEFAULT_PAGE_COUNT 2 // Default maximum page hit count per interval
#define DEFAULT_SITE_COUNT 50 // Default maximum site hit count per interval
#define DEFAULT_PAGE_INTERVAL 1 // Default 1 Second page interval
#define DEFAULT_SITE_INTERVAL 1 // Default 1 Second site interval
#define DEFAULT_BLOCKING_PERIOD 10 // Default for Detected IPs; blocked for 10 seconds
#define DEFAULT_LOG_DIR "/tmp" // Default temp directory
比如我們改改其中的數字,根據英文很容易理解。比如修改日誌存放目錄,就把/tmp改成別的目錄。如果您不知道放在哪好,還是用默認的吧;
如果您在這裏更改了參數,不要忘記修改Apache 配置文件中關於mod_evasive 的參數;
如果您想加入一些其它的參數,請查閱源碼包中的README,裏面有詳細說明,大多來說沒太大的必要……
這個文件相當重要,如果您想更改某些設置,就要修改這個文件……
八、總結
mod_evasive 還是有點用的,對於apache服務器來說,是目前比較好的一個防護DDOS攻擊的擴展模塊。雖然並不能完全防禦 DDOS攻擊,但在一定條件下,還是起到緩服Apache(httpd)服務器的壓力。如果配合iptables、硬件防火牆等防火牆設備配合使用,可能有更好的效果。安裝也不費力氣。如果你需要的時候,會想到這個模塊的。