iptables與stun

來源:互聯網
上載者:User

iptablesstun是一對朋友,互相幫忙,互相補短!

iptables與stun

Stun協議(Rfc3489、詳見http://www.ietf.org/rfc/rfc3489.txt)將NAT粗略分為4種類型,即Full Cone、Restricted Cone、Port Restricted Cone和Symmetric。舉個實際例子來說明這四種NAT的區別:

A機器在私網(192.168.0.4)

NAT伺服器(210.21.12.140)

B機器在公網(210.15.27.166)

C機器在公網(210.15.27.140)

現在,A機器串連過B機器,假設是 A(192.168.0.4:5000)-> NAT(轉換後210.21.12.140:8000)-> B(210.15.27.166:2000)。

同時A從來沒有和C通訊過。

則對於不同類型的NAT,有下列不同的結果:

Full Cone NAT:C發資料到210.21.12.140:8000,NAT會將資料包送到A(192.168.0.4:5000)。因為NAT上已經有了192.168.0.4:5000到210.21.12.140:8000的映射。

Restricted Cone:C無法和A通訊,因為A從來沒有和C通訊過,NAT將拒絕C試圖與A串連的動作。但B可以通過210.21.12.140:8000與A的192.168.0.4:5000通訊,且這裡B可以使用任何連接埠與A通訊。如:210.15.27.166:2001 -> 210.21.12.140:8000,NAT會送到A的5000連接埠上。

Port Restricted Cone:C無法與A通訊,因為A從來沒有和C通訊過。而B也只能用它的210.15.27.166:2000與A的192.168.0.4:5000通訊,因為A也從來沒有和B的其他連接埠通訊過。該類型NAT是連接埠受限的。

Symmetric NAT:上面3種類型,統稱為Cone NAT,有一個共同點:只要是從同一個內部地址和連接埠出來的包,NAT都將它轉換成同一個外部地址和連接埠。但是Symmetric有點不同,具體表現在:只要是從同一個內部地址和連接埠出來,且到同一個外部目標地址和連接埠,則NAT也都將它轉換成同一個外部地址和連接埠。但如果從同一個內部地址和連接埠出來,是到另一個外部目標地址和連接埠,則NAT將使用不同的映射,轉換成不同的連接埠(外部地址只有一個,故不變)。而且和Port Restricted Cone一樣,只有曾經收到過內部地址發來包的外部地址,才能通過NAT映射後的地址向該內部地址發包。

現針對Symmetric NAT舉例說明(承接前例):

A機器串連過B機器,假使是 A(192.168.0.4:5000)-> NAT(轉換後210.21.12.140:8000)-> B(210.15.27.166:2000)

如果此時A機器(192.168.0.4:5000)還想串連C機器(210.15.27.140:2000),則NAT上產生一個新的映射,對應的轉換可能為A(192.168.0.4:5000)-> NAT(轉換後210.21.12.140:8001)-> C(210.15.27.140:2000)。此時,B只能用它的210.15.27.166:2000通過NAT的210.21.12.140:8000與A的192.168.0.4:5000通訊, C也只能用它的210.15.27.140:2000通過NAT的210.21.12.140:8001與A的192.168.0.4:5000通訊,而B或者C的其他連接埠則均不能和A的192.168.0.4:5000通訊。

通過上面的例子,我們應該清楚了Stun協議對NAT進行分類的依據。那麼,我們現在根據上述分類標準(或例子),來簡要分析一下iptables的工作原理,看看他又是屬於哪種NAT呢?

首先,我們去網上下載一個使用Stun協議檢測NAT的工具,網址在http://sourceforge.net/projects/stun/,使用該工具對iptables的檢測結果是Port restricted NAT detected。

我們先不要急著接受這個檢測結果,還是先來分析一下iptables的工作原理吧!

iptables在轉換地址時,遵循如下兩個原則:

1、盡量不去修改源連接埠,也就是說,ip偽裝後的源連接埠儘可能保持不變。

2、更為重要的是,ip偽裝後只需保證偽裝後的源地址/連接埠與目標地址/連接埠(即所謂的socket)唯一即可。

仍以前例說明如下:

A機器串連過B機器,假使是 A(192.168.0.4:5000)-> NAT(轉換後210.21.12.140:5000)-> B(210.15.27.166:2000)。(注意,此處NAT遵循原則1、故轉換後連接埠沒有改變)

如果此時A機器(192.168.0.4:5000)還想串連C機器(210.15.27.140:2000),則NAT上產生一個新的映射,但對應的轉換仍然有可能為A(192.168.0.4:5000)-> NAT(轉換後210.21.12.140:5000)-> C(210.15.27.140:2000)。這是因為NAT(轉換後210.21.12.140:5000)-> B(210.15.27.166:2000)和NAT(轉換後210.21.12.140:5000)-> C(210.15.27.140:2000)這兩個socket不重複。因此,對於iptables來說,這既是允許的(第2條原則)、也是必然的(第1條原則)。

在該例中,表面上看起來iptables似乎不屬於Symmetric NAT,因為它看起來不符合Symmetric NAT的要求:如果從同一個內部地址和連接埠出來,是到另一個目標地址和連接埠,則NAT將使用不同的映射,轉換成不同的連接埠(外部地址只有一個,故不變)。相反,倒是符合除Symmetric NAT外的三種Cone NAT的要求:從同一個內部地址和連接埠出來的包,NAT都將它轉換成同一個外部地址和連接埠。加上iptables具有連接埠受限的屬性(這一點不容置疑,後面舉反例證明之),所以好多偵查工具就把iptables報告為Port restricted NAT類型了。

下面仍以前例接著分析:

在前例中增加D機器在私網(192.168.0.5)

A機器串連過B機器,假使是 A(192.168.0.4:5000)-> NAT(轉換後210.21.12.140:5000)-> B(210.15.27.166:2000)

D機器串連過C機器,假使是 D(192.168.0.5:5000)-> NAT(轉換後210.21.12.140:5000)-> C(210.15.27.140:2000)

由iptables轉換原則可知,上述兩個轉換是允許且必然的。

如果此時A機器(192.168.0.4:5000)還想串連C機器(210.15.27.140:2000),則NAT上產生一個新的映射,但對應的轉換則變為A(192.168.0.4:5000)-> NAT(轉換後210.21.12.140:5001)-> C(210.15.27.140:2000)。這是因為,如果仍然將其轉換為210.21.12.140:5000的話,則其所構成的socket(210.21.12.140:5000->210.15.27.140:2000)將和D->C的socket一致,產生衝突,不符合iptables的第2條原則。(注意,此處以5001表示轉換後不同的連接埠,但事實上,iptables卻並不按照內部連接埠+1的原則來產生新的連接埠)。

在本例中,從同一個內部地址和連接埠(192.168.0.4:5000)出來,到另一個目標地址和連接埠,則NAT使用了不同的映射,轉換成不同的連接埠。顯然,該現象又滿足了Symmetric NAT的要求,同時不能夠滿足Cone NAT的要求。

我們再來回顧一下Stun協議對Cone NAT的要求:所有(或只要是)從同一個內部地址和連接埠出來的包,NAT都將它轉換成同一個外部地址和連接埠。雖然iptables在大部分情況下滿足“從同一個內部地址和連接埠出來的包,都將把他轉換成同一個外部地址和連接埠”這一要求,但它不能在所有情況侶閼庖灰蟆K嶽礪凵希頤薔橢荒馨裪ptables歸為Symmetric NAT了。(但在事實上,按照前面例子或者Stun協議裡給出的Discovery Process,大部分情況下對iptables的檢測結果必然是Port restricted NAT)

為什麼會出現上述矛盾的情況呢,關鍵在於Stun協議和iptables對映射的理解不同。Stun協議認為,一個映射的要素是:內部地址連接埠和NAT轉換後地址連接埠的組合。而在iptables看來,一個映射的要素是:NAT轉換後地址連接埠和外部目標地址連接埠的組合。

下面,我們再來分析一下iptables的連接埠受限的屬性,我們舉一個反例證明之,仍以前例說明如下:

A機器串連過B機器,假使是 A(192.168.0.4:5000)-> NAT(轉換後210.21.12.140:5000)-> B(210.15.27.166:2000)

D機器串連過C機器,假使是 D(192.168.0.5:5000)-> NAT(轉換後210.21.12.140:5000)-> C(210.15.27.140:2000)

現假設iptables不具有連接埠受限的屬性,則另一E機器在公網(210.15.27.153:2000)或C(210.15.27.140:2001)向210.21.12.140:5000發包的話,應該能夠發到內部機器上。但事實是,當這個包到達NAT(210.21.12.140:5000)時,NAT將不知道把這個包發給A(192.168.0.4:5000)還是D(192.168.0.5:5000)。顯然,該包只能丟棄,至此,足以證明iptables具有連接埠受限的屬性。

所以,iptables是貨真價實的Symmetric NAT。

附:

1、Stun全稱Simple Traversal of UDP Through NATs,所以本文所涉及的包,皆為UDP包。

2、本文雖然是針對linux下iptables的分析,但倘若把本文中關鍵詞“iptables”換成“Win2000下的ics或nat”,則本文的分析過程完全適用於Win2000下的ics或nat。即理論上Win2000下的ics或nat也是貨真價實的Symmetric NAT,但實際上,大部分情況下,檢測結果必然是Port restricted NAT。為什麼Win2000下的ics或nat和iptables的分類是如此一致呢?因為Win2000下的ics或nat在進行NAT轉換時,遵循和iptables完全一樣的兩個原則。

通過文章,我們可以清楚的知道iptables與stun的知識。希望對你們有用!

  • iptables 添加模組HOWTO
  • netfilter/iptables模組功能介紹
  • iptables 源碼分析
  • iptables 總結與應用心得
  • 如何利用netfilter/iptables構建防火牆
  • Iptables 命令和命令說明
  • squid+iptables網關防火牆的實現
  • Iptables 執行個體分析
  • Iptables 詳細介紹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.