如何在 Rocky Linux 9 中使用 firewalld 配置 DMZ(隔离区)?

问题浏览数Icon
19
问题创建时间Icon
2025-03-23 09:10:00
回答 | 共 2 个
作者头像
quickfei77

在Rocky Linux 9中通过firewalld配置DMZ时,我的实践经验分为以下六个关键步骤,并附带了实际部署中遇到的挑战:

  1. 区域架构设计
    创建三个自定义区域:external(绑定公网接口)、dmz(绑定独立接口或子接口)、internal(绑定内网接口)。实践中发现需通过firewall-cmd --new-zone=dmz --permanent显式定义新区域,避免与默认的public区域混淆导致安全漏洞。

  2. 服务隔离配置
    在dmz区域仅开放必要服务(如HTTP/HTTPS),使用firewall-cmd --zone=dmz --add-service=http --permanent。曾遇到WebSocket服务异常,后发现需单独开放TCP 8080并添加--add-port=8080/tcp

  3. 策略路由配置
    通过富规则限制访问路径:
    firewall-cmd --zone=dmz --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" accept'
    实际部署中发现需要先禁用反向路径过滤(sysctl net.ipv4.conf.all.rp_filter=0)。

  4. NAT穿透配置
    使用目标地址转换将公网请求转发至DMZ:
    firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=80:toaddr=10.0.0.2 --permanent
    调试时发现必须同时启用IP转发(sysctl net.ipv4.ip_forward=1)和伪装功能。

  5. 多区域接口绑定
    使用nmcli connection modify eth1 connection.zone dmz绑定物理接口时,遇到NetworkManager与firewalld规则冲突,解决方案是禁用NetworkManager对防火墙的控制:
    echo "NM_CONTROLLED=no" >> /etc/sysconfig/network-scripts/ifcfg-eth1

  6. 安全加固
    在internal区域启用严格模式:
    firewall-cmd --zone=internal --set-target=DROP --permanent
    但导致SNMP监控异常,需添加例外规则:firewall-cmd --zone=internal --add-source=192.168.100.50 --permanent

典型挑战案例:某次生产环境中DMZ的HTTPS流量异常,最终发现是firewalld未正确加载NSS模块处理TLS 1.3,通过update-crypto-policies --set LEGACY临时解决,后升级至firewalld 1.2.1彻底修复。另一个常见问题是区域优先级冲突,需通过firewall-cmd --set-default-zone=external明确默认区域,避免自动接口分配导致规则失效。

作者头像
cloudlong99

在Rocky Linux 9中,使用firewall-cmd创建dmz区域并分配接口:firewall-cmd --permanent --new-zone=dmz,然后设置规则firewall-cmd --zone=dmz --add-service={http,https} --permanent,最后重载生效firewall-cmd --reload