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

介绍

建立一个功能正常的防火墙对于保护您的云服务器至关重要。以前,设置防火墙是通过复杂或晦涩的实用程序完成的。其中许多实用程序(例如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

  1. sudo nano /etc/default/ufw

确认 IPV6 设置为 yes

/etc/default/ufw
# /etc/default/ufw # # 设置为 yes 以应用支持 IPv6 的规则(no 表示只有 IPv6 在环回接口 # 上被接受)。您需要 'disable' 然后 'enable' 防火墙才能 # 生效。 IPV6=yes

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

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

  1. sudo ufw disable
Output
Firewall stopped and disabled on system startup

然后再启用它:

  1. sudo ufw enable
Output
Firewall is active and enabled on system startup

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

设置 UFW 默认值

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

  1. sudo ufw default deny incoming
Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly)

接下来,处理传出连接规则:

  1. sudo ufw default allow outgoing
Output
Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)

注意:如果您想要更加严格,您可以拒绝所有传出请求。这个选项基于个人偏好。例如,如果您有一个面向公众的云服务器,这可以帮助防止任何形式的远程 shell 连接。不过,这会使您的防火墙更加繁琐,因为您将不得不为所有传出连接设置规则。您可以使用以下命令将此设置为默认值:

  1. sudo ufw default deny outgoing

允许连接到防火墙

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

  1. sudo ufw allow ssh

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

Output
Rule added Rule added (v6)

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

  1. sudo ufw allow 22/tcp

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

Output
Skipping adding existing rule Skipping adding existing rule (v6)

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

  1. sudo ufw allow 2222/tcp
Output
Rule added Rule added (v6)

保护 Web 服务器

要使用文件传输协议(FTP)访问安全 Web 服务器,您需要允许端口 80/tcp 的连接。

允许端口 80 的连接对于监听 HTTP 连接请求的 Web 服务器(如 Apache 和 Nginx)非常有用。要做到这一点,请允许连接到端口 80/tcp

  1. sudo ufw allow 80/tcp

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

  1. sudo ufw allow www

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

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

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

  1. sudo ufw allow 20/tcp

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

指定端口范围

您还可以使用 UFW 指定端口范围来允许或拒绝连接。要执行此操作,您首先必须指定范围低端的端口,然后跟随一个冒号 (:),接着是范围的高端。最后,您必须指定规则适用的协议(tcpudp

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

  1. sudo ufw allow 1000:2000/tcp

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

  1. sudo ufw deny 1234:4321/udp

指定 IP 地址

您可以允许来自特定 IP 地址的连接,如以下示例所示。请确保用您自己的信息替换 IP 地址:

  1. sudo ufw allow from your_server_ip

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

拒绝连接

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

  1. sudo ufw deny 80/tcp

删除规则

如果你想删除一些已经管理的规则,使用 delete 并指定你想删除的规则:

  1. sudo ufw delete allow 80/tcp
Output
Rule deleted Rule deleted (v6)

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

  1. sudo ufw status numbered

然后,通过这个编号列表,查看当前允许的规则并通过引用其编号来删除规则:

  1. sudo ufw delete number
Output
Status: 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

  1. sudo ufw delete 4
Output
Deleting: allow 80 Proceed with operation (y|n)? y Rule deleted (v6)

启用 UFW

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

  1. sudo ufw enable
Output
Firewall is active and enabled on system startup

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

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 22/tcp ALLOW Anywhere 2222/tcp ALLOW Anywhere 20/tcp ALLOW Anywhere 80/tcp DENY Anywhere …

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

  1. sudo ufw status verbose

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

  1. sudo ufw disable
Output
Firewall stopped and disabled on system startup

重置默认设置

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

  1. sudo ufw reset
Output
Resetting 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基础知识:常见防火墙规则和命令

Source:
https://www.digitalocean.com/community/tutorials/how-to-setup-a-firewall-with-ufw-on-an-ubuntu-and-debian-cloud-server