linux firewalld 管理需明确区域是策略容器、端口/服务是放行项,并区分临时与永久配置;先查当前区域绑定,再按需调整接口归属、开放服务或端口,最后用 list 命令验证且务必 reload 生效。

Linux 使用 firewalld 管理区域和端口开放,关键在于理解“区域(zone)”是策略容器,“端口/服务”是具体放行项,且必须区分临时生效与永久保存。
Linux Distros
Linux发行版游乐场,适用于需要临时Linux沙箱、基于浏览器的Linux虚拟机、一次性终端环境、桌面Linux会话等场景
下载
确认当前区域和接口绑定
firewalld 按网卡或源 IP 应用区域规则,先看清现状再操作:
- 查看当前激活的区域及对应网卡:`firewall-cmd --get-active-zones`
- 查看默认区域(新接口自动归属):`firewall-cmd --get-default-zone`
- 查询某块网卡(如 ens33)属于哪个 zone:`firewall-cmd --get-zone-of-interface=ens33`
如果输出为空,说明该接口尚未绑定到任何区域,后续开放的端口可能不生效。
调整区域分配要分清临时与永久
区域变更需明确作用范围:
- 临时把 ens33 切换到 home 区域(重启后还原):
`firewall-cmd --zone=home --change-interface=ens33`
- 永久设置 ens33 属于 dmz,并设为默认区域:
`firewall-cmd --permanent --zone=dmz --add-interface=ens33`
`firewall-cmd --permanent --set-default-zone=dmz`
⚠️ 所有带 `--permanent` 的命令,必须执行 `firewall-cmd --reload` 才真正写入配置并生效。
开放端口优先用 service,其次才用 port
firewalld 内置了 http、ssh、dns 等服务定义,比直接开端口更安全可靠:
- 永久开放 HTTP 和 HTTPS(自动处理 TCP 80/443):
`firewall-cmd --permanent --add-service=http`
`firewall-cmd --permanent --add-service=https`
- 永久开放 MySQL(3306/tcp),适用于未预定义的服务:
`firewall-cmd --permanent --add-port=3306/tcp`
- 若需开放 UDP 端口(如 DNS 查询),可指定协议:
`firewall-cmd --permanent --add-port=53/udp`
注意:这些命令默认作用于当前默认区域;如需指定区域(比如只在 public 区放 SSH),加 `--zone=public` 参数。
验证规则是否生效
别凭感觉判断,用命令直接查结果:
- 查看默认区域完整配置(含开放服务、端口、富规则):
`firewall-cmd --list-all`
- 查看指定区域(如 dmz)的全部规则:
`firewall-cmd --zone=dmz --list-all`
- 单独列出已开放的服务:`firewall-cmd --list-services`
- 单独列出已开放的端口:`firewall-cmd --list-ports`
若发现刚添加的 service 或 port 不在列表里,大概率漏了 `--permanent` 或没执行 `--reload`。