0

0

firewalld rich rule 添加后不生效的 zone 优先级调试

冷炫風刃

冷炫風刃

发布时间:2026-01-28 17:57:42

|

218人浏览过

|

来源于php中文网

原创

firewalld rich rule 不生效的首要原因是 zone 绑定错误,需先用 firewall-cmd --get-active-zones 确认网卡所属 zone,再检查该 zone 的 rich rule 并确保 --reload 生效。

firewalld rich rule 添加后不生效的 zone 优先级调试

firewalld rich rule 不生效,先确认 zone 绑定是否正确

rich rule 生效的前提是它所属的 zone 确实被应用在对应网卡或源地址上。很多人直接用 firewall-cmd --add-rich-rule 添加规则,却没检查该规则加到了哪个 zone——默认是 public,但如果你的接口实际属于 trusted 或自定义 zone,规则就完全不会触发。

查当前接口绑定的 zone:
firewall-cmd --get-active-zones
再查该 zone 的所有 rich rule:
firewall-cmd --zone=your-zone-name --list-rich-rules

  • 如果 --get-active-zones 没输出你的接口,说明它走的是 default zone(通常是 public),但得确认 firewall-cmd --get-default-zone
  • 如果接口出现在多个 zone 下(比如用了 --permanent 但没重载),以运行时 zone 为准,--runtime-to-permanent 不会自动同步 rich rule
  • 临时添加的 rich rule 不带 --permanent,重启 firewalld 后消失;永久添加后必须 firewall-cmd --reload 才生效

rich rule 中的 source address 写法影响匹配优先级

firewalld 的 rich rule 是按“从上到下”顺序匹配的,但真正决定是否命中的是 sourcedestination 的 CIDR 精确度,而非添加顺序。比如你写了两条规则:

rule family="ipv4" source address="192.168.1.0/24" accept
rule family="ipv4" source address="192.168.1.100" accept

实际生效的是更具体的那条(即后者),因为 firewalld 底层用的是 nftables,其链匹配逻辑优先选最长前缀匹配(LPM),不是简单顺序执行。

  • source address 写成单 IP(如 192.168.1.100)比写成 /32 更稳妥,某些版本对 /32 解析有 bug
  • 不要混用 sourcedestination 在同一条 rule 里限制双向流量,firewalld rich rule 默认只管入向;出向需额外加 rule ... destination ... 并确保 zone 的 target 不是 DEFAULT_DROP
  • 若使用 ipset,务必确认 ipset 已存在且加载进内核:ipset list your-set-name,否则 rich rule 会静默失败

检查 runtime 规则是否真落到 nftables 链里

firewalld 是 nftables 前端,rich rule 最终要编译成 nft 表项。如果没生效,最直接的办法是绕过 firewalld 查底层:

PNG Maker
PNG Maker

利用 PNG Maker AI 将文本转换为 PNG 图像。

下载

看当前生效的 nft ruleset:
nft list ruleset | grep -A5 -B5 "firewalld"

  • rich rule 一般落在 inet firewalld filter_IN_XXX 链(XXX 是 zone 名),若找不到对应 rule,说明 firewalld 没成功下发
  • 常见原因:rule 语法错误(比如漏写 family="ipv4")、zone 名拼错、或 firewall-cmd --reload 时因语法问题回滚了整个 zone 配置(此时 journalctl -u firewalld 里会有 “Failed to apply rules”)
  • 临时调试可手动加一条 nft rule 测试通路:nft add rule inet firewalld filter_INPUT ip saddr 192.168.1.100 accept,若通了,说明是 firewalld 解析或 zone 绑定问题

zone target 设置为 DROP 时 rich rule 可能被跳过

每个 zone 的 target 决定了默认策略。如果 zone 的 target 是 REJECTDROP(可通过 firewall-cmd --zone=xxx --get-target 查),那么 rich rule 必须显式 accept,且不能依赖“默认放行”。但更隐蔽的问题是:当 target = DROP 时,firewalld 会把所有非 rich rule 的流量直接丢弃,而 rich rule 若因语法/顺序/匹配失败没触发,结果就是全拒。

  • 建议调试期先设为 firewall-cmd --zone=xxx --set-target=ACCEPT,确认 rich rule 能触发后再调回严格模式
  • target=DEFAULT_DROP 是最严格的,它会让所有未显式 accept 的包走到最后一条 drop 规则;此时 rich rule 的位置无关紧要,但必须 100% 匹配条件
  • 注意:修改 target 后必须 --reload,仅 --runtime-to-permanent 不生效

真正卡住的地方往往不在 rule 本身,而在 zone 是否接管了流量、nftables 是否收到指令、以及 target 如何兜底。别急着改 rule 内容,先用 firewall-cmd --get-active-zonesnft list ruleset 对齐预期和现实。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1126

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

192

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1611

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

20

2026.01.19

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

223

2023.12.07

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1394

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

706

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

295

2023.06.30

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

158

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 9.6万人学习

CSS3 教程
CSS3 教程

共18课时 | 4.9万人学习

Vue 教程
Vue 教程

共42课时 | 7.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号