目录
UFW 是什么?为何 VPS 需要防火墙?
UFW(Uncomplicated Firewall,简易防火墙)是 iptables 的前端工具,随 Ubuntu 预装,让系统管理员无需编写复杂的 iptables 语法即可管理防火墙规则。
直接连接互联网的 VPS 时刻面临各种攻击威胁——SSH 暴力破解、端口扫描、对未授权服务的非法访问。防火墙充当"守门员",检查进出 VPS 的每一个数据包。
💡 关键事实:没有防火墙的 VPS 通常在部署后几分钟内就会被端口扫描。一旦存在漏洞服务暴露,可能立即遭到利用。
UFW 适用场景:
- 需要简单有效防火墙的 VPS 管理员
- 各版本 Ubuntu 和 Debian 服务器
- 基础到中级安全配置需求
- 与 Fail2Ban 结合实现多层防护
前置条件
开始前请确认以下条件:
- Ubuntu 20.04 / 22.04 / 24.04 VPS(或 Debian 10+)
- root 或 sudo 用户权限
- 活跃的 SSH 连接会话
- 了解 SSH 使用的端口号(默认 22)
⚠️ 重要提示:启用 UFW 之前,务必先允许 SSH 端口。否则启用后新的 SSH 连接将被阻断,需要通过服务商 VNC 控制台才能修复。
检查状态并启用 UFW
首先验证 UFW 已安装并检查当前状态:
sudo apt update sudo apt install ufw -y # 检查当前状态 sudo ufw status verbose
若 UFW 尚未启用,将显示 Status: inactive,请先配置基础规则再启用。
ℹ️ Ubuntu 20.04+ 已预装 UFW,无需额外安装。
设置默认策略
默认策略定义防火墙在无特定规则时的基础行为。最佳实践是"拒绝所有入站,允许所有出站":
# 默认拒绝所有入站连接 sudo ufw default deny incoming # 允许所有出站连接(VPS 可自由对外通信) sudo ufw default allow outgoing
此"白名单"方式比允许一切再逐个封锁更安全,是服务器安全的行业标准做法。
开放必要端口(SSH、HTTP、HTTPS)
设置默认拒绝后,在启用 UFW 之前开放必要端口:
# SSH(关键 — 必须在 ufw enable 之前执行) sudo ufw allow ssh # 或直接指定端口 sudo ufw allow 22/tcp # Web 服务器 sudo ufw allow http sudo ufw allow https # 等价于: sudo ufw allow 80/tcp sudo ufw allow 443/tcp # 若 SSH 使用自定义端口(如 2222) sudo ufw allow 2222/tcp # 启用 UFW(仅在允许 SSH 之后执行) sudo ufw enable
运行 ufw enable 后系统会提示确认,输入 y 并回车即可。
管理 UFW 规则
查看所有现有规则(带编号,便于精确删除):
# 简单查看 sudo ufw status # 带编号的详细视图 sudo ufw status numbered # 按编号删除规则(如删除规则 #3) sudo ufw delete 3 # 按规则内容删除 sudo ufw delete allow 8080/tcp
ℹ️ 使用 ufw delete allow 删除规则时,IPv4 和 IPv6 规则将同时被删除。
封锁可疑 IP
若发现某 IP 持续扫描或攻击服务器,可立即封锁:
# 封锁单个 IP sudo ufw deny from 192.168.1.100 # 封锁整个子网 sudo ufw deny from 10.20.0.0/16 # 仅阻止该 IP 访问特定端口 sudo ufw deny from 203.0.113.1 to any port 22 # 查看当前封锁的 IP sudo ufw status | grep DENY
deny 规则立即生效,且优先于后来添加的 allow 规则进行评估。
配置限速(Rate Limiting)
UFW 内置限速功能,无需安装 Fail2Ban 即可防止暴力破解:
# 限制 SSH 连接频率 sudo ufw limit ssh # 或 sudo ufw limit 22/tcp
limit 命令将封锁在 30 秒内连接尝试超过 6 次的 IP,60 秒后自动解封。
💡 对于多用户登录的服务器,建议将 ufw limit ssh 与 Fail2Ban 结合使用,构建多层防护。
日志记录与监控
启用日志以追踪防火墙的拦截情况:
# 启用日志(级别:low、medium、high) sudo ufw logging low # 实时查看日志 sudo tail -f /var/log/ufw.log # 通过 journalctl 查看 sudo journalctl -f | grep UFW # 统计过去 24 小时的拦截次数 sudo grep -c "UFW BLOCK" /var/log/ufw.log 2>/dev/null || \ sudo journalctl --since "24 hours ago" | grep -c "UFW BLOCK"
low 日志级别适合生产环境——记录拦截数据包而不产生过多 I/O 开销。
常用 UFW 命令参考表
| 命令 | 效果 |
|---|---|
sudo ufw status verbose | 显示状态和所有规则 |
sudo ufw enable | 启用 UFW |
sudo ufw disable | 禁用 UFW(保留规则) |
sudo ufw reset | 重置为默认值(删除所有规则) |
sudo ufw allow 80/tcp | 开放 TCP 端口 80 |
sudo ufw deny 3306 | 封锁端口 3306(MySQL) |
sudo ufw limit ssh | 限制 SSH 连接频率 |
sudo ufw delete allow 80/tcp | 删除端口 80 的开放规则 |
sudo ufw allow from 203.0.113.0/24 | 允许整个子网访问 |
sudo ufw deny from 198.51.100.0/24 | 封锁整个子网 |
sudo ufw logging medium | 设置日志级别为 medium |
sudo ufw app list | 列出可用的应用配置文件 |
常见问题(FAQ)
ufw enable 之前运行了 ufw allow ssh,当前会话不受影响。若忘记允许 SSH,新连接将被阻断,需通过服务商 VNC 控制台添加 SSH 规则后恢复访问。ufw limit 封锁在 30 秒内尝试连接超过 6 次的 IP,60 秒后自动解封。无需额外工具即可提供基础暴力破解防护。/etc/default/ufw 中设置 IPV6=yes。之后添加的规则将同时作用于 IPv4 和 IPv6。sudo ufw reset 将删除所有规则并禁用 UFW,恢复至初始状态,然后按需重新配置。总结
UFW 是配置简便、效果显著的防火墙,随 Ubuntu 预装无需额外安装。通过几条命令即可实现:
- 设置默认拒绝策略,保护所有未开放端口
- 仅开放必要端口(SSH、HTTP、HTTPS)
- 立即封锁可疑 IP 地址
- 通过内置限速功能防止暴力破解
- 实时日志监控异常活动
对于需要更高安全级别的 VPS,建议将 UFW 与 Fail2Ban 结合使用,构建全面的多层防护体系。