溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何在Apache中抵御暴力破解和DDoS攻擊

發(fā)布時(shí)間:2022-01-24 14:07:18 來源:億速云 閱讀:201 作者:柒染 欄目:開發(fā)技術(shù)

本篇文章給大家分享的是有關(guān) 如何在Apache中抵御暴力破解和DDoS攻擊,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

保護(hù)系統(tǒng)不受攻擊對(duì)因特網(wǎng)上提供服務(wù)主機(jī)的人是一個(gè)非常重要的事情,mod_security和mod_evasive是對(duì)抗服務(wù)端暴力破解和DoS攻擊非常有用的工具。

mod_evasive,如它的名字一樣,在受攻擊時(shí)提供避實(shí)就虛的功能,它像一個(gè)雨傘一樣保護(hù)Web服務(wù)器免受那些威脅。

如何在Apache中抵御暴力破解和DDoS攻擊

安裝mod_security和mod_evasive來保護(hù)Apache

在這篇文章中我們將討論如何安裝、配置以及在RHEL/CentOS6、7和Fedora 21-15上將它們整合到Apache。另外,我們會(huì)模擬攻擊以便驗(yàn)證服務(wù)器做出了正確的反應(yīng)。

以上以您的系統(tǒng)中安裝有LAMP服務(wù)器為基礎(chǔ),所以,如果您沒有安裝,請(qǐng)先閱讀下面鏈接的文章再開始閱讀本文。

  • 在RHEL/CentOS 7中安裝LAMP

(LCTT 譯注:本文有修改。原文為了在RHEL/CentOS 7或Fedora 21中使用同樣的工具,而刪除了它們自帶的 firewalld,使用了舊式的iptables。譯者以為這樣并不恰當(dāng),因此,譯文中做了相應(yīng)刪節(jié),并增加了firewalld的相應(yīng)腳本。)

步驟 1: 安裝mod_security和mod_evasive

另外,在安裝LAMP后,您還需要在RHEL/CentOS 7/6中開啟EPEL倉庫來安裝這兩個(gè)包。Fedora用戶不需要開啟這個(gè)倉庫,因?yàn)閑pel已經(jīng)是Fedora項(xiàng)目的一部分了。

# yum update && yum install mod_security mod_evasive

當(dāng)安裝結(jié)束后,您會(huì)在/etc/httpd/conf.d下找到這兩個(gè)工具的配置文件。

# ls -l /etc/httpd/conf.d

如何在Apache中抵御暴力破解和DDoS攻擊

mod_security + mod_evasive 配置文件

現(xiàn)在,為了整合這兩個(gè)模塊到Apache,并在啟動(dòng)時(shí)加載它們。請(qǐng)確保下面幾行出現(xiàn)在mod_evasive.conf和mod_security.conf的頂層部分,它們分別為:

LoadModule evasive20_module modules/mod_evasive24.soLoadModule security2_module modules/mod_security2.so

請(qǐng)注意modules/mod_security2.so和modules/mod_evasive24.so都是從/etc/httpd到模塊源文件的相對(duì)路徑。您可以通過列出/etc/httpd/modules的內(nèi)容來驗(yàn)證(如果需要的話,修改它):

# cd /etc/httpd/modules# pwd# ls -l | grep -Ei '(evasive|security)'

如何在Apache中抵御暴力破解和DDoS攻擊

驗(yàn)證mod_security + mod_evasive模塊

接下來重啟Apache并且核實(shí)它已加載了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)'     [輸出已加載的靜態(tài)模塊和動(dòng)態(tài)模塊列表]

如何在Apache中抵御暴力破解和DDoS攻擊

檢查mod_security + mod_evasive模塊已加載

步驟 2: 安裝一個(gè)核心規(guī)則集并且配置mod_security

簡單來說,一個(gè)核心規(guī)則集(即CRS)為web服務(wù)器提供特定狀況下如何反應(yīng)的指令。mod_security的開發(fā)者們提供了一個(gè)免費(fèi)的CRS,叫做OWASP([開放Web應(yīng)用安全項(xiàng)目])ModSecurity CRS,可以從下面的地址下載和安裝。

下載OWASP CRS到為之創(chuàng)建的目錄
# mkdir /etc/httpd/crs-tecmint# cd /etc/httpd/crs-tecmint# wget https://github.com/SpiderLabs/owasp-modsecurity-crs/tarball/master

如何在Apache中抵御暴力破解和DDoS攻擊

下載mod_security核心規(guī)則

解壓CRS文件并修改文件夾名稱
# tar xzf master# mv SpiderLabs-owasp-modsecurity-crs-ebe8790 owasp-modsecurity-crs

如何在Apache中抵御暴力破解和DDoS攻擊

解壓mod_security核心規(guī)則

現(xiàn)在,是時(shí)候配置mod_security了

將示例的規(guī)則文件(owasp-modsecurity-crs/modsecuritycrs10_setup.conf.example)拷貝為同名的配置文件。

# cp modsecurity_crs_10_setup.conf.example modsecurity_crs_10_setup.conf

并通過將下面的幾行插入到web服務(wù)器的主配置文件/etc/httpd/conf/httpd.conf來告訴Apache將這個(gè)文件和該模塊放在一起使用。如果您選擇解壓打包文件到另一個(gè)文件夾,那么您需要修改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目錄下創(chuàng)建自己的配置文件,在那里我們可以用我們自定義的文件夾(接下來的示例中,我們會(huì)將其命名為tecmint.conf)而無需修改CRS文件的目錄。這樣做能夠在CRS發(fā)布新版本時(shí)更加容易的升級(jí)。

    SecRuleEngine On    SecRequestBodyAccess On    SecResponseBodyAccess On     SecResponseBodyMimeType text/plain text/html text/xml application/octet-stream     SecDataDir /tmp

您可以在SpiderLabs的ModSecurity GitHub倉庫中參考關(guān)于mod_security目錄的更完整的解釋。

步驟 3: 配置mod_evasive

mod_evasive被配置為使用/etc/httpd/conf.d/mod_evasive.conf中的指令。與mod_security不同,由于在包升級(jí)時(shí)沒有規(guī)則來更新,因此我們不需要獨(dú)立的文件來添加自定義指令。

默認(rèn)的mod_evasive.conf開啟了下列的目錄(注意這個(gè)文件被詳細(xì)的注釋了,因此我們剔掉了注釋以重點(diǎn)顯示配置指令):

    DOSHashTableSize    3097    DOSPageCount        2    DOSSiteCount        50    DOSPageInterval     1    DOSSiteInterval     1    DOSBlockingPeriod   10

這些指令的解釋:

  • DOSHashTableSize: 這個(gè)指令指明了哈希表的大小,它用來追蹤基于IP地址的活動(dòng)。增加這個(gè)數(shù)字將使得站點(diǎn)訪問歷史的查詢變得更快,但如果被設(shè)置的太大則會(huì)影響整體性能。

  • DOSPageCount: 在DOSPageInterval間隔內(nèi)可由一個(gè)用戶發(fā)起的針對(duì)特定的URI(例如,一個(gè)Apache 提供服務(wù)的文件)的同一個(gè)請(qǐng)求的數(shù)量。

  • DOSSiteCount: 類似DOSPageCount,但涉及到整個(gè)站點(diǎn)總共有多少的請(qǐng)求可以在DOSSiteInterval間隔內(nèi)被發(fā)起。

  • DOSBlockingPeriod: 如果一個(gè)用戶超過了DOSSPageCount的限制或者DOSSiteCount,他的源IP地址將會(huì)在DOSBlockingPeriod期間內(nèi)被加入黑名單。在DOSBlockingPeriod期間,任何從這個(gè)IP地址發(fā)起的請(qǐng)求將會(huì)遭遇一個(gè)403禁止錯(cuò)誤。

盡可能的試驗(yàn)這些值,以使您的web服務(wù)器有能力處理特定大小的負(fù)載。

一個(gè)小警告: 如果這些值設(shè)置的不合適,則您會(huì)蒙受阻擋合法用戶的風(fēng)險(xiǎn)。

您也許還會(huì)用到以下其它有用的指令:

DOSEmailNotify

如果您運(yùn)行有一個(gè)郵件服務(wù)器,您可以通過Apache發(fā)送警告消息。注意,如果SELinux已開啟,您需要授權(quán)apache用戶SELinux的權(quán)限來發(fā)送email。您可以通過下面的命令來授予權(quán)限:

# setsebool -P httpd_can_sendmail 1

接下來,將這個(gè)指令和其他指令一起加入到mod_evasive.conf文件。

DOSEmailNotify you@yourdomain.com

如果這個(gè)指令設(shè)置了合適的值,并且您的郵件服務(wù)器在正常的運(yùn)行,則當(dāng)一個(gè)IP地址被加入黑名單時(shí),會(huì)有一封郵件被發(fā)送到相應(yīng)的地址。

DOSSystemCommand

它需要一個(gè)有效的系統(tǒng)命令作為參數(shù),

DOSSystemCommand

這個(gè)指令指定當(dāng)一個(gè)IP地址被加入黑名單時(shí)執(zhí)行的命令。它通常結(jié)合shell腳本來使用,比如在腳本中添加一條防火墻規(guī)則來阻擋某個(gè)IP進(jìn)一步的連接。

寫一個(gè)shell腳本在防火墻階段處理IP黑名單

當(dāng)一個(gè)IP地址被加入黑名單,我們需要阻擋它進(jìn)一步的連接。我們需要下面的shell腳本來執(zhí)行這個(gè)任務(wù)。在/usr/local/bin下創(chuàng)建一個(gè)叫做scripts-tecmint的文件夾(或其他的名字),以及一個(gè)叫做ban_ip.sh的文件。

用于iptables防火墻

#!/bin/sh# 由mod_evasive檢測(cè)出,將被阻擋的IP地址IP=$1# iptables的完整路徑IPTABLES="/sbin/iptables"# mod_evasive鎖文件夾mod_evasive_LOGDIR=/var/log/mod_evasive# 添加下面的防火墻規(guī)則 (阻止所有從$IP流入的流量)$IPTABLES -I INPUT -s $IP -j DROP# 為了未來的檢測(cè),移除鎖文件rm -f "$mod_evasive_LOGDIR"/dos-"$IP"

用于firewalld防火墻

#!/bin/sh# 由mod_evasive檢測(cè)出,將被阻擋的IP地址IP=$1# firewalld-cmd的完整路徑FIREWALL_CMD="/usr/bin/firewall-cmd"# mod_evasive鎖文件夾mod_evasive_LOGDIR=/var/log/mod_evasive# 添加下面的防火墻規(guī)則 (阻止所有從$IP流入的流量)$FIREWALL_CMD --zone=drop --add-source $IP# 為了未來的檢測(cè),移除鎖文件rm -f "$mod_evasive_LOGDIR"/dos-"$IP"

我們的DOSSystemCommand指令應(yīng)該是這樣的:

DOSSystemCommand "sudo /usr/local/bin/scripts-tecmint/ban_ip.sh %s"

上面一行的%s代表了由mod_evasive檢測(cè)到的攻擊IP地址。

將apache用戶添加到sudoers文件

請(qǐng)注意,如果您不給予apache用戶以無需終端和密碼的方式運(yùn)行我們腳本(關(guān)鍵就是這個(gè)腳本)的權(quán)限,則這一切都不起作用。通常,您只需要以root權(quán)限鍵入visudo來存取/etc/sudoers文件,接下來添加下面的兩行即可:

apache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.shDefaults:apache !requiretty

如何在Apache中抵御暴力破解和DDoS攻擊

添加Apache用戶到Sudoers

重要: 在默認(rèn)的安全策略下您只能在終端中運(yùn)行sudo。由于這個(gè)時(shí)候我們需要在沒有tty的時(shí)候運(yùn)行sudo,我們必須像下圖中那樣注釋掉下面這一行:

#Defaults requiretty

如何在Apache中抵御暴力破解和DDoS攻擊

為Sudo禁用tty

最后,重啟web服務(wù)器:

# service httpd restart         [在RHEL/CentOS 6和Fedora 20-18上]# systemctl restart httpd       [在RHEL/CentOS 7和Fedora 21上]

步驟4: 在Apache上模擬DDoS攻擊

有許多工具可以在您的服務(wù)器上模擬外部的攻擊。您可以google下“tools for simulating DDoS attacks”來找一找相關(guān)的工具。

注意,您(也只有您)將負(fù)責(zé)您模擬所造成的結(jié)果。請(qǐng)不要考慮向不在您自己網(wǎng)絡(luò)中的服務(wù)器發(fā)起模擬攻擊。

假如您想對(duì)一個(gè)由別人托管的VPS做這些事情,您需要向您的托管商發(fā)送適當(dāng)?shù)木婊蚓湍菢拥牧髁客ㄟ^他們的網(wǎng)絡(luò)獲得允許。Tecmint.com不會(huì)為您的行為負(fù)責(zé)!

另外,僅從一個(gè)主機(jī)發(fā)起一個(gè)DoS攻擊的模擬無法代表真實(shí)的攻擊。為了模擬真實(shí)的攻擊,您需要使用許多客戶端在同一時(shí)間將您的服務(wù)器作為目標(biāo)。

我們的測(cè)試環(huán)境由一個(gè)CentOS 7服務(wù)器[IP 192.168.0.17]和一個(gè)Windows組成,在Windows[IP 192.168.0.103]上我們發(fā)起攻擊:

如何在Apache中抵御暴力破解和DDoS攻擊

確認(rèn)主機(jī)IP地址

請(qǐng)播放下面的視頻(YT 視頻,請(qǐng)自備梯子: https://www.youtube.com/-U_mdet06Jk ),并跟從列出的步驟來模擬一個(gè)DoS攻擊:

然后攻擊者的IP將被防火墻阻擋:

如何在Apache中抵御暴力破解和DDoS攻擊

阻擋攻擊者的IP地址

在開啟mod_security和mod_evasive的情況下,模擬攻擊會(huì)導(dǎo)致CPU和RAM用量在源IP地址被加入黑名單之前出現(xiàn)短暫幾秒的使用峰值。如果沒有這些模塊,模擬攻擊絕對(duì)會(huì)很快將服務(wù)器擊潰,并使服務(wù)器在攻擊期間無法提供服務(wù)。

以上就是 如何在Apache中抵御暴力破解和DDoS攻擊,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI