Introducing ZYNOO General Purpose & CPU Optimized Servers   Learn More >

Ubuntu 防火墙:如何在 VPS 上设置 UFW

使用 UFW(Uncomplicated Firewall)配置 Ubuntu 防火墙,可以允许必要的连接并阻止不必要的入站流量,从而保护您的 VPS。设置只需几条命令,但执行顺序很重要:务必在启用防火墙之前允许 SSH,否则可能失去远程访问权限。

本教程将介绍如何安装 UFW、配置安全的默认策略、开放网站所需端口、启用防火墙,以及后续管理规则。

要点

  • UFW 提供了一种通过命令行管理 Ubuntu 防火墙的简便方法。
  • 在远程 VPS 上启用 UFW 之前,先允许您实际使用的 SSH 端口。
  • 默认拒绝未经请求的入站流量,然后只开放服务所需的端口。
  • 通过第二个连接验证访问是否正常,并在添加或移除应用程序时检查规则。

Ubuntu 上的 UFW 是什么?

UFW 是一款防火墙配置工具,用于管理 Linux 内核数据包过滤系统的规则。您无需编写底层规则,只需使用 ufw allow 和 ufw delete 等命令,就能允许或拒绝连接。

对于典型的网站托管 VPS,您需要允许用于管理的 SSH 连接,以及供访客访问的 80 和 443 端口。数据库和内部应用程序端口通常不应暴露在公共互联网上。

配置 Ubuntu 防火墙之前

您需要一台具有 sudo 权限、且 SSH 连接正常的 Ubuntu VPS。如果您刚开始接触远程管理,请参阅 ZYNOO 的初学者 SSH 命令指南。

保持当前 SSH 会话处于连接状态。确认 VPS 服务商提供的网页控制台或恢复控制台可以正常使用。服务商级别的网络防火墙与 UFW 相互独立,也可能需要配置相应规则。

以下说明以全新配置或尚未启用的 UFW 为前提。如果 UFW 已启用,请先检查现有规则和服务需求,再更改默认策略。

使用 UFW 配置 Ubuntu VPS 防火墙

第 1 步:检查并安装 UFW

检查 UFW 是否可用:

sudo ufw status

显示 Status: inactive 表示 UFW 已安装,但尚未执行规则。如果找不到该命令,请安装 UFW:

sudo apt update
sudo apt install ufw

暂时不要启用防火墙。

第 2 步:在启用 UFW 之前允许 SSH

查找 SSH 正在监听的 TCP 端口:

sudo ss -ltnp

将输出结果与 SSH 客户端使用的端口进行比较。22 端口很常见,但 VPS 也可能配置为使用其他端口。

如果 SSH 使用 22 端口,请运行:

sudo ufw allow 22/tcp

如果 SSH 实际使用 2222 等自定义端口,请改为允许该端口:

sudo ufw allow 2222/tcp

2222 只是示例端口,并非所有人都需要额外开放。检查待生效的规则:

sudo ufw show added

第 3 步:设置默认规则并检查 IPv6

对入站连接使用默认拒绝策略,同时允许 VPS 主动建立出站连接:

sudo ufw default deny incoming
sudo ufw default allow outgoing

如果您的 VPS 具有公共 IPv6 连接,请确认 UFW 能够处理 IPv6:

grep '^IPV6=' /etc/default/ufw

预期的设置为 IPV6=yes。如果正在使用 IPv6,但此项设置为 no,请在启用防火墙之前编辑 /etc/default/ufw,以启用 IPv6 处理。

第 4 步:开放网站所需的端口

如果 VPS 托管公开访问的网站,请在启用 UFW 之前允许 HTTP 和 HTTPS:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Ubuntu VPS 的常用端口包括:

服务端口协议
SSH22(或您的自定义端口)TCP
HTTP80TCP
HTTPS443TCP

对于使用其他 TCP 端口的公开应用程序,UFW 允许端口的命令语法为:

sudo ufw allow 8080/tcp

只有当您的服务需要通过 8080 端口接受外部访问时,才运行该示例命令。对于 UDP 服务,请改用 /udp,例如,为配置在该端口上的 WireGuard 端点使用 sudo ufw allow 51820/udp。

您也可以查看可用的应用程序配置文件:

sudo ufw app list

如果列表中有 Nginx Full,请使用 sudo ufw app info 'Nginx Full' 检查其端口。命令 sudo ufw allow 'Nginx Full' 可以替代上面两条网站端口规则;无需同时使用两种方法。位于本地 Nginx 反向代理后面的应用程序通常不应将其后端端口公开。

第 5 步:启用 UFW 并验证防火墙

允许 SSH 和其他必需的服务端口后,启用 UFW:

sudo ufw enable

系统可能会警告此操作会影响 SSH。只有在确认 SSH 规则和恢复访问方式后,才继续操作。检查当前生效的规则:

sudo ufw status verbose

您应该能看到 Status: active、默认策略和已允许的端口。UFW 也会在系统启动时自动启用。

在关闭原有 SSH 会话之前,从第二个终端再次建立连接。在您自己的电脑上使用 ssh -p 22 username@server-ip,并按需替换用户名、地址和端口。如果开放了 80 和 443 端口,请从外部测试网站是否可访问。仅有一条 ALLOW 规则,并不能证明服务可以正常访问。

第 6 步:管理、限制和删除 UFW 规则

列出带编号的防火墙规则:

sudo ufw status numbered

删除过时的允许规则,例如 TCP 8080 端口的规则:

sudo ufw delete allow 8080/tcp

您也可以按规则编号删除(sudo ufw delete 3),但要先查看当前列表:编号可能发生变化,而且按编号删除时,可能只会删除一组对应 IPv4/IPv6 规则中的一条。

可选:仅允许您的 IP 访问 SSH

如果您用于管理的 IP 地址固定,可以将 SSH 访问限制为仅允许该地址。例如:

sudo ufw allow from 203.0.113.10 to any port 22 proto tcp

将示例 IP 替换为您的真实公网 IP。从该地址测试新的登录连接,然后使用 sudo ufw delete allow 22/tcp 删除原先允许所有地址访问的规则。如果保留这条规则,所有人仍可访问。在整个过程中,保持原有会话和恢复控制台可用。

可选:限制 SSH 连接尝试频率

或者,如果您需要从不断变化的 IP 地址访问 SSH,可以将允许所有地址访问的规则替换为连接频率限制规则:

sudo ufw limit 22/tcp
sudo ufw delete allow 22/tcp
sudo ufw status numbered

只有在确认 SSH 连接和恢复访问方式均正常后,才执行此操作;如果实际 SSH 端口不是 22,请使用实际端口。之后再测试一次登录。这是仅允许特定 IP 访问的替代方案,不应与之叠加使用。频率限制不能替代 SSH 密钥认证。

第 7 步:检查日志并排查访问问题

需要调查被阻止的流量时,可启用基本日志记录:

sudo ufw logging on
sudo ufw status verbose

根据您的日志配置,UFW 日志可能位于系统日志(journal)或 /var/log/ufw.log 中。

如果无法通过 SSH 连接,请使用服务商提供的恢复控制台检查当前生效的规则。作为临时应急措施,sudo ufw disable 可以停止执行防火墙规则;随后修正 SSH 规则并重新启用 UFW。

如果网站无法加载,请使用 sudo ss -ltnp 检查正在监听的服务,并检查 UFW 规则及服务商的防火墙。开放端口不会自动启动使用该端口的服务。

常见问题

Ubuntu 防火墙会在重启后自动启动吗?

会。运行 sudo ufw enable 后,UFW 会在之后的系统启动时自动启用。您可以使用 sudo ufw status verbose 检查其配置。

更改 UFW 规则后需要重启 Ubuntu 吗?

不需要。通过 UFW 添加或删除的规则无需重启 VPS 即可生效。您可以立即查看当前配置。

UFW 防火墙能保护 Docker 容器吗?

不一定。Docker 发布的端口可能绕过常规的 UFW 入站规则,因为 Docker 会配置自己的网络规则。在依靠 UFW 限制容器访问之前,请查阅 Docker 的防火墙文档。

总结

使用 UFW 安全配置 Ubuntu 防火墙,首先要允许 SSH,设置默认拒绝入站连接的策略,然后只开放应用程序所需的端口。启用 UFW 后,通过单独的连接验证访问是否正常,并随着 VPS 配置的变化删除过时的规则。

UFW 管理的是网络访问,无法防范应用程序层面的滥用。对于公开访问的 Nginx 网站,请求频率限制是一项有用的额外防护措施。

Table of Content

Nginx 请求速率限制是一项内置功能,用于控制客户端在指定时间内可以发起的 HTTP 请求数量。无需安装其他 […]

Nginx 反向代理接收网站访客的请求,并将其转发到另一台服务器或应用程序。它通常用于让运行在 3000 等端 […]

Nginx 502 网关错误通常意味着 Nginx 未能从上游服务器(如 PHP-FPM、Node.js 或其 […]

Build your next project with ZYNOO

From your first website to demanding applications, choose the resources and control you need.

Shared Hosting

Start your blog or business website with cPanel, LiteSpeed and CloudLinux.

VPS Hosting

Grow your websites and applications with NVMe storage, KVM virtualization and full root access.

Dedicated Servers

Power demanding projects with your own physical server, dedicated resources and control over your environment.

滚动至顶部