首页 > 代码库 > Iptables Nat转发
Iptables Nat转发
Iptables Nat
iptables子命令:
规则:
-A:添加
-I:插入
-D:删除
-R:修改
链:
-N:新建一条自定义的链
-X:删除一条自定义的空链
-F:清空链中的规则
-Z:清空链中的计数器
-E:重命名自定连的名称
-P:修改链的默认规则
显示:
-L:
-n,-v,--line-numbers
-S:
规则定义:iptables -t table -A|-I|-R chain 匹配条件 -j target
匹配条件:
通用匹配:-s,-d,-i,-o,-p
扩展匹配:
隐含扩展
-p tcp
--sport --dport --tcp-flags
--syn
-p udp
--sport --dport
-p icmp
--icmp-type
echo-request:8
echo-reply:0
显示扩展
-m state
--state
-m multiport
--sports,--dports,--ports
-m iprange
--src-range,--dst-range
-m string
--algo {bm|kmp},--string,--hex-string
-m connlimit
--connlimit-above
-m limit
--limit n(/second|minute|hour|day),--limit-burst
-m time
--datestart,--datestop
--timestart,--timestart
--weekdays
-j
ACCEPT DROP REJECT LOG REDIRCT SNAT DNAT MASQUERADE MARK RETURN 自定义链
四表:raw mangle nat filter
五链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
主机防火墙:INPUT,OUTPUT
网络防火墙:
路由:对于Linux主机来说,设定/proc/sys/net/ipv4/ip_forward的值为1,即为开启了路由功能.
路由表的生成:
静态:手动添加
动态:基于路由协议学习,RIP2,OSPF
NAT:网络地址转换
A:10
B:172.16-172.31
C:192.168.0-192.168.255
NAT:工作在网络层和传输层
Proxy:工作在应用层
iptables -P FORWARD DROP
网关必须和本地ip在同一局域网内
一个请求进来首先交给本机,本机未匹配到再交给网关.
172.16.0.177---{172.16.0.192|192.168.30.11}-----192.168.30.129
# iptables -A FORWARD -d 192.168.30.129 -m state --state ESTABLISHED -j ACCEPT
# iptables -A FORWARD -d 192.168.30.129 -p tcp -m multiport --dports 22,80 -m state --state NEW -j ACCEPT
NAT:
Basic Nat:静态NAT.
NAPT:动态NAT,网络地址端口转换.
源地址转换:SNAT,用于让内网主机访问互联网.
目标地址转换:DNAT,让互联网上的主机访问本地内网中的某服务器上的服务.
Iptables 基于SNAT和DNAT这两个目标实现地址转换技术.
-j SNAT --to-source
添加到post链.
# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
PREROUTING:主要做DNAT
POSTROUTING OUTPUT 主要做SNAT
#SNAT实例;
所有来自172.16.0.0/24的ip全部做SNAT,转换为 192.168.30.129
# iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -j SNAT --to-source 192.168.30.129
-j:MASQUERADE 地址伪装
-j:DNAT --to-destination DIP[:PORT]
支持端口映射
# iptables -t nat -A PREROUTING -d 172.16.0.192 -p tcp --dport 80 -j DNAT --to-destination 192.168.30.129
访问本地扯淡2222端口,做DNAT跳到192.168.30.129的22端口.
# iptables -t nat -A PREROUTING -d 172.16.0.192 -p tcp --dport 2222 -j DNAT --to-destination 192.168.30.129:22
UDP多端口转发:
有两种写法,多端口的匹配可以使用":"匹配范围,也可以使用"-"匹配范围.
第一种:
#-A PREROUTING -d 192.168.30.129 -p udp --dport 41861:41868 -j DNAT --to-destination 172.16.10.192:41861-41868
#-A POSTROUTING -s 172.16.10.192 -p udp --dport 41861:41868 -j SNAT --to-source 192.168.30.131
匹配端口范围,但是nat转发时会端口错乱,有时转发可能并未达到想要的结果.
第二种:
一个端口一条的匹配.
本文出自 “蚂蚁” 博客,请务必保留此出处http://215687833.blog.51cto.com/6724358/1954138
Iptables Nat转发