電子百科
netfilter定義了協(xié)議棧中的檢查點和檢查點上引用的數(shù)據(jù)結(jié)構(gòu)以及對這些數(shù)據(jù)結(jié)構(gòu)引用的過程。檢查點由宏NF_HOOK定義。
?
netfilter IP 信息包過濾系統(tǒng)是一種功能強大的工具,可用于添加、編輯和除去規(guī)則,這些規(guī)則是在做信息包過濾決定時,防火墻所遵循和組成的規(guī)則。這些規(guī)則存儲在專用的信息包過濾表中,而這些表集成在 Linux 內(nèi)核中。在信息包過濾表中,規(guī)則被分組放在我們所謂的 鏈(chain)中。我馬上會詳細討論這些規(guī)則以及如何建立這些規(guī)則并將它們分組在鏈中。
雖然 netfilter IP 信息包過濾系統(tǒng)被稱為單個實體,但它實際上由兩個組件 netfilter和 iptables 組成。
netfilter 組件也稱為 內(nèi)核空間(kernelspace),是內(nèi)核的一部分,由一些信息包過濾表組成,這些表包含內(nèi)核用來控制信息包過濾處理的規(guī)則集。
iptables 組件是一種工具,也稱為 用戶空間(userspace),它使插入、修改和除去信息包過濾表中的規(guī)則變得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否則需要從 netfilter.org 下載該工具并安裝使用它。
通過使用用戶空間,可以構(gòu)建自己的定制規(guī)則,這些規(guī)則存儲在內(nèi)核空間的信息包過濾表中。這些規(guī)則具有 目標,它們告訴內(nèi)核對來自某些源、前往某些目的地或具有某些協(xié)議類型的信息包做些什么。如果某個信息包與規(guī)則匹配,那么使用目標 ACCEPT 允許該信息包通過。還可以使用目標 DROP 或 REJECT 來阻塞并殺死信息包。對于可對信息包執(zhí)行的其它操作,還有許多其它目標。
根據(jù)規(guī)則所處理的信息包的類型,可以將規(guī)則分組在鏈中。處理入站信息包的規(guī)則被添加到 INPUT 鏈中。處理出站信息包的規(guī)則被添加到 OUTPUT 鏈中。處理正在轉(zhuǎn)發(fā)的信息包的規(guī)則被添加到 FORWARD 鏈中。這三個鏈是基本信息包過濾表中內(nèi)置的缺省主鏈。另外,還有其它許多可用的鏈的類型(如 PREROUTING 和 POSTROUTING ),以及提供用戶定義的鏈。每個鏈都可以有一個 策略,它定義“缺省目標”,也就是要執(zhí)行的缺省操作,當信息包與鏈中的任何規(guī)則都不匹配時,執(zhí)行此操作。
建立規(guī)則并將鏈放在適當?shù)奈恢弥螅涂梢蚤_始進行真正的信息包過濾工作了。這時內(nèi)核空間從用戶空間接管工作。當信息包到達防火墻時,內(nèi)核先檢查信息包的頭信息,尤其是信息包的目的地。我們將這個過程稱為 路由。
如果信息包源自外界并前往系統(tǒng),而且防火墻是打開的,那么內(nèi)核將它傳遞到內(nèi)核空間信息包過濾表的 INPUT 鏈。如果信息包源自系統(tǒng)內(nèi)部或系統(tǒng)所連接的內(nèi)部網(wǎng)上的其它源,并且此信息包要前往另一個外部系統(tǒng),那么信息包被傳遞到 OUTPUT 鏈。類似的,源自外部系統(tǒng)并前往外部系統(tǒng)的信息包被傳遞到 FORWARD 鏈。
接下來,將信息包的頭信息與它所傳遞到的鏈中的每條規(guī)則進行比較,看它是否與某條規(guī)則完全匹配。如果信息包與某條規(guī)則匹配,那么內(nèi)核就對該信息包執(zhí)行由該規(guī)則的目標指定的操作。但是,如果信息包與這條規(guī)則不匹配,那么它將與鏈中的下一條規(guī)則進行比較。最后,如果信息包與鏈中的任何規(guī)則都不匹配,那么內(nèi)核將參考該鏈的策略來決定如何處理該信息包。理想的策略應該告訴內(nèi)核 DROP 該信息包。
netfilter 的最大優(yōu)點是它可以配置有狀態(tài)的防火墻,這是 ipfwadm 和 ipchains 等以前的工具都無法提供的一種重要功能。有狀態(tài)的防火墻能夠指定并記住為發(fā)送或接收信息包所建立的連接的狀態(tài)。防火墻可以從信息包的連接跟蹤狀態(tài)獲得該信息。在決定新的信息包過濾時,防火墻所使用的這些狀態(tài)信息可以增加其效率和速度。這里有四種有效狀態(tài),名稱分別為 ESTABLISHED 、 INVALID 、 NEW 和 RELATED 。
狀態(tài) ESTABLISHED 指出該信息包屬于已建立的連接,該連接一直用于發(fā)送和接收信息包并且完全有效。 INVALID 狀態(tài)指出該信息包與任何已知的流或連接都不相關(guān)聯(lián),它可能包含錯誤的數(shù)據(jù)或頭。狀態(tài) NEW 意味著該信息包已經(jīng)或?qū)有碌倪B接,或者它與尚未用于發(fā)送和接收信息包的連接相關(guān)聯(lián)。最后, RELATED 表示該信息包正在啟動新連接,以及它與已建立的連接相關(guān)聯(lián)。
netfilter 的另一個重要優(yōu)點是,它使用戶可以完全控制防火墻配置和信息包過濾。您可以定制自己的規(guī)則來滿足您的特定需求,從而只允許您想要的網(wǎng)絡流量進入系統(tǒng)。
另外,netfilter 是免費的,這對于那些想要節(jié)省費用的人來說十分理想,它可以代替昂貴的防火墻解決方案。