介绍
设置一个功能齐全的防火墙对于保护云服务器至关重要。以前,设置防火墙是通过复杂或荒谬的实用程序完成的。这些实用程序(例如,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
并作为ftp
或tcp
打开,如下列示例所示:
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访问从1000
到2000
的每个端口,包括:
1sudo ufw allow 1000:2000/tcp
同样,下列命令将拒绝UDP连接到从1234
到4321
的每个端口:
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
命令这样做。请注意,在重置一切之前,您将收到一个提示,请键入y
或n
,因为这样做可能会扰乱现有的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防火墙来确认这些更改。