您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關 如何在Apache中抵御暴力破解和DDoS攻擊,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
保護系統不受攻擊對因特網上提供服務主機的人是一個非常重要的事情,mod_security和mod_evasive是對抗服務端暴力破解和DoS攻擊非常有用的工具。
mod_evasive,如它的名字一樣,在受攻擊時提供避實就虛的功能,它像一個雨傘一樣保護Web服務器免受那些威脅。
安裝mod_security和mod_evasive來保護Apache
在這篇文章中我們將討論如何安裝、配置以及在RHEL/CentOS6、7和Fedora 21-15上將它們整合到Apache。另外,我們會模擬攻擊以便驗證服務器做出了正確的反應。
以上以您的系統中安裝有LAMP服務器為基礎,所以,如果您沒有安裝,請先閱讀下面鏈接的文章再開始閱讀本文。
在RHEL/CentOS 7中安裝LAMP
(LCTT 譯注:本文有修改。原文為了在RHEL/CentOS 7或Fedora 21中使用同樣的工具,而刪除了它們自帶的 firewalld,使用了舊式的iptables。譯者以為這樣并不恰當,因此,譯文中做了相應刪節,并增加了firewalld的相應腳本。)
另外,在安裝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,并在啟動時加載它們。請確保下面幾行出現在mod_evasive.conf和mod_security.conf的頂層部分,它們分別為:
LoadModule evasive20_module modules/mod_evasive24.soLoadModule 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 [在RHEL/CentOS 6和Fedora 20-18上]# systemctl restart httpd [在RHEL/CentOS 7和Fedora 21上]
# httpd -M | grep -Ei '(evasive|security)' [輸出已加載的靜態模塊和動態模塊列表]
檢查mod_security + mod_evasive模塊已加載
簡單來說,一個核心規則集(即CRS)為web服務器提供特定狀況下如何反應的指令。mod_security的開發者們提供了一個免費的CRS,叫做OWASP([開放Web應用安全項目])ModSecurity CRS,可以從下面的地址下載和安裝。
# mkdir /etc/httpd/crs-tecmint# cd /etc/httpd/crs-tecmint# wget https://github.com/SpiderLabs/owasp-modsecurity-crs/tarball/master
下載mod_security核心規則
# tar xzf master# mv SpiderLabs-owasp-modsecurity-crs-ebe8790 owasp-modsecurity-crs
解壓mod_security核心規則
將示例的規則文件(owasp-modsecurity-crs/modsecuritycrs10_setup.conf.example)拷貝為同名的配置文件。
# cp modsecurity_crs_10_setup.conf.example modsecurity_crs_10_setup.conf
并通過將下面的幾行插入到web服務器的主配置文件/etc/httpd/conf/httpd.conf來告訴Apache將這個文件和該模塊放在一起使用。如果您選擇解壓打包文件到另一個文件夾,那么您需要修改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倉庫中參考關于mod_security目錄的更完整的解釋。
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服務器有能力處理特定大小的負載。
一個小警告: 如果這些值設置的不合適,則您會蒙受阻擋合法用戶的風險。
您也許還會用到以下其它有用的指令:
如果您運行有一個郵件服務器,您可以通過Apache發送警告消息。注意,如果SELinux已開啟,您需要授權apache用戶SELinux的權限來發送email。您可以通過下面的命令來授予權限:
# setsebool -P httpd_can_sendmail 1
接下來,將這個指令和其他指令一起加入到mod_evasive.conf文件。
DOSEmailNotify you@yourdomain.com
如果這個指令設置了合適的值,并且您的郵件服務器在正常的運行,則當一個IP地址被加入黑名單時,會有一封郵件被發送到相應的地址。
它需要一個有效的系統命令作為參數,
DOSSystemCommand
這個指令指定當一個IP地址被加入黑名單時執行的命令。它通常結合shell腳本來使用,比如在腳本中添加一條防火墻規則來阻擋某個IP進一步的連接。
當一個IP地址被加入黑名單,我們需要阻擋它進一步的連接。我們需要下面的shell腳本來執行這個任務。在/usr/local/bin下創建一個叫做scripts-tecmint的文件夾(或其他的名字),以及一個叫做ban_ip.sh的文件。
用于iptables防火墻
#!/bin/sh# 由mod_evasive檢測出,將被阻擋的IP地址IP=$1# iptables的完整路徑IPTABLES="/sbin/iptables"# mod_evasive鎖文件夾mod_evasive_LOGDIR=/var/log/mod_evasive# 添加下面的防火墻規則 (阻止所有從$IP流入的流量)$IPTABLES -I INPUT -s $IP -j DROP# 為了未來的檢測,移除鎖文件rm -f "$mod_evasive_LOGDIR"/dos-"$IP"
用于firewalld防火墻
#!/bin/sh# 由mod_evasive檢測出,將被阻擋的IP地址IP=$1# firewalld-cmd的完整路徑FIREWALL_CMD="/usr/bin/firewall-cmd"# mod_evasive鎖文件夾mod_evasive_LOGDIR=/var/log/mod_evasive# 添加下面的防火墻規則 (阻止所有從$IP流入的流量)$FIREWALL_CMD --zone=drop --add-source $IP# 為了未來的檢測,移除鎖文件rm -f "$mod_evasive_LOGDIR"/dos-"$IP"
我們的DOSSystemCommand指令應該是這樣的:
DOSSystemCommand "sudo /usr/local/bin/scripts-tecmint/ban_ip.sh %s"
上面一行的%s代表了由mod_evasive檢測到的攻擊IP地址。
請注意,如果您不給予apache用戶以無需終端和密碼的方式運行我們腳本(關鍵就是這個腳本)的權限,則這一切都不起作用。通常,您只需要以root權限鍵入visudo來存取/etc/sudoers文件,接下來添加下面的兩行即可:
apache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.shDefaults:apache !requiretty
添加Apache用戶到Sudoers
重要: 在默認的安全策略下您只能在終端中運行sudo。由于這個時候我們需要在沒有tty的時候運行sudo,我們必須像下圖中那樣注釋掉下面這一行:
#Defaults requiretty
為Sudo禁用tty
最后,重啟web服務器:
# service httpd restart [在RHEL/CentOS 6和Fedora 20-18上]# systemctl restart httpd [在RHEL/CentOS 7和Fedora 21上]
有許多工具可以在您的服務器上模擬外部的攻擊。您可以google下“tools for simulating DDoS attacks”來找一找相關的工具。
注意,您(也只有您)將負責您模擬所造成的結果。請不要考慮向不在您自己網絡中的服務器發起模擬攻擊。
假如您想對一個由別人托管的VPS做這些事情,您需要向您的托管商發送適當的警告或就那樣的流量通過他們的網絡獲得允許。Tecmint.com不會為您的行為負責!
另外,僅從一個主機發起一個DoS攻擊的模擬無法代表真實的攻擊。為了模擬真實的攻擊,您需要使用許多客戶端在同一時間將您的服務器作為目標。
我們的測試環境由一個CentOS 7服務器[IP 192.168.0.17]和一個Windows組成,在Windows[IP 192.168.0.103]上我們發起攻擊:
確認主機IP地址
請播放下面的視頻(YT 視頻,請自備梯子: https://www.youtube.com/-U_mdet06Jk ),并跟從列出的步驟來模擬一個DoS攻擊:
然后攻擊者的IP將被防火墻阻擋:
阻擋攻擊者的IP地址
在開啟mod_security和mod_evasive的情況下,模擬攻擊會導致CPU和RAM用量在源IP地址被加入黑名單之前出現短暫幾秒的使用峰值。如果沒有這些模塊,模擬攻擊絕對會很快將服務器擊潰,并使服務器在攻擊期間無法提供服務。
以上就是 如何在Apache中抵御暴力破解和DDoS攻擊,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。