在 Ubuntu 系统上,ufw 配置更简单,它是官方默认预装的工具,命令直观且无需理解复杂区域概念。
先说结论:对于 Ubuntu 用户,优先选择 ufw,除非你有跨平台统一管理或动态规则的特殊需求。
- 适合 Ubuntu 桌面及通用服务器场景
- 重点看默认策略是否放行 SSH
- 别忽略不要同时启用两个防火墙
命令速用版
ufw 的命令设计更像自然语言,firewalld 则需要指定区域和永久生效参数。
# ufw 开放 80 端口
sudo ufw allow 80/tcp
# firewalld 开放 80 端口(需指定 zone 和 permanent)
sudo firewall-cmd `--zone`=public `--add-port`=80/tcp `--permanent`
sudo firewall-cmd `--reload`
为什么会这样
ufw 全称 Uncomplicated Firewall,设计初衷就是简化 iptables 配置,Ubuntu 20.04 和 22.04 默认预装且启用服务。firewalld 则是 RHEL/CentOS 系的默认工具,引入“区域”(zone)概念来管理不同网络环境,功能更动态但配置层级更多。在 Ubuntu 上强行使用 firewalld 需要额外安装,且可能与系统默认网络管理工具产生冲突。
分步处理
如果你决定使用 ufw,按以下步骤操作:
- 检查状态:
sudo ufw status,显示 inactive 表示未激活。 - 设置默认策略:
sudo ufw default deny incoming,禁止所有入站连接。 - 放行必要端口:先放行 SSH 防止失联,
sudo ufw allow 22/tcp。 - 启用防火墙:
sudo ufw enable。
⚠️ 安全警告:远程服务器操作时,务必先放行 SSH 端口再启用防火墙,否则会导致连接中断。
若必须使用 firewalld(如混合环境管理):
- 安装:
sudo apt install firewalld。 - 启动:
sudo systemctl start firewalld。 - 注意:启用 firewalld 前建议禁用 ufw,避免规则冲突。
一键安全配置脚本
为避免手动操作遗漏导致锁死,可使用以下脚本快速安全启用 ufw:
#!/bin/bash
# 1. 放行 SSH 端口
sudo ufw allow 22/tcp
# 2. 设置默认拒绝入站
sudo ufw default deny incoming
# 3. 启用防火墙(`--force` 避免交互确认)
sudo ufw `--force` enable
# 4. 检查状态
sudo ufw status verbose
怎么验证是否生效
使用状态命令查看规则是否加载,并结合外部端口扫描确认。
# 查看 ufw 状态及规则
sudo ufw status verbose
# 查看 firewalld 状态
sudo firewall-cmd `--list-all`
# 检查服务是否运行
systemctl status ufw
systemctl status firewalld
常见坑
- 锁死风险:启用防火墙前未放行 SSH 端口,导致远程连接断开。
- 双重防火墙:同时运行 ufw 和 firewalld,规则可能互相覆盖或冲突,建议只留一个。
- 生效延迟:firewalld 添加永久规则后需 reload,ufw 修改规则后通常自动生效但建议检查状态。
- 后端差异:Ubuntu 22.04 上 ufw 后端可能使用 nftables,而旧版使用 iptables,但命令保持一致。
参考来源
建议查阅 Ubuntu 官方文档或使用 man ufw、man firewalld 获取最新信息。