包過濾防火牆

用軟體查看所流經數據包的包頭

包過濾防火牆是用一個軟體查看所流經的數據包的包頭(header),由此決定整個包的命運。它可能會決定丟棄(DROP)這個包,可能會接受(ACCEPT)這個包(讓這個包通過),也可能執行其它更複雜的動作。

簡介


在Linux系統下,包過濾功能是內建於核心的(作為一個核心模塊,或者直接內建),同時還有一些可以運用於數據包之上的技巧,不過最常用的依然是查看包頭以決定包的命運。包過濾防火牆將對每一個接收到的包做出允許或拒絕的決定。具體地講,它針對每一個數據包的包頭,按照包過濾規則進行判定,與規則相匹配的包依據路由信息繼續轉發,否則就丟棄。包過濾是在IP層實現的,包過濾根據數據包的源IP地址、目的IP地址、協議類型(TCP包、UDP包、ICMP包)、源埠、目的埠等包頭信息及數據包傳輸方向等信息來判斷是否允許數據包通過。包過濾也包括與服務相關的過濾,這是指基於特定的服務進行包過濾,由於絕大多數服務的監聽都駐留在特定TCP/UDP埠,因此,為阻斷所有進入特定服務的鏈接,防火牆只需將所有包含特定TCP/UDP目的埠的包丟棄即可。

工作層次


包過濾是一種內置於Linux內核路由功能之上的防火牆類型,其防火牆工作在網路層。

工作原理


使用過濾器

數據包過濾用在內部主機和外部主機之間,過濾系統是一台路由器或是一台主機。過濾系統根據過濾規則來決定是否讓數據包通過。用於過濾數據包的路由器被稱為過濾路由器。

數據包信息的過濾

數據包過濾是通過對數據包的IP頭和TCP頭或UDP頭的檢查來實現的,主要信息有:
IP源地址
IP目標地址
協議(TCP包、UDP包和ICMP包)
TCP或UDP包的源埠
TCP或UDP包的目標埠
ICMP消息類型
TCP包頭中的ACK位
數據包到達的埠
數據包出去的埠
在TCP/IP中,存在著一些標準的服務埠號,例如,HTTP的埠號為80。通過屏蔽特定的埠可以禁止特定的服務。包過濾系統可以阻塞內部主機和外部主機或另外一個網路之間的連接,例如,可以阻塞一些被視為是有敵意的或不可信的主機或網路連接到內部網路中。

過濾器的實現

數據包過濾一般使用過濾路由器來實現,這種路由器與普通的路由器有所不同。
普通的路由器只檢查數據包的目標地址,並選擇一個達到目的地址的最佳路徑。它處理數據包是以目標地址為基礎的,存在著兩種可能性:若路由器可以找到一個路徑到達目標地址則發送出去;若路由器不知道如何發送數據包則通知數據包的發送者“數據包不可達”。
過濾路由器會更加仔細地檢查數據包,除了決定是否有到達目標地址的路徑外,還要決定是否應該發送數據包。“應該與否”是由路由器的過濾策略決定並強行執行的。

過濾策略


拒絕來自某主機或某網段的所有連接。
允許來自某主機或某網段的所有連接。
拒絕來自某主機或某網段的指定埠的連接。
允許來自某主機或某網段的指定埠的連接。
拒絕本地主機或本地網路與其它主機或其它網路的所有連接。
允許本地主機或本地網路與其它主機或其它網路的所有連接。
拒絕本地主機或本地網路與其它主機或其它網路的指定埠的連接。
允許本地主機或本地網路與其它主機或其它網路的指定埠的連接。

基本過程


下面做個簡單的敘述:
(1)包過濾規則必須被包過濾設備埠存儲起來。
(2)當包到達埠時,對包報頭進行語法分析。大多數包過濾設備只檢查IP、TCP、或UDP報頭中的欄位。
(3)包過濾規則以特殊的方式存儲。應用於包的規則的順序與包過濾器規則存儲順序必須相同。
(4)若一條規則阻止包傳輸或接收,則此包便不被允許。
(5)若一條規則允許包傳輸或接收,則此包便可以被繼續處理。
(6)若包不滿足任何一條規則,則此包便被阻塞。

技術優點


對於一個小型的、不太複雜的站點,包過濾比較容易實現。
因為過濾路由器工作在IP層和TCP層,所以處理包的速度比代理伺服器快。
過濾路由器為用戶提供了一種透明的服務,用戶不需要改變客戶端的任何應用程序,也不需要用戶學習任何新的東西。因為過濾路由器工作在IP層和TCP層,而IP層和TCP層與應用層的問題毫不相關。所以,過濾路由器有時也被稱為“包過濾網關”或“透明網關”,之所被稱為網關,是因為包過濾路由器和傳統路由器不同,它涉及到了傳輸層。
過濾路由器在價格上一般比代理伺服器便宜。

技術缺點


一些包過濾網關不支持有效的用戶認證。
規則表很快會變得很大而且複雜,規則很難測試。隨著表的增大和複雜性的增加,規則結構出現漏洞的可能 性也會增加。
這種防火牆最大的缺陷是它依賴一個單一的部件來保護系統。如果這個部件出現了問題,會使得網路大門敞開,而用戶甚至可能還不知道。
在一般情況下,如果外部用戶被允許訪問內部主機,則它就可以訪問內部網上的任何主機。
包過濾防火牆只能阻止一種類型的IP欺騙,即外部主機偽裝內部主機的IP,對於外部主機偽裝外部主機的IP欺騙卻不可能阻止,而且它不能防止DNS欺騙。
雖然,包過濾防火牆有如上所述的缺點,但是在管理良好的小規模網路上,它能夠正常的發揮其作用。一般情況下,人們不單獨使用包過濾網關,而是將它和其他設備(如堡壘主機等)聯合使用。
包過濾的工作是通過查看數據包的源地址、目的地址或埠來實現的,一般來說,它不保持前後連接信息,過濾決定是根據 當前數據包的內容來做的。管理員可以做一個可接受機和服務的列表,以及一個不可接受機和服務的列表。在主機和網路一級,利用數據包過濾很容易實現允許或禁止訪問。
由此不難看出這個層次的防火牆的優點和弱點,由於防火牆只是工作在OSI的第三層(網路層)和第四層(傳輸層),因此包過濾的防火牆的一個非常明顯的優勢就是速度,這是因為防火牆只是去檢查數據報的報頭,而對數據報所攜帶的內容沒有任何形勢的檢查,因此速度非常快。與此同時,這種防火牆的缺點也是顯而易見的,比較關鍵的幾點如下所述。
(1)由於無法對數據報的內容進行核查,一次無法過濾或審核數據報的內容
體現這一問題的一個很簡單的例子就是:對某個埠的開放意味著相應埠對應的服務所能夠提供的全部功能都被開放,即使通過防火牆的數據報有攻擊性,也無法進行控制和阻斷。例如在一個簡單的Web伺服器,而包過濾的防火牆無法對數據報內容進行核查。因此,未打相應補丁的提供Web服務的系統,及時在防火牆的屏蔽之後,也會被攻擊著輕易獲取超級用戶的許可權。
(2)由於此種類型的防火牆工作在較低層次,防火牆本身所能接觸的信息較少,所以它無法提供描述細緻事件的日誌系統。
此類防火牆生成的日誌常常只是包括數據報捕獲的時間、網路層的IP地址、傳輸層的埠等非常原始的信息。至於這個數據報內容是什麼,防火牆不會理會,而這對安全管理員而言恰恰是很關鍵的。因為及時一個非常優秀的系統管理員,一旦陷入大量的通過/屏蔽的原始數據包信息中,往往也是難以理清頭緒,這在發生安全事件時給管理員的安全審計帶來很大的困難。
(3)所有可能用到的埠(尤其是大於1024的埠)都必須開放,對外界暴露,從而極大地增加了被攻擊的可能性
通常對於網路上所有服務所需要的數據包進出防火牆的二埠都要仔細考慮,否則會產生意想不到的情況。然而我們知道,當被防火牆保護的設備與外界通信時,絕大多數應用要求發出請求的系統本身提供一個埠,用來接收外界返回的數據包,而且這個埠一般是在1024到65536之間不確定的,如果不開放這些埠,通信將無法完成,這樣就需要開放1024以上的全部埠,允許這些埠的數據包進出。而這就帶來非常大的安全隱患。例如:用戶網中有一台UNIX伺服器,對內部用戶開放了RPC服務,而這個服務是用在高埠的,那麼這台伺服器非常容易遭到基於RPC應用的攻擊。
(4)如果網路結構比較複雜,那麼對管理員而言配置訪問控制規則將非常困難
網路發展到一定規模時,在路由器上配置訪問控制規則將會非常繁瑣,在一個規則甚至一個地址處出現錯誤都有可能導致整個訪問控制列表無法正常使用。