在Rocky Linux 9中,使用firewall-cmd
创建dmz区域并分配接口:firewall-cmd --permanent --new-zone=dmz
,然后设置规则firewall-cmd --zone=dmz --add-service={http,https} --permanent
,最后重载生效firewall-cmd --reload
。
如何在 Rocky Linux 9 中使用 firewalld 配置 DMZ(隔离区)?
在Rocky Linux 9中通过firewalld配置DMZ时,我的实践经验分为以下六个关键步骤,并附带了实际部署中遇到的挑战:
-
区域架构设计
创建三个自定义区域:external(绑定公网接口)、dmz(绑定独立接口或子接口)、internal(绑定内网接口)。实践中发现需通过firewall-cmd --new-zone=dmz --permanent
显式定义新区域,避免与默认的public区域混淆导致安全漏洞。 -
服务隔离配置
在dmz区域仅开放必要服务(如HTTP/HTTPS),使用firewall-cmd --zone=dmz --add-service=http --permanent
。曾遇到WebSocket服务异常,后发现需单独开放TCP 8080并添加--add-port=8080/tcp
。 -
策略路由配置
通过富规则限制访问路径:
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)。 -
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)和伪装功能。 -
多区域接口绑定
使用nmcli connection modify eth1 connection.zone dmz
绑定物理接口时,遇到NetworkManager与firewalld规则冲突,解决方案是禁用NetworkManager对防火墙的控制:
echo "NM_CONTROLLED=no" >> /etc/sysconfig/network-scripts/ifcfg-eth1
-
安全加固
在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
明确默认区域,避免自动接口分配导致规则失效。
更多回答
在Rocky Linux 9中通过firewalld配置DMZ时,建议采用以下架构化方案:
-
区域划分
- public区域绑定外部接口(eth0),仅开放必要的入站端口(如SSH管控端口)
- 新建dmz区域绑定DMZ接口(eth1),按需开放HTTP/HTTPS等业务端口
- internal区域保留给受信内网,默认拒绝所有外部访问
-
流量控制
- 启用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'
-
安全增强
- 为每个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"'
-
验证与持久化
- 通过firewall-cmd --list-all-zones进行规则审计
- 使用--runtime-to-permanent直接固化配置
- 最终通过systemctl restart firewalld.service应用策略
此方案通过严格的区域隔离、精细化访问控制及审计日志,满足等保2.0三级要求的网络边界防护规范。
在Rocky Linux 9中使用firewalld配置DMZ需遵循以下步骤:
-
规划网络结构
- 划分三个逻辑区域:外网接口(如ens192)、DMZ接口(如ens224)、内网接口(如ens256)
- 建议物理隔离DMZ与内部网络
-
配置基础环境
systemctl enable --now firewalld firewall-cmd --state
-
创建DMZ区域
firewall-cmd --new-zone=dmz --permanent firewall-cmd --reload
-
绑定接口与基础规则
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
-
设置流量转发策略
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
-
应用配置
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实施纵深防御