没有防火墙,网络流量就没有规则或限制,这会导致许多负面后果。Linux系统附带了一个默认的防火墙配置工具,即Uncomplicated Firewall(UFW)。但是如何设置UFW防火墙呢?坐下来放松,这个教程为您提供了详细的指导!
在本教程中,您将学到如何配置UFW并在Linux系统上设置防火墙,以保护您的网络并抵御恶意行为。
准备好了吗?继续阅读以开始!
先决条件
本教程将进行实际演示。如果您想跟着做,请确保您具备以下条件:
- 一台Ubuntu机器 – 本教程使用Ubuntu 20.04 LTS,但其他Linux发行版也适用。
- 对您的机器进行root权限。
安装UFW并启用IPv6连接
尽管UFW已经打包到您的Ubuntu系统中,但默认情况下并未安装UFW。首先使用apt
软件包管理器安装UFW,并配置它以允许通过IPv6进行连接。
1. 打开您的终端并运行下面的apt update
命令来更新您的本地软件包索引。在更新期间,该命令接受所有提示(-y
)以减少用户干预。

2. 接下来,在安装期间接受所有提示(-y
)的情况下,运行下面的命令来安装 UFW(install uwf
)到您的系统中。

3. 使用您喜欢的文本编辑器打开 UFW 配置文件(/etc/default/ufw)。UFW 支持 IPv6,但您需要确保防火墙已配置为接受 IPv6 连接。
如果您只启用了 IPv4,您仍然容易受到 IPv6 攻击。
4. 滚动到IPV6变量并将值设置为yes,如下所示,然后保存更改并退出编辑器。

5. 最后,运行下面的命令来禁用并重新启用 UFW。该命令重新启动 UFW 服务,以便更改生效。
命令完成后,您的防火墙现在可以编写 IPv4 和 IPv6 防火墙规则集。
配置防火墙规则的默认策略
如果您刚开始使用 UFW,建议为您的规则设置默认策略。默认策略适用于尚未定义任何特定规则的链。
设置 UFW 来拒绝所有传入连接并允许所有传出连接。因此,任何试图从外部世界访问您的计算机的人都将被拒绝,而您仍然可以自由连接到任何网站或服务器。
运行以下ufw
命令将所有传入
连接默认
设置为拒绝
。

现在运行以下命令将默认
设置为允许
所有传出
连接。

在UFW防火墙上允许SSH连接
您刚刚在UFW防火墙上设置了默认策略,以拒绝所有传入流量,“允许所有-拒绝所有”规则对于普通用户是一个不错的设置。但是,如果您正在运行服务器呢?您需要允许特定的流量进出。在UFW防火墙上允许SSH连接将解决允许特定流量进出的问题。
您将设置一个允许在端口22上进行传入SSH连接的SSH服务器。但是为什么是端口22而不是其他端口?在类Unix系统中,SSH守护程序默认监听端口22,因此使用默认的SSH端口可以让您的生活变得更轻松一些。
1. 运行以下命令在您的系统上安装OpenSSH服务器(install openssh-server
)并启动一个OpenSSH服务器(start ssh
)。
2. 现在运行以下命令以允许传入的SSH连接。不需要指定端口22,因为UFW知道SSH的端口是什么。

/etc/services文件包含系统上所有可用服务的列表。在文本编辑器中打开该文件,滚动到ssh并查看端口号(22)是否作为服务描述的一部分,如下所示。

但也许您更喜欢指定端口号(22
)以允许SSH。如果是这样,请运行以下命令。
3. 现在运行以下命令以启用UFW。
在确认提示中键入Y,如下所示,并按Enter继续运行该命令。UFW现在将开始在您的系统上过滤数据包。

4. 最后,运行以下命令之一以检查UFW防火墙的状态。
如果您使用verbose
选项运行命令,您将看到类似以下的输出:
- 状态:活动 – 表示防火墙当前正在运行。
- 日志记录:开启(低) – 表示UFW正在记录防火墙处理的所有数据包。
- 默认:拒绝(传入),允许(传出),禁用(路由) – 表示默认策略是拒绝所有传入连接并允许所有传出连接。
- 新配置文件:跳过 – 表示防火墙当前正在使用默认的规则集。

如果您使用numbered
选项运行该命令,您将看到下面的输出。您可以看到带编号的规则列表及其相应的允许或拒绝状态。

允许HTTP和HTTPS连接
到目前为止,您只允许了UFW防火墙上的SSH连接,但这限制了服务器的功能。允许其他类型的连接,例如HTTP或HTTPS,并向UFW防火墙添加更多规则。
运行以下任一命令以允许传入的HTTP连接。

现在,运行以下任一命令以允许传入的HTTPS连接。

允许来自特定端口范围和IP地址的连接
某些应用程序使用多个端口来提供其服务。也许您有一系列要打开的端口,或者您需要允许来自特定IP地址的连接。在这种情况下,请添加更多的UFW防火墙规则。
运行以下命令以允许端口5001到5009的入站连接。您应该始终在规则适用的端口范围后指定协议(tcp
或udp
),因为并非所有端口都被两种协议使用。
例如,常用的TCP端口包括80(HTTP)和443(HTTPS)。但常用的UDP端口包括53(DNS)和67/68(DHCP)。

如果您更喜欢允许来自特定IP地址的SSH连接,请改用以下命令。该命令仅允许来自192.168.1.2
IP地址的SSH连接(端口22
)。

允许来自特定网络接口的流量
UFW还允许您仅允许特定网络接口上的流量,比如eth0是第一个以太网接口,wlan0是第一个Wi-Fi接口。
运行以下命令中的任意一个以仅允许eth0
和wlan0
接口上的HTTP连接。

删除UFW防火墙规则
也许有些 UFW 防火墙规则已经不再起作用了。在这种情况下,您可能希望从 UFW 中删除一些规则。但首先,您必须知道要删除的规则的编号或名称。
1. 运行下面的命令以获取添加到 UFW 的规则的编号列表。
注意输出中的规则编号或名称,例如下面的内容。

2. 接下来,运行以下命令以删除规则编号为4
的规则,该规则是5001:5010/tcp
端口范围。

3. 运行下面的命令以按实际名称和allow
状态删除规则。在此示例中,您将通过运行以下命令删除http
规则。

4. 现在运行以下命令以通过指定端口号(443
)和allow
状态删除规则。

5. 最后,像在第一步中一样重新运行以下命令以列出所有规则。
如下所示,5001:5010/tcp
端口范围、http
和443
端口的规则现在已经消失。

重置 UFW 防火墙
有时您可能需要将 UFW 重置为其默认设置,例如在配置了一大堆规则之后。更新可能会更改您的配置,需要您重新配置 UFW,并可能从头开始。
运行下面的ufw reset
命令以将所有防火墙规则重置为默认设置。此命令禁用 UFW 并删除所有当前的防火墙规则。
输入“Y”并按Enter键继续重置您的UFW防火墙。

重置完成后,您将拥有一个全新的UFW安装,完全禁用,并且您的默认策略也消失了。
现在运行以下命令重新启用UFW,并开始从头开始配置防火墙规则。
如果您决定不再使用UFW,则无需重新启用它。或者运行以下命令确保UFW已禁用。

结论
在本教程中,您已经意识到使用UFW设置防火墙并不是一件太困难的事情。您现在应该对如何在Ubuntu上使用UFW设置和实施自己的规则有了很好的理解。
现在,为什么不在这个新获得的知识基础上学习更多关于在Linux机器上UFW和Docker安全性的知识呢?