歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

構築Linux防火牆之IPtables的概念與用法(2)

目標(target)
我們已經知道,目標是由規則指定的操作,那些與規則匹配的信息包執行這些操作。除了允許用戶定義的目標之外,還有許多可用的目標選項。用於建立高級規則的目標,如LOG、REDIRECT、MARK、MIRROR 和MASQUERADE等。
狀態機制
狀態機制是iptables中特殊的一部分,其實它不應該叫狀態機制,因為它只是一種連接跟蹤機制。但是,很多人都認可狀態機制這個名字。連接跟蹤可以讓netfilter知道某個特定連接淖刺T誦辛癰俚姆闌鹎匠譜鞔凶刺頻姆闌鹎劍韻錄虺莆刺闌鹎健W刺闌鹎獎確親刺闌鹎揭踩蛭市砦頤潛嘈錘廈艿墓嬖颉?BR>
在iptables裡,包是和被跟蹤連接的四種不同狀態有關的。它們是NEW、ESTABLISHED、RELATED和INVALID。使用--state匹配操作,我們能很容易地控制“誰或什麼能發起新的會話”。
所有在內核中由netfilter的特定框架做的連接跟蹤稱作conntrack(就是connection tracking的首字母縮寫)。conntrack可以作為模塊安裝,也可以作為內核的一部分。大部分情況下,我們需要更詳細的連接跟蹤。因此,conntrack中有許多用來處理TCP、UDP或ICMP協議的部件。這些模塊從數據包中提取詳細的、唯一的信息,因此能保持對每一個數據流的跟蹤。這些信息也告知conntrack流當前的狀態。例如,UDP流一般由他們的目的地址、源地址、目的端口和源端口唯一確定。
在以前的內核裡,我們可以打開或關閉重組功能。然而,自從iptables和netfilter,尤其是連接跟蹤被引入內核,這個選項就被取消了。因為沒有包的重組,連接跟蹤就不能正常工作。現在重組已經整合入conntrack,並且在conntrack啟動時自動啟動。不要關閉重組功能,除非你要關閉連接跟蹤。
除了本地產生的包由OUTPUT鏈處理外,所有連接跟蹤都是在PREROUTING鏈裡進行處理的,意思就是說iptables會在PREROUTING鏈裡重新計算所有的狀態。如果我們發送一個流的初始化包,狀態就會在OUTPUT鏈裡被設置為NEW,當我們收到回應的包時,狀態就會在PREROUTING鏈裡被設置為ESTABLISHED。如果第一個包不是本地產生的,那就會在PREROUTING鏈裡被設置為NEW狀態。綜上所述,所有狀態的改變和計算都是在nat表中的PREROUTING鏈和OUTPUT鏈裡完成的。
正如前面說的,包的狀態依據IP所包含的協議不同而不同,但在內核外部,也就是用戶空間裡,只有4種狀態:NEW、ESTABLISHED、RELATED和INVALID。它們主要是和狀態匹配一起使用。
NEW
NEW說明這個包是我們看到的第一個包。意思就是,這是conntrack模塊看到的某個連接第一個包,它即將被匹配了。比如,我們看到一個SYN包,是我們所留意的連接的第一個包,就要匹配它。第一個包也可能不是SYN包,但它仍會被認為是NEW狀態。
ESTABLISHED
ESTABLISHED已經注意到兩個方向上的數據傳輸,而且會繼續匹配這個連接的包。處於ESTABLISHED狀態的連接是非常容易理解的。只要發送並接到應答,連接就是ESTABLISHED的了。一個連接要從NEW變為ESTABLISHED,只需要接到應答包即可,不管這個包是發往防火牆的,還是要由防火牆轉發的。ICMP的錯誤和重定向等信息包也被看作是ESTABLISHED,只要它們是我們所發出的信息的應答。
RELATED
RELATED是個比較麻煩的狀態。當一個連接和某個已處於ESTABLISHED狀態的連接有關系時,就被認為是RELATED的了。換句話說,一個連接要想是RELATED的,首先要有一個ESTABLISHED的連接。這個ESTABLISHED連接再產生一個主連接之外的連接,這個新的連接就是RELATED的了,當然前提是conntrack模塊要能理解RELATED。ftp是個很好的例子,FTP-data 連接就是和FTP-control有RELATED的。
INVALID
INVALID說明數據包不能被識別屬於哪個連接或沒有任何狀態。有幾個原因可以產生這種情況,比如,內存溢出,收到不知屬於哪個連接的ICMP錯誤信息。一般地,我們DROP這個狀態的任何東西。
這些狀態可以一起使用,以便匹配數據包。這可以使我們的防火牆非常強壯和有效。以前,我們經常打開1024以上的所有端口來放行應答的數據。現在,有了狀態機制,就不需再這樣了。因為我們可以只開放那些有應答數據的端口,其他的都可以關閉。這樣就安全多了。
Copyright © Linux教程網 All Rights Reserved