新手配置Firewalld区域隔离需创建devzone和prodzone两个自定义区域,绑定对应网段并设target为DROP,再通过富规则双向拒绝跨网段通信,最后重载配置生效。

新手配置 Firewalld 区域隔离来阻断开发与生产环境的网络互通,核心是让两个环境“各走各的路、互不看见”。这不是靠物理断网,而是通过区域绑定 + 源地址分类 + 显式拒绝策略,把流量逻辑上隔开。关键不在于多复杂,而在于别漏掉默认行为和重载步骤。
明确两个环境的网络特征
先确认开发和生产环境是否使用不同网卡,或是否共用网卡但属于不同子网:
- 双网卡常见场景:eth0 接开发网段(如 192.168.20.0/24),eth1 接生产网段(如 10.10.100.0/24)
- 单网卡多子网场景:服务器只有一张网卡(如 ens192),但开发机在 192.168.20.0/24,生产服务在 10.10.100.0/24
- 若两者在同一子网(如都在 192.168.1.0/24),Firewalld 无法靠 IP 分区自动隔离,必须用富规则逐条限制,不推荐——应优先调整网络规划
为每个环境分配独立区域
避免混用 public 或 internal 这类通用区域,建议创建两个自定义区域,语义清晰、策略可控:
- 创建 devzone:firewall-cmd --permanent --new-zone=devzone
- 创建 prodzone:firewall-cmd --permanent --new-zone=prodzone
- 设默认动作为拒绝(不响应):firewall-cmd --permanent --zone=devzone --set-target=DROP;同理设置 prodzone
- 将开发网段绑定到 devzone:firewall-cmd --permanent --zone=devzone --add-source=192.168.20.0/24
- 将生产网段绑定到 prodzone:firewall-cmd --permanent --zone=prodzone --add-source=10.10.100.0/24
注意:同一 IP 段不能同时属于两个区域;添加后必须 firewall-cmd --reload 才生效。
禁止跨环境通信(关键一步)
区域默认互不信任,但 Firewalld 不会自动阻止 devzone → prodzone 的出向连接。要真正阻断,需显式添加富规则:
- 禁止开发网段访问生产网段任意端口:
firewall-cmd --permanent --zone=devzone --add-rich-rule='rule family="ipv4" source address="192.168.20.0/24" destination address="10.10.100.0/24" reject' - 同样反向禁止(防误配或反弹):
firewall-cmd --permanent --zone=prodzone --add-rich-rule='rule family="ipv4" source address="10.10.100.0/24" destination address="192.168.20.0/24" reject' - 若使用双网卡,还可额外绑定接口强化边界:
firewall-cmd --permanent --zone=devzone --change-interface=eth0(假设 eth0 连开发侧)
保留必要管理通道(可选但实用)
完全隔离后,运维仍需登录两套环境。可在 trusted 区域或单独添加运维网段例外:
- 例如运维机在 192.168.10.0/24,允许其 SSH 访问 devzone 和 prodzone:
firewall-cmd --permanent --zone=devzone --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" service name="ssh" accept'
同理加到 prodzone - 切勿将运维网段直接加进 devzone 或 prodzone,否则它就具备了双向穿透能力
配置完成后,用 firewall-cmd --get-active-zones 确认源绑定,用 firewall-cmd --zone=devzone --list-all 查看实际生效规则。测试时建议从开发机 ping 生产IP、telnet 生产端口,应全部超时或被拒。

















