不能直接修改 firewall-cmd --get-zones 返回的内置区域列表,因其为 firewalld 硬编码的 9 个预置 zone(如 public、drop、trusted 等),删改 /usr/lib/firewalld/zones/ 文件会导致加载失败或自动恢复;新增自定义 zone 应使用 firewall-cmd --permanent --new-zone=name 并执行 --reload,该 zone 会出现在后续 --get-zones 输出中,配置应存于 /etc/firewalld/zones/ 且优先通过命令行操作而非手动编辑 XML。

firewall-cmd --get-zones 返回的区域列表能改吗
不能直接修改 firewall-cmd --get-zones 输出的预定义区域列表(如 public、trusted、drop 等)。这些是 firewalld 内置的 9 个 zone,硬编码在源码中,XML 文件只是配置载体,删改 /usr/lib/firewalld/zones/ 下的文件不会移除它们,反而可能引发加载失败。
想新增一个自定义区域该怎么操作
可以用 firewall-cmd 创建新 zone,它会生成对应 XML 文件并加入活动配置,但不会出现在原始内置列表里——它属于“用户定义区域”,--get-zones 仍会显示全部(含内置 + 自定义)。
-
firewall-cmd --permanent --new-zone=myapp:创建名为myapp的新 zone -
firewall-cmd --reload:必须执行,否则 zone 不生效 -
firewall-cmd --get-zones:此时输出里会出现myapp - 新 zone 默认为空规则,需手动添加端口或服务:
firewall-cmd --permanent --zone=myapp --add-port=8080/tcp
为什么不能删掉 builtin zone 比如 drop 或 block
firewalld 启动时强制加载所有内置 zone,即使你删了 /usr/lib/firewalld/zones/drop.xml,服务重启后会报错或自动恢复。更关键的是:很多内部逻辑(比如 --set-default-zone=drop)依赖这些 zone 名字存在,强行移除会导致 firewall-cmd 命令异常或 zone 分配失败。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
- 真正要“禁用”某个 zone?别删它,而是避免在
--change-interface或--set-default-zone中引用它 - 误删 XML 文件后,可执行
rpm -V firewalld检查完整性,或重装:yum reinstall firewalld - 自定义 zone 的配置存放在
/etc/firewalld/zones/,这才是你应该编辑的目录
修改 zone 行为本质是改 XML 还是用命令
优先用 firewall-cmd 命令操作,而不是手改 XML。firewalld 设计上要求所有变更走 daemon 接口,否则:
- 修改
/etc/firewalld/zones/public.xml后不 reload,变更无效 - 直接编辑
/usr/lib/firewalld/zones/下的文件,下次 firewalld 升级可能被覆盖 - XML 格式写错(比如少闭合标签)会导致
firewall-cmd --reload失败,且错误提示极简陋(常只报 “Failed to reload”)
真正需要改 XML 的场景极少,比如要给 zone 加自定义 ICMP 类型或复杂 rich rule 模板——但这类操作应先用 --add-rich-rule 尝试,失败再考虑 XML。










