如何在Linux上设置UFW防火墙

没有防火墙,网络流量就没有规则或限制,这会导致许多负面后果。Linux系统附带了一个默认的防火墙配置工具,即Uncomplicated Firewall(UFW)。但是如何设置UFW防火墙呢?坐下来放松,这个教程为您提供了详细的指导!

在本教程中,您将学到如何配置UFW并在Linux系统上设置防火墙,以保护您的网络并抵御恶意行为。

准备好了吗?继续阅读以开始!

先决条件

本教程将进行实际演示。如果您想跟着做,请确保您具备以下条件:

  • 一台Ubuntu机器 – 本教程使用Ubuntu 20.04 LTS,但其他Linux发行版也适用。

安装UFW并启用IPv6连接

尽管UFW已经打包到您的Ubuntu系统中,但默认情况下并未安装UFW。首先使用apt软件包管理器安装UFW,并配置它以允许通过IPv6进行连接。

1. 打开您的终端并运行下面的apt update命令来更新您的本地软件包索引。在更新期间,该命令接受所有提示(-y)以减少用户干预。

sudo apt update -y
Updating the System Package

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

sudo apt install ufw -y
Installing UFW on Ubuntu

3. 使用您喜欢的文本编辑器打开 UFW 配置文件(/etc/default/ufw)。UFW 支持 IPv6,但您需要确保防火墙已配置为接受 IPv6 连接。

如果您只启用了 IPv4,您仍然容易受到 IPv6 攻击。

4. 滚动到IPV6变量并将值设置为yes,如下所示,然后保存更改并退出编辑器。

Enabling IPV6 in the UFW Configuration File

5. 最后,运行下面的命令来禁用并重新启用 UFW。该命令重新启动 UFW 服务,以便更改生效。

命令完成后,您的防火墙现在可以编写 IPv4 和 IPv6 防火墙规则集。

sudo ufw disable && sudo ufw enable

配置防火墙规则的默认策略

如果您刚开始使用 UFW,建议为您的规则设置默认策略。默认策略适用于尚未定义任何特定规则的链。

设置 UFW 来拒绝所有传入连接并允许所有传出连接。因此,任何试图从外部世界访问您的计算机的人都将被拒绝,而您仍然可以自由连接到任何网站或服务器。

运行以下ufw命令将所有传入连接默认设置为拒绝

sudo ufw default deny incoming
Denying Incoming Network Traffics

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

sudo ufw default allow outgoing
Allowing Outgoing Network Traffics

在UFW防火墙上允许SSH连接

您刚刚在UFW防火墙上设置了默认策略,以拒绝所有传入流量,“允许所有-拒绝所有”规则对于普通用户是一个不错的设置。但是,如果您正在运行服务器呢?您需要允许特定的流量进出。在UFW防火墙上允许SSH连接将解决允许特定流量进出的问题。

您将设置一个允许在端口22上进行传入SSH连接的SSH服务器。但是为什么是端口22而不是其他端口?在类Unix系统中,SSH守护程序默认监听端口22,因此使用默认的SSH端口可以让您的生活变得更轻松一些。

1. 运行以下命令在您的系统上安装OpenSSH服务器(install openssh-server)并启动一个OpenSSH服务器(start ssh)。

sudo apt install openssh-server -y
sudo systemctl start ssh

2. 现在运行以下命令以允许传入的SSH连接。不需要指定端口22,因为UFW知道SSH的端口是什么。

sudo ufw allow ssh
Allowing SSH connection

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

Previewing the /etc/services file

但也许您更喜欢指定端口号(22)以允许SSH。如果是这样,请运行以下命令。

sudo ufw allow 22

3. 现在运行以下命令以启用UFW。

sudo ufw enable

在确认提示中键入Y,如下所示,并按Enter继续运行该命令。UFW现在将开始在您的系统上过滤数据包。

Enabling UFW

4. 最后,运行以下命令之一以检查UFW防火墙的状态。

## 显示更详细的信息,如接口和
## 包的当前进度
sudo ufw status verbose
## 显示每个规则及其相应的允许或拒绝状态
## 编号模式在尝试逐个删除规则集时非常有用
sudo ufw status numbered

如果您使用verbose选项运行命令,您将看到类似以下的输出:

  • 状态:活动 – 表示防火墙当前正在运行。
  • 日志记录:开启(低) – 表示UFW正在记录防火墙处理的所有数据包。
  • 默认:拒绝(传入),允许(传出),禁用(路由) – 表示默认策略是拒绝所有传入连接并允许所有传出连接。
  • 新配置文件:跳过 – 表示防火墙当前正在使用默认的规则集。
Checking verbose UFW firewall status

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

Viewing the UW Firewall status in a numbered list

允许HTTP和HTTPS连接

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

运行以下任一命令以允许传入的HTTP连接。

## HTTP连接使用端口80(不安全)
sudo ufw allow 80
sudo ufw allow http
Allowing HTTP connections

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

sudo ufw allow https
## HTTP连接使用端口443(安全)
sudo ufw allow 443
Allowing incoming HTTPS connections.

允许来自特定端口范围和IP地址的连接

某些应用程序使用多个端口来提供其服务。也许您有一系列要打开的端口,或者您需要允许来自特定IP地址的连接。在这种情况下,请添加更多的UFW防火墙规则。

运行以下命令以允许端口5001到5009的入站连接。您应该始终在规则适用的端口范围后指定协议(tcpudp),因为并非所有端口都被两种协议使用。

例如,常用的TCP端口包括80(HTTP)和443(HTTPS)。但常用的UDP端口包括53(DNS)和67/68(DHCP)。

sudo ufw allow 5001:5010/tcp
sudo ufw allow 5001:5010/udp
Allowing traffic on 5001:5010 port range

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

sudo ufw allow from 192.168.1.2 to any port 22
Allowing SSH Connections from Specific IP Address

允许来自特定网络接口的流量

UFW还允许您仅允许特定网络接口上的流量,比如eth0是第一个以太网接口,wlan0是第一个Wi-Fi接口。

运行以下命令中的任意一个以仅允许eth0wlan0接口上的HTTP连接。

## 仅允许eth0接口上的HTTP连接
sudo ufw allow in on eth0 to any port 80
## 仅允许wlan0接口上的HTTP连接
sudo ufw allow in on wlan0 to any port 80
Allowing traffic on a specific interface

删除UFW防火墙规则

也许有些 UFW 防火墙规则已经不再起作用了。在这种情况下,您可能希望从 UFW 中删除一些规则。但首先,您必须知道要删除的规则的编号或名称。

1. 运行下面的命令以获取添加到 UFW 的规则的编号列表。

sudo ufw status numbered

注意输出中的规则编号或名称,例如下面的内容。

Previewing all the rules

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

sudo ufw delete 4
Deleting a Rule by Rule Number

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

sudo ufw delete allow http
Deleting a Rule by Rule Name (http)

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

sudo ufw delete allow 443
Deleting a Rule by Port Number (443)

5. 最后,像在第一步中一样重新运行以下命令以列出所有规则。

sudo ufw status numbered

如下所示,5001:5010/tcp端口范围、http443端口的规则现在已经消失。

Checking the firewall rules

重置 UFW 防火墙

有时您可能需要将 UFW 重置为其默认设置,例如在配置了一大堆规则之后。更新可能会更改您的配置,需要您重新配置 UFW,并可能从头开始。

运行下面的ufw reset命令以将所有防火墙规则重置为默认设置。此命令禁用 UFW 并删除所有当前的防火墙规则。

sudo ufw reset

输入“Y”并按Enter键继续重置您的UFW防火墙。

Resetting UFW

重置完成后,您将拥有一个全新的UFW安装,完全禁用,并且您的默认策略也消失了。

现在运行以下命令重新启用UFW,并开始从头开始配置防火墙规则。

sudo ufw enable

如果您决定不再使用UFW,则无需重新启用它。或者运行以下命令确保UFW已禁用。

sudo ufw disable
Disabling UFW firewall

结论

在本教程中,您已经意识到使用UFW设置防火墙并不是一件太困难的事情。您现在应该对如何在Ubuntu上使用UFW设置和实施自己的规则有了很好的理解。

现在,为什么不在这个新获得的知识基础上学习更多关于在Linux机器上UFW和Docker安全性的知识呢?

Source:
https://adamtheautomator.com/ufw-firewall/