firewalld的区域(zone)机制是其区别于iptables的关键设计,通过按信任等级分类网络环境并预设安全策略,实现网卡绑定后规则自动生效;默认区域为public,9个预置区域按信任度从低到高依次为drop、block、public、external、dmz、work、home、internal、trusted。

firewalld 的区域(Zone)机制是其区别于传统 iptables 的关键设计——它不让你直接操作端口和链,而是把网络环境按信任等级分类,再为每类环境预设一套安全策略。只要把网卡或 IP 归入某个 zone,对应规则就自动生效,省去大量重复配置。
理解预置区域的信任等级与默认行为
firewalld 自带 9 个标准区域,从最严格到最宽松排列:drop → block → public → external → dmz → work → home → internal → trusted。每个区域在 /usr/lib/firewalld/zones/ 下有对应 XML 文件,定义了默认允许的服务、端口、ICMP 类型及是否允许伪装(masquerade)等。
- public 是默认区域,只放行 ssh 和 dhcpv6-client,适合暴露在互联网的服务器
- internal 和 trusted 适用于局域网,前者允许 samba、mdns 等内网服务,后者直接放行所有流量
- dmz 用于对外提供有限服务的中间区,比如只开 web 和 ssh
- drop 和 block 用于隔离风险设备,前者静默丢包,后者返回拒绝响应
查看当前区域绑定与切换接口归属
先确认哪些网卡正在用哪个 zone,再决定是否调整:
- 运行
firewall-cmd --get-active-zones查看当前已激活的 zone 及绑定的接口(如 ens33 在 public 区) - 用
firewall-cmd --get-default-zone知道新接口默认归入哪个 zone - 临时把 ens33 切到 home 区:
firewall-cmd --zone=home --change-interface=ens33 - 永久绑定需加
--permanent并 reload:firewall-cmd --permanent --zone=dmz --add-interface=ens33 && firewall-cmd --reload
修改默认区域并验证配置效果
如果整台机器都处于可信内网,把默认 zone 改成 internal 比逐个绑定更高效:
- 永久设置:
firewall-cmd --set-default-zone=internal --permanent - 执行
firewall-cmd --reload才会让新默认 zone 生效 - 验证是否成功:
firewall-cmd --get-default-zone应返回 internal;再查firewall-cmd --zone=internal --list-all确认该 zone 已启用所需服务(如 samba、ipp-client) - 注意:已手动绑定过 zone 的接口不受默认 zone 影响,仅对未显式指定的新接口生效
自定义区域满足特殊网络场景
当预置 zone 不够用时,可创建专属区域,比如为 IoT 设备单独设限:
- 新建 zone:
firewall-cmd --new-zone=iot --permanent - 为其添加基础规则(如仅允许 DNS 和 NTP):
firewall-cmd --permanent --zone=iot --add-service=dns && firewall-cmd --permanent --zone=iot --add-service=ntp - 绑定接口:
firewall-cmd --permanent --zone=iot --add-interface=eth1 - 全部配置完必须
firewall-cmd --reload才加载 - 自定义 zone 配置文件会生成在
/etc/firewalld/zones/iot.xml,可后续直接编辑











