1. 基础结构
iptables
自上而下由 Tables
、Chains
、Rules
三部分组成。
![image.png](https://img-blog.csdnimg.cn/img_convert/4cc3d5313f83819ad96f1d83deb6bf7c.png)
Tables
:表,用于存储链的容器(一个表中可以有多个链),是防火墙的最大概念。Chains
:链,用于存储规则的容器(一个链中可以有多条规则)。Rules
:规则,可以设置允许或者拒绝规则。
2. 表结构
2.1 filter表
过滤:是 iptables
的默认表,主要和主机自身相关,是真正负责主机防火墙功能的(用于过滤拦截流入流出主机的数据包)
Chains:链 | 介绍 |
---|
INPUT | input:过滤流入主机的数据包(设置是否让数据包进入主机) |
OUTPUT | output:过滤流出主机的数据包(处理从主机发出的数据包) |
FORWARD | forward:路过,处理转发流经主机的数据包(将数据转发到本机的其他网卡设备上) |
2.2. nat表
网络地址转换(Network Address Translation),即来源于目的IP地址和端口的转换。和主机自身无关,一般用于局域网共享上网(内网服务器上外网)、IP映射和端口映射等。
Chains:链 | 介绍 |
---|
PREROUTING | prerouting:路由之前,处理刚到达本机并在路由转发之前的数据包。他会转换数据包中的目的IP地址,通常用于DNAT(destination NAT)目的地址网络地址转换 |
POSTROUTING | postrouting:路由之后,处理即将离开本机的数据包。他会转换数据包中的源IP地址,通常用于SNAT(source NAT)源地址网络地址转换 |
OUTPUT | output:处理本机产生的数据包,改变主机发出数据包的目的地址 |
2.3 mangle表
用于指定如何处理数据包,他能改变TCP头中的QoS位
Chains:链 | 介绍 |
---|
PREROUTING | prerouting:路由之前 |
POSTROUTING | postrouting:路由之后 |
OUTPUT | output:流出 |
INPUT | input:流入 |
FORWARD | forward:转发 |
2.4 raw表
用于处理异常
Chains:链 | 介绍 |
---|
PREROUTING | prerouting:路由之前 |
OUTPUT | output:流出 |
2. Rules(规则):重点重点重点
- Rules规则包括一个条件和一个目标(target)。
- 如果满足条件,就执行目标(target)中的规则或者特定值。
- 如果不满足条件,就判断下一条规则。
目标名称 | 介绍 |
---|
ACCEPT | accept:允许包 |
DROP | drop:丢弃包 |
QUEUE | queue:把包传递到用户空间 |
RETURN | return:停止执行当前链中的后续Rules,并返回到调用链 |
2.1 命令
长参数 | 短参数 | 用法 | 介绍 |
---|
–list | -L | -L 链名 [规则序号] | 展示表中的所有规则 |
–append | -A | -A 链名 | 在指定链里增加规则 |
–insert | -I | -I 链名 [规则序号] | 在指定链中增加规则,不指定序号默认在第1条 |
–delete | -D | -D 链名 规则序号 | 删除指定序号的规则 |
2.2 选项
长参数 | 短参数 | 用法 | 介绍 |
---|
–table | -t | -t 表名 | 指定表,默认是filter表 |
–numeric | -n | -nL | 数字展示ip地址和端口 |
–line-numbers | | -nL --line-numbers | 展示列表的时候显示序号 |
| | | |
–protocol | -p | -p TCP | 指定规则的协议 |
–source | -s | -s 源IP | 指定规则的源IP |
–sport | | -s 源IP --sport 源端口 | 指定规则的源端口 |
–destination | -d | -d 目的IP | 指定规则的目的IP |
–dport | | -d 目的IP --dport | 指定规则的目的端口 |
| | | |
–match | -m | -m 扩展模块名 | 扩展匹配规则 |
| | | |
–in-interface | -i | | input流入的时候从哪个网卡进来 |
–out-interface | -o | | output流出的时候从哪个网卡出去 |
| | | |
–jump | -j | -j 目标 | 满足条件后的动作:ACCEPT/DROP |
2.3 扩展模块
# 多个端口
-m multiport --sport 80,443 --dport 81,445
3. 常用的例子
3.1 查看filter表中的规则配置
sudo iptables -nL --line-numbers
3.2 删除指定序号的规则
sudo iptables -D INPUT 1
3.2 增加规则
# 拒绝所有
sudo iptables -I INPUT 6 -p TCP --dport 8080 -j DROP
# 接受某个源IP
sudo iptables -I INPUT 6 -p TCP -s 192.168.1.1 --dport 8080 -j ACCEPT
# IP范围匹配
sudo iptables -A INPUT 6 -p TCP -m iprange --src-range 192.168.1.5-192.168.1.124 --dport 8080 -j ACCEPT
# 多个端口
sudo iptables -I INPUT 6 -p TCP -m multiport --dport 80,443 -j ACCEPT