構筑Linux防火墻之IPtables的概念與用法(2)

目標(target)
我們已經(jīng)知道,目標是由規(guī)則指定的操作,那些與規(guī)則匹配的信息包執(zhí)行這些操作。除了允許用戶定義的目標之外,還有許多可用的目標選項。用于建立高級規(guī)則的目標,如LOG、REDIRECT、MARK、MIRROR 和MASQUERADE等。
狀態(tài)機制
狀態(tài)機制是iptables中.特殊的一部分,其實它不應該叫狀態(tài)機制,因為它只是一種連接跟蹤機制。但是,很多人都認可狀態(tài)機制這個名字。連接跟蹤可以讓netfilter知道某個特定連接淖刺?T誦辛?癰?俚姆闌鵯匠譜鞔?兇刺??頻姆闌鵯劍?韻錄虺莆?刺?闌鵯?。状?闌鵯獎確親刺?闌鵯揭?踩??蛭??市砦頤潛嘈錘?廈艿墓嬖頡?BR>
在iptables里,包是和被跟蹤連接的四種不同狀態(tài)有關的。它們是NEW、ESTABLISHED、RELATED和INVALID。使用--state匹配操作,我們能很容易地控制“誰或什么能發(fā)起新的會話”。
所有在內核中由netfilter的特定框架做的連接跟蹤稱作conntrack(就是connection tracking的首字母縮寫)。conntrack可以作為模塊安裝,也可以作為內核的一部分。大部分情況下,我們需要更詳細的連接跟蹤。因此,conntrack中有許多用來處理TCP、UDP或ICMP協(xié)議的部件。這些模塊從數(shù)據(jù)包中提取詳細的、唯一的信息,因此能保持對每一個數(shù)據(jù)流的跟蹤。這些信息也告知conntrack流當前的狀態(tài)。例如,UDP流一般由他們的目的地址、源地址、目的端口和源端口唯一確定。
在以前的內核里,我們可以打開或關閉重組功能。然而,自從iptables和netfilter,尤其是連接跟蹤被引入內核,這個選項就被取消了。因為沒有包的重組,連接跟蹤就不能正常工作。現(xiàn)在重組已經(jīng)整合入conntrack,并且在conntrack啟動時自動啟動。不要關閉重組功能,除非你要關閉連接跟蹤。
除了本地產(chǎn)生的包由OUTPUT鏈處理外,所有連接跟蹤都是在PREROUTING鏈里進行處理的,意思就是說iptables會在PREROUTING鏈里重新計算所有的狀態(tài)。如果我們發(fā)送一個流的初始化包,狀態(tài)就會在OUTPUT鏈里被設置為NEW,當我們收到回應的包時,狀態(tài)就會在PREROUTING鏈里被設置為ESTABLISHED。如果第一個包不是本地產(chǎn)生的,那就會在PREROUTING鏈里被設置為NEW狀態(tài)。綜上所述,所有狀態(tài)的改變和計算都是在nat表中的PREROUTING鏈和OUTPUT鏈里完成的。
正如前面說的,包的狀態(tài)依據(jù)IP所包含的協(xié)議不同而不同,但在內核外部,也就是用戶空間里,只有4種狀態(tài):NEW、ESTABLISHED、RELATED和INVALID。它們主要是和狀態(tài)匹配一起使用。
NEW
NEW說明這個包是我們看到的第一個包。意思就是,這是conntrack模塊看到的某個連接第一個包,它即將被匹配了。比如,我們看到一個SYN包,是我們所留意的連接的第一個包,就要匹配它。第一個包也可能不是SYN包,但它仍會被認為是NEW狀態(tài)。
ESTABLISHED
ESTABLISHED已經(jīng)注意到兩個方向上的數(shù)據(jù)傳輸,而且會繼續(xù)匹配這個連接的包。處于ESTABLISHED狀態(tài)的連接是非常容易理解的。只要發(fā)送并接到應答,連接就是ESTABLISHED的了。一個連接要從NEW變?yōu)镋STABLISHED,只需要接到應答包即可,不管這個包是發(fā)往防火墻的,還是要由防火墻轉發(fā)的。ICMP的錯誤和重定向等信息包也被看作是ESTABLISHED,只要它們是我們所發(fā)出的信息的應答。
RELATED
RELATED是個比較麻煩的狀態(tài)。當一個連接和某個已處于ESTABLISHED狀態(tài)的連接有關系時,就被認為是RELATED的了。換句話說,一個連接要想是RELATED的,首先要有一個ESTABLISHED的連接。這個ESTABLISHED連接再產(chǎn)生一個主連接之外的連接,這個新的連接就是RELATED的了,當然前提是conntrack模塊要能理解RELATED。ftp是個很好的例子,F(xiàn)TP-data 連接就是和FTP-control有RELATED的。
INVALID
INVALID說明數(shù)據(jù)包不能被識別屬于哪個連接或沒有任何狀態(tài)。有幾個原因可以產(chǎn)生這種情況,比如,內存溢出,收到不知屬于哪個連接的ICMP錯誤信息。一般地,我們DROP這個狀態(tài)的任何東西。
這些狀態(tài)可以一起使用,以便匹配數(shù)據(jù)包。這可以使我們的防火墻非常強壯和有效。以前,我們經(jīng)常打開1024以上的所有端口來放行應答的數(shù)據(jù)。現(xiàn)在,有了狀態(tài)機制,就不需再這樣了。因為我們可以只開放那些有應答數(shù)據(jù)的端口,其他的都可以關閉。這樣就安全多了。
相關文章
- 本著簡明化學習的目的,微魔為大家剔除了許多冗余的內容,提取出盡量多的精華部分成文,和大家共同學習,本文涉及的內容包括如下2012-11-14
- 由于科研要求,我們系里多數(shù)都沒有用Windows系統(tǒng),而用的是Linux,很不習慣,一開機就是黑乎乎的界面,像傳說中的DOS一樣。2011-12-08
- Linux系統(tǒng)中的Netfilter提供了一個抽象、通用化的框架,該框架定義的一個子功能的實現(xiàn)就是包過濾子系統(tǒng)2011-08-26
- LINUX防火墻的打開與關閉方法,學習linux 的朋友可以參考下。2010-12-19
- 構筑Linux防火墻之什么是Linux防火墻2009-03-10
- 2.1 框架圖 -->PREROUTING-->[ROUTE]-->FORWARD-->POSTROUTING--> mangle | mangle ^ mangle nat | &2008-09-08
- 一、防火墻的類型和設計策略 在構造防火墻時,常采用兩種方式,過濾和應用,過濾是指建立過濾規(guī)則,根據(jù)這些規(guī)則及IP包頭的信息,在網(wǎng)絡層判定允許或拒絕包2008-09-08
- 在Linux中,由于有許多不同的防火墻軟件可供選擇,安全性可低可高,最復雜的軟件可提供幾乎無法滲透的保護能力。不過,Linux核心本身內建了一種稱作”偽裝”的簡單機制,除2013-04-17