防火墙多区域精细化控制的核心是“区域+源地址+策略优先级”三层联动,而非接口多区域绑定;每个物理接口仅能归属一个活跃安全域,跨子网通信需启用IP转发与NAT,并成对配置双向策略以保障状态化流量通达。

防火墙实现多区域划分的精细化流量控制,核心不是给一个接口塞进多个区域,而是靠“区域+源地址+策略优先级”三层联动。关键在于理解:区域本身是逻辑容器,真正决定流量走向的是匹配顺序(source → interface → default)和规则粒度(rich rule 优先于 zone 级别设置)。
明确区域划分与接口归属原则
每个物理接口(如 eth0、GigabitEthernet1/0/1)只能绑定到一个活跃 zone。强行重复添加会报错 ZONE_ALREADY_SET。所以不能靠“把 eth0 同时加到 trust 和 untrust”来隔离流量。正确做法是:
- 将接口绑定到默认 zone(例如 public 或 untrust),作为兜底策略
- 对需要特殊处理的子网,用 source 绑定方式划入其他 zone(如 internal、dmz)
- 例如:
firewall-cmd --permanent --zone=internal --add-source=192.168.10.0/24,这条规则让该网段所有流量按 internal 区域策略执行
用 rich rule 实现跨 zone 的细粒度控制
zone 级别策略(如 internal 默认放行所有服务)太粗,真正需要的是“只允许某 IP 访问某端口”。这时必须用 rich rule,它在 zone 上下文中生效,且优先级高于 zone 默认行为:
- 规则写在目标 zone 下,比如想限制 internal 用户访问数据库,就加在 internal zone 里
- 支持组合条件:源地址、目的端口、协议、日志、限速等,例如只放行 192.168.10.100 的 TCP 3306 请求
- 命令示例:
firewall-cmd --permanent --zone=internal --add-rich-rule='rule family="ipv4" source address="192.168.10.100" port port="3306" protocol="tcp" accept log prefix="mysql-access"' - 注意:如果该 IP 没被 source 绑定到 internal zone,这条规则不会触发 —— rich rule 不跨 zone 生效
确保转发与路由基础能力开启
多区域策略常用于跨子网通信(如 192.168.10.0/24 ↔ 192.168.20.0/24),此时主机需承担路由或 NAT 功能:
- 检查并启用 IP 转发:
sysctl -w net.ipv4.ip_forward=1,并写入/etc/sysctl.conf持久化 - 若需 NAT 出口(如内网访问外网),在对应 zone 开启 masquerade:
firewall-cmd --permanent --zone=public --add-masquerade - 避免因转发关闭导致流量静默丢弃 —— 这是多区域配置中最常被忽略的底层依赖
安全策略方向性必须成对配置
防火墙策略是状态化的,但初始连接建立仍需显式放行双向路径。例如从 trust 到 untrust 允许访问,不代表反向响应能自动通过:
- 若只配了 trust → untrust 允许 192.168.1.0/24 访问外部,那么外部返回的响应包可能被 untrust → trust 的默认 deny 拦截
- 必须显式配置反向策略:untrust → trust 允许目的为 192.168.1.0/24 的 ESTABLISHED/RELATED 流量,或直接放行对应源网段(如 192.168.2.0/24)
- 华为等设备中,
default action deny后必须逐条补全正向 + 反向规则,否则通信中断


















