規則:網絡管理員預定義的數據包過濾條件
鏈:數據包傳播路徑,每條鏈中可以有多個規則,從第一條規則檢查起
表:內置第三張表
filter:主要用于包過濾,只允許對數據報進行接收和丟棄,無法對數據包進行更改,
nat:主要用于網絡地址轉換,
Mangle:對指定包進行修改
iptables對數據包的處理過程
Iptables 指令語法:iptables 【-t tables】 command 【match】【-j target/jump】
【-t tables】
指定規則表,默認filter
Command 常用命令列表:
-A :新增一條規則到某個規則鏈,默認添加到鏈尾。
-D:刪除一條規則,可輸入完整命令,也可輸入規則編號
-R:取代現行規則,規則取代后不會改變順序
-I:插入一條規則,原本位置上的規則向后移動一個位置
-L:列出規則連中所有規則
iptables -t nat -L 列出nat 表中所有規則
-F:刪除規則
iptables -F input 刪除filter中input鏈中所有規則
【match】
常用封包匹配參數
-P:匹配協議類型,也可加!反向匹配,使用all可以匹配所有
-S:用來匹配封包來源ip,-s 192.168.1.0/24 可用來匹配一個段
-D:匹配封包的目的ip,同上。
-O:匹配數據包的出網卡。
--sport:匹配數據包的源端口,匹配一個范圍可以設置成20:80
--dport:同上。
--tcp-flags:匹配tcp中的標志位
【-j target/jump】
常用的處理動作
-j:用來指定處理動作
ACCEPT :將數據包放行
REJECT:攔阻數據包
DROP:丟棄數據包不予處理
SNAT一般用于到外網,出去
SNAT的目的是進行源地址轉換,應用于POSTROUTING規則鏈.在路由決定之后應用.SNAT與出站接口相關,而不是入站接口
DNAT用于從外面進來的
目的地址NAT有2種形式:DNAT和REDIRECT. REDIRECT是目的地址轉換的特殊形式,將數據包重定向到NAT設備的輸入或回環接口. 目的地址NAT應用于nat表的PREROUTING和OUTPUT規則鏈,在做出路由決定前對目的地址進行修改.在PREROUTING中,DNAT和REDIRECT規則與用來接受通過本地路由轉發或送到主機的入站接口的數據包的入站接口有關.在OUTPUT中,DNAT和REDIRECT規則用來處理來自NAT主機本身生成的出站數據包.
SNAT eg:
iptables -t nat -I POSTROUTING -s10.1.0.0/24 -j SNAT --to-source 192.168.0.5
將內網10.1網段映射為192.168.0.5出去
也可以這樣:
iptables -t nat -I POSTROUTING -s10.1.0.0/24 -j SNAT --to-source192.168.0.5-192.168.0.245
將本地映射到一段IP地址上(可以做攻擊用^^)
上述例子的同樣功能:iptables-t nat -I POSTROUTING -s 10.1.0.0/24 -j NETMAP --to192.168.0.0/24
DNAT eg:
iptables -t nat -A PREROUTING-dROUTEIP-ptcp --dport 80 -j DNAT--to-destinationWEBIP
ROUTEIP表示防火墻(路由器)的公網IP
WEBIP表示內網WEB服務器IP
這條規則表示當外網訪問本地的HTTP80端口時,自動轉到內網的WEB服務器上。等于是把web服務器做了個映射到公網上。
當僅僅需要從外網訪問內網時,這樣是足夠了,
但是如果需要從內網機器,通過WEB服務器的外網IP訪問WEB服務器的話,還需要加條SNAT規則:
iptables -t nat -APOSTROUTING -p tcp -d WEBIP --dport 80 -j SNAT --toROUTEIP
將訪問WEB服務器的數據包的源IP地址強制改為網關IP。否則會出現無法訪問的問題。
簡單分析下原因:
假設內網192.168.0.10->需要從外部IP訪問WEB的主機
192.168.0.254->WEB服務器內部IP地址
192.168.0.1->網關 (外部IP為202.96.22.22)
當192.168.0.10訪問202.96.22.22的WEB服務時,
根據網關上的DNAT,數據包的目的IP由202.96.22.22被轉為192.168.0.254。254收到數據包后,發現是10發送過來的,
那么他會直接回數據包給192.168.0.10,但是10收到包后發現包的來源不是自己想要的202.96.22.22,
那這個包就會被直接丟棄。
解決辦法就是在254不要直接發包給10,而是返回給網關,讓網關原路返回給10機器。這樣,只要將發往254請求WEB服務的數據包的源IP都改為網關的IP,192.168.0.1,就可以解決這個問題。即
iptables -t nat -A POSTROUTING -ptcp -d 192.168.0.254 --dport 80 -j SNAT --to 192.168.0.1
一局域網192.168.1.0/24,
web服務器:192.168.1.10
ftp服務器:192.168.1.11
網關linux,
內網eth0,IP為192.168.1.1
外網eth1,IP為a.b.c.d
怎樣作NAT能使內外網都能訪問公司的服務器?
A:# web
#用DNAT作端口映射
iptables -t nat -A PREROUTING -da.b.c.d -p tcp --dport 80 -j DNAT --to 192.168.1.10
#用SNAT作源地址轉換(關鍵),以使回應包能正確返回
iptables -t nat -A POSTROUTING -d192.168.1.10 -p tcp --dport 80 -j SNAT --to 192.168.1.1
#一些人經常忘了打開FORWARD鏈的相關端口,特此增加
iptables -A FORWARD -o eth0 -d192.168.1.10 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -i eth0 -s192.168.1.10 -p tcp --sport 80 -m --state ESTABLISHED -jACCEPT
# ftp
modprobeip_nat_ftp ###加載ip_nat_ftp模塊(若沒有編譯進內核),以使ftp能被正確NAT
modprobeip_conntrack_ftp ###加載ip_conntrack_ftp模塊
#用DNAT作端口映射
iptables -t nat -A PREROUTING -da.b.c.d -p tcp --dport 21 -j DNAT --to 192.168.1.11
iptables -A FORWARD -o eth0 -d192.168.1.11 -p tcp --dport 21 -j ACCEPT
iptables -A FORWARD -i eth0 -s192.168.1.11 -p tcp --sport 21 -m --state ESTABLISHED -jACCEPT
iptables -A FORWARD -i eth0 -s192.168.1.11 -p tcp --sport 20 -m --state ESTABLISHED,RELATED -jACCEPT
iptables -A FORWARD -o eth0 -d192.168.1.11 -p tcp --dport 20 -m --state ESTABLISHED -jACCEPT
iptables -A FORWARD -o eth0 -d192.168.1.11 -p tcp --dport 1024: -m --state ESTABLISHED,RELATED -jACCEPT
iptables -A FORWARD -i eth0 -s192.168.1.11 -p tcp --sport 1024: -m --state ESTABLISHED -jACCEPT
#用SNAT作源地址轉換(關鍵),以使回應包能正確返回
iptables -t nat -A POSTROUTING -d192.168.1.11 -p tcp --dport 21 -i eth0 -j SNAT --to192.168.1.1
詳細參考:
http://blog.csdn.net/huguohu2006/article/details/6453522
新聞熱點
疑難解答