iptables 命令基本参数和用法
iptables –[ A | I 链] [ -i | o 网络接口 ] [ -p 协议 ] [ -s 来源ip/网域 ] [ -d 目标ip/网域 ] –j [ ACCEPT | DROP ]
参数 | 作用 |
-P | 设置默认策略:iptables -P INPUT (DROP|ACCEPT) |
-F | 清空规则链 |
-L | 查看规则链 |
-A | 在规则链的末尾加入新规则 |
-I num | 在规则链的头部加入新规则 |
-D num | 删除某一条规则 |
-s | 匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。 |
-d | 匹配目标地址 |
-i 网卡名称 | 匹配从这块网卡流入的数据 |
-o 网卡名称 | 匹配从这块网卡流出的数据 |
-p | 匹配协议,如tcp,udp,icmp |
--dport num | 匹配目标端口号 |
--sport num | 匹配来源端口号 |
NAT(Network AddressTranslation网络地址转换)
首先说说局域网内封包的传送,
1. 先经过 NAT table 的 PREROUTING 链;
2. 经路由判断确定这个封包是要进入本机与否,若不进入本机,则下一步;
3. 再经过 Filter table 的 FORWARD 链;
4. 通过 NAT table 的 POSTROUTING 链,最后传送出去。
SNAT 和 DNAT 是 iptables 中使用 NAT 规则相关的的两个重要概念。如下图所示,如果内网主机访问外网而经过路由时,源 IP 会发生改变,这种变更行为就是 SNAT;反之,当外网的数据经过路由发往内网主机时,数据包中的目的 IP (路由器上的公网 IP) 将修改为内网 IP,这种变更行为就是 DNAT
SNAT:即源地址转换
能够让多个内网用户通过一个外网地址上网,解决了IP资源匮乏的问题,路由器也就使用此技术,使用 POSTROUTING
# 由上图可知,需要将 192.168.10.10 转换为 111.196.211.212,iptables命令如下:
iptables -t nat -A POSTROUTING -s 192.168.10.10 -o eth1 -j SNAT --to-source 111.196.221.212
# 外网IP地址不稳定的情况即可使用MASQUERADE(动态伪装),能够自动的寻找外网地址并改为当前正确的外网IP地址
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
DNAT:目地地址转换
则能够让外网用户访问局域网内不同的服务器。使用 PREROUTING
# 由上图可知,目标地址 192.168.10. 6 在路由前就转换成 61.240.149.149
iptables -t nat -A PREROUTING -i eth1 -d 61.240.149.149 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.6:80
将外网访问80端口的数据转发到8080端口
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080