歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> Unix基礎知識

Freebsd+IPFW結合使用防小規模DDOS攻擊的配置方法

由於服務器分布太散,不能采用硬件防火牆的方案,雖然IPtables功能很強大,足以應付大部分的攻擊,但 Linux系統自身對DDoS攻擊的防御力本來就弱,只好另想辦法了。

  一、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的服務器上進行了測試。

  二、配置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文件並退出。
  三、編譯系統內核  由於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 installStep2:開始編譯內核
  根據系統性能差異,時間也有不同,普通雙P4 XEON 1GB內存的服務器大約5分鐘左右即可完成。
  四、加載啟動項
  編譯完成了,我們要讓系統自動啟動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文件裡,當然,你也可以為日志文件指定其他目錄。
  以上步驟完成後重啟電腦。
  五、使用並保存規則
  完成後,你就會發現你能用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的所有信息全部都會被拒絕。
Copyright © Linux教程網 All Rights Reserved