firewalld 不提供严格报文校验功能,需协同 zone 策略、rich rule 和内核参数实现:设 public 为默认区域并精简服务;启用 icmp-block-inversion 实现 icmp 白名单;用 rich rule 限制非法 tcp 标志、连接速率及分片;配合 sysctl 开启 rp_filter 等加固内核网络栈。

firewalld 本身不直接提供“严格报文校验”(如 TCP 校验和验证、IP 分片重组检查、SYN Flood 检测等)功能,这类深度报文合法性检查属于内核 netfilter 的底层行为或需配合 iptables/nftables 规则 或 内核参数调优 实现。firewalld 是一个策略管理前端,它通过 zone 和 service 抽象层简化规则配置,但底层仍依赖 netfilter 框架。所谓“严格报文校验”,实际需从三个层面协同加固:firewalld 区域策略 + 内核网络栈防护 + 可选的 rich rule 细粒度控制。
一、用 public zone 基线强化默认拒绝策略
firewalld 默认使用 public 区域,其策略是“仅允许已建立连接 + 显式开放的服务”。要真正实现严格基线,必须确保:
- 默认区域设为
public(而非trusted或home):sudo firewall-cmd --set-default-zone=public - 确认该区域未意外放行多余服务:
sudo firewall-cmd --zone=public --list-all若看到services: dhcpv6-client ssh以外项(如http),应移除:sudo firewall-cmd --permanent --remove-service=http - 禁用 ICMP 回显响应(防 ping 扫描):
sudo firewall-cmd --permanent --add-icmp-block=echo-request
二、启用 icmp-block-inversion 实现白名单式 ICMP 控制
默认情况下,public zone 会 阻断所有 ICMP 类型(包括 echo-request),但若你需要只允许特定 ICMP 类型(如仅允许 echo-reply 或 destination-unreachable),可开启反向控制:
- 启用 inversion 模式:
sudo firewall-cmd --permanent --icmp-block-inversion - 然后明确放行必需的 ICMP 类型(例如允许路径 MTU 发现所需的
packet-too-big):sudo firewall-cmd --permanent --remove-icmp-block=packet-too-big - 重载生效:
sudo firewall-cmd --reload
此时 firewalld 行为变为:只允许你 显式移除 的 ICMP 类型,其余全部拦截 —— 这才是真正的白名单级 ICMP 校验。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
三、用 rich rule 添加连接状态与报文特征限制
firewalld 支持 rich rule,可调用底层 iptables/netfilter 的匹配模块,实现比 service/port 更严格的流量筛选:
- 拒绝非法 TCP 标志组合(如 SYN+FIN、NULL 扫描):
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" tcp flags ! "syn,ack" drop' - 限制单 IP 新建连接速率(防暴力扫描):
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port port="22" protocol="tcp" limit value="5/m" accept' - 阻止 IPv4 分片报文(降低分片攻击风险):
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" fragment drop'
注意:rich rule 中的 drop 动作比 reject 更隐蔽(不发 RST/ICMP),适合防御探测;所有 rich rule 必须加 --permanent 并执行 --reload 才持久生效。
四、配合内核参数加固底层报文处理
firewalld 不控制内核网络栈行为,但以下 sysctl 设置能增强报文合法性校验:
- 启用反向路径过滤(防 IP 欺骗):
echo 'net.ipv4.conf.all.rp_filter = 1' | sudo tee -a /etc/sysctl.conf - 忽略 ICMP 重定向(防中间人误导):
echo 'net.ipv4.conf.all.accept_redirects = 0' | sudo tee -a /etc/sysctl.conf - 关闭源路由(防绕过防火墙):
echo 'net.ipv4.conf.all.accept_source_route = 0' | sudo tee -a /etc/sysctl.conf - 应用配置:
sudo sysctl -p
这些参数作用于内核 netfilter 输入前阶段,是对 firewalld 规则的有效补充,共同构成报文入口处的多层校验。










