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网络地址转换)
首先说说局域网内封包的传送
- 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。
- 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
- 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。
SNAT 和 DNAT 是 iptables 中使用 NAT 规则相关的的两个重要概念。如果内网主机访问外网而经过路由时,源 IP 会发生改变,这种变更行为就是 SNAT反之。当外网的数据经过路由发往内网主机时,数据包中的目的 IP (路由器上的公网 IP) 将修改为内网 IP,这种变更行为就是 DNAT
1、SNAT:源地址转换
能够让多个内网用户通过一个外网地址上网,解决了IP资源匮乏的问题,路由器也就使用此技术,使用 POSTROUTING
2、DNAT:目地地址转换
则能够让外网用户访问局域网内不同的服务器,使用 PREROUTING
3、常用场景
- 到本机应用的数据包:PREROUTING → INTPUT
- 由本机转发数据包:PREROUTING → FORWARD → OUTPUT
- 由本机应用发出的数据包:OUTPUT → POSTROUTING
- 本机作为lvs转发数据包:PREROUTING → INTPUT → IPVS → POSTROUTING