如何在Ubuntu和Debian云服务器上使用UFW设置防火墙
介绍
设置功能正常的防火墙对于保护您的云服务器至关重要。 以前,设置防火墙是通过复杂或神秘的实用程序完成的。 许多这些实用程序(例如,iptables
)都内置了很多功能,但确实需要用户付出额外的努力来学习和理解它们。
另一个选项是 UFW 或 Uncomplicated 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 + X
、Y
,然后按 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
。 请注意,如果您单独使用端口号,它也会影响 tcp
和 udp
:
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”并以 ftp
或 tcp
的形式打开,如下例所示:
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 指定允许或拒绝的端口范围。 为此,您必须首先在范围的低端指定端口,在其后使用冒号 (:
),然后在其后使用范围的高端。 最后,您必须指定要应用规则的协议(tcp
或 udp
)。
例如,以下命令将允许 TCP 访问从 1000
到 2000
的每个端口,包括:
sudo ufw allow 1000:2000/tcp
同样,以下命令将拒绝从 1234
到 4321
的每个端口的 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
命令执行此操作。 请注意,在重置所有内容之前,您会收到写入 y
或 n
的提示,因为这样做会破坏现有的 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:通用防火墙规则和命令 的指南。