firewalld区域策略是服务器访问管理最实用、最安全的起点,通过9个预置区域按信任度分级(drop→trusted),结合网卡绑定、服务白名单和富规则,实现精细化流量控制。

firewalld 的区域策略是服务器访问管理最实用、最安全的起点。它不靠堆砌规则,而是通过“信任分级”控制流量——把不同网络环境划进不同区域,每个区域自带一套默认行为,再叠加服务白名单,就能快速收窄攻击面。
理解九个标准区域的实际含义
firewalld 预置 9 个区域,按信任度由低到高排列。选错区域,策略就容易失效或过度开放:
- drop:所有入站包静默丢弃,不回复任何响应(适合暴露在公网但无需响应的节点)
- block:拒绝入站连接并返回 ICMP 不可达(比 drop 更易排查连通性)
- public:默认区域,仅放行 SSH 和 DHCPv6 客户端(适用于云服务器公网接口)
- external:专为 NAT 网关设计,自动启用 IP 伪装(适合做出口防火墙的主机)
- dmz:只允许已建立连接和显式授权的服务(适合对外提供 Web/SMTP 的隔离区)
- trusted:完全放行所有入站流量(仅限内网管理网段,切勿用于公网接口)
设置默认区域并绑定网卡
区域必须关联到具体网络接口才生效。先确认当前配置,再稳妥调整:
- 查看当前默认区域:
firewall-cmd --get-default-zone - 查看哪些网卡属于哪个区域:
firewall-cmd --get-active-zones - 将公网网卡(如 eth0)永久划入 public 区:
firewall-cmd --permanent --zone=public --change-interface=eth0 - 将内网管理网卡(如 ens192)划入 trusted 区:
firewall-cmd --permanent --zone=trusted --change-interface=ens192 - 设 public 为系统默认区域:
firewall-cmd --permanent --set-default-zone=public - 重载全部配置:
firewall-cmd --reload
用服务白名单替代端口硬编码
firewalld 的服务(service)是 XML 文件定义的端口+协议组合,比直接开 80/tcp 更可维护、更少出错:
- 列出所有预定义服务:
firewall-cmd --get-services - 在 public 区只允许 SSH 和 HTTPS:
firewall-cmd --permanent --zone=public --add-service=ssh && firewall-cmd --permanent --zone=public --add-service=https - 移除默认带的非必要服务(如 dhcpv6-client):
firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client - 验证是否生效:
firewall-cmd --zone=public --list-services
按需启用富规则做精细控制
当需要基于源 IP、时间或协议类型进一步限制时,富规则(rich rule)比直接写 iptables 更安全、更易读:
- 只允许特定管理 IP 访问 SSH:
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.10.5" service name="ssh" accept' - 禁止某网段访问所有服务:
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" reject' - 富规则优先级高于区域默认服务,且支持 --timeout 临时生效(适合调试)

















