将防火墙的管理工具切换为iptables:
systemctl disable firewalld.service --now
yum -y install iptables iptables-services.x86_64
systemctl enable iptables.service --now


plain
基本语法
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
plain
-t 表名 【-t 的意思是table(表)】
raw 关跟踪
mangle 改报文
nat 做转换
filter 滤数据
plain
管理选项
-A 在指定链的末尾添加(--append)一条新规则
-D 删除(--delete)指定链中的,某一条新规则,可指定规则序号或具体内容
-R 修改、替换(--replace)指定链中的某一条规则,可指定规则序号或具体内容
-I 在指定链中插入(--insert)一条新的规则,未指定序号时默认作为第一条规则
-L 列出(--list)指定链中的所有规则,未指定链名时,列出表中所有链
-F 清空(--flush)指定链中的所有规则,未指定链名时,清空表中所有链
-P 设置指定链的默认策略(--policy)
-n 使用数字形式(--numeric)显示输出结果,例如:只会显示主机ip不会显示主机名
-v 查看规则列表时显示详情(--verbose)信息
-h 查看命令帮助(--help)信息
--line-number 查看规则列表时,同时显示规则在链中的顺序号
plain
链名
PREROUTING 路由前
INPUT 进本机
FORWARD 要转发
OUTPUT 出本机
POSTROUTING 路由后
plain
匹配条件
-s 源ip/网段 匹配源ip/网段
-d 目的ip/网段 匹配目的ip/网段
-p 协议 匹配协议(tcp/udp/icmp/ip)
--dport 端口 匹配目的端口(需先指定-p)
--sport 端口 匹配源端口(需先指定-p)
-i 网卡名 匹配入站网卡(仅PROROUTING/INPUT/FORWARD)
-o 网卡名 匹配出站网卡(仅FORWARD/OUTPUT/POSTROUTING)
-m(math) Mac地址 基于mac地址匹配数据包
plain
-j 控制类型 【-j的意思是jump"跳转动作/控制行为"】(匹配成功后"该怎么办")
ACCEPT 允许数据包通过(放行)
DROP 丢弃数据包(无任何提示,"静默拒绝")
REJECT 拒绝数据包,同时返回错误提示(如icmp端口不可达)
SNAT 源地址转换(内网到公网)
DNAT 目的地址转换(公网到内网)
MASQUERADE 动态SNAT(适配公网IP动态变化,如拨号上网)
LOG 记录数据包日志(/var/log/messages)
RETURN 终止当前链的规则匹配,返回上一级链
操作
plain
禁ping
iptables -t filter -I INPUT -p icmp -j REJECT
plain
添加新规则
向 filter 表的 INPUT 链末尾追加一条规则,允许所有 TCP 协议的入站数据包通过本机
iptables -t filter -A INPUT -p tcp -j ACCEPT
将 "允许所有 UDP 协议入站数据包" 的规则,插入到filter表INPUT链的最顶端
iptables -I INPUT -p udp -j ACCEPT
将 "允许所有 ICMP 协议入站数据包" 的规则,精准插入到filter表INPUT链的
第 2 个位置
iptables -I INPUT 2 -p icmp -j ACCEPT
plain
查看规则列表
列出(List)filter表(默认)中INPUT链的所有规则,
并为每条规则标注序号(line-numbers)
iptables -L INPUT --line-numbers
以数字格式(numeric)列出filter表中INPUT链的所有规则,
避免 IP / 端口的域名解析
iptables -nL INPUT
plain
删除、清空规则
删除 filter 表(默认)中 INPUT 链里序号为 3 的规则
iptables -D INPUT 3
验证删除结果------ 以「数字格式」列出 filter 表中 INPUT 链的所有剩余规则,
确认序号 3 的规则已被移除
iptables -nL INPUT
清空 filter 表(默认)中 INPUT 链的所有规则(仅清空 INPUT 链)
iptables -F INPUT
清空 filter 表中所有链(INPUT/FORWARD/OUTPUT)的所有规则
iptables -F
清空 nat 表中所有链(PREROUTING/POSTROUTING/OUTPUT)的所有规则
iptables -t nat -F
清空 mangle 表中所有链(5 条链:PREROUTING/INPUT/FORWARD/OUTPUT/POSTROUTING)的
所有规则
iptables -t mangle -F
plain
设置默认策略
为filter表的FORWARD链设置策略为DROP
(所有未匹配到自定义规则的转发数据包都默认丢弃)
iptables -t filter -P FORWARD DROP
为filter表(默认)的OUTPUT链设置默认策略为ACCEPT(允许),
(本机主动向外发送的所有出站数据包,默认全部放行)
iptables -P OUTPUT ACCEPT
规则的匹配策略
1.通用匹配
通用匹配也称为常规匹配,这种匹配方式可以独立使用,不依赖于其他条件或扩展模块。
常见的通用匹配包括协议匹配、地址匹配、网络接口匹配。
(1).协议匹配
plain
将"丢弃所有ICMP协议入站数据包"的规则插入到filter表(默认)INPUT链的
最顶端(序号1),直接禁止所有外部设备对本机的ICMP请求(包括ping,ICMP错误提示)
iptables -I INPUT -p icmp -j DROP
向filter表FORWARD链末尾追加一条规则,允许所有"非ICMP协议"的转发数据包通过
(仅拒绝ICMP协议的转发流量)
iptables -A FORWARD ! -p icmp -j ACCEPT
(2).地址匹配
plain
向filter表(默认)的FORWARD链末尾追加一条规则:匹配源 IP 为 192.168.147.129 的转发数据包,
执行REJECT动作(拒绝并返回 ICMP 错误提示,区别于 DROP 的静默丢弃)。
iptables -A FORWARD -s 192.168.147.129 -j REJECT
向filter表(默认)的FORWARD链末尾追加一条规则:匹配源 IP 属于
192.168.147.0/24 网段 的转发数据包,执行ACCEPT动作(允许放行)。
iptables -A FORWARD -s 192.168.147.0/24 -j ACCEPT
将规则插入到filter表(默认)的INPUT链首位(序号 1):匹配源 IP 为
192.168.147.129 的入站数据包,执行DROP动作(静默丢弃,无任何反馈)。
iptables -I INPUT -s 192.168.147.129 -j DROP
重复向INPUT链首位插入完全相同的规则(插入后原首位规则变为序号 2),最终INPUT链会出现两条内容一致的
"丢弃 192.168.147.129 入站流量" 的规则,效果与单条规则无差异,仅增加冗余。
iptables -I INPUT -s 192.168.147.129 -j DROP
(3).网络接口匹配
向filter表INPUT链末尾追加规则:匹配从 ens33 网卡进入(-i ens33) 且源 IP 属于10.0.0.0/8 网段(包含10.0.0.1~10.255.255.254) 的入站数据包,执行DROP(静默丢弃,无任何反馈)。
iptables -A INPUT -i ens33 -s 10.0.0.0/8 -j DROP
向filter表INPUT链末尾追加规则:匹配从 ens33 网卡进入 且源 IP 属于 172.16.0.0/16 网段(包含 172.16.0.1~172.16.255.254) 的入站数据包,执行DROP(静默丢弃)。
iptables -A INPUT -i ens33 -s 172.16.0.0/16 -j DROP
向filter表INPUT链末尾追加规则:匹配从 ens33 网卡进入 且源 IP 属于 192.168.0.0/16 网段(包含 192.168.0.1~192.168.255.254) 的入站数据包,执行DROP(静默丢弃)。
iptables -A INPUT -i ens33 -s 192.168.0.0/16 -j DROP
2.隐含匹配
这种匹配方式要求以指定的协议匹配作为前提条件,相当于子条件,因此无法独立使用,其对应的功能由 iptables 在需要时自动(隐含)载入内核。常见的隐含匹配包括端口匹配、TCP 标记匹配、ICMP 类型匹配。
(1).端口匹配
向 filter 表 FORWARD 链末尾追加规则,允许源 IP 为 192.168.147.0/24 网段、UDP 协议且目的端口为 53(DNS 服务端口)的转发数据包通过。
iptables -A FORWARD -s 192.168.147.0/24 -p udp --dport 53 -j ACCEPT
向 filter 表 FORWARD 链末尾追加规则,允许目的 IP 为 192.168.147.0/24 网段、UDP 协议且源端口为 53(DNS 服务器返回流量)的转发数据包通过。
iptables -A FORWARD -d 192.168.147.0/24 -p udp --sport 53 -j ACCEPT
向 filter 表 INPUT 链末尾追加规则,允许 TCP 协议、目的端口为 20 到 21(FTP 服务端口)的入站数据包通过。
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
向 filter 表 INPUT 链末尾追加规则,允许 TCP 协议、目的端口为 24500 到 24600(指定端口段)的入站数据包通过。
iptables -A INPUT -p tcp --dport 24500:24600 -j ACCEPT
(2).ICMP类型匹配
向 filter 表 INPUT 链末尾追加规则,拒绝所有 ICMP 协议中类型为 8(回声请求,即 ping 请求)的入站数据包,实现禁止外部设备 ping 本机的效果。
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
向 filter 表 INPUT 链末尾追加规则,允许所有 ICMP 协议中类型为 0(回声响应,即 ping 回复)的入站数据包。
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
向 filter 表 INPUT 链末尾追加规则,允许所有 ICMP 协议中类型为 3(目标不可达,如主机 / 端口不可达)的入站数据包,保障网络故障诊断时的错误提示能正常接收。
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
向 filter 表 INPUT 链末尾追加规则,丢弃所有未匹配到上述规则的 ICMP 协议入站数据包,仅保留 ping 回复和目标不可达两类 ICMP 流量,其余 ICMP 流量全部静默丢弃。
iptables -A INPUT -p icmp -j DROP
查看 iptables 中 icmp 协议相关匹配选项帮助信息,核心作用是获取 --icmp-type 等 ICMP 专属参数的用法、合法取值及说明,方便配置精准的 ICMP 规则(比如仅禁止 ping 请求、允许故障诊断类 ICMP 消息)。
iptables -p icmp -h
3.显示匹配
(1).多端口匹配
向filter表(默认)的INPUT链末尾追加规则,允许 TCP 协议下,目的端口为 25、80、110、143 这几个端口的入站数据包通过,是批量放行多端口 TCP 流量的高效配置方式。
iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT
(2).IP范围匹配
向filter表(默认)的FORWARD链末尾追加规则,静默丢弃源 IP 在 192.168.4.21 到 192.168.4.28 范围内的所有 TCP 协议转发数据包,禁止该 IP 段的主机通过本机转发 TCP 流量(比如访问外网、跨网段通信)。
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j DROP
(3).MAC地址匹配
向filter表(默认)的FORWARD链末尾追加规则,静默丢弃源 MAC 地址为 00:0c:29:c0:55:3f 的所有 TCP 协议转发数据包,禁止该 MAC 地址对应的设备通过本机转发 TCP 流量(如访问外网、跨网段通信)。
iptables -A FORWARD -p tcp -m mac --mac-source 00:0c:29:c0:55:3f -j DROP
(4).状态匹配
向filter表FORWARD链末尾追加规则:针对 TCP 协议的 "新建连接(NEW)" 类转发数据包,若未携带 SYN 标志位(! --syn),则静默丢弃。核心作用是拦截伪造的 TCP 新建连接包(正常 TCP 新建连接必须先发 SYN 包),防范 TCP 协议欺骗攻击,仅允许合法的 TCP 新建连接请求通过转发。
iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP
将规则插入到filter表INPUT链首位:允许 TCP 协议、目的端口为 80(HTTP 服务)的入站数据包通过。multiport模块在此处虽仅匹配单个端口(80),但保留了批量匹配多端口的扩展性,规则优先级最高,确保 80 端口流量优先放行。
iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
在filter表INPUT链插入规则(紧随 80 端口规则之后):允许 TCP 协议中 "已建立连接(ESTABLISHED)" 状态的入站数据包通过。核心作用是放行本机主动发起的 TCP 连接的回应流量(如本机访问外网后的回包),保障正常的 TCP 通信交互。
iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
将filter表INPUT链的默认策略设置为DROP(静默丢弃)。此时 INPUT 链仅放行 80 端口的新建 TCP 连接、所有已建立 TCP 连接的入站流量,其余未匹配到规则的入站数据包全部被默认丢弃,大幅提升本机入站安全(仅开放必要流量)。
iptables -P INPUT DROP