iptables常用命令汇总
今天分享一下iptables知识点和常用命令。
现在redhat系统默认使用firewalld,ubuntu默认使用ufw防火墙,为什么还要学iptables呢,
还有其他应用场景,比如容器环境,Docker 默认直接管理 iptables 规则来实现网络隔离和端口映射。即便使用 firewalld,Docker 也会绕过它直接插入 iptables 规则(除非做特别配置)
接下来将详细介绍一下iptables:
官网: https://www.netfilter.org/
iptables全称为netfilter/iptables, 是linux平台下自带的的开源包过滤防火墙。
1 iptables结构
四张表作用:
-
filter: 实现对数据包的过滤
-
nat: 主要修改数据包的地址和端口,实现网络转换功能,例如源地址或目标地址
-
mangle:对数据包进行修改,例如给数据包打标记MARK
-
raw:关闭nat表上启用的连接追踪机制
五条链作用:
-
INPUT: 进来的包
-
OUTPUT: 出去的包
-
FORWARD: 经过的包
-
PREROUTING: 路由选择前, 主要用于DNAT
-
POSTROUTING: 路由选择后, 主要用于SNAT

2 Iptables基本语法
2.1 常见语法格式:

2.2 常见参数表
| 常见参数 | 说明 |
|---|---|
| -t | 后接表名,指定对哪张表进行操作。如果不加-t指定表,则默认为filter表 |
| -A | 后接链名,指定对哪个链增加一条规则。默认增加在最后一条。 |
| -I(大写i) | 后接链名,指定对哪个链插入一条规则。默认插入在最前面,也可以指定插入在某一行。 |
| -D | 删除规则,指定删除某一条规则 |
| -L | 列表规则。可以与-n结合使用,将规则以数字方法显示 |
| -F | 清空规则,删除一个表的所有规则 |
| -p | 指定协议(包过滤常见条件) |
| -s或-d | 指定源IP或目标IP(包过滤常见条件) |
| --dport | 指定目标端口(包过滤常见条件) |
| --sport | 指定源端口 |
| -i | 接网卡接口, 进入的网卡接口(用于DNAT) |
| -o | 接网卡接口, 出去的网卡接口(用于SNAT) |
| -j | 后接动作 |
| -P | 修改默认策略 |
2.3 常见动作表
| -j后接的动作类型 | 说明 |
|---|---|
| ACCEPT | 允许 |
| DROP | 丢弃 |
| REJECT | 拒绝,REJECT会返回错误信息,DROP不会 |
| SNAT | 源地址转换,它与MASQUEREAD的区别是SNAT是接一个固定IP |
| MASQUEREAD | IP地址伪装,使用NAT转换成外网IP,可以PPP拔号(外网IP不固定情况) |
| DNAT | 目标地址转换 |
3 常用命令
3.1 查看iptables规则
1、查看所有规则
【查】看对应表的所有规则,-t 选项指定要操作的表,省略" -t 表名"时,默认表示操作filter表,-L表示列出规则,即查看规则,格式如下:
iptables -t 表名 -L
2、查看指定表的指定链中的规则
iptables -t 表名 -L 链名
3、查看指定表的所有规则,并且显示更详细的信息(-v 更多字段)
iptables -t 表名 -v -L
4、表示查看表的所有规则(-n 不解析IP地址)
表示查看表的所有规则,并且在显示规则时,不对规则中的IP或者端口进行名称反解,-n选项表示不解析IP地址。
iptables -t 表名 -n -L
3.2 iptables规则
【温馨提示】添加规则时,规则的顺序非常重要。
1、指定表的指定链的尾部添加一条规则(-A)
【温馨提示】省略-t选项时,表示默认操作 filter表中的规则
iptables -t 表名 -A 链名 匹配条件 -j 动作iptables -t filter -A INPUT -s 10.0.0.100 -j DROP
2、指定表的指定链的首部添加一条规则(-I)
iptables -t 表名 -I 链名 匹配条件 -j 动作iptables -t filter -I INPUT -s 10.0.0.100 -j ACCEPT
3、在指定表的指定链的指定位置添加一条规则
iptables -t 表名 -I 链名 规则序号 匹配条件 -j 动作iptables -t filter -I INPUT 5 -s 10.0.0.100 -j REJECT
4、指定表的指定链的默认策略(默认动作),并非添加规则
iptables -t 表名 -P 链名 动作iptables -t filter -P FORWARD ACCEPT
【温馨提示】上例表示将filter表中FORWARD链的默认策略设置为 ACCEPT
3.3 删除iptables规则
【温馨提示】注意点:如果没有保存规则,删除规则时请慎重。
1、按照规则序号删除规则
按照规则序号删除规则,删除指定表的指定链的指定规则,【-D】选项表示删除对应链中的规则。
iptables -t 表名 -D 链名 规则序号# 删除filter表中INPUT链中序号为3的规则
iptables -t filter -D INPUT 3
2、按照具体的匹配条件与动作删除规则,删除指定表的指定链的指定规则
iptables -t 表名 -D 链名 匹配条件 -j 动作# 删除filter表中INPUT链中源地址为10.0.0.100并且动作为DROP的规则。
iptables -t filter -D INPUT -s 10.0.0.100 -j DROP
3、删除指定表的指定链中的所有规则(-F)
【-F】选项表示清空对应链中的规则,执行时需三思。
iptables -t 表名 -F 链名iptables -t filter -F INPUT
4、删除指定表中的所有规则
iptables -t 表名 -Fiptables -t filter -F
3.4 iptables规则
【温馨提示】如果使用-R选项修改规则中的动作,那么必须指明原规则中的原匹配条件,例如源IP,目标IP等。
1、修改指定表中指定链的指定规则(-R)
修改指定表中指定链的指定规则, -R选项表示修改对应链中的规则,使用 -R选项时要同时指定对应的链以及规则对应的序号,并且规则中原本的匹配条件不可省略。
iptables -t 表名 -R 链名 规则序号 规则原本的匹配条件 -j 动作iptables -t filter -R INPUT 3 -s 10.0.0.100 -j ACCEPT
表示修改filter表中INPUT链的第3条规则,将这条规则的动作修改为ACCEPT, -s 10.0.0.100为这条规则中原本的匹配条件,如果省略此匹配条件,修改后的规则中的源地址可能会变为0.0.0.0/0。
其他修改规则的方法:先通过编号删除规则,再在原编号位置添加一条规则。
2、修改指定表的指定链的默认策略(默认动作)
iptables -t 表名 -P 链名 动作iptables -t filter -P FORWARD ACCEPT
3.5 保存iptables规则
保存规则命令如下,表示将iptables规则保存至 /etc/sysconfig/iptables文件中,如果对应的操作没有保存,那么当重启iptables服务以后就不存在了。
service iptables save
或者使用下面方法保存
iptables-save > /etc/sysconfig/iptables
3.6 基本匹配条件
1、用于匹配报文的源地址(-s)
iptables -t filter -I INPUT -s 192.168.1.111,192.168.1.118 -j DROP
iptables -t filter -I INPUT -s 192.168.1.0/24 -j ACCEPT
iptables -t filter -I INPUT ! -s 192.168.1.0/24 -j ACCEPT
2、用于匹配报文的目标地址(-d)
iptables -t filter -I OUTPUT -d 192.168.1.111,192.168.1.118 -j DROP
iptables -t filter -I INPUT -d 192.168.1.0/24 -j ACCEPT
iptables -t filter -I INPUT ! -d 192.168.1.0/24 -j ACCEPT
3、用于匹配报文的协议类型(-p)
iptables -t filter -I INPUT -p tcp -s 10.0.0.100 -j ACCEPT
iptables -t filter -I INPUT ! -p udp -s 10.0.0.100 -j ACCEPT
4、用于匹配报文是从哪个网卡接口流入本机的(-i)
iptables -t filter -I INPUT -p icmp -i eth4 -j DROP
iptables -t filter -I INPUT -p icmp ! -i eth4 -j DROP
iptables实际是很复杂的,四表五链都需要理解一阵子,还要记住参数和动作,需要不断是实际工作中去尝试,由于篇幅问题,还有很多实际的案例没列出来,后续再进行分享,先学习基础的。
