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

介绍

设置一个功能齐全的防火墙对于保护云服务器至关重要。以前,设置防火墙是通过复杂或荒谬的实用程序完成的。这些实用程序(例如,iptables)有很多内置的功能,但需要用户的额外努力来学习和理解它们。

另一个选项是 UFW,或 Uncomplicated Firewall. UFW 是iptables的前端,旨在提供比其他防火墙管理工具更用户友好的界面。

在本教程中,您将使用 UFW 设置防火墙来保护 Ubuntu 或 Debian 云服务器,您还将学习如何设置 UFW 默认规则,以允许或拒绝端口和 IP 地址的连接,删除您创建的规则,禁用和启用 UFW,并重置所有东西到默认设置,如果您喜欢的话。

前提条件

要遵循本教程,您需要运行 Ubuntu 或 Debian 的服务器。 您的服务器应该具有具有 sudo 特权的非root用户。 要为 Ubuntu 设置此功能,请遵循我们在 初始服务器设置与 Ubuntu 20.04上的指南)。 要为 Debian 设置此功能,请遵循我们在 初始服务器设置与 Debian 11上的指南。

使用IPv6与UFW

如果您的虚拟私人服务器(VPS)已配置为 IPv6,请确保 UFW 已配置为支持 IPv6 以便配置您的 IPv4 和 IPv6 防火墙规则。

1sudo nano /etc/default/ufw

确认IPV6设置为:

1[secondary_label /etc/default/ufw]
2# /etc/default/ufw
3#
4
5# Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback
6# accepted). You will need to 'disable' and then 'enable' the firewall for
7# the changes to take affect.
8IPV6=yes
9

完成更改后,保存并退出文件. 如果您使用nano,请按CTRL + X,Y,然后按ENTER

现在,重新启动您的防火墙,首先禁用它:

1sudo ufw disable
1[secondary_label Output]
2Firewall stopped and disabled on system startup

然后再启用它:

1sudo ufw enable
1[secondary_label Output]
2Firewall is active and enabled on system startup

您的 UFW 防火墙现在已设置,以便在适当情况下为 IPv4 和 IPv6 配置防火墙。

设置 UFW 缺陷

您可以通过定义允许和拒绝连接的默认规则来提高防火墙的效率。 UFW 的默认规则是拒绝所有传入连接,并允许所有传出连接。

1sudo ufw default deny incoming
1[secondary_label Output]
2Default incoming policy changed to 'deny'
3(be sure to update your rules accordingly)

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

1sudo ufw default allow outgoing
1[secondary_label Output]
2Default outgoing policy changed to 'allow'
3(be sure to update your rules accordingly)

<$>[注] 注: 如果你想更加限制,你可以拒绝所有的出发请求. 此选项是基于个人偏好。 例如,如果你有一个面向公众的云服务器,它可以帮助防止任何类型的远程壳连接。 尽管,它确实使你的防火墙更难管理,因为你也必须为所有出发的连接设置规则。

1sudo ufw default deny outgoing

美元

允许连接到防火墙

允许连接需要更改防火墙规则,您可以通过在终端发出命令来做到这一点。例如,如果您现在打开防火墙,它会拒绝所有接入的连接。

1sudo ufw allow ssh

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

1[secondary_label Output]
2Rule added
3Rule added (v6)

UFW 附有一些默认功能,例如在上一个示例中使用的 ssh 命令. 或者,您可以允许输入连接到端口 22/tcp,该端口使用 传输控制协议 (TCP)来完成相同的事情:

1sudo ufw allow 22/tcp

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

1[secondary_label Output]
2Skipping adding existing rule
3Skipping adding existing rule (v6)

如果您的 SSH 服务器运行在端口 2222 上,您可以允许使用相同语法的连接,但可以用端口 2222 取代它。

1sudo ufw allow 2222/tcp
1[secondary_label Output]
2Rule added
3Rule added (v6)

网络服务器安全

要安全地访问 File Transfer Protocol (FTP)的 Web 服务器,您需要允许对端口 80/tcp 的连接。

允许对端口 `80 的连接对于听取 HTTP 连接请求的 Apache 和 Nginx 等 Web 服务器是有用的。

1sudo ufw allow 80/tcp

UFW 通常会为配置文件提供 Web 服务器运作所需的规则,否则,Web 服务器配置文件可能会被存储为WWW并作为ftptcp打开,如下列示例所示:

1sudo ufw allow www

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

1sudo ufw allow ftp
1sudo ufw allow 21/tcp

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

1sudo ufw allow 20/tcp

您的调整将取决于您需要打开哪些端口和服务,可能需要测试。

定义港口范围

您还可以指定端口范围,以允许或拒绝使用 UFW. 要做到这一点,您必须先在范围的低端指定端口,然后用一个(:),然后跟随范围的高端。

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

1sudo ufw allow 1000:2000/tcp

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

1sudo ufw deny 1234:4321/udp

指定 IP 地址

您可以允许来自特定 IP 地址的连接,如下文所示。

1sudo ufw allow from your_server_ip

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

否认连接

如果您想要打开服务器的所有端口 - 这不建议 - 您可以允许所有连接,然后拒绝任何您不想提供访问的端口。

1sudo ufw deny 80/tcp

删除规则

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

1sudo ufw delete allow 80/tcp
1[secondary_label Output]
2Rule deleted
3Rule deleted (v6)

如果规则很长和复杂,则有一个替代的两步方法. 首先,生成当前规则的编号列表:

1sudo ufw status numbered

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

1sudo ufw delete number
 1[secondary_label Output]
 2Status: active
 3
 4     To Action From
 5     --                         ------      ----
 6[ 1] OpenSSH ALLOW IN Anywhere
 7[ 2] 22/tcp ALLOW IN Anywhere
 8[ 3] 2222/tcp ALLOW IN Anywhere
 9[ 4] 80 ALLOW IN Anywhere
10[ 5] 20/tcp ALLOW IN Anywhere
11

例如,如果端口 80 是列表中的第 4 位,你会使用以下语法. 您也可能被提示问一下是否要继续操作. 您可以决定是 y 或不是 n:

1sudo ufw delete 4
1[secondary_label Output]
2Deleting:
3 allow 80
4Proceed with operation (y|n)? y
5Rule deleted (v6)

允许UFW

一旦你定义了你想要应用于你的防火墙的所有规则,你可以启用UFW,以便它开始执行它们. 如果你通过SSH连接,请确保设置你的SSH端口,通常是端口22,以允许接收连接。

1sudo ufw enable
1[secondary_label Output]
2Firewall is active and enabled on system startup

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

1sudo ufw status
 1[secondary_label Output]
 2Status: active
 3
 4To Action From
 5--                         ------      ----
 6OpenSSH ALLOW Anywhere
 722/tcp ALLOW Anywhere
 82222/tcp ALLOW Anywhere
 920/tcp ALLOW Anywhere
1080/tcp DENY Anywhere
11

您还可以使用verbose来提供更全面的输出:

1sudo ufw status verbose

若要禁用 UFW,请运行以下操作:

1sudo ufw disable
1[secondary_label Output]
2Firewall stopped and disabled on system startup

重置默认设置

如果出于某种原因,您需要将云服务器的规则重置为默认设置,您可以使用ufw reset命令这样做。请注意,在重置一切之前,您将收到一个提示,请键入yn,因为这样做可能会扰乱现有的SSH连接:

1sudo ufw reset
1[secondary_label Output]
2Resetting all rules to installed defaults. This may disrupt existing ssh
3connections. Proceed with operation (y|n)? y
4Backing up 'user.rules' to '/etc/ufw/user.rules.20220217_190530'
5Backing up 'before.rules' to '/etc/ufw/before.rules.20220217_190530'
6Backing up 'after.rules' to '/etc/ufw/after.rules.20220217_190530'
7Backing up 'user6.rules' to '/etc/ufw/user6.rules.20220217_190530'
8Backing up 'before6.rules' to '/etc/ufw/before6.rules.20220217_190530'
9Backing up 'after6.rules' to '/etc/ufw/after6.rules.20220217_190530'

重置到默认设置将禁用 UFW 并删除您之前定义的任何规则. 但是,默认设置不会改变到原始设置,如果您完全修改了它们。

结论

在本教程中,您了解如何设置和配置您的云服务器,以允许或限制对一组端口或IP地址的访问。此外,您还练习删除您不再想要的任何规则,并通过禁用并启用您的UFW防火墙来确认这些更改。

Published At
Categories with 技术
comments powered by Disqus