1. 程式人生 > >iptables nat及埠對映 【轉】

iptables nat及埠對映 【轉】

    看了上面的兩個例子,不知道大家是否清楚了iptables的轉發流程,希望對大家有所幫助,下面我們就說說我一直在上面提到的關於那個 ESTABLISHED,RELATED的規則是怎麼回事,到底有什麼用處。說這個東西就要簡單說一下網路的資料通訊的方式,我們知道,網路的訪問是雙向的,也就是說一個Client與Server之間完成資料交換需要雙方的發包與收包。在netfilter中,有幾種狀態,也就是new, established,related,invalid。當一個客戶端,在本文例一中,內網的一臺機器訪問外網,我們設定了規則允許他出去,但是沒有設定允許回來的規則阿,怎麼完成訪問呢?這就是netfilter的狀態機制,當一個lan使用者通過這個linux訪問外網的時候,它傳送了一個請求包,這個包的狀態是new,當外網回包的時候他的狀態就是established,所以,linux知道,哦,這個包是我的內網的一臺機器發出去的應答包,他就放行了。而外網試圖對內發起一個新的連線的時候,他的狀態是new,所以linux壓根不去理會它。這就是我們為什麼要加這一句的原因。還有那個 related,他是一個關聯狀態,什麼會用到呢?tftp,ftp都會用到,因為他們的傳輸機制決定了,它不像http訪問那樣,Client_IP: port-->server:80  然後server:80-->Client_IP:port,ftp使用tcp21建立連線,使用20埠傳送資料,其中又有兩種方式,一種主動 active mode,一種被動passive mode,主動模式下,client使用port命令告訴server我用哪一個埠接受資料,然後server主動發起對這個埠的請求。被動模式下, server使用port命令告訴客戶端,它用那個埠監聽,然後客戶端發起對他的資料傳輸,所以這對於一個防火牆來說就是比較麻煩的事情,因為有可能會有new狀態的資料包,但是它又是合理的請求,這個時候就用到這個related狀態了,他就是一種關聯,在linux中,有個叫 ftp_conntrack的模組,它能識別port命令,然後對相應的埠進行放行。