firewalld 区域(Zone)划分详解

区域(Zone)是 firewalld 最核心的概念,简单来说就是预定义的信任级别模板。你可以把区域想象成几套预设好的防火墙规则集合,根据不同的网络环境(家里、公司、咖啡厅)快速切换。


一、区域的核心原则

firewalld 在区域方面遵循严格的原则:

原则说明
流量只流入一个区域每个网络接口只能属于一个区域
流量只流出一个区域出口流量同样遵循区域规则
一个区域定义一个信任级别不同区域代表不同信任程度
默认允许区域内流量同一区域内的通信默认允许
默认拒绝区域间流量不同区域间的流量默认拒绝

二、预定义区域详解

firewalld 默认提供了9个预定义区域,按信任级别从高到低排列:

区域信任级别默认规则适用场景预定义允许的服务
trusted⭐⭐⭐⭐⭐ 最高允许所有流量内部网络、完全可信环境所有服务
home⭐⭐⭐⭐ 高拒绝流入,除非与流出相关家庭网络ssh、mdns、ipp-client、amba-client、dhcpv6-client
internal⭐⭐⭐⭐ 高拒绝流入,除非与流出相关内部网络同 home 区域
work⭐⭐⭐ 中高拒绝流入,除非与流出相关工作网络ssh、ipp-client、dhcpv6-client
public⭐⭐ 中低拒绝流入,除非与流出相关公网环境(默认区域)ssh、dhcpv6-client
external⭐⭐ 中低拒绝流入,除非与流出相关外部网络(启用了伪装)ssh
dmz⭐ 低拒绝流入,除非与流出相关隔离区(DMZ)ssh
block⭐ 低拒绝所有流入严格限制环境
drop⚠️ 最低丢弃所有流入(无响应)最高安全要求

各区域详细说明

区域详细说明
trusted接受所有网络连接,完全信任
home适用于家庭环境,基本信任网络上其他计算机。拒绝流入流量,除非与流出相关;允许ssh、mdns、ipp-client、amba-client、dhcpv6-client等服务
internal等同于 home 区域
work适用于工作环境,大多信任网络上其他计算机。允许ssh、ipp-client、dhcpv6-client等服务
public默认区域,适用于公共网络,不信任其他计算机。只允许ssh、dhcpv6-client等基本服务
external适用于启用了伪装的外部网络,特别是路由器。不信任网络上其他计算机,只允许ssh服务
dmz适用于DMZ中的计算机,可对内部网络有限权限访问,只允许ssh服务
block拒绝所有流入网络连接,对于IPv4返回icmp-host-prohibited,对于IPv6返回icmp6-adm-prohibited
drop丢弃所有流入数据包,不返回任何通知

三、区域管理常用命令

3.1 查看区域信息

# 查看默认区域(默认为 public)
firewall-cmd --get-default-zone

# 查看所有可用区域
firewall-cmd --get-zones

# 查看当前活动的区域(已绑定网卡的)
firewall-cmd --get-active-zones

# 查看指定区域的详细信息
firewall-cmd --zone=public --list-all

# 查看所有区域的详细信息
firewall-cmd --list-all-zones

3.2 修改默认区域

# 将默认区域改为 work
sudo firewall-cmd --set-default-zone=work

# 验证
firewall-cmd --get-default-zone

3.3 网卡与区域绑定

# 查看某网卡所属区域
firewall-cmd --get-zone-of-interface=eth0

# 将 eth0 网卡绑定到 internal 区域
sudo firewall-cmd --zone=internal --change-interface=eth0

# 永久绑定(重启后仍生效)
sudo firewall-cmd --permanent --zone=internal --change-interface=eth0
sudo firewall-cmd --reload

3.4 基于源地址的区域绑定

# 将特定源IP绑定到 trusted 区域
sudo firewall-cmd --permanent --zone=trusted --add-source=192.168.1.100

# 将源网段绑定到 internal 区域
sudo firewall-cmd --permanent --zone=internal --add-source=192.168.1.0/24

# 查看源绑定
firewall-cmd --zone=trusted --list-sources

四、实际应用场景

场景1:多网卡服务器

# 公网接口(eth0)使用 public 区域
sudo firewall-cmd --zone=public --change-interface=eth0

# 内网接口(eth1)使用 trusted 区域(完全信任)
sudo firewall-cmd --zone=trusted --change-interface=eth1

# 管理接口(eth2)使用 internal 区域
sudo firewall-cmd --zone=internal --change-interface=eth2

场景2:为特定IP开放特权

# 将管理员IP加入 trusted 区域,不受限制
sudo firewall-cmd --permanent --zone=trusted --add-source=10.0.0.100

# 将内部网段加入 internal 区域,允许更多服务
sudo firewall-cmd --permanent --zone=internal --add-source=192.168.1.0/24

场景3:应急切换

# 检测到攻击时,临时将默认区域改为 drop(最高防护)
sudo firewall-cmd --set-default-zone=drop

# 攻击结束后恢复
sudo firewall-cmd --set-default-zone=public

五、最佳实践建议

建议说明
默认区域保持 public除非有明确需求,不要随意更改默认区域
明确指定 –zone添加规则时尽量指定区域,避免依赖默认区域
接口与区域绑定不同网络接口绑定不同区域,实现精细化控制
源地址绑定优先特定IP或网段可以绑定到更高信任级别的区域
定期审查--list-all-zones 定期检查所有区域配置

一句话总结

firewalld 区域(Zone)是按信任级别划分的防火墙策略模板,从完全信任的 trusted 到完全丢弃的 drop,每个区域预定义了不同的默认规则,通过将网卡或源地址绑定到不同区域,实现网络流量的精细化控制

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注