UFW 防火墙速配:15 分钟把你的 VPS 武装到牙齿
结论先行:UFW 的安全配置核心就三步:把默认策略设成「拒绝所有入站、允许所有出站」,启用前先放行 SSH(否则立即把自己锁死在门外),再开 80/443,最后运行
sudo ufw enable。有固定公网 IP 就把 SSH 仅限到自己的白名单 IP;跑 Docker 的要额外小心,它会绕过 UFW 直接操作 iptables,需绑定 127.0.0.1 由反代接入。
你刚买的 VPS 正在被全世界的脚本小子敲门。这篇 UFW 防火墙速配指南,5 分钟内把门锁死,只放该进的人进来。
0、写在前面
我见过太多刚买了 VPS 的开发者,兴冲冲地拿到 IP 就开始部署服务,完全忘了还有"防火墙"这回事。
这就像在新房子装修好之后,把大门敞开睡觉。
你的 VPS 有一个公网 IP,意味着全世界的任何人都可以尝试连接它。而你如果连最基本的防火墙都没配,那些端口扫描器、暴力破解脚本、僵尸网络……它们会像饿狼一样围上来。
出海做独立开发,第一步就是保证你的服务器不死在第一波攻击下。
这篇 UFW 防火墙速配指南,带你用最短的时间把 VPS 的门锁死。我们用 Ubuntu 默认的 UFW(Uncomplicated Firewall),名字就告诉你了,简单易用。
1、期望目标
这篇文章搞定这些:
- ✅ 理解防火墙的基本原理(不用背 RFC,够用就行)
- ✅ 配置默认策略:拒绝所有入站,允许所有出站
- ✅ 开放必要端口:SSH、HTTP、HTTPS
- ✅ 学会常用命令:查看状态、添加规则、删除规则
- ✅ 处理常见坑:改端口、封 IP、Cloudflare 只放行
做完这些,你的服务器攻击面至少减少 90%。
2、计划思考
为什么需要防火墙?
防火墙就像你家门口的保安。没有它,任何人都能敲你的门;有了它,只有你放行的人能进来。
默认状态下 VPS 的端口状态:
1 | 22 端口(SSH):🔓 全世界都能敲 |
这些端口如果是默认配置,可能都没有密码或密码很弱。攻击者只需要:
- 用扫描器扫你的 IP
- 发现开放的端口
- 尝试默认密码或暴力破解
配了防火墙后:
1 | 22 端口(SSH):🔒 只允许你的 IP 访问 |
为什么用 UFW 而不是 iptables?
Linux 上有三大防火墙方案:
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| iptables | 功能强大、灵活 | 配置复杂、新手易出错 | 需要复杂规则的高级用户 |
| nftables | 新一代、性能好 | 语法变化大、资料少 | 追求最新技术的用户 |
| UFW | 简单直观、命令清晰 | 高级功能有限 | 绝大多数用户(推荐) |
对于出海独立开发者,你的目标是"快速把服务器安全化",而不是成为防火墙专家。UFW 是最佳选择:
- 语法简单到几乎不用记
- Ubuntu 默认预装
- 满足 95% 的使用场景
- 官方支持稳定
防火墙工作原理
外来流量 → UFW 检查规则 → 放行 or 拦截
- 绿色端口:允许所有人访问(HTTP/HTTPS)
- 橙色端口:只允许特定 IP 访问(SSH)
- 红色端口:完全禁止(数据库等)
3、操作步骤
3.1 检查 UFW 安装状态
Ubuntu 20.04+ 默认预装 UFW,但先确认一下:
1 | # 检查是否安装 |
3.2 设置默认策略(最重要的一步)
默认策略决定"没有明确规则的端口"怎么处理。
安全做法是:拒绝所有入站,允许所有出站。
1 | # 设置默认入站策略为拒绝 |
为什么这样配?
default deny incoming:没有明确声明放行的入站端口全部丢弃拒绝。这是典型的「白名单」最小权限安全思维。default allow outgoing:允许服务器主动向外发起请求(如 apt 更新、curl 调用第三方 API、git pull 代码等)。这是维持服务器正常工作的基石。
💡 小知识
UFW 的规则是"从上到下匹配"。第一条匹配的规则就生效,后面的不看了。所以默认策略是"最后的兜底"。
3.3 开放 SSH 端口(别把自己锁外面)
这是最关键的一步! 如果你先启用了防火墙但忘了开放 SSH,你会把自己锁在外面。
1 | # 开放默认 SSH 端口 22 |
参数解释:
allow:放行通行规则22/tcp:指定目标端口为 22,仅允许 TCP 协议(SSH 不需要 UDP)comment "SSH":为规则增加文字备注,后续查阅规则表一目了然
⚠️ 生死提醒
一定要在启用防火墙前开放 SSH 端口! 不然你会把自己锁在外面,只能找服务商要 VNC 救援。
3.4 开放 Web 服务端口
如果你要跑网站,需要开放 HTTP 和 HTTPS:
1 | # 开放 HTTP(80 端口) |
按服务名开放(UFW 支持别名):
1 | # 这两条命令等价于上面 |
UFW 会自动将协议别名转为标准端口:http → 80/tcp,https → 443/tcp。
3.5 启用防火墙
前面都是"配置规则",现在正式启用:
1 | sudo ufw enable |
会提示:
1 | Command may disrupt existing ssh connections. Proceed with operation (y|n)? |
输入 X 确认。
这个提示是在告诉你:
“启用防火墙可能会打断现有的 SSH 连接,确定要继续吗?”
通常不会打断现有连接,但建议保持 VNC 控制台开启以防万一。因为我们用的是 SSH 客户端主动连接服务器,已建立的连接一般不会被阻断,但部分 SSH 实现可能会超时断连。
3.6 检查状态
1 | # 查看状态 |
输出类似:
1 | Status: active |
解读输出:
Status: active:确认防火墙已处于启用生效状态Default: deny (incoming), allow (outgoing), disabled (routed):确认默认策略为入站全拒绝、出站全放行- 下面是具体规则列表
如果想看带编号的规则(方便删除):
1 | sudo ufw status numbered |
输出:
1 | Status: active |
3.7 高级规则:限制 SSH 访问
如果你有固定 IP,可以让 SSH 只允许你的 IP 访问:
1 | # 只允许你的 IP 访问 SSH(把 1.2.3.4 换成你的 IP) |
不知道自己的 IP?
1 | # ⚠️ 在你的本地电脑(不是服务器!)上执行 |
如果没有固定 IP(家里宽带 IP 会变)?
可以用域名动态解析,但配置比较复杂。更简单的方案是:
- SSH 仍对公网开放,但改用
sudo ufw limit 22/tcp限速:同一 IP 若在 30 秒内尝试新建超过 6 次连接则自动临时封禁,零外部依赖就能直接挡掉 95% 以上的暴力穷举脚本 - 用 fail2ban 防暴力破解(上一篇讲过)
- 用密钥登录,禁用密码登录
3.8 封禁恶意 IP
如果发现某个 IP 在攻击你:
1 | # 封禁单个 IP |
查看被封禁的 IP:
1 | sudo ufw status numbered | grep DENY |
3.9 删除规则
规则加错了?两种删除方式:
方式一:按编号删除(推荐)
1 | # 1. 先查看编号 |
方式二:按规则内容删除
1 | # 删除开放 80 端口的规则 |
3.10 重置防火墙
把所有规则清空,恢复默认:
1 | sudo ufw reset |
慎用! 这个命令会删除所有规则,把防火墙恢复到"禁用"状态。
3.11 只允许 Cloudflare 访问(进阶)
如果你的网站完全在 Cloudflare CDN 后面,可以设置只允许 Cloudflare 的 IP 访问 80/443 端口:
下载自动配置脚本:
⚠️ 安全提醒
以下步骤涉及执行第三方脚本。生产环境务必先审计代码,确认脚本内容安全后再执行。不要养成"直接执行未知脚本"的习惯。
1 | # 下载脚本 |
这个脚本会:
- 从 Cloudflare 官方获取最新的 IP 段
- 添加 UFW 规则,只允许这些 IP 访问 80/443
- 重新加载 UFW
设置定时更新(每周一次):
1 | # 添加 cron 任务 |
Cloudflare 的 IP 段可能会变化,所以建议每周自动更新。
4、总结
4.1 完整配置示例
一个典型的 Web 服务器 UFW 配置:
1 | # 1. 设置默认策略 |
4.2 常用命令速查表
| 操作 | 命令 |
|---|---|
| 查看状态 | sudo ufw status |
| 查看详细状态 | sudo ufw status verbose |
| 查看编号规则 | sudo ufw status numbered |
| 开放端口 | sudo ufw allow 22/tcp |
| 按编号删除 | sudo ufw delete [number] |
| 封禁特定 IP | sudo ufw deny from 1.2.3.4 |
| 启用防火墙 | sudo ufw enable |
| 禁用防火墙 | sudo ufw disable |
| 重置全部规则 | sudo ufw reset |
| 放行指定 IP 访问 | sudo ufw allow from 1.2.3.4 to any port 22 proto tcp |
4.3 关键点
- 默认策略贯彻白名单思维:
ufw default deny incoming+ufw default allow outgoing - 先开 SSH 再启用防火墙:别把自己锁外面
- 使用
comment指令添加注释:方便多人或日后维护快速理解每条规则的业务归属 - 定期检查生效规则:运行
sudo ufw status numbered核对是否有过期的临时开放端口 - Cloudflare CDN 可进阶:只放行 Cloudflare IP
4.4 出海开发者的防火墙哲学
- 够用就好:UFW 覆盖 95% 场景,别折腾 iptables/nftables
- 简单优先:一条精简的
ufw allow远比手写数十行 iptables 规则稳健且易读 - 定期检查:每月执行一次
sudo ufw status numbered,清理废弃的端口测试规则 - 配置备份:在做重大网络架构调整前先备份规则库
sudo cp -r /etc/ufw /etc/ufw.bak
你的目标是快速把服务安全化,而不是成为防火墙专家。
5、异常记录
Q1:启用 UFW 后连不上 SSH 了?
原因分析:
你可能在启用防火墙前没有开放 SSH 端口。
解决方案:
- 方法一:用服务商的 VNC/Console 救援
大部分 VPS 商都提供网页版控制台,可以免 SSH 登录。进去后:
1 | # 开放 SSH 端口 |
- 方法二:禁用防火墙
1 | sudo ufw disable |
先把门打开,进去修复配置,再重新启用。
Q2:规则加了但没生效?
检查步骤:
1 | # 1. 确认防火墙已启用 |
Q3:想临时关闭防火墙测试?
1 | # 临时禁用 |
Q4:误删了所有规则,SSH 还能连吗?
能! UFW 的规则修改不会打断已建立的连接。但新连接会受影响。
补救:
1 | # 重新开放 SSH |
Q5:如何查看防火墙日志?
1 | # 查看 UFW 日志 |
日志会显示哪些 IP 被拦截了、哪些被放行了,用来排查问题很有用。
Q6:UFW 和 iptables 冲突吗?
不冲突。 UFW 实际上是 iptables 的前端(frontend),它帮你写 iptables 规则。
你可以:
- 用 UFW 管理日常规则
- 需要复杂规则时,直接写 iptables
但不推荐混用,容易混乱。如果 UFW 满足需求,就只用 UFW。
Q7:Docker 容器端口怎么放行?
注意! Docker 会直接修改 iptables,绕过 UFW。
如果你有 Docker 容器,UFW 可能拦截不了容器端口。
解决方案:
- 标准规范方案:容器端口仅绑定本地回环
-p 127.0.0.1:8080:80
1 | docker run -p 127.0.0.1:8080:8080 nginx |
这样容器只在本地监听,外网访问不到。
- UFW 方案:告诉 Docker 别动 iptables
⚠️ 风险警告
在 Docker 配置中设置
"iptables": false会导致容器间跨 bridge 通信故障与默认网桥 DNS 失效。多容器编排时强烈建议坚持使用方案一(绑定 127.0.0.1 并由宿主机反代转发)。
编辑 /etc/docker/daemon.json:
1 | { |
重启 Docker:
1 | sudo systemctl restart docker |
测试容器连接:
1 | # 确认容器间网络仍正常 |
然后可以用 UFW 管理规则了。
6、推荐资源
购买 VPS
- Vultr High Frequency VPS:全球节点多,按小时计费,性价比高
- DigitalOcean:开发者友好,文档齐全
- Contabo:大内存大硬盘,适合跑数据库
学习资源
❓ FAQ(UFW 防火墙最常问)(独立开发者最常问)
Q:重启服务器后,UFW 规则还在吗?
在。规则持久化写入在 /etc/ufw/user.rules(IPv6 写入在 /etc/ufw/user6.rules),只要执行过 sudo ufw enable,开机 systemd 会自动重载。想确认开机自启状态运行:systemctl is-enabled ufw。
Q:ufw limit 是干嘛的?真能防 SSH 爆破吗?
完全可以。执行 sudo ufw limit 22/tcp 会自动向内核注册限速规则:同一来源 IP 在 30 秒内尝试新建连接超过 6 次将被直接 DROP 丢包拒绝。对于没固定 IP 访问又不想安装笨重外部中间件的开发者来说,是防护低级爆破脚本最具性价比的手段。
Q:默认 default deny incoming 会把 ping 也挡掉吗?
默认不会。UFW 在 /etc/ufw/before.rules 中默认配置了规则放行 ICMP echo-request 数据包,因此服务器在外网仍可正常 ping 通。若要开启全面禁 ping 隐身,只需在 before.rules 中将包含 -A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT 的规则行注释掉,再执行 sudo ufw reload 即可。
Q:Debian 能用 UFW 吗,还是只能 Ubuntu?
完全可以。在 Debian 上执行 sudo apt install ufw 即可开箱即用,所有语法与 Ubuntu 100% 保持一致。而在 CentOS / AlmaLinux 等 RHEL 系发行版上默认使用 firewalld,切勿同时开启两个防火墙前端工具造成规则竞争。
Q:怎么一次开放一整段端口?
指定端口范围时使用冒号连接并显式指定协议:sudo ufw allow 3000:3005/tcp。注意端口范围会被识别为单一复合规则,删除时需要按完整范围规则或对应编号整条删除。
数据与引用
-
Fail2Ban 在 SSH 爆破测试里封禁 1291 个唯一 IP(12973 总连接):阈值"10 分钟内 5 次失败",命中率约 65%。机器学习模型准确率 92.5%,召回率 97.8%,比规则-based 更准。
来源:DiVA - SSH Brute Force Detection (PDF)
含义:ufw limit结合 fail2ban 是针对单 IP 暴力尝试最有效的防御基线;而应对全球分布式海量代理池攻击时,则需借助更上层的 Cloudflare 或全封闭零信任方案。 -
AhnLab 2025 Q4 报告:P2PInfect 蠕虫 SSH 暴力尝试占 80.4%:Prometei 8.3%、XMRig 2.2%。Verizon DBIR 2025 报告 Web 应用暴力破解事件同比近 3 倍(20%→60%)。
来源:Tech Insider - Fail2ban Setup 2026
含义:SSH 暴力破解是常态,不是偶然事件。基础防火墙 + fail2ban 是出海开发者的最低防线。 -
UFW 是 iptables 的前端(Uncomplicated Firewall):Ubuntu 8.04 LTS 引入,目标是简化 iptables 规则管理。Debian 也可装(apt install ufw),CentOS / RHEL 默认用 firewalld。
来源:DigitalOcean - How to Set Up a Firewall with UFW
含义:UFW 不替代 iptables,只是把规则语法变简单;复杂场景(多 WAN、QoS)仍要直接用 iptables/nftables。 -
ufw limit 默认阈值:30 秒内同一 IP 6 次新连接:阈值写死,要自定义必须动 iptables。
来源:UFW Manpage
含义:UFW 自带的limit限速阈值足以应对日常脚本扫描;若针对业务 Web 端口实现精细化防 CC 防刷,需在 Nginx / Caddy 反向代理层或/etc/ufw/before.rules中编写精细的 iptables recent 模块参数。 -
Linux 5.10+ 内核自带 nftables(替代 iptables 后端):UFW 当前仍走 iptables 后端,nftables 后端在 Ubuntu 22.04+ 是默认选项。
来源:Ubuntu nftables Wiki
含义:跟着发行版默认走即可;UFW 用户通常不用关心后端是 iptables 还是 nftables。 -
Shadowserver 基金会每日跟踪全球数百万 SSH 凭据爆破事件:从新开 VPS 到第一波爆破,平均不到 10 分钟。
来源:Tech Insider - Fail2ban Setup 2026
含义:SSH 密码登录暴露在公网 = 主动找打。SSH 密钥 + fail2ban 是几乎零成本的最低防线。
💡 透明声明:本文包含 8 处推广链接(6 个独立服务,如 Vultr / Cloudflare / Tailscale 等)。每次点击我会收到一笔佣金,不影响你的购买价格,也不影响我的内容判断,工具好不好用我自己用了才知道。完整推广政策见 ittinker.com/about。
💼 推荐工具
| 工具 | 用途 | 为什么推荐 |
|---|---|---|
| Cloudflare | CDN + DNS | 源站只放行 CF IP 段,从源头减攻击面(见「服务器安全加固清单」白名单脚本) |
| Vultr | 源站 VPS | 控制台可一键开关防火墙组,配合 UFW 双层防护 |
| DigitalOcean | 源站 VPS | Cloud Firewall 图形界面 + UFW 系统层,两层防护 |
| Hetzner | 欧洲源站 | 欧洲机房,配 UFW + fail2ban 抗暴力破解成本最低 |
| Bitwarden | 密码管理 | UFW 之外,账号层用密码管理器隔离风险 |
下一篇预告
下一篇我们来讲 Nginx 反向代理实战,教你:
- 用 Nginx 把多个服务放在一个域名下
- 配置 SSL 证书(Let’s Encrypt 免费证书)
- 负载均衡和缓存优化
本文最后更新:2026年8月
独立开发者工具箱系列,欢迎关注!
