歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> iptables-1.1.9指南(超經典)二

iptables-1.1.9指南(超經典)二

日期:2017/2/27 14:14:23   编辑:更多Linux

3.1. 概述 當數據包到達防火牆時,如果MAC地址符合,就會由內核裡相應的驅動程序接收,然後會經過一系列操作,從而決定是發送給本地的程序,還是轉發給其他機子,還是其他的什麼。 我們先來看一個以本地為目的的數據包,它要經過以下步驟才能到達要接收它的程序: 下文中有個詞mangle,我實在沒想到什麼合適的詞來表達這個意思,只因為我的英語太差!我只能把我理解的寫出來。這個詞表達的意思是,會對數據包的一些傳輸特性進行修改,在mangle表中允許的操作是 TOS、TTL、MARK。也就是說,今後只要我們見到這個詞能理解它的作用就行了。 Table 3-1. 以本地為目標(就是我們自己的機子了)的包 Step(步驟) Table(表) Chain(鏈) Comment(注釋) 1 在線路上傳輸(比如,Internet) 2 進入接口 (比如, eth0) 3 mangle PREROUTING 這個鏈用來mangle數據包,比如改變TOS等 4 nat PREROUTING 這個鏈主要用來做DNAT。不要在這個鏈做過慮操作,因為某些情況下包會溜過去。 5 路由判斷,比如,包是發往本地的,還是要轉發的。 6 mangle INPUT 在路由之後,被送往本地程序之前,mangle數據包。 7 filter INPUT 所有以本地為目的的包都要經過這個鏈,不管它們從哪兒來,對這些包的過濾條件就設在這裡。 8 到達本地程序了(比如,服務程序或客戶程序) 注意,相比以前(譯者注:就是指ipchain)現在數據包是由INPUT鏈過,而不是FORWARD鏈。這樣更符合邏輯。剛看上去可能不太好理解,但仔細想想就會恍然大悟的。 現在我們來看看源地址是本地器的包要經過哪些步驟: Table 3-2. 以本地為源的包 Step Table Chain Comment 1 本地程序(比如,服務程序或客戶程序) 2 路由判斷,要使用源地址,外出接口,還有其他一些信息。 3 mangle OUTPUT 在這兒可以mangle包。建議不要在這兒做過濾,可能有副作用哦。 4 nat OUTPUT 這個鏈對從防火牆本身發出的包進行DNAT操作。 5 filter OUTPUT 對本地發出的包過濾。 6 mangle POSTROUTING 這條鏈主要在包DNAT之後(譯者注:作者把這一次DNAT稱作實際的路由,雖然在前面有一次路由。對於本地的包,一旦它被生成,就必須經過路由代碼的處理,但這個包具體到哪兒去,要由NAT代碼處理之後才能確定。所以把這稱作實際的路由。),離開本地之前,對包 mangle。有兩種包會經過這裡,防火牆所在機子本身產生的包,還有被轉發的包。 7 nat POSTROUTING 在這裡做SNAT。但不要在這裡做過濾,因為有副作用,而且有些包是會溜過去的,即使你用了DROP策略。 8 離開接口(比如: eth0) 9 在線路上傳輸(比如,Internet) 在這個例子中,我們假設一個包的目的是另一個網絡中的一台機子。讓我們來看看這個包的旅程: Table 3-3. 被轉發的包 Step Table Chain Comment 1 在線路上傳輸(比如,Internet) 2 進入接口(比如, eth0) 3 mangle PREROUTING mangle數據包,,比如改變TOS等。 4 nat PREROUTING 這個鏈主要用來做DNAT。不要在這個鏈做過慮操作,因為某些情況下包會溜過去。稍後會做SNAT。 5 路由判斷,比如,包是發往本地的,還是要轉發的。 6 mangle FORWARD 包繼續被發送至mangle表的FORWARD鏈,這是非常特殊的情況才會用到的。在這裡,包被mangle(還記得mangle的意思嗎)。這次 mangle發生在最初的路由判斷之後,在最後一次更改包的目的之前(譯者注:就是下面的FORWARD鏈所做的,因其過濾功能,可能會改變一些包的目的地,如丟棄包)。 7 filter FORWARD 包繼續被發送至這條FORWARD鏈。只有需要轉發的包才會走到這裡,並且針對這些包的所有過濾也在這裡進行。注意,所有要轉發的包都要經過這裡,不管是外網到內網的還是內網到外網的。在你自己書寫規則時,要考慮到這一點。 8 mangle POSTROUTING 這個鏈也是針對一些特殊類型的包(譯者注:參考第6步,我們可以發現,在轉發包時,mangle表的兩個鏈都用在特殊的應用上)。這一步mangle是在所有更改包的目的地址的操作完成之後做的,但這時包還在本地上。 9 nat POSTROUTING 這個鏈就是用來做SNAT的,當然也包括Masquerade(偽裝)。但不要在這兒做過濾,因為某些包即使不滿足條件也會通過。 10 離開接口(比如: eth0) 11 又在線路上傳輸了(比如,LAN) 就如你所見的,包要經歷很多步驟,而且它們可以被阻攔在任何一條鏈上,或者是任何有問題的地方。我們的主要興趣是iptables的概貌。注意,對不同的接口,是沒有什麼特殊的鏈和表的。所有要經防火牆/ 路由器轉發的包都要經過FORWARD鏈。


Caution 在上面的情況裡,不要在INPUT鏈上做過濾。INPUT是專門用來操作那些以我們的機子為目的地址的包的,它們不會被路由到其它地方的。 現在,我們來看看在以上三種情況下,用到了哪些不同的鏈。圖示如下: 要弄清楚上面的圖,可以這樣考慮。在第一個路由判斷處,不是發往本地的包,我們會發送它穿過 FORWARD鏈。若包的目的地是本地監聽的IP地址,我們就會發送這個包穿過INPUT鏈,最後到達本地。 值得注意的是,在做NAT的過程中,發往本機的包的目的地址可能會在PREROUTING鏈裡被改變。這個操作發生在第一次路由之前,所以在地址被改變之後,才能對包進行路由。注意,所有的包都會經過上圖中的某一條路徑。如果你把一個包DNAT回它原來的網絡,這個包會繼續走完相應路徑上剩下的鏈,直到它被發送回原來的網絡。 Tip 想要更多的信息,可以看看rc.test-iptables.txt ,這個腳本包括了一些規則,它們會向你展示包是怎樣通過各個表和鏈的。 3.2. mangle 表 這個表主要用來mangle包,你可以使用mangle匹配來改變包的TOS等特性。 Caution 強烈建議你不要在這個表裡做任何過濾,不管是DANT,SNAT或者Masquerade。 以下是mangle表中僅有的幾種操作: * TOS * TTL * MARK TOS操作用來設置或改變數據包的服務類型域。這常用來設置網絡上的數據包如何被路由等策略。注意這個操作並不完善,有時得不所願。它在 Internet上還不能使用,而且很多路由器不會注意到這個域值。換句話說,不要設置發往Internet的包,除非你打算依靠TOS來路由,比如用 iproute2。 TTL操作用來改變數據包的生存時間域,我們可以讓所有數據包只有一個特殊的TTL。它的存在有一個很好的理由,那就是我們可以欺騙一些ISP。為什麼要欺騙他們呢?因為他們不願意讓我們共享一個連接。那些ISP會查找一台單獨的計算機是否使用不同的TTL,並且以此作為判斷連接是否被共享的標志。 MARK用來給包設置特殊的標記。iproute2能識別這些標記,並根據不同的標記(或沒有標記)決定不同的路由。用這些標記我們可以做帶寬限制和基於請求的分類。 3.3. nat 表 此表僅用於NAT,也就是轉換包的源或目標地址。注意,就象我們前面說過的,只有流的第一個包會被這個鏈匹配,其後的包會自動被做相同的處理。實際的操作分為以下幾類: * DNAT * SNAT * MASQUERADE DNAT操作主要用在這樣一種情況,你有一個合法的IP地址,要把對防火牆的訪問重定向到其他的機子上(比如DMZ)。也就是說,我們改變的是目的地址,以使包能重路由到某台主機。 SNAT改變包的源地址,這在極大程度上可以隱藏你的本地網絡或者DMZ等。一個很好的例子是我們知道防火牆的外部地址,但必須用這個地址替換本地網絡地址。有了這個操作,防火牆就能自動地對包做SNAT和De-SNAT(就是反向的SNAT),以使LAN能連接到Internet。如果使用類似 192.168.0.0/24這樣的地址,是不會從Internet得到任何回應的。因為IANA定義這些網絡(還有其他的)為私有的,只能用於LAN內部。 MASQUERADE的作用和MASQUERADE完全一樣,只是計算機的負荷稍微多一點。因為對每個匹配的包,MASQUERADE都要查找可用的IP地址,而不象SNAT用的IP地址是配置好的。當然,這也有好處,就是我們可以使用通過PPP、 PPPOE、SLIP等撥號得到的地址,這些地址可是由ISP的DHCP隨機分配的。 3.4. Filter 表 filter 表用來過濾數據包,我們可以在任何時候匹配包並過濾它們。我們就是在這裡根據包的內容對包做DROP或ACCEPT的。當然,我們也可以預先在其他地方做些過濾,但是這個表才是設計用來過濾的。幾乎所有的target都可以在這兒使用。大量具體的介紹在後面,現在你只要知道過濾工作主要是在這兒完成的就行了。 Chapter 4. 狀態機制 本章將詳細介紹狀態機制。通讀本章,你會對狀態機制是如何工作的有一個全面的了解。我們用一些例子來進行說明狀態機制。實踐出真知嘛。 4.1. 概述 狀態機制是iptables中特殊的一部分,其實它不應該叫狀態機制,因為它只是一種連接跟蹤機制。但是,很多人都認可狀態機制這個名字。文中我也或多或或少地用這個名字來表示和連接跟蹤相同的意思。這不應該引起什麼混亂的。連接跟蹤可以讓Netfilter知道某個特定連接的狀態。運行連接跟蹤的防火牆稱作帶有狀態機制的防火牆,以下簡稱為



3.4. Filter 表 filter 表用來過濾數據包,我們可以在任何時候匹配包並過濾它們。我們就是在這裡根據包的內容對包做DROP或ACCEPT的。當然,我們也可以預先在其他地方做些過濾,但是這個表才是設計用來過濾的。幾乎所有的target都可以在這兒使用。大量具體的介紹在後面,現在你只要知道過濾工作主要是在這兒完成的就行了。 Chapter 4. 狀態機制 本章將詳細介紹狀態機制。通讀本章,你會對狀態機制是如何工作的有一個全面的了解。我們用一些例子來進行說明狀態機制。實踐出真知嘛。 4.1. 概述 狀態機制是iptables中特殊的一部分,其實它不應該叫狀態機制,因為它只是一種連接跟蹤機制。但是,很多人都認可狀態機制這個名字。文中我也或多或或少地用這個名字來表示和連接跟蹤相同的意思。這不應該引起什麼混亂的。連接跟蹤可以讓Netfilter知道某個特定連接的狀態。運行連接跟蹤的防火牆稱作帶有狀態機制的防火牆,以下簡稱為



Copyright © Linux教程網 All Rights Reserved