使用Mod_Security和Mod_evasive模塊保護Apache
譯文對于從事主機托管行業的人士來說,或者如果你托管自己的服務器,并將服務器暴露在互聯網面前,那么保護系統遠離攻擊者肯定是重中之重。
mod_security和mod_evasive是兩種非常重要的工具,它們可以用來保護Web服務器遠離蠻力攻擊或分布式拒絕服務(DDoS)攻擊。mod_security是一種面向Web應用程序的開源入侵檢測和預防引擎,它與Web服務器無縫地整合起來。
顧名思義,mod_evasive提供了規避功能;另外在遭到攻擊時,還能充當保護傘,保護Web服務器遠離這種威脅。
安裝Mod_Security和Mod_Evasive來保護Apache
我們在本文中將討論如何在RHEL/CentOS 6和7以及Fedora 21-15上安裝、配置這兩個模塊,并讓它們與Apache協同運行。此外,我們會模擬攻擊,以便證實服務器作出相應的反應。
本文假設你已在系統上安裝了LAMP服務器。要是還沒有安裝,請在開始下一步之前參閱這篇文章《在RHEL/CentOS 7中安裝LAMP架構》:http://www.tecmint.com/install-lamp-in-centos-7/。
如果你在運行RHEL/CentOS 7或Fedora 21,還需要將iptables設置為默認防火墻前端,而不是將firewalld設置為默認防火墻前端。我們這么做是為了在RHEL/CentOS 7/6和dora 21中都使用同一個工具。
第一步:將Iptables防火墻安裝到RHEL/CentOS 7和Fedora 21上
想開始入手,先停止并禁用firewalld:
# systemctl stop firewalld
# systemctl disable firewalld
禁用Firewalld服務
然后,在啟用iptables之前,安裝iptables-services程序包:
# yum update && yum install iptables-services
# systemctl enable iptables
# systemctl start iptables
# systemctl status iptables
安裝Iptables防火墻#p#
第二步:安裝Mod_Security和Mod_evasive
除了已經部署到位的LAMP架構外,你還要啟用RHEL/CentOS 7/6中的EPEL軟件庫,那樣才能安裝這兩個程序包。Fedora用戶不需要啟用任何軟件庫,因為epel早已是Fedora項目的一部分。
# yum update && yum install mod_security mod_evasive
安裝完畢后,你可以在/etc/httpd/conf.d中找到這兩個工具的配置文件。
# ls -l /etc/httpd/conf.d
mod_security和mod_evasive的配置
現在,為了將這兩個模塊與Apache整合起來,并且在Apache啟動時讓它裝入這兩個模塊,就要確保下面幾行分別出現在mod_evasive.conf和mod_security.conf的頂層部分:
LoadModule evasive20_module modules/mod_evasive24.so
LoadModule security2_module modules/mod_security2.so
請注意:modules/mod_security2.so和modules/mod_evasive24.so是相對路徑,從/etc/httpd目錄到模塊的源文件。你可以列出/etc/httpd/modules目錄的內容對此加以證實(需要的話,還可以更改):
# cd /etc/httpd/modules
# pwd
# ls -l | grep -Ei '(evasive|security)'
證實mod_security和mod_evasive模塊
然后重啟Apache,證實它裝入了mod_evasive和mod_security:
# service httpd restart [On RHEL/CentOS 6 and Fedora 20-18]
# systemctl restart httpd [On RHEL/CentOS 7 and Fedora 21]
[Dump a list of loaded Static and Shared Modules]
# httpd -M | grep -Ei '(evasive|security)'
檢查已裝入的mod_security和mod_evasive模塊#p#
第三步:安裝核心規則集和配置Mod_Security
簡單地說,核心規則集(又叫CRS)為Web服務器提供了在某些情況下如何運行的指令。開發mod_security的公司提供了一套免費的CRS,名為OWASP(開放式Web應用安全項目)ModSecurity CRS,可以下載并安裝,具體如下所示。
1. 將OWASP CRS下載到一個專門為此而建立的目錄。
# mkdir /etc/httpd/crs-tecmint
# cd /etc/httpd/crs-tecmint
# wget https://github.com/SpiderLabs/owasp-modsecurity-crs/tarball/master
下載mod_security核心規則
2. 解壓CRS文件,將目錄名稱改成便于我們使用的一個名稱。
# tar xzf master
# mv SpiderLabs-owasp-modsecurity-crs-ebe8790 owasp-modsecurity-crs
抽取mod_security核心規則
3. 現在可以配置mod_security了。將擁有規則的樣本文件(owasp-modsecurity-crs/modsecurity_crs_10_setup.conf.example)拷貝到沒有.example擴展名的另一個文件中。
# cp modsecurity_crs_10_setup.conf.example modsecurity_crs_10_setup.conf
并告訴Apache使用這個文件以及模塊,為此只要在Web服務器的主配置文件/etc/httpd/conf/httpd.conf文件中插入下面幾行。如果你選擇在另一個目錄中解壓tarball,就需要編輯Include指令后面的路徑:
Include crs-tecmint/owasp-modsecurity-crs/modsecurity_crs_10_setup.conf
Include crs-tecmint/owasp-modsecurity-crs/base_rules/*.conf
最后,我們建議:應該在/etc/httpd/modsecurity.d目錄里面創建自己的配置文件,我們將把定制的指令放在該文件(我們在下面的例子將文件命名為tecmint.conf)里面,而不是直接改動CRS文件。這么一來,新版本發布后,更容易升級CRS。
SecRuleEngine On
SecRequestBodyAccess On
SecResponseBodyAccess On
SecResponseBodyMimeType text/plain text/html text/xml application/octet-stream
SecDataDir /tmp
你可以參閱SpiderLabs的ModSecurity GitHub軟件庫(https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#Configuration_Directives),了解mod_security配置指令的完整的解釋性指南。#p#
第四步:配置Mod_Evasive
mod_evasive使用/etc/httpd/conf.d/mod_evasive.conf中的指令來配置。與mod_security不同,由于在程序包升級期間沒有規則要更新,我們不需要單獨的文件來添加定制的指令。
默認的mod_evasive.conf文件啟用了下列指令(請注意該文件添加了大量注釋,于是我們去除了注釋,重點突出下列配置指令):
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
指令解釋:
•DOSHashTableSize:該指令指定了用來根據每個IP地址跟蹤活動的哈希表的大小。增加這個值可以更快速地查詢客戶機在過去訪問過的網站,但要是該值設得過高,可能會影響總體性能。
•DOSPageCount:訪客在DOSPageInterval間隔期間內對某個特定URI(比如,Apache服務的任何文件)提出的合法的相同請求數量。
•DOSSiteCount:類似于DOSPageCount,不過是指在DOSSiteInterval間隔期間內對整個網站能提出多少整體請求。
•DOSBlockingPeriod:如果訪客超過了DOSSPageCount或DOSSiteCount設置的限值,其源IP地址在DOSBlockingPeriod時間段內將被列入黑名單。在DOSBlockingPeriod期間,來自該IP地址的任何請求將遇到403禁止錯誤。
可以隨意嘗試這些值,以便你的Web服務器能夠處理所需要的流量數量和類型。
只是有一個小地方需要注意:要是這些值沒有設置好,有可能最后阻攔合法訪客。
你可能還應該考慮其他有用的指令:
DOSEmailNotify
如果你已經在運行一臺郵件服務器,可以通過Apache發送警告信息。請注意:如果SELinux被設置成執行,你需要為apache用戶授予SELinux許可權限,以便發送電子郵件。為此,你可以運行下面這個命令:
# setsebool -P httpd_can_sendmail 1
下一步,將該指令連同其他指令一并添加到mod_evasive.conf文件中:
DOSEmailNotify you@yourdomain.com
如果該值已設置好,而且你的郵件服務器正常運行,一旦某個IP地址被列入黑名單,電子郵件就會被發送到指定的地址。
DOSSystemCommand
這需要有效的系統命令作為變量,
DOSSystemCommand
該指令指定了IP地址被列入黑名單后所執行的命令。它常常與添加防火墻規則以阻止今后從該IP地址來進行連接的外殼腳本結合使用。
編寫在防火墻層面處理IP黑名單機制的外殼腳本
某個IP地址被列入黑名單后,我們就要阻止今后來自它的連接。我們要使用執行這項任務的下列外殼腳本。在/usr/local/bin中創建一個名為scripts-tecmint的目錄(名稱可以隨意取),并在該目錄中創建一個名為ban_ip.sh的文件。
#!/bin/sh
# IP that will be blocked, as detected by mod_evasive
IP=$1
# Full path to iptables
IPTABLES="/sbin/iptables"
# mod_evasive lock directory
MOD_EVASIVE_LOGDIR=/var/log/mod_evasive
# Add the following firewall rule (block all traffic coming from $IP)
$IPTABLES -I INPUT -s $IP -j DROP
# Remove lock file for future checks
rm -f "$MOD_EVASIVE_LOGDIR"/dos-"$IP"
我們的DOSSystemCommand指令應該如下所示:
DOSSystemCommand "sudo /usr/local/bin/scripts-tecmint/ban_ip.sh %s"
在上面這行中,%s代表被mod_evasive檢測出來的冒犯性的IP。
將apache用戶添加到sudoers文件
請注意:除非你為用戶apache授予無需終端和密碼即可運行腳本(只有這個腳本!)的權限,否則這一切根本不管用。如往常一樣,你只要鍵入visudo作為根用戶,即可訪問/etc/sudoers文件,然后添加下面兩行,如下圖所示:
apache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.sh
Defaults:apache !requiretty
添加Apache用戶到Sudoers
重要提示:作為一項默認的安全策略,你只能在終端中運行sudo。由于在這里我們需要使用不帶tty的sudo,我們只好注釋掉下圖中高亮顯示的那一行:
#Defaults requiretty
為Sudo禁用tty
最后,重啟Web服務器:
# service httpd restart [On RHEL/CentOS 6 and Fedora 20-18]
# systemctl restart httpd [On RHEL/CentOS 7 and Fedora 21]
#p#
第五步:在Apache上模擬DDoS攻擊
你可以使用幾個工具在自己的服務器上模擬外部攻擊。只要在谷歌搜索引擎上輸入“tools for simulating ddos attacks”,即可找到其中的幾個工具。
請注意:你要對模擬的結果完全負責。想對不在自己的網絡上托管運行的服務器發動模擬攻擊,勸你莫動這個念頭。
如果你想對別人托管的虛擬專用服務器(VPS)進行同樣的模擬攻擊,就需要以適當的方式提醒主機托管提供商,或者獲得許可,以便這種洪水流量可以通過其網絡來傳輸。我們Tecmint.com絕對不對你的行為負責!
此外,只從一個主機發動模擬的拒絕服務攻擊并不代表是現實的攻擊。想模擬這種攻擊,你就需要同時從幾個客戶機向你的服務器發動攻擊。
我們的測試環境包括一臺CentOS 7服務器 [IP 192.168.0.17]和一個Windows主機[IP 192.168.0.103],我們將從該主機發動攻擊:
證實主機的IP地址
請播放下列視頻,按照概述的步驟來操作,以模擬簡單的拒絕服務攻擊:
然后,冒犯性的IP地址被iptables阻攔:
被阻攔的攻擊IP地址
結束語
mod_security和mod_evasive被啟用后,模擬的攻擊導致處理器和內存暫時出現使用高峰,不過只持續了幾秒,隨后源IP地址被列入黑名單,并被防火墻阻攔。要是沒有這些工具,模擬攻擊勢必會很快擊 垮服務器,導致服務器在攻擊持續時段內無法使用。
要是你打算使用(或者過去用過)這些工具,我們很高興。我們總是期盼你也使用這些工具,歡迎留言交流。
原文地址:http://www.tecmint.com/protect-apache-using-mod_security-and-mod_evasive-on-rhel-centos-fedora/