歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> FreeBSD連載(80):構建防火牆

FreeBSD連載(80):構建防火牆

日期:2017/2/28 11:16:17   编辑:關於Unix


構建防火牆
  防火牆的主要目標是控制內部網絡和外部Internet之間的連接,有限制的允許內部網絡中的計算機訪問Internet 上的服務,但限制外部網絡訪問內部計算機。為了實現這個目的,至少需要一個具有兩個(或更多)網絡界面的計算機,它的一個網絡界面連接外部網絡,另一個網絡界面連接內部網絡。然而如何實現限制網絡訪問的方法卻有所不同,主要就可以分為基於IP數據包過濾的防火牆和基於代理的防火牆。ipfw/natd和ipfilter都是基於包過濾和網絡地址轉換的軟件工具,而代理服務器通常通過代理服務器軟件來實現。
  FreeBSD下用於防火牆的最重要的代理軟件是fwtk,它提供了多種代理服務器和統一的認證方式。FreeBSD 上也能運行其他的代理服務器,然而那些代理服務器主要用於代理單個協議,不能單獨用於構建全面功能的防火牆系統,而fwtk則提供了多種代理服務器,為構建一個完整的防火牆系統提供了基礎。然而fwtk不是一個設置完好的防火牆系統,而只是一組構建防火牆的組件。因此要使用fwtk來設定防火牆,仍然是一個復雜的任務。雖然在FreeBSD 下可以使用Ports Collection很方便的編譯安裝fwtk,但問題的關鍵是針對具體的服務進行設置。
  fwtk能在多種Unix系統上運行,很多資料和書籍都已經介紹了其使用和設置方法,這裡就不再介紹fwtk 的使用和設置。這裡主要介紹基於包過濾和NAT的防火牆系統。
選擇防火牆的類型
  早期的包過濾防火牆只是建立在路由器的基礎上,只支持有限的過濾規則,並且不能保持網絡連接狀態。更關鍵的問題是,基於路由器的防火牆不能隱藏內部網絡的拓撲結構,這樣入侵者就比較容易利用包括IP欺騙在內的方式對內部計算機進行攻擊。然而,網絡地址轉換技術可以改變這種情況,使用ipfw/natd或ipfilter可以建立更安全、更高性能的防火牆系統。
  由於NAT改變了內部計算機的IP地址,因此這種方式也可以稱作網絡層代理。而其他直接支持應用程序的代理服務器,如squid,fwtk等,被稱為應用層代理,應用層代理的好處是可以定義更復雜的訪問控制形式,例如針對用戶進行認證等,並能提供較詳細的日志記錄。然而應用層代理的缺點是不方便用戶使用,需要對客戶端軟件進行其他設置,並且不一定會具有所有種類的應用程序的代理程序。
  代理型防火牆的另一個問題是,無法向外部提供網絡服務。這也可以算一個優點,因為向外提供網絡服務就必然降低網絡安全性,然而實際上網絡使用者也希望通過自己的網絡向外發布信息,而不只是簡單的浏覽Internet。當然在提供服務的同時也要保證發布信息服務器的安全,因此希望將其放入防火牆內部。對於需要發布信息的要求,NAT通過映射端口(或地址)就能滿足要求,但代理服務器不能。
  然而,也能設計這樣一種代理服務器,它接收Internet上任意(或受限)主機的訪問,而將代理這些訪問請求訪問內部的服務器,這種代理服務器稱為反向代理服務器。
  在不同類型的防火牆之間進行選擇主要依賴於不同的需要,一般的情況下,內部網絡的使用希望防御外部網絡上的入侵者,但又希望能夠最大可能的使用各種網絡應用程序來訪問Internet,而同時也希望系統配置比較簡單,這樣直接利用FreeBSD提供的ipfw/natd或ipfilter均能滿足這種要求,網絡地址轉換類型的防火牆配置簡潔、性能更高,並且對應用程序的支持相當強。
  有些網絡內部計算機的使用比較混亂,因此希望針對用戶進行認證控制,此後才允許用戶能訪問Internet,並還希望能限制用戶使用訪問Internet的應用種類,進行更復雜的日志記錄,這些情況下就應該選用應用層代理服務器fwtk。極端的情況下,只打算對內部用戶提供有限種類的Internet服務,那麼設置一個專用的應用代理服務器也就滿足要求了,例如設置squid代理WWW訪問。
  然而,在FreeBSD上構建防火牆系統是通過系統提供的各種組件進行組合得到的,采取多種組件進行組合,就能構建更復雜的系統。可以根據不同需要,同時利用包過濾、網絡地址轉換及各種不同應用層代理等多種形式,設置不同復雜程度的防火牆系統,這就是FreeBSD系統的優勢。但在這些情況下,由於FreeBSD提供的這些組件並不是單一軟件,而是相互獨立的多個軟件,因此要設置一個完整的防火牆系統,還需要使用者進行復雜的設置。或者還需要管理員使用一些簡單的腳本程序以輔助分析系統日志,發送警報,甚至對網絡狀態進行實時監控,通過迅速改變防火牆設置來保護內部網絡系統。
  通過分析防火牆的日志記錄,甚至監控通過防火牆的數據流模式,就可以尋找發生過或正在進行的系統入侵行為(通常可能是服務阻塞、暴力攻擊甚至更復雜的特定攻擊模式),進而反饋回防火牆系統,以重新調整設置,增強系統安全性。
防火牆的拓撲結構
  當構建防火牆系統時,首先就要考慮網絡的拓撲結構,這將對防火牆的設置產生影響。簡單的網絡可能只需要一台防火牆設備,而復雜的網絡會需要更多的網絡設備,包括多個防火牆系統。以下給出了最常使用的幾種使用防火牆的網絡拓撲,基本上這些拓撲將適合大多數的情況,可以使用這些拓撲來作為建立自己內部網絡的參考。
  最簡單的情況為使用具備兩個網絡界面的一個防火牆來分隔內部與外部網絡。這種形式簡單易行,適合大部分只需要訪問Internet,而不需要對外發布信息的網絡。一旦要向外發布信息,那麼所提供的服務就會降低網絡的安全性,造成相應的安全問題。
  為了避免在向外提供服務的服務器被侵入之後,影響內部網絡的安全性,就需要將對外提供服務的服務器和只訪問外部網絡的客戶計算機分隔到不同的網絡上。可以采用上面的方式,防火牆使用三個網絡界面,分別用於外部網絡、內部網絡和提供服務的服務器。
  使用單個防火牆的網絡,網絡安全被一台防火牆的安全所限制,更復雜的情況是同時使用多個防火牆系統。例如使用兩個防火牆,第一層防火牆與第二層防火牆之間可以放置允許外部訪問的服務器,這個區域被稱為停火區,即使入侵者進入這個區域,還需要近一步攻擊內部防火牆才能接觸內部網絡。
  如果這兩個防火牆使用不同的技術,如外部防火牆為網絡地址轉換方式,而內部防火牆為代理服務器方式,這樣即使入侵者侵入一個防火牆,但另一個防火牆使用的是完全不同的技術,就給入侵者帶來更大的阻礙,提高整個網絡的安全性。
  利用這些工具,網絡可以設置的非常安全。事實上當前大部分安全問題仍然來源於人的因素,如管理不善造成的口令洩露等。這就使得正常的安全措施無法正常應用,而帶來不可避免的安全問題。
PicoBSD
  軟件方式的防火牆系統的一大問題就是由於系統本身能夠安裝豐富的軟件,因此常常同時被用作其他用途,當用作其他用途時就有可能對本身的安全性造成影響。而硬件防火牆使用專有操作系統,只用作網絡服務,這保證了它不會受到其他方面的影響。對於用作防火牆的計算機,通常應該專用而不要兼作其他用途。因為防火牆的安全性非常重要,內部網絡安全要依賴防火牆的安全來保障,一旦防火牆被入侵,網絡安全也就無法保證了。
  通常安裝的FreeBSD系統都具備硬盤,當具備硬盤的FreeBSD用做防火牆系統時,一方面免不了想提供多種復雜的服務,這樣系統可能會具備潛在的安全漏洞,另一方面入侵者入侵這個系統之後,可以在系統硬盤上隱藏入侵程序以進一步入侵網絡內部。因此對於用作防火牆的FreeBSD系統,最好直接修改系統的rc文件,屏蔽所有的網絡服務。另一種方法是可以嘗試使用軟盤上的FreeBSD系統,這樣計算機本身不具備硬盤,可以從管理上杜絕它用作其他使用的機會,同時也節約了資源。此時FreeBSD系統可以不使用硬盤、顯示器、鍵盤,通過串口進行設置,這樣的系統可以安裝在網絡設備的機架上,專門用作防火牆提供安全服務。
  PicoBSD就是這樣的一個小型FreeBSD系統,能夠安裝在一張軟盤上。PicoBSD提供了四個不同的版本:dial、isp、net和router,dial為撥號訪問Internet的版本,isp為接受撥號訪問的版本,net和router是用於網關和路由器的版本,它們都能夠在386處理器和10M內存下運行(dial版本僅僅需要8MB內存)。雖然從FreeBSD的主頁上,可以得到預定制好的多種PicoBSD的磁盤鏡像,然而由於計算機使用的硬件差異很大,定制好的磁盤鏡像不一定適合使用者的計算機硬件,由於軟盤容量很小,不能容納盡可能多的硬件驅動,每個磁盤鏡像也不能支持太多的硬件設備,因此就需要根據自己計算機的具體硬件環境定制PicoBSD。
  要定制PicoBSD,就需要一個安裝了全部源代碼的FreeBSD系統,並且這個FreeBSD系統的內核要支持偽設備vn及具備對應的設備文件,以便PicoBSD的設置程序能完成磁盤鏡像文件的創建工作。PicoBSD 的源代碼位於系統的/usr/src/release/picobsd目錄下,這個目錄中包含編譯、配置PicoBSD 的說明,以及不同PicoBSD版本的配置。
  定制PicoBSD系統要使用的該目錄的子目錄build中的build腳本,為了制作一個PicoBSD的磁盤鏡像,就需要在這個目錄下啟動build命令。
# cd /usr/src/release/picobsd
# cd build
# ./build


  build命令使用菜單將讓使用者選擇不同的PicoBSD的基本版本,如dial、isp、net和router ,根據不同的目的進行選擇,此後選擇n(no change)就能繼續進行制作鏡像文件的處理。當這個執行過程結束之後,build子目錄下就產生了一個1.44MB的磁盤鏡像文件picobsd.bin。此後可以在FreeBSD 下,或者在DOS下將鏡像文件寫入軟盤,則一個單軟盤的PicoBSD系統就制作完畢了。
  build進程將使用/mnt來裝載vn0設備,因此必須保證/mnt沒有裝載其他文件系統,而且vn0設備沒有被占用。否則就會遇到錯誤。
  然而這樣制作的PicoBSD使用的還是缺省的設置,如果要定制PicoBSD系統,就需要更改缺省設置。首先應該根據具體的需要,選擇功能相近版本的PicoBSD,再進一步更改硬件設置。每一個PicoBSD版本的設置都位於具有相同名字的子目錄下,例如net版本PicoBSD的目錄為/usr/src/release/picobsd/net/ ,在這個目錄之下的conf子目錄為PicoBSD內核的定制目錄,而crunch1目錄中為最後復制到 PicoBSD系統中的應用程序的名字列表。
  當需要針對運行防火牆的計算機更改硬件設置時,需要更改conf子目錄中的內核設置文件PICOBSD,這個文件就是PicoBSD的內核設置文件,可以刪除或增加設置選項,改變對不同硬件設置的支持。如果要更改復制到軟盤鏡象中的執行程序的數量,就需要更改同樣位於該版本目錄下的crunch1子目錄中的文件。只是注意軟盤空間有限,因此只能裝載有限的程序。
  更改完這些設置之後,就可以轉回build子目錄重新定制PicoBSD,這樣產生的鏡象文件就為與硬件設置相符合的設置。將鏡象文件寫入軟盤之後,就可以使用這個軟盤啟動防火牆系統,然後再使用命令行進行手工設置。需要注意的是,此時更改的只是寫在內存文件系統MFS中的文件,而不是在軟盤中文件,因此一旦系統重新啟動,配置就不會保留下來。必須使用update命令將更改後的文件寫回磁盤中之後,設置才能保留回磁盤中。
Copyright © Linux教程網 All Rights Reserved