防火牆軟體Netfilter之NAT技術(轉)
防火牆軟體Netfilter之NAT技術(轉)[@more@]本文件主要描述怎樣進行IP偽裝(masquerading)、透明代理(transparent proxying)、埠轉發(port forwarding)和其他形式的網路地址翻譯技術。1. 什麼是網路地址翻譯NAT(Network Address Translation)?當一個包在網路上傳輸時,從它的源地址(例如你自己的主機)到達目的地址(例如),中間經過很多節點和網路。這些節點通常不會改變你的包。他們僅僅轉發你的包。如果一個節點執行NAT,他將會修改包的源或目的地址。通常這個節點會記住他怎樣修改了這個包,因此當相應的應答包從另一個方向到達時,他知道如何反向修改這個應答包。2. 為什麼要使用NAT?l 用modem上網大多數的ISPs只給你提供一個IP地址。你可以以任何源地址發出包,但是隻有包含這個IP地址的包的應答包才會到達你的網路。如果你想使用多臺機器(比如有個自己的網路)利用這個IP地址上網。需要NAT。這是NAT使用得最為常見的情況,在linux的世界裡稱為IP偽裝(masquerading)。又稱之為SNAT,因為你要改變包的源地址。l Multiple Servers有時候你想改變到達你的網路的包的去向。通常因為你只有一個IP地址,但是你又想使用者到達這個真實IP地址之後的各個機器。方法是修改這些包的目的地址,讓他們到達不同的機器。還有就是用於負載均衡。這種型別的NAT在linux上叫做埠轉發(port-forwarding)。l Transparent Proxying(透明代理)透明代理是在你的網路和外部世界之間的程式,所有的進或出都要經過這個代理。之所以叫做“透明”,因為你的網路無需考慮他的存在。例如,squid軟體能夠配置為透明代理。3. 兩種型別的NATNAT有兩種型別:Source NAT(SNAT)和Destination NAT(DNAT)。源NAT是指改變連線的第一個包的源地址。他是在路由之後做,即在包到達網線之前處理。IP偽裝屬於源NAT。目的NAT是指改變連線的第一個包的目的地址。他是在路由之前做。埠轉發、負載均衡、透明代理都屬於目的NAT。4. 僅僅需要IP偽裝這是大多數使用者的要求。如果你有一個動態分配IP地址的PPP撥號連線,你僅僅想讓你的內部網路發出的包發生改變,就像是從這個PPP撥號所分配的IP地址所發出的。如下:# Load the NAT module (this pulls in all the others).modprobe iptable_nat# In the NAT table (-t nat), Append a rule (-A) after routing# (POSTROUTING) for all packets going out ppp0 (-o ppp0) which says to# MASQUERADE the connection (-j MASQUERADE).iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE# Turn on IP forwardingecho 1 > /proc/sys/net/ipv4/ip_forward這裡假設你沒有做包過濾。5. 埠轉發例如,要將1.2.3.4:8080變為192.168.1.1:80:# Append a rule pre-routing (-A PREROUTING) to the NAT table (-t nat) that# TCP packets (-p tcp) going to 1.2.3.4 (-d 1.2.3.4) port 8080 (--dport 8080)# have their destination mapped (-j DNAT) to 192.168.1.1, port 80# (--to 192.168.1.1:80).iptables -A PREROUTING -t nat -p tcp -d 1.2.3.4 --dport 8080-j DNAT --to 192.168.1.1:80如果想讓本地網路的機器適用於上面的規則,例如,本地機telnet 1.2.3.4 8080,就轉變為telnet 192.168.1.1 80。可以在OUTPUT chain中插入規則:iptables -A OUTPUT -t nat -p tcp -d 1.2.3.4 --dport 8080-j DNAT --to 192.168.1.1:806. 控制NAT你可以建立NAT規則來告訴核心改變哪些連線,以及怎麼改變。同樣,我們使用iptables工具。用選項“-t nat”來表示需要修改NAT表。NAT表中包括3個chain:PREROUTING(用於目的NAT)、POSTROUTING(用於源NAT)、OUTPUT(用於本地產生的包的目的NAT)。如下圖:_____ _____/ /PREROUTING -->[Routing ]----------------->POSTROUTING----->D-NAT/ [Decision] S-NAT/| ^| __|__| /| | OUTPUT|| D-NAT/| ^| |--------> Local Process ------當一個包經過上圖時,檢查它屬於什麼樣的連線,如果是新連線,查詢NAT表決定做甚。7. 使用iptables的簡單選項如果iptables作為一個模組,那麼使用前需要insmod ip_tables。最重要的選項是“-t”。對於所有的NAT操作,都需要-t nat。第二重要的是“-A”附加一條規則到chain的末尾;或者“-I”在開頭插入一條規則。用選項“-s”和“-d”來描述源和目的地址。用選項“-i”和“-o”表示in的介面和out的介面。用選項“-p”表示協議,例如-p TCP。用選項“--sport”和“--dport”表示源和目的埠。8. 源NAT源NAT將連線的源地址改變成不同的地址,他是在POSTROUTING chain中完成。這非常重要,因為路由、包過濾都是在源地址改變之前做的。所以並不影響。源NAT用選項“-j SNAT”描述,用“--to-source”來描述IP地址、一個範圍的IP地址或者埠(僅僅用於TCP和UDP)。例如:## Change source addresses to 1.2.3.4.# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4## Change source addresses to 1.2.3.4, 1.2.3.5 or 1.2.3.6# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4-1.2.3.6## Change source addresses to 1.2.3.4, ports 1-1023# iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to 1.2.3.4:1-1023特殊情況(IP偽裝):有一種特殊的源NAT叫masquerading(前面講過),僅僅用於撥號上網的情況(動態IP)。上面所講的是靜態IP。在masquerading中不需要像上面那樣清楚表達,只需要指明正確的網路介面。例如:## Masquerade everything out ppp0.# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE9. 目的NAT目的NAT在PREROUTING chain中完成,對於本機的應用程式來說(包括routing、包過濾程式)都忽略目的地址的改變,認為到達真實的目的地址。需要用到“-i”選項。目的NAT用“-j DNAT”來表示,用“--to-destination”選項來描述IP地址、IP地址的範圍或者埠。例如:## Change destination addresses to 5.6.7.8# iptables -t nat -A PREROUTING -i eth1 -j DNAT --to 5.6.7.8## Change destination addresses to 5.6.7.8, 5.6.7.9 or 5.6.7.10.# iptables -t nat -A PREROUTING -i eth1 -j DNAT --to 5.6.7.8-5.6.7.10## Change destination addresses of web traffic to 5.6.7.8, port 8080.# iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth1-j DNAT --to 5.6.7.8:8080## Redirect local packets to 1.2.3.4 to loopback.# iptables -t nat -A OUTPUT -d 1.2.3.4 -j DNAT --to 127.0.0.1重定向:(Redirection)目的地址的一個特例叫做重定向。相當於對進來的包作目的NAT,例如:## Send incoming port-80 web traffic to our squid (transparent) proxy# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80-j REDIRECT --to-port 312810.源NAT與路由如果你做了源NAT,要注意路由器返回資訊時能不能找到你真正的機器。例如,你將自己機器發出的包的源地址改為1.2.3.4,這樣外部路由器將向你傳送應答包(目的地址是1.2.3.4)。怎樣到達你的機器?如果你變化後的源地址是本地網路所用的地址,則不需要變化,直接返回到這個地址;如果變化後是本地網路不用的地址,例如,你變成1.2.3.99,一個本地區域網未用的地址,網路地址1.2.3.0/24,則需要做ARP查詢,有一個簡單的方法是做IP alias,例如:# ip address add 1.2.3.99 dev eth0如果變成一個完全不同的地址(不屬於本地區域網),必須向路由器發出一條路由資訊或者手工加一條路由記錄。11.目的NAT變目的地址到同一個網路古典的例子內部的職工想訪問你的公共的web server,目的地址從公共地址(1.2.3.4)變成內部地址(192.168.1.1),執行:# iptables -t nat -A PREROUTING -d 1.2.3.4-p tcp --dport 80 -j DNAT --to 192.168.1.1一種方法是執行一個內部的DNS server,他知道公共web server的地址,並且將其他的request請求轉發到外部的DNS server。另一個方法是將源地址對映到自己的連線上,讓web server的返回資訊透過他。執行:# iptables -t nat -A POSTROUTING -d 192.168.1.1 -s 192.168.1.0/24-p tcp --dport 80 -j SNAT --to 192.168.1.25
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-940729/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 防火牆軟體Netfilter之包過濾技術(轉)防火牆Filter
- NAT iptables防火牆(script)(轉)防火牆
- Linux防火牆之netfilter/ptablesLinux防火牆Filter
- 使用netfilter/iptables配置防火牆(轉)Filter防火牆
- HCIE Security 防火牆NAT技術備考筆記(幕布)防火牆筆記
- FreeBSD防火牆技術(轉)防火牆
- 解讀分散式防火牆之――技術篇(轉)分散式防火牆
- 穿過任意防火牆NAT的遠端控制軟體TeamViewer防火牆View
- 軟體防火牆與硬體防火牆詳解防火牆
- 防火牆NAT轉換的一次診斷防火牆
- 防火牆新技術剖析防火牆
- 防火牆技術詳解防火牆
- 防火牆軟體:Snail for mac防火牆AIMac
- 搭建基於netfilter/iptables的防火牆實驗環境(轉)Filter防火牆
- linux防火牆實現技術比較(轉)Linux防火牆
- 蜜罐技術:消除防火牆侷限和脆弱(轉)防火牆
- DNS隧道技術繞防火牆DNS防火牆
- linux防火牆實現技術比較(1)(轉)Linux防火牆
- 軟體防火牆引起的問題防火牆
- 深入淺出Netfilter/iptables防火牆框架(入門篇)薦Filter防火牆框架
- UDP Hole Puching技術:穿透防火牆建立UDP連線(轉)UDP穿透防火牆
- 軟盤裡的Linux防火牆(轉)Linux防火牆
- 硬體防火牆的技術演變及發展趨勢防火牆
- 分散式防火牆技術及主要特點分散式防火牆
- 防毒軟體、防火牆2006年度排行榜(轉)防毒防火牆
- 用Linux防火牆構建軟路由(轉)Linux防火牆路由
- 全面分析防火牆及防火牆的滲透(轉)防火牆
- 硬體防火牆選購指南(轉載)防火牆
- 看不懂的硬體防火牆(轉)防火牆
- 小飛賊防火牆軟體:Little Snitch for Mac防火牆Mac
- IPv6過渡技術之NAT-PT技術
- Linux防火牆之IPtables概念與用法(轉)Linux防火牆
- 小飛賊老牌防火牆軟體:Little Snitch for Mac防火牆Mac
- win 10怎麼用防火牆禁用軟體聯網更新_win10防火牆禁用軟體聯網更新操作方法防火牆Win10
- 淺談資料庫防火牆技術及應用資料庫防火牆
- 選用單防火牆DMZ還是雙防火牆DMZ(轉)防火牆
- 工作小記之防火牆防火牆
- Juniper防火牆簡介(轉)防火牆