iptables 命令基本参数和用法

iptables [-t 表名] 命令选项 [链名][条件匹配][-j 目标动作或跳转]

说明:表名、链名用于指定 iptables 命令所操作的表和链,命令选项用于指定管理 iptables 规则的方式(比如:插入、增加、删除、查看等)条件匹配用于指定对符合什么样 条件的数据包进行处理;目标动作或跳转用于指定数据包的处理方式(比如允许通过、拒绝、丢弃、跳转给其它链处理)

参数

作用

-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网络地址转换)

首先说说局域网内封包的传送

CentOS 7 中 iptables snat dnat 用法_外网

  1. 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
  2. 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
  3. 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

SNAT 和 DNAT 是 iptables 中使用 NAT 规则相关的的两个重要概念。如果内网主机访问外网而经过路由时,源 IP 会发生改变,这种变更行为就是 SNAT反之。当外网的数据经过路由发往内网主机时,数据包中的目的 IP (路由器上的公网 IP) 将修改为内网 IP,这种变更行为就是 DNAT

1、SNAT:源地址转换

能够让多个内网用户通过一个外网地址上网,解决了IP资源匮乏的问题,路由器也就使用此技术,使用 POSTROUTING

CentOS 7 中 iptables snat dnat 用法_内网_02

# 由上图可知,需要将 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

2、DNAT:目地地址转换

则能够让外网用户访问局域网内不同的服务器,使用 PREROUTING

CentOS 7 中 iptables snat dnat 用法_linux_03

# 将 61.240.149.149 的 80端口 转成  192.168.10.6 的 80端口
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

3、常用场景

  1. 到本机应用的数据包:PREROUTING → INTPUT
  2. 由本机转发数据包:PREROUTING → FORWARD → OUTPUT
  3. 由本机应用发出的数据包:OUTPUT → POSTROUTING
  4. 本机作为lvs转发数据包:PREROUTING → INTPUT → IPVS → POSTROUTING