配置 UFW 防火墙

LinuxBeginner
立即练习

简介

把计算机想象成一栋房子。默认情况下,房子的门窗可能都是敞开的,任何人都可以进入。为了保护它,你需要一名按照规则控制访问权限的保安。

在 Linux 中,UFW(Uncomplicated Firewall)就像这名保安。它在底层防火墙系统之上提供了更简单的操作接口。通过 UFW,你可以定义哪些对象能够连接到系统,哪些对象不能连接。

这一点很重要:UFW 是管理层,而不是防火墙引擎本身。它为初学者提供了更简单的策略接口,用于控制网络访问,而不必直接编写底层数据包过滤规则。

不过,在 LabEx 这样的云环境中配置防火墙时必须谨慎。如果默认阻止所有传入连接(这是一种常见的安全做法),可能会意外断开你与实验环境的连接。

在本实验中,你将采用一种安全的方法:

  1. 将默认策略设置为允许传入连接,避免自己被锁定在系统之外。
  2. 明确允许 Web 应用使用 8080 端口传输流量。
  3. 启用防火墙。

这样,你就可以学习如何管理 UFW 规则,同时不会失去对工作区的访问权限。

检查防火墙状态

在进行任何更改之前,先了解应用和防火墙的当前状态非常重要。

当前有一个运行在 8080 端口上的简单 Web 服务器。首先,确认该应用可以访问。

运行以下命令:

curl -I 127.0.0.1:8080

你应该会看到类似下面的 HTTP 响应:

HTTP/1.0 200 OK
Server: SimpleHTTP/0.6 Python/3.10.6
...

这表示 Web 应用正在运行,并且可以从本机访问。

在更改防火墙之前先检查服务,有助于区分两类不同的问题:应用问题和网络策略问题。如果服务在本机访问时就已经失败,那么首先不应该怀疑防火墙。

接下来,检查 UFW 的状态,确认它当前是否处于活动状态。

sudo ufw status

你很可能会看到:

Status: inactive

这表示 UFW 已安装,但当前没有执行任何规则,所有流量都可以自由通过。

防火墙规则集本质上是一项网络访问策略。「inactive」并不表示软件损坏,而是表示当前没有执行这项策略。

配置默认策略和规则

现在配置防火墙处理流量的方式。

将默认策略设置为允许

UFW 通常默认配置为拒绝所有传入连接。在本地计算机上,这样做很安全。不过,在 LabEx 在线环境中,阻止所有传入连接可能会切断浏览器与实验环境之间的连接。

为避免这种情况,将传入流量的默认策略设置为 ALLOW:

sudo ufw default allow incoming

输出:

Default incoming policy changed to 'allow'
(be sure to update your rules accordingly)

允许 8080 端口

接下来,创建一条专用规则,确保发往 8080 端口上 Web 应用的流量被明确允许。即使默认策略为「allow」,这样做仍是一种良好实践,因为它记录了你的明确意图,也为将来把默认策略切换为「deny」做好准备。

在安全配置中,明确表达意图非常重要。清晰的规则便于之后了解某个端口为何开放,以及继续开放该端口是否仍有必要。

sudo ufw allow 8080

系统将确认:

Rules updated
Rules updated (v6)

现在,我们已经建立了安全的基础配置,并为应用添加了专用规则。

启用防火墙

规则配置完成后,现在启用防火墙。

运行以下命令启用 UFW:

sudo ufw enable

由于我们已将默认策略设置为 ALLOW,UFW 会立即启用,不会警告你 SSH 连接可能中断(默认策略为 deny 时通常会出现此警告)。

你应该会看到:

Firewall is active and enabled on system startup

这实际上就是「打开」了这名保安。

此时,UFW 不再只是保存规则,而是开始执行这些规则。在许多系统中,已配置的策略与正在执行的策略之间的区别都是一个常见的安全概念。

验证防火墙配置

最后,验证防火墙已处于活动状态,并且规则已正确应用。

再次检查状态:

sudo ufw status

现在,你应该会看到状态为 active,以及刚刚创建的规则:

Status: active

To                         Action      From
--                         ------      ----
8080                       ALLOW       Anywhere
8080 (v6)                  ALLOW       Anywhere (v6)

测试连接

在防火墙启用后,确认 Web 应用仍然可以访问。

curl -I 127.0.0.1:8080

你应该会收到与之前相同的 HTTP/1.0 200 OK 响应。

这表示:

  1. 防火墙已处于活动状态。
  2. 规则按预期工作。
  3. 应用仍然可以访问。

总结

在本实验中,你已成功配置并启用 UFW 防火墙。

你学习了如何:

  1. 检查防火墙状态:使用 sudo ufw status 查看防火墙是否处于活动状态。
  2. 配置安全的默认策略:使用 sudo ufw default allow incoming,避免在云环境中意外失去连接。
  3. 添加规则:使用 sudo ufw allow 8080,允许指定端口上的流量。
  4. 启用防火墙:使用 sudo ufw enable 激活这些规则。

在生产环境中,通常会将传入流量的默认策略设置为 deny,然后只明确允许必要的端口,例如用于 SSH 的 22 端口、用于 HTTP 的 80 端口等。不过,了解如何安全地管理这些规则,是保护系统的第一步。