使用Freebsd+IPFW 防小規模DDOS攻擊

原文:http://bao3.pdx.cn/blog/diary,440761.html

使用Freebsd+IPFW 防小規模DDOS攻擊
筆者公司共有10臺Web服務器,使用Redhat Linux 9做爲操做系統,分佈在全國各大城市,主要爲用戶提供HTTP服務。曾經有一段時間很多用戶反映有的服務器訪問速度緩慢,甚至不能訪問,檢查後發現是受到了DDoS攻擊(分佈式拒絕服務攻擊)。因爲服務器分佈太散,不能採用硬件防火牆的方案,雖然IPtables功能很強大,足以應付大部分的攻擊,但 Linux系統自身對DDoS攻擊的防護力原本就弱,只好另想辦法了。
1、Freebsd的魅力
發現Freebsd的好處是在一次偶然的測試中,在LAN裏虛擬了一個Internet,用一臺Windows客戶端分別向一臺Windows Server、Linux Server和一臺Freebsd在無任何防範措施的狀況下發送Syn Flood數據包(常見的DDoS攻擊主要靠向服務器發送Syn Flood數據完成)。Windows在達到10個包的時候就徹底中止響應了,Linux在達到10個數據包的時候開始鏈接不正常,而Freebsd卻能承受達100個以上的Syn Flood數據包。筆者決定將公司全部的Web服務器全換爲Freebsd平臺。
在使用Freebsd後,的確過了一段時間的安穩日子。不過近日又有用戶再次反映網站不能正常訪問,表現症狀爲用戶打開網頁速度緩慢,或者直接顯示爲找不到網站。用netstat ?a查看到來自某IP的鏈接恰好50個,狀態均爲FIN_WAIT 1,這是屬於明顯的DDoS攻擊,看來Freebsd沒有防火牆也不是萬能的啊,因而就想到了裝防火牆。
看了N多資料,瞭解到Freebsd下最多見的防火牆叫IP FireWall,中文字面意思叫IP防火牆,簡稱IPFW。但若是要使用IPFW則須要編譯Freebsd系統內核。出於安全考慮,在編譯結束後, IPFW是默認拒絕全部網絡服務,包括對系統自己都會拒絕,這下我就完全「寒」了,我放在外地的服務器可怎麼弄啊?
你們這裏必定要當心,配置稍不注意就可能讓你的服務器拒絕全部的服務。筆者在一臺裝了Freebsd 5.0 Release的服務器上進行了測試。
2、配置IPFW 其實咱們徹底能夠把安裝IPFW看做一次軟件升級的過程,在Windows裏面,若是要升級一款軟件,則須要去下載升級包,而後安裝;在Freebsd中升級軟件過程也是如此,但咱們今天升級的這個功能是系統自己已經內置了的,咱們只須要利用這個功能便可。打開這個功能以前,咱們還要作一些準備工做。
下面開始配置IPFW的基本參數。
Step1: 準備工做
在命令提示符下進行以下操做:
#cd /sys/i386/conf
若是提示沒有這個那說明你的系統沒有安裝ports服務,要記住裝上。
#cp GENERIC ./kernel_IPFW
Step2: 內核規則
用編輯器打開kernel_IPFW這個文件,在該文件的末尾加入如下四行內容:
options IPFIREWALL
將包過濾部分的代碼編譯進內核。
options IPFIREWALL_VERBOSE
啓用經過Syslogd記錄的日誌;若是沒有指定這個選項,即便你在過濾規則中指定了記錄包,也不會真的記錄它們。
options IPFIREWALL_VERBOSE_LIMIT=10
限制經過Syslogd記錄的每項包規則的記錄條數。若是你受到了大量的攻擊,想記錄防火牆的活動,但又不想因爲Syslog洪水通常的記錄而致使你的日記寫入失敗,那麼這個選項將會頗有用。有了這條規則,當規則鏈中的某一項達到限制數值時,它所對應的日誌將再也不記錄。
options IPFIREWALL_DEFAULT_TO_ACCEPT
這句是最關鍵的。將把默認的規則動做從 「 deny 」 改成 「 allow 」。這句命令的做用是,在默認狀態下,IPFW會接受任何的數據,也就是說服務器看起來像沒有防火牆同樣,若是你須要什麼規則,在安裝完成後直接添加就能夠了。
輸入完成後保存kernel_IPFW文件並退出。
3、編譯系統內核 因爲Freebsd和Linux同樣,都是公開源代碼的操做系統,不像Windows那樣代碼是封裝了的,出了問題咱們只能猜想,或者諮詢微軟公司;因爲Freebsd系統內核在不斷升級,咱們爲了使用新版本中的功能,或者定製一個更高效、更穩定的系統,一般須要編譯系統內核。
固然,咱們在這裏編譯內核,是爲了能獲得一個更高效的系統,而不是使用新版本的功能;
在編譯的過程當中,可能會提示一些錯誤,爲了儘量減小錯誤提示,咱們已將配置文件縮減到了最少,若是再出現什麼錯誤提示,請仔細檢查是否有輸入錯誤等細小問題。所需的命令
在命令行上執行以下命令:
#/usr/sbin/config kernel_IPFW
執行結束後會出現以下提示: Kernel build directory is ../compile/kernel_IPFW Don`t forget to do a make depend `
#cd ../compile/kernel_IPFW
在這個地方注意一下,Freebsd 4.X版本是../../compile/kernel_IPFW,但Freebsd 5.0版本倒是../compile/kernel_IPFW。
#make
#make install Step2 :開始編譯內核
根據系統性能差別,時間也有不一樣,普通雙P4 XEON 1GB內存的服務器大約5分鐘左右便可完成。
4、加載啓動項
編譯完成了,咱們要讓系統自動啓動IPFW並記錄日誌,須要進行以下操做:
Step1:編輯器編輯/etc/rc.conf
加入以下參數:
firewall_enable=`YES`
激活Firewall防火牆
firewall_script=`/etc/rc.firewall`
Firewall防火牆的默認腳本
firewall_type=`/etc/ipfw.conf`
Firewall自定義腳本
firewall_quiet=`NO`
啓用腳本時,是否顯示規則信息;假如你的防火牆腳本已經不會再有修改,那麼就能夠把這裏設置成「YES」了。
firewall_logging_enable=`YES`
啓用Firewall的Log記錄
Step2:編輯/etc/syslog.conf文件
在文件最後加入以下內容:
!ipfw
*.* /var/log/ipfw.log
這行的做用是將IPFW的日誌寫到/var/log/ipfw.log文件裏,固然,你也能夠爲日誌文件指定其餘目錄。
以上步驟完成後重啓電腦。
5、使用並保存規則
完成後,你就會發現你能用SSH登陸你的遠程服務器了。
Step1:測試
剛登陸的時候你不會發現你的系統發生了什麼變化,但你能夠試試如下這個命令:#ipfw show,將輸出如下結果:65535 322 43115 allow ip from any to any。它告訴咱們,IPFW已經成功啓用,並且容許任何的鏈接。
Step2:使用
在命令提示符下輸入以下命令:#ipfw add 10001 deny all from 218.249.20.135 to any。
拒絕來自218.249.20.135的任何服務,執行完成後,你就會發現來自IP218.249.20.135的全部服務都會被拒絕。
Step3:保存
把這句代碼加在/etc/rc.firewall文件裏:ipfw add 10001 deny all from 218.249.20.135 to any,運行以下這個命令:#sh /etc/rc.firew
all
表示保存到rc.firewall裏面時,不須要前面的#號,而後從新載入IPFW規則。
或者重啓一次你的系統,你的IPFW就生效了,只要你不手動解除,來自218.249.20.135的全部信息所有都會被拒絕。
相關文章
相關標籤/搜索