VPS安全指南
UFW防火墙完整指南:Ubuntu VPS防火墙配置教程 2026
当您在 DigitalOcean、Bangmod Cloud 或其他服务商开通新的VPS时,服务器默认对所有端口开放——恶意机器人在服务器上线后几分钟内就会开始扫描。
UFW(Uncomplicated Firewall,简易防火墙)是Ubuntu默认的防火墙工具,旨在让iptables配置变得简单易用,无需深入了解网络知识。本指南将带您从零开始完成生产级UFW配置。
sudo ufw enable 之前运行 sudo ufw allow ssh。默认策略拒绝所有入站流量——跳过这一步会立即将您锁定在服务器外。
目录
UFW是什么及其工作原理
UFW全称 Uncomplicated Firewall(简易防火墙),由Ubuntu团队开发,旨在简化iptables管理。其目标是让普通用户无需记住iptables的链、表和规则语法即可配置防火墙。
根据官方Ubuntu Wiki:UFW提供了一种"用户友好的方式来创建IPv4或IPv6基于主机的防火墙",并且在所有Ubuntu版本上默认处于禁用状态。
UFW与iptables的区别
UFW不是替代iptables,而是作为iptables的前端自动生成规则。当您运行 sudo ufw allow 80 时,UFW会在后台自动将其转换为正确的iptables规则。
| 特性 | UFW | 直接使用iptables |
|---|---|---|
| 复杂度 | 简单 — 语法可读 | 复杂 — 需要了解链/表 |
| IPv6 | 内置支持 | 需要单独设置ip6tables |
| 应用程序配置文件 | 有(nginx、apache、openssh) | 无 — 必须手动指定端口 |
| 重启持久性 | 自动 | 需要手动保存/恢复 |
| 适用场景 | 通用VPS、开发/生产 | 高级网络管理员 |
安装和启用UFW
在Ubuntu 20.04 / 22.04 / 24.04上,UFW已预安装。如需重新安装:
sudo apt update sudo apt install ufw -y
启用UFW之前,必须先放行SSH:
# 方式1:通过服务名放行SSH(推荐) sudo ufw allow ssh # 方式2:直接放行22端口 sudo ufw allow 22/tcp # 方式3:如果您更改了SSH端口(例如2222) sudo ufw allow 2222/tcp
然后启用UFW:
sudo ufw enable # 输入y确认
检查状态:
sudo ufw status verbose
预期输出:
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed)
UFW基本命令
查看状态
# 一般状态 sudo ufw status # 详细状态(含默认策略) sudo ufw status verbose # 带编号的状态(用于删除特定规则) sudo ufw status numbered
允许和拒绝
# 允许端口 sudo ufw allow <port> sudo ufw allow <port>/tcp sudo ufw allow <port>/udp # 允许端口范围 sudo ufw allow 8000:8080/tcp # 拒绝端口 sudo ufw deny <port> sudo ufw deny <port>/tcp
删除规则
# 方式1:通过指定原始规则删除 sudo ufw delete allow 80/tcp # 方式2:通过编号删除(来自ufw status numbered) sudo ufw delete 3
重置和禁用
# 临时禁用UFW sudo ufw disable # 重置 — 删除所有规则并恢复默认 sudo ufw reset
sudo ufw reset 会删除所有规则,包括SSH规则——在远程服务器上执行此命令而没有恢复控制台将导致您被锁定在外。
Web服务器防火墙规则
对于运行Nginx或Apache的VPS,需要开放以下端口:
# HTTP sudo ufw allow 80/tcp # HTTPS sudo ufw allow 443/tcp # 或使用应用程序配置文件(如果nginx/apache已安装) sudo ufw allow 'Nginx Full' sudo ufw allow 'Apache Full'
数据库服务器规则
# MySQL/MariaDB — 仅允许可信IP sudo ufw allow from 192.168.1.100 to any port 3306 # PostgreSQL — 仅允许内部子网 sudo ufw allow from 10.0.0.0/8 to any port 5432 # Redis — 绝不对公网开放 sudo ufw deny 6379
LAMP/LEMP Stack完整规则集
sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow ssh sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable
使用UFW保护SSH
22端口是暴力破解攻击的主要目标——机器人24小时不间断扫描。UFW提供多种SSH加固方法:
1. 仅允许可信IP访问SSH
# 只允许您的特定IP sudo ufw allow from 203.0.113.5 to any port 22 proto tcp # 允许整个办公室子网 sudo ufw allow from 203.0.113.0/24 to any port 22 proto tcp
2. 更改SSH端口
常见的加固方法是将SSH从22端口改为非标准端口(例如2222):
# 在/etc/ssh/sshd_config中将Port 22改为Port 2222 # 然后: sudo ufw allow 2222/tcp sudo ufw deny 22/tcp # 仅在成功通过新端口重新连接后执行 sudo systemctl restart sshd
UFW速率限制
UFW内置速率限制功能——当某个IP在30秒内尝试连接超过6次时会被屏蔽。这对防止SSH暴力破解攻击非常有效:
sudo ufw limit ssh # 或按端口号 sudo ufw limit 22/tcp
建议:在每台生产服务器上使用 ufw limit ssh
这一条命令能显著降低SSH暴力破解风险,无需安装Fail2ban。对于追求简洁的小型VPS部署来说是理想选择,设置后无需额外配置即可持续保护。
应用程序配置文件
某些已安装的应用程序会自动向UFW注册配置文件,使按名称放行变得更加简便:
# 列出可用配置文件 sudo ufw app list # 示例输出: # Available applications: # Apache # Apache Full # Apache Secure # Nginx Full # Nginx HTTP # Nginx HTTPS # OpenSSH # 按配置文件名称放行 sudo ufw allow 'Nginx Full' # 开放HTTP和HTTPS sudo ufw allow 'Nginx HTTPS' # 仅开放HTTPS sudo ufw allow 'OpenSSH' # 开放SSH # 查看配置文件详情 sudo ufw app info 'Nginx Full'
日志配置
UFW日志帮助您追踪哪些流量被屏蔽了。根据Ubuntu文档,日志级别如下:
| 级别 | 说明 |
|---|---|
off | 禁用所有日志 |
low | 仅记录被屏蔽的数据包(默认) |
medium | 记录被屏蔽+不匹配任何规则的数据包 |
high | 记录所有数据包(含速率限制) |
full | 记录所有数据包(无速率限制) |
# 启用日志(默认=low) sudo ufw logging on # 设置特定级别 sudo ufw logging medium # 禁用日志 sudo ufw logging off
日志写入 /var/log/ufw.log,实时监控:
sudo tail -f /var/log/ufw.log
高级规则与规则管理
按IP地址允许/拒绝
# 允许单个IP(所有端口) sudo ufw allow from 203.0.113.5 # 允许单个IP访问特定端口 sudo ufw allow from 203.0.113.5 to any port 3306 # 屏蔽IP或子网 sudo ufw deny from 198.51.100.0/24
按网络接口允许
# 仅允许通过eth0进入的80端口流量 sudo ufw allow in on eth0 to any port 80
在指定位置插入规则
# 查看带编号的当前规则 sudo ufw status numbered # 在第1位插入规则(最高优先级) sudo ufw insert 1 allow from 203.0.113.5 to any port 22
生产服务器最佳实践
1. 最小权限原则
只开放服务实际需要的端口——每增加一个开放端口就增加一分攻击面。
2. UFW与云防火墙配合使用
DigitalOcean 等服务商提供在流量到达服务器之前就进行拦截的云级防火墙。同时使用两者——云防火墙作为外层防线,UFW作为基于主机的内层防护,实现纵深防御。
3. 重置前备份规则
sudo cp /etc/ufw/user.rules /etc/ufw/user.rules.backup sudo cp /etc/ufw/user6.rules /etc/ufw/user6.rules.backup
4. 先在测试环境验证
在将防火墙规则更改应用到生产环境之前,始终先在测试服务器上验证。同时保持控制台或KVM访问权限开放,以防被锁定时恢复使用。
5. WordPress/通用VPS推荐规则集
sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw limit ssh # SSH加速率限制 sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS sudo ufw deny 3306/tcp # 屏蔽公网MySQL访问 sudo ufw deny 6379/tcp # 屏蔽公网Redis访问 sudo ufw enable
寻找安全配置简便的VPS?
AsiaGB.com提供配备DirectAdmin的VPS,支持泰语24小时全天候客服。
总结:UFW是VPS安全的基础
UFW只需不到5分钟即可配置完成,但能有效防御暴力破解攻击和未经授权的访问。开通新VPS后的立即行动清单:
- 首先放行SSH
- 启用UFW
- 放行所需端口(80、443)
- 启用
ufw limit ssh防暴力破解 - 用
sudo ufw status verbose验证配置
常见问题解答
UFW是什么?
UFW (Uncomplicated Firewall,简易防火墙) 是Ubuntu默认的防火墙管理工具,旨在简化iptables配置,提供简洁易读的命令语法。
Ubuntu默认启用UFW吗?
不会 — 根据官方Ubuntu Wiki,UFW在所有Ubuntu版本上默认处于禁用状态。您必须运行 sudo ufw enable 才能激活。
启用UFW前必须先设置规则吗?
必须 — 始终在 sudo ufw enable 之前运行 sudo ufw allow ssh。默认策略拒绝所有入站连接,若不提前放行SSH会被立即锁定在服务器外。
UFW和iptables有什么区别?
UFW是iptables的前端工具,自动将简单命令转换为iptables规则。底层仍使用iptables内核模块,但命令语法更简单易懂。
如何查看所有活跃的UFW规则?
运行 sudo ufw status verbose 查看所有规则和默认策略,或运行 sudo ufw status numbered 查看带行号的规则(便于删除特定规则)。
UFW支持IPv6吗?
支持 — UFW在同一命令中处理IPv4和IPv6。请确保 /etc/default/ufw 中设置了 IPV6=yes。