基於Linux系統的包過濾防火牆(1)(轉)

amyz發表於2007-08-13
基於Linux系統的包過濾防火牆(1)(轉)[@more@]

  第1 章、基於路由器的包過濾防火牆

  1.1 包過濾防火牆的一般概念

  1.1.1 什麼是包過濾防火牆

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

  在Linux系統下,包過濾功能是內建於核心的(作為一個核心模組,或者直接內建),同時還有一些可以運用於資料包之上的技巧,不過最常用的依然是檢視包頭以決定包的命運。

  1.1.2 包過濾防火牆的工作層次

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

  1.1.3 包過濾防火牆的工作原理

  (1)使用過濾器。資料包過濾用在內部主機和外部主機之間,    過濾系統是一臺路由器或是一臺主機。過濾系統根據過濾規則來決定是否讓資料包透過。用於過濾資料包的路由器被稱為過濾路由器。

  資料包過濾是透過對資料包的IP頭和TCP頭或UDP頭的檢查來實現的,主要資訊有:

  * IP源地址

  * IP目標地址

  * 協議(TCP包、UDP包和ICMP包)

  * TCP或UDP包的源埠

  * TCP或UDP包的目標埠

  * ICMP訊息型別

  * TCP包頭中的ACK位

  * 資料包到達的埠

  * 資料包出去的埠

  在TCP/IP中,存在著一些標準的服務埠號,例如,HTTP的埠號為80。透過遮蔽特定的埠可以禁止特定的服務。包過濾系統可以阻塞內部主機和外部主機或另外一個網路之間的連線,例如,可以阻塞一些被視為是有敵意的或不可信的主機或網路連線到內部網路中。

  (2)過濾器的實現。資料包過濾一般使用過濾路由器來實現,這種路由器與普通的路由器有所不同。

  普通的路由器只檢查資料包的目標地址,並選擇一個達到目的地址的最佳路徑。它處理資料包是以目標地址為基礎的,存在著兩種可能性:若路由器可以找到一個路徑到達目標地址則傳送出去;若路由器不知道如何傳送資料包則通知資料包的傳送者“資料包不可達”。

  過濾路由器會更加仔細地檢查資料包,除了決定是否有到達目標地址的路徑外,還要決定是否應該傳送資料包。“應該與否”是由路由器的過濾策略決定並強行執行的。

  路由器的過濾策略主要有:

  * 拒絕來自某主機或某網段的所有連線。

  * 允許來自某主機或某網段的所有連線。

  * 拒絕來自某主機或某網段的指定埠的連線。

  * 允許來自某主機或某網段的指定埠的連線。

  * 拒絕本地主機或本地網路與其它主機或其它網路的所有連線。

  * 允許本地主機或本地網路與其它主機或其它網路的所有連線。

  * 拒絕本地主機或本地網路與其它主機或其它網路的指定埠的連線。

  * 允許本地主機或本地網路與其它主機或其它網路的指定埠的連線。

  1.1.4 包過濾器操作的基本過程

  下面做個簡單的敘述:

  (1)包過濾規則必須被包過濾裝置埠儲存起來。

  (2)當包到達埠時,對包報頭進行語法分析。大多數包過濾裝置只檢查IP、TCP、或UDP報頭中的欄位。

  (3)包過濾規則以特殊的方式儲存。應用於包的規則的順序與包過濾器規則儲存順序必須相同。

  (4)若一條規則阻止包傳輸或接收,則此包便不被允許。

  (5)若一條規則允許包傳輸或接收,則此包便可以被繼續處理。

  (6)若包不滿足任何一條規則,則此包便被阻塞。

  1.1.5 包過濾技術的優缺點

  (1)優點:

  →對於一個小型的、不太複雜的站點,包過濾比較容易實現。

  →因為過濾路由器工作在IP層和TCP層,所以處理包的速度比代理伺服器快。

  →過濾路由器為使用者提供了一種透明的服務,使用者不需要改變客戶端的任何應用程式,也不需要使用者學習任何新的東西。因為過濾路由器工作在IP層和TCP層,而IP層和TCP層與應用層的問題毫不相關。所以,過濾路由器有時也被稱為“包過濾閘道器”或“透明閘道器”,之所被稱為閘道器,是因為包過濾路由器和傳統路由器不同,它涉及到了傳輸層。

  →過濾路由器在價格上一般比代理伺服器便宜。

  (2)缺點:

  →一些包過濾閘道器不支援有效的使用者認證。

  →規則表很快會變得很大而且複雜,規則很難測試。隨著表的增大和複雜性的增加,規則結構出現漏洞的可能 性也會增加。

  →這種防火牆最大的缺陷是它依賴一個單一的部件來保護系統。如果這個部件出現了問題,會使得網路大門敞開,而使用者其至可能還不知道。

  →在一般情況下,如果外部使用者被允許訪問內部主機,則它就可以訪問內部網上的任何主機。

  →包過濾防火牆只能阻止一種型別的IP欺騙,即外部主機偽裝內部主機的IP,對於外部主機偽裝外部主機的IP欺騙卻不可能阻止,而且它不能防止DNS欺騙。

  雖然,包過濾防火牆有如上所述的缺點,但是在管理良好的小規模網路上,它能夠正常的發揮其作用。一般情況下,人們不單獨使用包過濾閘道器,而是將它和其他裝置(如堡壘主機等)聯合使用。

  1.2 Netfilter/iptables架構

  1.2.1 Linux下的包過濾防火牆管理工具

  從1.1核心開始,Linux系統就已經具有包過濾功能了,隨著Linux核心版本的不斷升級,Linux下的包過濾系統經歷瞭如下3個階段:

  → 在2.0的核心中,採用ipfwadm來操作核心包過濾規則。

  → 在2.2的核心中,採用ipchains來控制核心包過濾規則。

  → 在2.4核心中,採用一個全新的核心包過濾管理工具—iptables.

  Linux因其健壯性、可靠性、靈活性以及幾乎無限範圍的可定製性而在IT界變得非常受歡迎。Linux具有許多內建的能力,使開發人員可以根據自己的需要定製其工具、行為和外觀,而無需昂貴的第三方工具。如果Linux系統連線到因特網或LAN、伺服器或連線LAN和因特網的代理伺服器,所要用到的一種內建能力就是針對網路上Linux系統的防火牆配置。可以在Netfilter/iptables IP資訊包過濾系統(它整合在2.4.x版本的Linux核心中)的幫助下運用這種能力。Netfilter/iptables是與最新的2.4.x版本 Linux核心整合的IP資訊包過濾系統。

  與ipfwadm和ipchains這樣的Linux資訊包過濾方案相比,Netfilter/iptables資訊包過濾系統是最新的解決方案,使使用者更易於理解其工作原理,也具有更為強大的功能。對於Linux系統管理員、網路管理員以及家庭使用者(他們想要根據自己特定的需求來配置防火牆、在防火牆解決方案上節省費用和對IP資訊包過濾具有完全控制權)來說,Netfilter/iptables系統十分理想,且更容易被使用。

  1.2.2 新一代的Netfilter網路底層架構

  Netfilter是一種核心中用於擴充套件各種網路服務的結構化底層構架。Netfilter的設計思想是生成一個模組結構使之能夠比較容易的擴充套件。新的特性加入到核心中並不需要重新啟動核心。這樣,可以透過簡單的構造一個核心模組來實現網路新特性的擴充套件。為底層的網路特性擴充套件帶來了極大的便利,使更多從事網路底層研發的人員能夠集中精力實現新的網路特性。

  事實上,我們可以將Netfilter視為網路協議堆疊中可以讓其它模組操作網路資料包的一系列“鉤子”,在資料包透過協議堆疊的某些特定的點上, Netfilter框架允許一個模組轉發或丟棄資料包、透過某種方式改變資料包、在使用者空間(非核心模式)對包進行排隊,當然也可以根本不去幹涉它。

  (1)Netfilter/iptables系統的含義。Linux 2.4核心中Netfilter是新的用來實現防火牆的過濾器。 iptables是用來指定Netfilter規則的使用者工具。

  Iptables只是一個管理核心包過濾的工具,它為使用者配置防火牆規則提供了方便。

  Iptables可以加入、插入或刪除核心包過濾表格(鏈)中的規則。實際上真正來執行這些規則的netfilter及其相關模組(如iptables模組和nat模組等)。

  因此,要使用Netfilter/iptables系統,必須首先有2.4版本核心的相關支援,同時必須安裝iptables軟體包。在Red Hat 9.0發行版中,此係統是預設的配置。

  (2)使用Netfilter/iptables替代ipchains的原因:

  →連線跟蹤

  →自動碎片重灌

  →改良的匹配規則

  →增強的日誌功能

  →允許撕裂包中的任何資訊

  →使用者佇列允許使用者空間對包進行程式設計

  →支援內建包轉發而捨棄了IPMASQANDM

  (3)Netfilter/iptables系統的主要功能

  →狀態包過濾(連線跟蹤)

  →各種網路地址翻譯

  →靈活、易擴充套件的急智機制

  →大量的增強型補丁包

  (4)Netfilter/iptables的用途

  →建立Internet防火牆和基於狀態的包過濾

  →用NAT和偽裝(masquerading)共享上網

  →用NAT實現透明代理

  →用修改IP包頭的ToS欄位來實現更復雜的功能

  →和tc+iprouter2配合使用可以實現QoS路由

  (5)Netfilter/iptables系統的優點。Netfilter/iptables的最大優點是它可以配置有狀態的防火牆,這是 ipfwadm和ipchains等以前的工具都無法提供的一種重要功能。有狀態的防火牆能夠指定並記住為傳送或接收資訊包所建立的連線的狀態。防火牆可以從資訊包的連線跟蹤狀態獲得該資訊。在決定新的資訊包過濾時,防火牆所使用的這些狀態資訊可以增加其效率和速度。有4種有效狀態,名稱分別為 ESTABLISHED、INVALID、NEW和RELATED。其中:

  →狀態ESTABLISHED指出該資訊包屬於已建立的連線,該連線一直用於傳送和接收資訊包並且完全有效。

  →狀態INVALID指出該資訊包與任何已知的流或連線都不相關聯,它可能包含錯誤的資料或頭。

  →狀態NEW意味著該項資訊包已經或將啟動新的連線,或者它與尚味用於傳送和接收資訊包的連線相關聯。

  →狀態RELATED表示該資訊包正在啟動新連線,以及它與已建立的連線相關聯。

  Netfilter/iptables的另一個重要優點是,它使使用者可以完全控制防火牆配置和資訊包過濾。您可以定製自己的規則來懣足您的特定需求,從而只允許您想要的網路流量進入系統。

  此外,Netfilter/iptables是免費的,這對於那些想要節省費用的人來說十分理想,它可以代替昂貴的防火牆解決方案。

  總之,最新的Linux核心2.4.x具有Netfilter/iptables系統這種內建的IP資訊包過濾工具,它使配置防火牆和資訊包過濾變得便宜且方便。Netfilter/iptables系統使其使用者可以完全控制防火牆配置和資訊包過濾。它允許為防火牆建立可定製化的規則來控制資訊包過濾。它還允許配置有狀態的防火牆。

  1.2.3 Netfilter/iptables的核心空間和使用者空間

  雖然netfilter/iptables IP資訊包過濾系統被稱為單個實體,但它實際上由兩個元件netfilter和iptables組成。

  (1)核心空間。Netfilter元件也稱為核心空間(KernelSpace),是核心的一部分,由一些“表”(table)組成,每個表由若干“鏈”組成,而每條鏈中可以有一條或數條規則(rule)。

  (2)使用者空間。Iptables元件是一種工具,也稱為使用者空間(userspace),它使插入、修改和除去資訊包過濾表中的規則變得容易。

  1.2.4 Netfilter/iptables過濾系統是如何工作的

  Netfilter/iptables IP資訊包過濾系統是一種功能強大的工具,可用於新增、編輯和除去規則,這些規則是在做包過濾決定時所遵循的依據。這些規則儲存在專用的資訊包過濾表中,而這些表整合在Linux核心中。在資訊包過濾表中,規則被分組在鏈(chain)中。

  (1)使用者使用iptables命令在使用者空間設定過濾規則。透過使用使用者空間可以構建使用者自己的定製過濾規則,這些規則儲存在核心空間的資訊包過濾表中。這些規則具有目標,它們告訴核心對來自某些源、前往某些目的地或具有某些協議型別的資訊包做些什麼。如果某個資訊包與規則匹配,那麼使用目標 ACCEPT允許該資訊包透過。還可以使用目標DROP或REJECT來阻塞並殺死資訊包。對於可對資訊包執行的其它操作,還有許多其它目標。

  根據規則所處理的資訊包的型別,可以將規則分組在鏈中。

  →處理入站資訊包的規則被新增到INPUT鏈中。

  →處理出站資訊包的規則被新增到OUTPUT鏈中。

  →處理正在轉發的資訊包的規則被新增到FORWARD鏈中。

  這3個鏈是系統預設的表(filter)中內建的3個預設主鏈。每個鏈都有一個策略,它定義預設目標,也就是要執行的預設操作,當資訊包與鏈中的任何規則都不匹配時,執行此操作。

  (2)核心空間接管過濾工作。當規則建立並將鏈放在filter表之後,    就可以開始進行真正的資訊包過濾工作了。這時核心空間從使用者空間接管工作。

  包過濾工作要經過如下的步驟:

  1)路由。當資訊包到達防火牆時,核心先檢查資訊包的頭資訊,尤其是資訊包的目的地。我們將這個過程稱為路由。

  2)根據情況將資料包送往包過濾表(filter)的不同的鏈。

  →如果資訊包源自外界並且資料包的目的地址是本機,而且防火牆是開啟的,那麼核心將它傳遞到核心空間資訊包過濾表的INPUT鏈。

  →如果資訊包源自系統本機,並且此資訊包要前往另一個系統,那麼資訊包被傳遞到OUTPUT鏈。

  →資訊包源自廣域網前往區域網或相反方向的資訊包被傳遞到FORWARD鏈。

  3)規則檢查。將資訊包的頭資訊與它所傳遞到的鏈中的每條規則進行比較,看它是否與某條規則完全匹配。

  →如果資訊包與某條規則匹配,那麼核心就對該資訊包執行由該項規則的目標指定的操作。

  &如果目標為ACCEPT,則允許該資訊包透過,並將該包發給相應的本地程式處理。

  &如果目標為DROP或REJECT,則不允許該資訊包透過,並將該包阻塞並殺死。

  →如果資訊包與這條規則不匹配,那麼它將與鏈中的下一條規則進行比較。

  →最後,如果資訊包與鏈中的任何規則都不匹配,那麼核心將參考該鏈的策略來決定如何處理該資訊包。理想的策略應該告訴核心DROP該資訊包。

  1.2.5 Red Hat linux 9中的Netfilter/iptables

  Red Hat linux 9使用2.4版本的核心,並且核心的編譯選項中包含對Netfilter的支援,同時iptables軟體包是被預設安裝的,所以可以直接使用。

  另外,為了完成轉發功能,必須開啟系統核心的IP轉發功能。使Linux變成路由器。

  在Red Hat中有兩種方法:

  (1)修改核心變數ip_forward

  #echo “1”>;/proc/sys/net/ipv4/ip_forward

  (2)修改指令碼/etc/sysconfig/network。

  將FORWARD_IPV4=false

  改為FORWARD_IPV4=true

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-955584/,如需轉載,請註明出處,否則將追究法律責任。

相關文章