Firewalld区域机制通过预定义(trusted、internal、public等)和自定义区域实现网络分层防护,支持按网卡绑定、富规则限速/日志审计,强化内网安全隔离与访问控制。

Firewalld 的区域(zone)机制是实现服务器网络分层防护的核心,不同区域对应不同信任级别和默认规则集。合理划分区域并配置内网安全隔离,能有效限制服务暴露范围、防止横向渗透。
常见区域功能与适用场景
Firewalld 自带多个预定义区域,按信任度从高到低排列:
- trusted:完全信任,所有连接被允许(仅用于高度可控的管理网络)
- internal:用于内部可信网络,如公司局域网或私有云内网,允许大部分服务(如ssh、mdns、samba-client)
- home:家庭网络环境,比 internal 更保守,禁用部分发现类服务
- public:默认外部区域,仅开放明确声明的服务(如 http、https),适合公网接口
- external:用于充当 NAT 网关的主机,启用 IP 伪装(masquerade),通常不用于普通服务器
- dmz:非军事区,仅开放极少数对外服务(如 web 前端),后端服务器应避免使用此区域
- block / drop:拒绝所有入站连接(block 发送拒绝响应,drop 直接丢包),适合严格隔离的内网网段
按网卡绑定区域实现物理/逻辑隔离
多网卡服务器可通过绑定不同区域区分内外流量。例如:eth0 接公网 → public;eth1 接内网 → internal;eth2 接数据库集群 → dmz 或自定义受限区域。
操作示例:
- 查看当前区域分配:firewall-cmd --get-active-zones
- 将 eth1 绑定到 internal 区域:firewall-cmd --permanent --zone=internal --change-interface=eth1
- 重载配置生效:firewall-cmd --reload
- 确认绑定结果:firewall-cmd --zone=internal --list-all
注意:同一网卡不能同时属于多个区域;若需更细粒度控制,应配合富规则(rich rules)或直接使用 ipset。
自定义区域强化内网服务访问控制
预定义区域无法满足全部业务需求时,可创建专用区域。例如为“运维管理网段 192.168.10.0/24”新建 zone mgmt,仅放行 ssh 和 ansible 端口,并拒绝其他所有来源:
- 创建新区域:firewall-cmd --permanent --new-zone=mgmt
- 设置默认拒绝策略:firewall-cmd --permanent --zone=mgmt --set-target=REJECT
- 仅允许指定子网访问 ssh:firewall-cmd --permanent --zone=mgmt --add-source=192.168.10.0/24,再添加服务:firewall-cmd --permanent --zone=mgmt --add-service=ssh
- 绑定网卡或 IP 段:firewall-cmd --permanent --zone=mgmt --add-interface=eth1 或 firewall-cmd --permanent --zone=mgmt --add-source=192.168.10.5
- 重载生效:firewall-cmd --reload
结合富规则实现动态策略与日志审计
对关键内网服务(如数据库、API 网关)建议启用连接限速与访问日志,便于追踪异常行为:
- 限制某 IP 每分钟最多 10 次 MySQL 连接:
firewall-cmd --permanent --zone=internal --add-rich-rule='rule family="ipv4" source address="192.168.5.20" service name="mysql" limit value="10/m" accept' - 记录所有未匹配规则的入站连接(用于审计):
firewall-cmd --permanent --zone=internal --add-rich-rule='rule log prefix="unmatched-internal:" level="info"' - 启用日志后,可在 /var/log/messages 或 journalctl 中查看:journalctl -u firewalld | grep "unmatched-internal"
富规则优先级高于普通服务/端口规则,且支持源地址、目标端口、协议、时间等多维条件组合。










