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

问题浏览数Icon
32
问题创建时间Icon
2025-03-23 09:10:00
作者头像
bigcat22

在Rocky Linux 9中通过firewalld配置DMZ时,建议采用以下架构化方案:

  1. 区域划分

    • public区域绑定外部接口(eth0),仅开放必要的入站端口(如SSH管控端口)
    • 新建dmz区域绑定DMZ接口(eth1),按需开放HTTP/HTTPS等业务端口
    • internal区域保留给受信内网,默认拒绝所有外部访问
  2. 流量控制

    • 启用IP伪装实现出站NAT:firewall-cmd --zone=public --add-masquerade --permanent
    • 配置端口转发规则: firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=80:toaddr=<DMZ服务器IP>
    • 设置区域间过滤规则: firewall-cmd --zone=dmz --add-rich-rule='rule family=ipv4 source address=192.168.0.0/24 service name=mysql accept'
  3. 安全增强

    • 为每个DMZ服务创建自定义服务定义(/etc/firewalld/services/)
    • 启用连接跟踪模块:firewall-cmd --zone=dmz --add-module=conntrack
    • 配置日志规则: firewall-cmd --zone=public --add-rich-rule='rule log prefix="DMZ_ACCESS" level=info limit value="5/m"'
  4. 验证与持久化

    • 通过firewall-cmd --list-all-zones进行规则审计
    • 使用--runtime-to-permanent直接固化配置
    • 最终通过systemctl restart firewalld.service应用策略

此方案通过严格的区域隔离、精细化访问控制及审计日志,满足等保2.0三级要求的网络边界防护规范。

更多回答

作者头像
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

作者头像
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明确默认区域,避免自动接口分配导致规则失效。

作者头像
netwha

在Rocky Linux 9中使用firewalld配置DMZ需遵循以下步骤:

  1. 规划网络结构

    • 划分三个逻辑区域:外网接口(如ens192)、DMZ接口(如ens224)、内网接口(如ens256)
    • 建议物理隔离DMZ与内部网络
  2. 配置基础环境

    systemctl enable --now firewalld
    firewall-cmd --state
  3. 创建DMZ区域

    firewall-cmd --new-zone=dmz --permanent
    firewall-cmd --reload
  4. 绑定接口与基础规则

    firewall-cmd --zone=dmz --change-interface=ens224 --permanent
    firewall-cmd --zone=dmz --add-service={http,https} --permanent
    firewall-cmd --zone=dmz --add-port=8080/tcp --permanent
  5. 设置流量转发策略

    firewall-cmd --zone=dmz --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 service name=mysql accept' --permanent
    firewall-cmd --zone=public --add-masquerade --permanent
  6. 应用配置

    firewall-cmd --runtime-to-permanent
    firewall-cmd --reload

关键注意事项

  • 使用--permanent参数保证配置持久化
  • DMZ到内网的访问应严格限制(建议使用白名单机制)
  • 通过nmap -sT -p 1-1000 DMZ_IP验证端口暴露情况
  • 定期检查日志:journalctl -u firewalld --since "1 hour ago"
  • 建议配合SELinux实施纵深防御