文章詳情頁(yè)
Freebsd+IPFW結(jié)合使用防小規(guī)模DDOS攻擊的配置方法
瀏覽:112日期:2022-06-03 13:05:39
由于服務(wù)器分布太散,不能采用硬件防火墻的方案,雖然IPtables功能很強(qiáng)大,足以應(yīng)付大部分的攻擊,但 Linux系統(tǒng)自身對(duì)DDoS攻擊的防御力本來(lái)就弱,只好另想辦法了。
一、Freebsd的魅力
發(fā)現(xiàn)Freebsd的好處是在一次偶然的測(cè)試中,在LAN里虛擬了一個(gè)Internet,用一臺(tái)Windows客戶端分別向一臺(tái)Windows Server、Linux Server和一臺(tái)Freebsd在無(wú)任何防范措施的情況下發(fā)送Syn Flood數(shù)據(jù)包(常見(jiàn)的DDoS攻擊主要靠向服務(wù)器發(fā)送Syn Flood數(shù)據(jù)完成)。Windows在達(dá)到10個(gè)包的時(shí)候就完全停止響應(yīng)了,Linux在達(dá)到10個(gè)數(shù)據(jù)包的時(shí)候開(kāi)始連接不正常,而Freebsd卻能承受達(dá)100個(gè)以上的Syn Flood數(shù)據(jù)包。筆者決定將公司所有的Web服務(wù)器全換為Freebsd平臺(tái)。
在使用Freebsd后,的確過(guò)了一段時(shí)間的安穩(wěn)日子。不過(guò)近日又有用戶再次反映網(wǎng)站不能正常訪問(wèn),表現(xiàn)癥狀為用戶打開(kāi)網(wǎng)頁(yè)速度緩慢,或者直接顯示為找不到網(wǎng)站。用netstat ?a查看到來(lái)自某IP的連接剛好50個(gè),狀態(tài)均為FIN_WAIT 1,這是屬于明顯的DDoS攻擊,看來(lái)Freebsd沒(méi)有防火墻也不是萬(wàn)能的啊,于是就想到了裝防火墻。
看了N多資料,了解到Freebsd下最常見(jiàn)的防火墻叫IP FireWall,中文字面意思叫IP防火墻,簡(jiǎn)稱IPFW。但如果要使用IPFW則需要編譯Freebsd系統(tǒng)內(nèi)核。出于安全考慮,在編譯結(jié)束后, IPFW是默認(rèn)拒絕所有網(wǎng)絡(luò)服務(wù),包括對(duì)系統(tǒng)本身都會(huì)拒絕,這下我就徹底“寒”了,我放在外地的服務(wù)器可怎么弄啊?
大家這里一定要小心,配置稍不注意就可能讓你的服務(wù)器拒絕所有的服務(wù)。筆者在一臺(tái)裝了Freebsd 5.0 Release的服務(wù)器上進(jìn)行了測(cè)試。
二、配置IPFW 其實(shí)我們完全可以把安裝IPFW看作一次軟件升級(jí)的過(guò)程,在Windows里面,如果要升級(jí)一款軟件,則需要去下載升級(jí)包,然后安裝;在Freebsd中升級(jí)軟件過(guò)程也是如此,但我們今天升級(jí)的這個(gè)功能是系統(tǒng)本身已經(jīng)內(nèi)置了的,我們只需要利用這個(gè)功能即可。打開(kāi)這個(gè)功能之前,我們還要做一些準(zhǔn)備工作。
下面開(kāi)始配置IPFW的基本參數(shù)。
Step1:準(zhǔn)備工作
在命令提示符下進(jìn)行如下操作:
#cd /sys/i386/conf
如果提示沒(méi)有這個(gè)那說(shuō)明你的系統(tǒng)沒(méi)有安裝ports服務(wù),要記住裝上。
#cp GENERIC ./kernel_IPFW
Step2:內(nèi)核規(guī)則
用編輯器打開(kāi)kernel_IPFW這個(gè)文件,在該文件的末尾加入以下四行內(nèi)容:
options IPFIREWALL
將包過(guò)濾部分的代碼編譯進(jìn)內(nèi)核。
options IPFIREWALL_VERBOSE
啟用通過(guò)Syslogd記錄的日志;如果沒(méi)有指定這個(gè)選項(xiàng),即使你在過(guò)濾規(guī)則中指定了記錄包,也不會(huì)真的記錄它們。
options IPFIREWALL_VERBOSE_LIMIT=10
限制通過(guò)Syslogd記錄的每項(xiàng)包規(guī)則的記錄條數(shù)。如果你受到了大量的攻擊,想記錄防火墻的活動(dòng),但又不想由于Syslog洪水一般的記錄而導(dǎo)致你的日記寫入失敗,那么這個(gè)選項(xiàng)將會(huì)很有用。有了這條規(guī)則,當(dāng)規(guī)則鏈中的某一項(xiàng)達(dá)到限制數(shù)值時(shí),它所對(duì)應(yīng)的日志將不再記錄。
options IPFIREWALL_DEFAULT_TO_ACCEPT
這句是最關(guān)鍵的。將把默認(rèn)的規(guī)則動(dòng)作從 “deny” 改為 “allow”。這句命令的作用是,在默認(rèn)狀態(tài)下,IPFW會(huì)接受任何的數(shù)據(jù),也就是說(shuō)服務(wù)器看起來(lái)像沒(méi)有防火墻一樣,如果你需要什么規(guī)則,在安裝完成后直接添加就可以了。
輸入完成后保存kernel_IPFW文件并退出。
三、編譯系統(tǒng)內(nèi)核 由于Freebsd和Linux一樣,都是公開(kāi)源代碼的操作系統(tǒng),不像Windows那樣代碼是封裝了的,出了問(wèn)題我們只能猜測(cè),或者咨詢微軟公司;由于Freebsd系統(tǒng)內(nèi)核在不斷升級(jí),我們?yōu)榱耸褂眯掳姹局械墓δ埽蛘叨ㄖ埔粋€(gè)更高效、更穩(wěn)定的系統(tǒng),通常需要編譯系統(tǒng)內(nèi)核。
當(dāng)然,我們?cè)谶@里編譯內(nèi)核,是為了能得到一個(gè)更高效的系統(tǒng),而不是使用新版本的功能;
在編譯的過(guò)程中,可能會(huì)提示一些錯(cuò)誤,為了盡可能減少錯(cuò)誤提示,我們已將配置文件縮減到了最少,如果再出現(xiàn)什么錯(cuò)誤提示,請(qǐng)仔細(xì)檢查是否有輸入錯(cuò)誤等細(xì)小問(wèn)題。所需的命令
在命令行上執(zhí)行如下命令:
#/usr/sbin/config kernel_IPFW
執(zhí)行結(jié)束后會(huì)出現(xiàn)如下提示:Kernel build directory is ../compile/kernel_IPFW Don`t forget to do a make depend`
#cd ../compile/kernel_IPFW
在這個(gè)地方注意一下,F(xiàn)reebsd 4.X版本是../../compile/kernel_IPFW,但Freebsd 5.0版本卻是../compile/kernel_IPFW。
#make
#make installStep2:開(kāi)始編譯內(nèi)核
根據(jù)系統(tǒng)性能差異,時(shí)間也有不同,普通雙P4 XEON 1GB內(nèi)存的服務(wù)器大約5分鐘左右即可完成。
四、加載啟動(dòng)項(xiàng)
編譯完成了,我們要讓系統(tǒng)自動(dòng)啟動(dòng)IPFW并記錄日志,需要進(jìn)行如下操作:
Step1:編輯器編輯/etc/rc.conf
加入如下參數(shù):
firewall_enable=`YES`
激活Firewall防火墻
firewall_script=`/etc/rc.firewall`
Firewall防火墻的默認(rèn)腳本
firewall_type=`/etc/ipfw.conf`
Firewall自定義腳本
firewall_quiet=`NO`
啟用腳本時(shí),是否顯示規(guī)則信息;假如你的防火墻腳本已經(jīng)不會(huì)再有修改,那么就可以把這里設(shè)置成“YES”了。
firewall_logging_enable=`YES`
啟用Firewall的Log記錄
Step2:編輯/etc/syslog.conf文件
在文件最后加入如下內(nèi)容:
!ipfw
*.* /var/log/ipfw.log
這行的作用是將IPFW的日志寫到/var/log/ipfw.log文件里,當(dāng)然,你也可以為日志文件指定其他目錄。
以上步驟完成后重啟電腦。
五、使用并保存規(guī)則
完成后,你就會(huì)發(fā)現(xiàn)你能用SSH登錄你的遠(yuǎn)程服務(wù)器了。
Step1:測(cè)試
剛登錄的時(shí)候你不會(huì)發(fā)現(xiàn)你的系統(tǒng)發(fā)生了什么變化,但你可以試試以下這個(gè)命令:#ipfw show,將輸出以下結(jié)果:65535 322 43115 allow ip from any to any。它告訴我們,IPFW已經(jīng)成功啟用,而且允許任何的連接。
Step2:使用
在命令提示符下輸入如下命令:#ipfw add 10001 deny all from 218.249.20.135 to any。
拒絕來(lái)自218.249.20.135的任何服務(wù),執(zhí)行完成后,你就會(huì)發(fā)現(xiàn)來(lái)自IP218.249.20.135的所有服務(wù)都會(huì)被拒絕。
Step3:保存
把這句代碼加在/etc/rc.firewall文件里:ipfw add 10001 deny all from 218.249.20.135 to any,運(yùn)行如下這個(gè)命令:#sh /etc/rc.firew
all
表示保存到rc.firewall里面時(shí),不需要前面的#號(hào),然后重新載入IPFW規(guī)則。
或者重啟一次你的系統(tǒng),你的IPFW就生效了,只要你不手動(dòng)解除,來(lái)自218.249.20.135的所有信息全部都會(huì)被拒絕。
一、Freebsd的魅力
發(fā)現(xiàn)Freebsd的好處是在一次偶然的測(cè)試中,在LAN里虛擬了一個(gè)Internet,用一臺(tái)Windows客戶端分別向一臺(tái)Windows Server、Linux Server和一臺(tái)Freebsd在無(wú)任何防范措施的情況下發(fā)送Syn Flood數(shù)據(jù)包(常見(jiàn)的DDoS攻擊主要靠向服務(wù)器發(fā)送Syn Flood數(shù)據(jù)完成)。Windows在達(dá)到10個(gè)包的時(shí)候就完全停止響應(yīng)了,Linux在達(dá)到10個(gè)數(shù)據(jù)包的時(shí)候開(kāi)始連接不正常,而Freebsd卻能承受達(dá)100個(gè)以上的Syn Flood數(shù)據(jù)包。筆者決定將公司所有的Web服務(wù)器全換為Freebsd平臺(tái)。
在使用Freebsd后,的確過(guò)了一段時(shí)間的安穩(wěn)日子。不過(guò)近日又有用戶再次反映網(wǎng)站不能正常訪問(wèn),表現(xiàn)癥狀為用戶打開(kāi)網(wǎng)頁(yè)速度緩慢,或者直接顯示為找不到網(wǎng)站。用netstat ?a查看到來(lái)自某IP的連接剛好50個(gè),狀態(tài)均為FIN_WAIT 1,這是屬于明顯的DDoS攻擊,看來(lái)Freebsd沒(méi)有防火墻也不是萬(wàn)能的啊,于是就想到了裝防火墻。
看了N多資料,了解到Freebsd下最常見(jiàn)的防火墻叫IP FireWall,中文字面意思叫IP防火墻,簡(jiǎn)稱IPFW。但如果要使用IPFW則需要編譯Freebsd系統(tǒng)內(nèi)核。出于安全考慮,在編譯結(jié)束后, IPFW是默認(rèn)拒絕所有網(wǎng)絡(luò)服務(wù),包括對(duì)系統(tǒng)本身都會(huì)拒絕,這下我就徹底“寒”了,我放在外地的服務(wù)器可怎么弄啊?
大家這里一定要小心,配置稍不注意就可能讓你的服務(wù)器拒絕所有的服務(wù)。筆者在一臺(tái)裝了Freebsd 5.0 Release的服務(wù)器上進(jìn)行了測(cè)試。
二、配置IPFW 其實(shí)我們完全可以把安裝IPFW看作一次軟件升級(jí)的過(guò)程,在Windows里面,如果要升級(jí)一款軟件,則需要去下載升級(jí)包,然后安裝;在Freebsd中升級(jí)軟件過(guò)程也是如此,但我們今天升級(jí)的這個(gè)功能是系統(tǒng)本身已經(jīng)內(nèi)置了的,我們只需要利用這個(gè)功能即可。打開(kāi)這個(gè)功能之前,我們還要做一些準(zhǔn)備工作。
下面開(kāi)始配置IPFW的基本參數(shù)。
Step1:準(zhǔn)備工作
在命令提示符下進(jìn)行如下操作:
#cd /sys/i386/conf
如果提示沒(méi)有這個(gè)那說(shuō)明你的系統(tǒng)沒(méi)有安裝ports服務(wù),要記住裝上。
#cp GENERIC ./kernel_IPFW
Step2:內(nèi)核規(guī)則
用編輯器打開(kāi)kernel_IPFW這個(gè)文件,在該文件的末尾加入以下四行內(nèi)容:
options IPFIREWALL
將包過(guò)濾部分的代碼編譯進(jìn)內(nèi)核。
options IPFIREWALL_VERBOSE
啟用通過(guò)Syslogd記錄的日志;如果沒(méi)有指定這個(gè)選項(xiàng),即使你在過(guò)濾規(guī)則中指定了記錄包,也不會(huì)真的記錄它們。
options IPFIREWALL_VERBOSE_LIMIT=10
限制通過(guò)Syslogd記錄的每項(xiàng)包規(guī)則的記錄條數(shù)。如果你受到了大量的攻擊,想記錄防火墻的活動(dòng),但又不想由于Syslog洪水一般的記錄而導(dǎo)致你的日記寫入失敗,那么這個(gè)選項(xiàng)將會(huì)很有用。有了這條規(guī)則,當(dāng)規(guī)則鏈中的某一項(xiàng)達(dá)到限制數(shù)值時(shí),它所對(duì)應(yīng)的日志將不再記錄。
options IPFIREWALL_DEFAULT_TO_ACCEPT
這句是最關(guān)鍵的。將把默認(rèn)的規(guī)則動(dòng)作從 “deny” 改為 “allow”。這句命令的作用是,在默認(rèn)狀態(tài)下,IPFW會(huì)接受任何的數(shù)據(jù),也就是說(shuō)服務(wù)器看起來(lái)像沒(méi)有防火墻一樣,如果你需要什么規(guī)則,在安裝完成后直接添加就可以了。
輸入完成后保存kernel_IPFW文件并退出。
三、編譯系統(tǒng)內(nèi)核 由于Freebsd和Linux一樣,都是公開(kāi)源代碼的操作系統(tǒng),不像Windows那樣代碼是封裝了的,出了問(wèn)題我們只能猜測(cè),或者咨詢微軟公司;由于Freebsd系統(tǒng)內(nèi)核在不斷升級(jí),我們?yōu)榱耸褂眯掳姹局械墓δ埽蛘叨ㄖ埔粋€(gè)更高效、更穩(wěn)定的系統(tǒng),通常需要編譯系統(tǒng)內(nèi)核。
當(dāng)然,我們?cè)谶@里編譯內(nèi)核,是為了能得到一個(gè)更高效的系統(tǒng),而不是使用新版本的功能;
在編譯的過(guò)程中,可能會(huì)提示一些錯(cuò)誤,為了盡可能減少錯(cuò)誤提示,我們已將配置文件縮減到了最少,如果再出現(xiàn)什么錯(cuò)誤提示,請(qǐng)仔細(xì)檢查是否有輸入錯(cuò)誤等細(xì)小問(wèn)題。所需的命令
在命令行上執(zhí)行如下命令:
#/usr/sbin/config kernel_IPFW
執(zhí)行結(jié)束后會(huì)出現(xiàn)如下提示:Kernel build directory is ../compile/kernel_IPFW Don`t forget to do a make depend`
#cd ../compile/kernel_IPFW
在這個(gè)地方注意一下,F(xiàn)reebsd 4.X版本是../../compile/kernel_IPFW,但Freebsd 5.0版本卻是../compile/kernel_IPFW。
#make
#make installStep2:開(kāi)始編譯內(nèi)核
根據(jù)系統(tǒng)性能差異,時(shí)間也有不同,普通雙P4 XEON 1GB內(nèi)存的服務(wù)器大約5分鐘左右即可完成。
四、加載啟動(dòng)項(xiàng)
編譯完成了,我們要讓系統(tǒng)自動(dòng)啟動(dòng)IPFW并記錄日志,需要進(jìn)行如下操作:
Step1:編輯器編輯/etc/rc.conf
加入如下參數(shù):
firewall_enable=`YES`
激活Firewall防火墻
firewall_script=`/etc/rc.firewall`
Firewall防火墻的默認(rèn)腳本
firewall_type=`/etc/ipfw.conf`
Firewall自定義腳本
firewall_quiet=`NO`
啟用腳本時(shí),是否顯示規(guī)則信息;假如你的防火墻腳本已經(jīng)不會(huì)再有修改,那么就可以把這里設(shè)置成“YES”了。
firewall_logging_enable=`YES`
啟用Firewall的Log記錄
Step2:編輯/etc/syslog.conf文件
在文件最后加入如下內(nèi)容:
!ipfw
*.* /var/log/ipfw.log
這行的作用是將IPFW的日志寫到/var/log/ipfw.log文件里,當(dāng)然,你也可以為日志文件指定其他目錄。
以上步驟完成后重啟電腦。
五、使用并保存規(guī)則
完成后,你就會(huì)發(fā)現(xiàn)你能用SSH登錄你的遠(yuǎn)程服務(wù)器了。
Step1:測(cè)試
剛登錄的時(shí)候你不會(huì)發(fā)現(xiàn)你的系統(tǒng)發(fā)生了什么變化,但你可以試試以下這個(gè)命令:#ipfw show,將輸出以下結(jié)果:65535 322 43115 allow ip from any to any。它告訴我們,IPFW已經(jīng)成功啟用,而且允許任何的連接。
Step2:使用
在命令提示符下輸入如下命令:#ipfw add 10001 deny all from 218.249.20.135 to any。
拒絕來(lái)自218.249.20.135的任何服務(wù),執(zhí)行完成后,你就會(huì)發(fā)現(xiàn)來(lái)自IP218.249.20.135的所有服務(wù)都會(huì)被拒絕。
Step3:保存
把這句代碼加在/etc/rc.firewall文件里:ipfw add 10001 deny all from 218.249.20.135 to any,運(yùn)行如下這個(gè)命令:#sh /etc/rc.firew
all
表示保存到rc.firewall里面時(shí),不需要前面的#號(hào),然后重新載入IPFW規(guī)則。
或者重啟一次你的系統(tǒng),你的IPFW就生效了,只要你不手動(dòng)解除,來(lái)自218.249.20.135的所有信息全部都會(huì)被拒絕。
相關(guān)文章:
1. 在FreeBSD上運(yùn)行Windows軟件2. FreeBSD連載(69):使用smbclient訪問(wèn)Windows資源3. freebsd下重啟網(wǎng)絡(luò)相關(guān)命令分析4. FreeBSD連載(68):根據(jù)Windows網(wǎng)絡(luò)設(shè)置Samba5. FreeBSD連載(49):進(jìn)入X Window6. FreeBSD連載(63):集成Unix和Windows的方式7. freebsd 常用命令8. 在FreeBSD上如何安裝Bugzilla?9. FreeBSD配置防火墻開(kāi)啟SSH服務(wù)的方法10. freebsd 分區(qū)的相關(guān)知識(shí)總結(jié)
排行榜
