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

2000年1月21日 13:06 王波

構建防火牆

  防火牆的主要目標是控制內部網路和外部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。歲N搌滷〞p下,只打算對內部用戶提供有限種類的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命令將更改後的檔案寫回磁碟中之後,設置才能保留回磁碟中。