介绍
建立一个功能正常的防火墙对于保护您的云服务器至关重要。以前,设置防火墙是通过复杂或晦涩的实用程序完成的。其中许多实用程序(例如iptables
)具有许多内置功能,但确实需要用户额外的努力来学习和理解它们。
另一个选择是UFW,或简化防火墙。UFW是iptables
的前端,旨在提供比其他防火墙管理实用程序更用户友好的界面。UFW在Linux社区中得到了很好的支持,并且通常在许多发行版上默认安装。
在本教程中,您将使用UFW设置防火墙,以保护Ubuntu或Debian云服务器。您还将学习如何设置UFW默认规则以允许或拒绝端口和IP地址的连接,删除您创建的规则,禁用和启用UFW,并将所有内容重置回默认设置(如果您愿意的话)。
先决条件
要按照此教程操作,您需要运行 Ubuntu 或 Debian 的服务器。您的服务器应具有一个具有 sudo 权限的非 root 用户。要为 Ubuntu 设置此项,请参考我们的《使用 Ubuntu 20.04 进行初始服务器设置》指南。要为 Debian 设置此项,请参考我们的《使用 Debian 11 进行初始服务器设置》指南。这两个初始服务器设置指南都将确保您的计算机上安装了 UFW,并且您有一个安全的环境可用于练习创建防火墙规则。
使用 UFW 进行 IPv6
如果您的虚拟专用服务器(VPS)配置了 IPv6,请确保 UFW 配置为支持 IPv6,以便配置 IPv4 和 IPv6 防火墙规则。要执行此操作,请使用您喜欢的文本编辑器打开 UFW 配置文件。在这里,我们将使用 nano
:
确认 IPV6
设置为 yes
:
/etc/default/ufw# /etc/default/ufw
#
# 设置为 yes 以应用支持 IPv6 的规则(no 表示只有 IPv6 在环回接口
# 上被接受)。您需要 'disable' 然后 'enable' 防火墙才能
# 生效。
IPV6=yes
…
完成更改后,请保存并退出文件。如果您使用的是 nano
,请按 CTRL + X
,然后按 Y
,最后按 ENTER
。
现在重新启动防火墙,首先禁用它:
OutputFirewall stopped and disabled on system startup
然后再启用它:
OutputFirewall is active and enabled on system startup
您的 UFW 防火墙现在已设置为在适当时配置防火墙以用于 IPv4 和 IPv6。接下来,您将调整防火墙连接的默认规则。
设置 UFW 默认值
您可以通过定义允许和拒绝连接的默认规则来提高防火墙的效率。UFW 的默认规则是拒绝所有传入连接并允许所有传出连接。这意味着任何试图访问您的服务器的人都无法连接,而服务器内的任何应用程序都可以在外部连接。要更新 UFW 设置的默认规则,请首先处理传入连接规则:
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)
接下来,处理传出连接规则:
OutputDefault outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
注意:如果您想要更加严格,您可以拒绝所有传出请求。这个选项基于个人偏好。例如,如果您有一个面向公众的云服务器,这可以帮助防止任何形式的远程 shell 连接。不过,这会使您的防火墙更加繁琐,因为您将不得不为所有传出连接设置规则。您可以使用以下命令将此设置为默认值:
允许连接到防火墙
允许连接需要更改防火墙规则,您可以通过在终端中发出命令来完成。例如,如果您现在打开了防火墙,它会拒绝所有传入连接。如果您通过SSH连接到服务器,这将是一个问题,因为您将被锁在服务器外。通过启用SSH连接到服务器来防止这种情况发生:
如果您的更改成功,您将收到以下输出:
OutputRule added
Rule added (v6)
UFW带有一些默认设置,例如在前面的示例中使用的ssh
命令。或者,您可以允许传入连接到端口22/tcp
,该端口使用传输控制协议(TCP)来完成相同的操作:
但是,如果您在运行allow ssh
之后尝试此操作,您将收到以下消息,因为规则已经存在:
OutputSkipping adding existing rule
Skipping adding existing rule (v6)
如果您的SSH服务器运行在端口2222
上,您可以使用相同的语法允许连接,但是将其替换为端口2222
。请注意,如果您仅使用端口号,它也会影响tcp
和udp
:
OutputRule added
Rule added (v6)
保护 Web 服务器
要使用文件传输协议(FTP)访问安全 Web 服务器,您需要允许端口 80/tcp
的连接。
允许端口 80
的连接对于监听 HTTP 连接请求的 Web 服务器(如 Apache 和 Nginx)非常有用。要做到这一点,请允许连接到端口 80/tcp
:
通常,UFW 提供了所需规则的 Web 服务器配置文件。如果没有,Web 服务器配置文件可能存储为“WWW”,并且打开为 ftp
或 tcp
,如以下示例所示:
您还可以使用 ftp
或端口 21
允许 FTP 连接:
对于 FTP 连接,您还需要允许端口 20
的连接:
您的调整将取决于您需要打开的端口和服务,并且可能需要进行测试。请记得保留您的 SSH 连接允许。
指定端口范围
您还可以使用 UFW 指定端口范围来允许或拒绝连接。要执行此操作,您首先必须指定范围低端的端口,然后跟随一个冒号 (:
),接着是范围的高端。最后,您必须指定规则适用的协议(tcp
或 udp
)
。例如,以下命令将允许从 1000
到 2000
(包括边界)的每个端口的 TCP 访问:
。同样,以下命令将拒绝从 1234
到 4321
的每个端口的 UDP 连接:
指定 IP 地址
您可以允许来自特定 IP 地址的连接,如以下示例所示。请确保用您自己的信息替换 IP 地址:
正如这些示例所示,调整防火墙规则时,您有很大的灵活性,可以通过有选择地允许某些端口和 IP 地址连接来实现。查看我们的指南,了解更多关于从 特定 IP 地址或子网 允许传入连接的信息。
拒绝连接
如果你想打开服务器的所有端口 — 这是不推荐的 — 你可以允许所有连接,然后拒绝你不想给予访问的端口。以下是如何拒绝对端口 80
的访问的示例:
删除规则
如果你想删除一些已经管理的规则,使用 delete
并指定你想删除的规则:
OutputRule deleted
Rule deleted (v6)
如果规则很长且复杂,还有一种备选的两步方法。首先,生成当前规则的编号列表:
然后,通过这个编号列表,查看当前允许的规则并通过引用其编号来删除规则:
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
:
OutputDeleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted (v6)
启用 UFW
一旦你定义了要应用于防火墙的所有规则,你可以启用 UFW 以开始执行它们。如果你通过 SSH 连接,请确保设置你的 SSH 端口,通常为端口 22
,以允许接收连接。否则,你可能会被锁定在服务器外:
OutputFirewall is active and enabled on system startup
要确认您的更改已生效,请检查状态以查看规则列表:
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
获取更全面的输出:
要禁用 UFW,请运行以下命令:
OutputFirewall stopped and disabled on system startup
重置默认设置
如果出于某种原因,您需要将云服务器的规则重置为默认设置,可以使用 ufw reset
命令执行此操作。请注意,在重置所有内容之前,您将收到提示以写入 y
或 n
,因为这样做可能会中断现有的 SSH 连接:
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基础知识:常见防火墙规则和命令。