如何在Ubuntu和Debian云服务器上使用UFW设置防火墙

来自菜鸟教程
跳转至:导航、​搜索

介绍

设置功能正常的防火墙对于保护您的云服务器至关重要。 以前,设置防火墙是通过复杂或神秘的实用程序完成的。 许多这些实用程序(例如,iptables)都内置了很多功能,但确实需要用户付出额外的努力来学习和理解它们。

另一个选项是 UFWUncomplicated Firewall。 UFW 是 iptables 的前端,旨在提供比其他防火墙管理实用程序更加用户友好的界面。 UFW 在 Linux 社区中得到了很好的支持,并且通常默认安装在许多发行版上。

在本教程中,您将使用 UFW 设置防火墙来保护 Ubuntu 或 Debian 云服务器。 您还将学习如何设置 UFW 默认规则以允许或拒绝端口和 IP 地址的连接、删除您创建的规则、禁用和启用 UFW,以及如何将所有内容重置为默认设置(如果您愿意)。

先决条件

要学习本教程,您需要一台运行 Ubuntu 或 Debian 的服务器。 您的服务器应该有一个具有 sudo 权限的非 root 用户。 要为 Ubuntu 进行设置,请按照我们的 Initial Server Setup with Ubuntu 20.04 指南进行操作。 要为 Debian 进行设置,请按照我们的 使用 Debian 11 的初始服务器设置指南进行操作。 这两个初始服务器设置指南都将确保您在计算机上安装了 UFW,并且您拥有一个可用于练习创建防火墙规则的安全环境。

将 IPv6 与 UFW 一起使用

如果您的虚拟专用服务器 (VPS) 配置为使用 IPv6,请确保将 UFW 配置为支持 IPv6,以便它配置您的 IPv4 和 IPv6 防火墙规则。 为此,请在首选文本编辑器中打开 UFW 配置文件。 这里我们将使用 nano

sudo nano /etc/default/ufw

确认 IPV6 设置为 yes

/etc/default/ufw# /etc/default/ufw
#

# Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback
# accepted). You will need to 'disable' and then 'enable' the firewall for
# the changes to take affect.
IPV6=yes
…

进行更改后,保存并退出文件。 如果您使用 nano,请按 CTRL + XY,然后按 ENTER

现在通过首先禁用它来重新启动防火墙:

sudo ufw disable
OutputFirewall stopped and disabled on system startup

然后再次启用它:

sudo ufw enable
OutputFirewall is active and enabled on system startup

您的 UFW 防火墙现在已设置为在适当时为 IPv4 和 IPv6 配置防火墙。 接下来,您将调整连接到防火墙的默认规则。

设置 UFW 默认值

您可以通过定义允许和拒绝连接的默认规则来提高防火墙的效率。 UFW 的默认设置是拒绝所有传入连接并允许所有传出连接。 这意味着任何试图访问您的服务器的人都无法连接,而服务器内的任何应用程序都能够与外部连接。 要更新 UFW 设置的默认规则,首先解决传入连接规则:

sudo ufw default deny incoming
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)

接下来,解决传出连接规则:

sudo ufw default allow outgoing
OutputDefault outgoing policy changed to 'allow'
(be sure to update your rules accordingly)

注意:如果你想更严格,你可以拒绝所有传出的请求。 此选项基于个人喜好。 例如,如果您有一个面向公众的云服务器,它可以帮助防止任何类型的远程 shell 连接。 虽然,它确实使您的防火墙管理起来更加麻烦,因为您还必须为所有传出连接设置规则。 您可以使用以下内容将其设置为默认值:

sudo ufw default deny outgoing

允许连接到防火墙

允许连接需要更改防火墙规则,您可以通过在终端中发出命令来完成。 例如,如果您现在打开防火墙,它将拒绝所有传入连接。 如果您通过 SSH 连接到您的服务器,这将是一个问题,因为您将被锁定在您的服务器之外。 通过启用与服务器的 SSH 连接来防止这种情况发生:

sudo ufw allow ssh

如果您的更改成功,您将收到以下输出:

OutputRule added
Rule added (v6)

UFW 带有一些默认值,例如前面示例中使用的 ssh 命令。 或者,您可以允许传入连接到端口 22/tcp,它使用 传输控制协议 (TCP) 来完成相同的事情:

 sudo ufw allow 22/tcp

但是,如果您在已经运行 allow ssh 之后尝试此操作,您将收到以下消息,因为该规则已经存在:

OutputSkipping adding existing rule
Skipping adding existing rule (v6)

如果您的 SSH 服务器在端口 2222 上运行,您可以允许使用相同语法的连接,但将其替换为端口 2222。 请注意,如果您单独使用端口号,它也会影响 tcpudp

sudo ufw allow 2222/tcp
OutputRule added
Rule added (v6)

保护 Web 服务器

要保护具有 文件传输协议 (FTP) 访问权限的 Web 服务器,您需要允许端口 80/tcp 的连接。

允许端口 80 的连接对于侦听 HTTP 连接请求的 Web 服务器(例如 Apache 和 Nginx)很有用。 为此,请允许连接到端口 80/tcp

sudo ufw allow 80/tcp

UFW 通常为配置文件提供 Web 服务器运行所需的规则。 如果没有,Web 服务器配置文件可能会存储为“WWW”并以 ftptcp 的形式打开,如下例所示:

sudo ufw allow www

您还可以使用 ftp 或端口 21 来允许 FTP 连接:

sudo ufw allow ftp
sudo ufw allow 21/tcp

对于 FTP 连接,您还需要允许端口 20 的连接:

sudo ufw allow 20/tcp

您的调整将取决于您需要打开哪些端口和服务,并且可能需要进行测试。 请记住也允许您的 SSH 连接。

指定端口范围

您还可以使用 UFW 指定允许或拒绝的端口范围。 为此,您必须首先在范围的低端指定端口,在其后使用冒号 (:),然后在其后使用范围的高端。 最后,您必须指定要应用规则的协议(tcpudp)。

例如,以下命令将允许 TCP 访问从 10002000 的每个端口,包括:

sudo ufw allow 1000:2000/tcp

同样,以下命令将拒绝从 12344321 的每个端口的 UDP 连接:

 sudo ufw deny 1234:4321/udp

指定 IP 地址

您可以允许来自特定 IP 地址的连接,如下所示。 请务必将 IP 地址替换为您自己的信息:

sudo ufw allow from your_server_ip

正如这些示例所示,在通过有选择地允许某些端口和 IP 地址连接来调整防火墙规则时,您有很大的灵活性。 查看我们的指南以了解有关允许来自 特定 IP 地址或子网 的传入连接的更多信息。

拒绝连接

如果你想打开服务器的所有端口——,不推荐——你可以允许所有连接,然后拒绝任何你不想访问的端口。 以下示例是如何拒绝访问端口 80

sudo ufw deny 80/tcp

删除规则

如果您想删除您管理的某些规则,请使用 delete 并指定要删除的规则:

sudo ufw delete allow 80/tcp
OutputRule deleted
Rule deleted (v6)

如果规则又长又复杂,还有另一种两步法。 首先,生成当前规则的编号列表:

sudo ufw status numbered

然后,使用此编号列表,查看当前允许哪些规则并通过引用其编号删除规则:

sudo ufw delete number
OutputStatus: active

     To                         Action      From
     --                         ------      ----
[ 1] OpenSSH                    ALLOW IN    Anywhere
[ 2] 22/tcp                     ALLOW IN    Anywhere
[ 3] 2222/tcp                   ALLOW IN    Anywhere
[ 4] 80                         ALLOW IN    Anywhere
[ 5] 20/tcp                     ALLOW IN    Anywhere
…

例如,如果端口 80 是列表中的第 4 位,您将使用以下语法。 如果您想继续操作,可能还会提示您一个问题。 您可以决定是 y 或否 n

sudo ufw delete 4
OutputDeleting:
 allow 80
Proceed with operation (y|n)? y
Rule deleted (v6)

启用 UFW

一旦您定义了要应用于防火墙的所有规则,您就可以启用 UFW 以便它开始执行它们。 如果您通过 SSH 连接,请确保设置您的 SSH 端口,通常是端口 22,以允许接收连接。 否则,您可能会将自己锁定在服务器之外:

sudo ufw enable
OutputFirewall is active and enabled on system startup

要确认您的更改已通过,请检查状态以查看规则列表:

sudo ufw status
OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
22/tcp                     ALLOW       Anywhere
2222/tcp                   ALLOW       Anywhere
20/tcp                     ALLOW       Anywhere
80/tcp                     DENY        Anywhere
…

您还可以使用 verbose 获得更全面的输出:

sudo ufw status verbose

要禁用 UFW,请运行以下命令:

sudo ufw disable
OutputFirewall stopped and disabled on system startup

重置默认设置

如果由于某种原因您需要将云服务器的规则重置为默认设置,您可以使用 ufw reset 命令执行此操作。 请注意,在重置所有内容之前,您会收到写入 yn 的提示,因为这样做会破坏现有的 SSH 连接:

sudo ufw reset
OutputResetting all rules to installed defaults. This may disrupt existing ssh
connections. Proceed with operation (y|n)? y
Backing up 'user.rules' to '/etc/ufw/user.rules.20220217_190530'
Backing up 'before.rules' to '/etc/ufw/before.rules.20220217_190530'
Backing up 'after.rules' to '/etc/ufw/after.rules.20220217_190530'
Backing up 'user6.rules' to '/etc/ufw/user6.rules.20220217_190530'
Backing up 'before6.rules' to '/etc/ufw/before6.rules.20220217_190530'
Backing up 'after6.rules' to '/etc/ufw/after6.rules.20220217_190530'

重置为默认设置将禁用 UFW 并删除您之前定义的任何规则。 但是,如果您完全修改默认设置,它们将不会更改为原始设置。 现在,您可以从 UFW 重新开始,并根据自己的喜好自定义规则和连接。

结论

在本教程中,您学习了如何设置和配置云服务器以允许或限制对端口或 IP 地址子集的访问。 此外,您练习了删除不再需要的任何规则,并通过禁用然后启用 UFW 防火墙来确认这些更改已被考虑。 最后,您学习了如何将 UFW 防火墙重置为默认设置。 要详细了解 UFW 的功能,请查看我们关于 UFW Essentials:通用防火墙规则和命令 的指南。