firewalld(Dynamic Firewall Manager)是 Red Hat 开发的动态防火墙管理工具,是 RHEL/CentOS 7+、Fedora、Rocky Linux、AlmaLinux、openSUSE 等主流 Linux 发行版的默认防火墙解决方案。它基于 Linux 内核 netfilter 数据包过滤框架,支持 iptables/nftables 双后端(RHEL 8+/Fedora 33 + 默认 nftables),核心设计理念是动态规则管理区域化分级防护,解决了传统 iptables 修改规则需全量重载、中断现有连接的痛点,同时大幅降低了防火墙配置门槛。

一、核心架构与底层原理

firewalld 采用分层架构,从上到下分为用户层、后端层、内核层,实现了用户配置到内核包过滤的全链路管理:

架构层级 核心组件与作用
内核层 netfilter 框架,Linux 内核原生的数据包过滤核心,提供钩子函数实现数据包的匹配、过滤、修改、转发
后端层 规则翻译层,支持 iptables 和 nftables 双后端,将上层配置转换为内核可识别的规则集,新版本默认 nftables,性能更优、语法更统一
用户层 firewalld 守护进程,通过 D-Bus 提供接口,接收 firewall-cmd(命令行)、firewall-config(图形化)、第三方应用的配置请求,管理规则的全生命周期

核心特性

  1. 动态规则更新:修改规则仅增量更新,无需重启服务,不中断已建立的 TCP 连接,适配生产环境高可用需求。
  2. 区域化分级管控:将网络接口 / 源 IP 按信任度划分到不同区域,每个区域独立配置规则,实现场景化、精细化的流量管控。
  3. 服务化配置模板:内置大量常用服务(http、ssh、ftp 等)的规则模板,无需手动配置端口和协议,直接通过服务名管理规则。
  4. 双配置模式分离:区分运行时配置与永久配置,测试规则可临时生效,验证无误后再持久化,避免误操作导致远程失联firewalld。
  5. 全协议栈支持:原生支持 IPv4/IPv6 双栈、以太网桥管理,适配云计算、容器等复杂网络场景。
  6. 细粒度管控能力:通过富规则(Rich Rules)支持复杂条件匹配、日志、限速、端口转发、NAT 等高级功能。

firewalld 与 iptables 核心区别

对比维度 firewalld iptables
规则生效方式 动态增量更新,修改后无需重启服务,不中断现有连接 静态规则,修改后需全量重载,会中断现有连接
核心设计 基于区域(zone)和服务(service)的抽象化管理,预设场景化模板 基于表和链的底层规则,需手动逐条编写,无预设场景
配置模式 严格区分运行时 / 永久配置,支持临时测试与持久化分离 配置即生效,需手动保存规则到文件,否则重启丢失
易用性 命令简洁,支持图形化工具,新手门槛低,可直接通过服务名管理 命令繁琐,需精通 netfilter 链与表结构,学习曲线陡峭
动态网络适配 支持 D-Bus 接口,可被应用动态调用,完美适配 WiFi 切换、VPN 接入等动态网络 静态配置,对动态网络环境适配性差
后端支持 兼容 iptables 与 nftables,新版本默认 nftables 仅支持 iptables 框架,已逐步被 nftables 替代

二、核心概念详解

1. 区域(Zone)

区域是 firewalld 的核心设计,是一套对应不同信任级别的规则集。用户可将网络接口、源 IP 地址绑定到指定区域,该区域的规则将对绑定的流量生效,实现网络环境的分级防护。

流量匹配优先级

入站流量的区域匹配遵循精准匹配优先原则,顺序为:源IP绑定的区域 > 网络接口绑定的区域 > 系统默认区域匹配到对应区域后即停止匹配,执行该区域的规则。

预定义区域(9 个,按信任度从高到低排序)
区域名称 信任级别 核心规则说明 典型使用场景
trusted(信任) 最高 允许所有入站 / 出站流量 完全可信的内网、回环接口、管理机 IP
home(家庭) 拒绝未主动请求的入站流量,默认放行 ssh、mdns、samba-client、dhcpv6-client 服务 家庭局域网,信任内网其他设备
internal(内部) 规则与 home 区域一致,默认放行 ssh、mdns、samba-client、dhcpv6-client 服务 企业内部办公局域网
work(工作) 中高 拒绝未主动请求的入站流量,默认仅放行 ssh、dhcpv6-client 服务 企业办公网络,仅开放必要工作端口
public(公共) 中(系统默认) 拒绝未主动请求的入站流量,默认仅放行 ssh、dhcpv6-client 服务 公网云服务器、公共 WiFi,所有未绑定区域的接口 / 流量默认匹配该区域
external(外部) 中低 拒绝未主动请求的入站流量,默认仅放行 ssh 服务;默认开启 IPv4 地址伪装 路由器外网接口、互联网访问出口
dmz(隔离区) 拒绝未主动请求的入站流量,默认仅放行 ssh 服务 对外提供服务的 DMZ 服务器,隔离公网与内网
block(阻塞) 极低 拒绝所有入站流量,仅允许出站流量;入站请求返回 icmp-host-prohibited 拒绝报文 完全禁止入站访问,仅允许本机主动对外访问
drop(丢弃) 最低 静默丢弃所有入站流量,不返回任何 ICMP 响应,仅允许出站流量 最高安全级别,对抗恶意攻击、DDoS 防护场景

2. 服务(Service)

服务是 firewalld 预设的规则模板,封装了特定服务对应的端口、协议、内核模块等信息。无需手动逐条配置端口规则,直接启用 / 禁用服务即可完成配置,大幅降低门槛,同时提升规则可读性。

  • 内置服务配置文件路径:/usr/lib/firewalld/services/(系统预设,禁止修改,更新会覆盖)
  • 自定义服务配置文件路径:/etc/firewalld/services/(用户自定义,优先级高于系统预设)

3. 其他核心规则对象

规则对象 核心作用
端口(Port) 直接配置协议 + 端口的准入规则,适用于无预设服务的自定义端口
源地址(Source) 将源 IP/IP 段绑定到指定区域,实现基于源地址的流量分流与访问控制
接口(Interface) 将网卡绑定到指定区域,实现基于网卡的流量管控
协议(Protocol) 配置基于 IP 协议(icmp、tcp、udp、sctp 等)的规则
ICMP 阻塞 控制 ICMP 报文的处理,比如禁 ping、禁止端口不可达报文等
地址伪装(Masquerade) 实现 SNAT,内网设备通过本机网关访问外网时,将源 IP 转换为本机外网接口 IP
端口转发(Forward Port) 实现 DNAT,将本机端口的流量转发到其他 IP / 端口,实现外网访问内网服务
富规则(Rich Rules) firewalld 最灵活的规则体系,支持细粒度的条件匹配与动作控制,可实现复杂场景的访问控制、日志、限速等
策略(Policy) 扩展流量控制机制,用于实现跨区域的流量规则管控,替代废弃的 direct 接口

三、核心配置模式:运行时 vs 永久配置

firewalld 严格区分两种配置模式,这是新手最容易踩坑的核心点firewalld:

配置模式 生效规则 生命周期 适用场景
运行时配置(Runtime) 执行命令后立即生效 临时生效,firewalld 服务重启 / 系统重启后丢失 规则测试、临时权限开放,避免误操作导致远程失联
永久配置(Permanent) 写入 XML 配置文件,需执行--reload重载后才会生效 持久化存储,重启服务 / 系统后不丢失 生产环境规则固化、长期生效的配置

四、主配置文件 firewalld.conf

firewalld 采用 XML 格式存储配置,严格分离系统预设配置与用户自定义配置,避免系统更新覆盖用户配置。

核心目录结构

目录路径 核心作用
/usr/lib/firewalld/ 系统预设配置目录,存放内置的区域、服务、ICMP 类型模板,禁止修改
/etc/firewalld/ 用户自定义配置目录,优先级高于系统预设,存放永久配置,系统更新不会覆盖
/etc/firewalld/services/ 用户自定义服务配置文件存放路径
/etc/firewalld/zones/ 用户修改 / 自定义的区域配置文件存放路径
/etc/firewalld/icmptypes/ 自定义 ICMP 类型配置路径
/etc/firewalld/firewalld.conf firewalld 主配置文件

核心配置项说明:

配置项 作用 默认值
DefaultZone 系统默认区域 public
MinimalMark 数据包标记最小值,用于端口转发与伪装 100
FirewallBackend 防火墙后端,可选 iptables/nftables nftables(新版本)
IPv6_rpfilter IPv6 反向路径过滤,防止 IP 欺骗 yes
Lockdown 锁定 firewalld,禁止其他应用通过 D-Bus 修改配置 no

五、常见问题排查与最佳实践

常见问题排查

  1. 配置后不生效

    • 检查是否添加了--permanent但未执行--reload重载规则;
    • 检查流量是否匹配了优先级更高的区域(源 IP 绑定区域 > 接口绑定区域 > 默认区域);
    • 检查是否同时使用 iptables/nftables 命令直接配置规则,导致规则冲突;
    • 检查端口转发是否开启了地址伪装和内核 IP 转发。
  2. 远程服务器配置防火墙导致 ssh 失联

    • 应急方案:云服务器通过 VNC / 控制台登录,恢复 firewalld 配置,放行 ssh 22 端口;
    • 预防方案:先配置临时规则,验证无误后再持久化;永远先放行 ssh 服务,再修改其他规则;将管理 IP 绑定到 trusted 区域。
  3. 端口转发不生效

    • 必须开启对应区域的地址伪装(masquerade);
    • 内核必须开启 IP 转发:sysctl -w net.ipv4.ip_forward=1,永久开启需修改/etc/sysctl.conf
    • 检查目标主机的防火墙是否放行对应端口,检查网络连通性。

生产环境最佳实践

  1. 最小权限原则:默认拒绝所有入站流量,仅放行业务必需的服务和端口,关闭不必要的默认服务(如 dhcpv6-client)。
  2. 区域分级管控
    • 公网网卡绑定到 public/dmz 区域,仅开放对外服务端口;
    • 内网网卡绑定到 internal 区域,放宽内网访问权限;
    • 运维管理 IP 绑定到 trusted 区域,避免误操作导致失联。
  3. 配置安全规范
    • 先配置临时运行时规则,验证功能正常后,再执行--runtime-to-permanent持久化;
    • 禁止修改/usr/lib/firewalld/下的系统预设文件,所有自定义配置均放在/etc/firewalld/目录;
    • 配置前备份配置文件:cp -r /etc/firewalld /etc/firewalld.backup
  4. 安全加固
    • 敏感端口(ssh、mysql、redis 等)必须通过富规则做 IP 白名单限制,禁止对公网全开放;
    • 开启关键端口的访问日志,便于安全审计和故障排查;
    • 定期检查防火墙规则,清理无效配置,避免规则冗余;
    • 生产环境禁止直接停止 firewalld 服务,需通过规则实现流量管控。
  5. 兼容性规范
    • 不要同时运行 firewalld 和 iptables-services、nftables 服务,会导致规则冲突;
    • RHEL 8 + 优先使用默认 nftables 后端,无需切换回 iptables。
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐