UFW 与 firewalld 对比:两大 Linux 防火墙管理器怎么选

UFW 统治 Debian/Ubuntu 世界,firewalld 是 RHEL 系标准:前者简单直白命令如英语,后者以区域(zone)组织规则适配复杂网络。本文从模型、语法、持久化到发行版选型逐项对比。

最佳实践
操作系统与资源管理插画

直接回答:UFW 与 firewalld 管的是同一个 netfilter,分歧在抽象模型——UFW 扁平直白(ufw allow 22),适合单角色服务器;firewalld 按区域(public/trusted/dmz)组织规则,接口划入不同 zone 应用不同策略,适合多网段复杂环境。选型第一原则:跟随发行版默认(Ubuntu 常用 UFW,RHEL/CentOS→firewalld)。

模型差异

  • UFW:扁平规则列表,默认策略 + 放行/拒绝条目。思维负担极小
  • firewalld:zone 制——接口归属区域(public/internal/dmz/trusted),规则按 zone 应用。笔记本在公司网和咖啡馆切不同 zone,可与 NetworkManager 连接配置关联,并非未配置时自动切换

远程变更安全

修改默认策略、启停管理器或重载前,备份当前规则并记录实际 SSH 端口和管理来源,保留当前会话并确认带外/云控制台可用。先放行管理连接、回环与已建立连接,再从第二个终端新建 SSH 会话验证,成功后才收紧旧规则。准备经验证的限时回退,不要远程清空规则或盲目 reset。IPv4、IPv6、安全组及 Docker 转发路径需分别验证,告警不能替代防锁定措施。

验证放行规则时,也可从用户访问路径持续检查业务入口。在观测云 HTTP 拨测中选择节点并设置响应断言,对照防火墙变更时间查看失败请求;禁止来源、新 SSH 会话和带外回退仍按上面的步骤单独验证。

语法对比

# UFW
# 先确认实际 SSH 管理端口与来源已放行
sudo ufw allow 80/tcp

# firewalld
# 先检查接口所属 zone,临时规则 300 秒后撤销
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --zone=public --add-service=http --timeout=300

验证新 SSH 会话和业务后,再另将审核过的规则写入永久配置。firewalld 的 --permanent 与运行时分离——改永久配置要 reload 才生效,新手常在这里困惑;好处是可以先改运行时测试,确认无误再固化。

服务定义与高级场景

firewalld 内置服务定义(xml 描述端口/协议组),--add-service=mysql 一条搞定;自定义服务也可扩展。rich rule 支持细粒度条件——复杂网络环境下表达力明显强于 UFW。

发行版与现实建议

Ubuntu 常用 UFW,Debian 镜像配置各异,RHEL/Rocky/Alma 默认 firewalld——跟着默认走,社区文档与排障资源都围绕默认工具。跨发行版团队建议两套都会基础操作。

常见问题(FAQ)

Q:firewalld 的 zone 怎么选?
A:服务器单一公网接口放 public 即可;多网卡机器按信任级别划分(内网同样按最小权限选择 zone;trusted 接受所有连接,不应因为内网就默认采用;公网通常 public)。zone 的价值在多接口才显现。

Q:能同时装两个吗?
A:不能同时启用——两者都管 netfilter 规则会互相覆盖。切换前停用一个再启另一个。

Q:docker 和防火墙的关系?
A:Docker 直接改 iptables 规则,与 UFW/firewalld 存在不同转发集成行为,不能只检查主机 INPUT——生产上需专门配置(iptables 后端可检查 DOCKER-USER,原生 nftables 后端需对应配置)约束容器端口暴露。

官方参考

本文依据官方文档整理,示例未在本文中进行运行验证。生产部署需按所用版本、权限和实际负载验证。

延伸阅读

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台