正确命令是firewall-cmd --set-default-zone=xxx,仅修改运行时配置;若需持久生效,必须加--permanent参数并执行--reload,否则重启后恢复为默认public zone。

firewall-cmd 修改默认 zone 的正确命令是 firewall-cmd --set-default-zone=xxx
CentOS 7 默认使用 firewalld,其默认区域(default zone)决定新网卡、未显式配置的连接归属哪个 zone。修改它不会立即影响已有连接或已加载的规则,但会影响后续加入的接口和未指定 zone 的请求。
执行前需确认目标 zone 已存在且启用(如 public、trusted、internal),否则命令会报错:Error: INVALID_ZONE: xxx。
- 查看当前默认 zone:
firewall-cmd --get-default-zone - 列出所有可用 zone:
firewall-cmd --get-zones - 设置为
internal(常用于内网可信环境):firewall-cmd --set-default-zone=internal - 该操作仅修改运行时配置;若要持久生效,必须加
--permanent参数并重载:firewall-cmd --permanent --set-default-zone=internal && firewall-cmd --reload
不加 --permanent 就执行 --set-default-zone 会怎样
只改了当前 firewalld 进程的内存状态,重启 firewalld 或系统后自动恢复为原默认 zone(通常是 public)。这在测试时有用,但生产环境极易遗漏持久化步骤,导致策略“看似生效实则丢失”。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
- 验证是否已持久化:
firewall-cmd --permanent --get-default-zone(注意必须带--permanent) -
firewall-cmd --get-default-zone和firewall-cmd --permanent --get-default-zone输出不一致,说明配置未持久 -
--reload不会把运行时 zone 写入永久配置,它只是从磁盘重新加载 —— 所以先--permanent再--reload是固定顺序
修改默认 zone 后,已配置的接口 zone 会不会变
不会。每个接口(如 eth0)的 zone 是独立绑定的,通过 firewall-cmd --zone=xxx --change-interface=eth0 设置,优先级高于 default zone。修改 default zone 只影响:新接入的接口、未绑定 zone 的接口、以及某些未指定 zone 的直接服务访问(如 firewall-cmd --add-service=http 默认作用于 default zone)。
- 检查某接口当前 zone:
firewall-cmd --get-zone-of-interface=eth0 - 已绑定 zone 的接口不受 default zone 变更影响,哪怕它原来就是靠 default zone 自动分配的
- 如果想批量迁移接口到新默认 zone,得手动用
--change-interface逐个处理,firewalld 不提供“全部重置为 default”命令
为什么 firewall-cmd --set-default-zone 失败却没报错
常见于权限不足或 firewalld 未运行。非 root 用户执行会静默失败(返回码 1,但无输出);若 firewalld 处于 inactive 状态,命令也会无提示退出。
- 先确认服务状态:
systemctl status firewalld,应为active (running) - 务必用 root 或
sudo执行,普通用户调用firewall-cmd默认走 D-Bus 代理,权限受限 - 错误信息只有在 zone 名非法或服务异常时才输出,静默失败大概率是权限或服务问题










