如何在Debian 11上使用UFW设置防火墙

介绍

UFW,即Uncomplicated Firewall,是一个简化的防火墙管理界面,隐藏了诸如iptablesnftables等低级数据包过滤技术的复杂性。如果您想开始保护您的网络,但不确定要使用哪个工具,那么UFW可能是您的正确选择。

本教程将向您展示如何在Debian 11上使用UFW设置防火墙。

先决条件

要按照本教程操作,您需要一台安装有sudoroot用户的Debian 11服务器,您可以按照Debian 11初始服务器设置教程中的第1至3步进行设置。

第1步 – 安装UFW

Debian 默认情况下不安装 UFW。如果您已经按照整个初始服务器设置教程进行操作,那么您将已经安装并启用了 UFW。如果没有,请使用 apt 现在安装它:

  1. sudo apt install ufw

接下来,您将按照以下步骤设置并启用 UFW。

第 2 步 — 使用 IPv6(可选)

本教程是针对 IPv4 编写的,但如果启用了 IPv6,它也适用。如果您的 Debian 服务器启用了 IPv6,您将需要确保 UFW 配置为支持 IPv6。这将确保 UFW 管理 IPv6 和 IPv4 的防火墙规则。要配置此项,请使用 nano 或您喜欢的编辑器打开 UFW 配置文件 /etc/default/ufw

  1. sudo nano /etc/default/ufw

在文件中找到 IPV6,并确保其值为 yes

/etc/default/ufw excerpt
IPV6=yes

保存并关闭文件。如果您使用的是 nano,请按 CTRL+X,然后 Y,然后 ENTER 保存并退出文件。

现在,当 UFW 启用时,它将被配置为编写 IPv4 和 IPv6 防火墙规则。然而,在启用 UFW 之前,您需要确保防火墙已配置允许您通过 SSH 连接。从设置默认策略开始。

第3步 — 设置默认策略

如果您刚开始使用防火墙,首先要定义的规则是默认策略。这些规则处理不明确匹配任何其他规则的流量。默认情况下,UFW 设置为拒绝所有传入连接并允许所有传出连接。这意味着任何试图连接到您的服务器的人都无法连接,而服务器内的任何应用程序都可以访问外部世界。

将您的 UFW 规则设置回默认值,以确保您能够按照本教程操作。要设置 UFW 使用的默认值,请使用以下命令:

  1. sudo ufw default deny incoming
  2. sudo ufw default allow outgoing

您将收到如下输出:

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

这些命令将默认设置为拒绝传入连接并允许传出连接。这些防火墙默认值可能足以满足个人计算机的需求,但服务器通常需要响应来自外部用户的传入请求。您将在下一步中开始这个过程。

第4步 — 允许 SSH 连接

您目前还不能启用UFW防火墙,因为这将拒绝所有传入连接,包括您访问服务器的尝试。这意味着您需要创建明确允许合法传入连接的规则,例如 SSH 或 HTTP 连接,如果您希望服务器响应这些类型的请求。如果您正在使用云服务器,您可能希望允许传入的 SSH 连接,以便您可以连接到并管理服务器。

要配置服务器以允许传入的 SSH 连接,请使用以下命令:

  1. sudo ufw allow ssh

这将创建防火墙规则,允许默认情况下 SSH 守护程序监听的端口 22 上的所有连接。UFW 知道端口与 allow ssh 相关联,因为它在 /etc/services 文件中列为服务。

但是,您实际上可以通过指定端口而不是服务名称来编写等效规则。例如,此命令会产生与上述命令相同的结果:

  1. sudo ufw allow 22

如果您配置了 SSH 守护程序使用不同的端口,则必须指定相应的端口。例如,如果您的 SSH 服务器正在侦听端口 2222,则可以使用相同的命令,但将 22 替换为 2222

现在,您的防火墙已配置为允许传入的 SSH 连接,您可以启用它。

步骤 5 — 启用 UFW

要启用 UFW,请使用此命令:

  1. sudo ufw enable

您将收到一个警告,指出该命令可能会中断现有的SSH连接。您已经设置了一个允许SSH连接的防火墙规则,所以继续执行应该是没问题的。请用y回复提示,然后按ENTER

防火墙现在已经启用。要查看您设置的规则,请运行以下命令:

  1. sudo ufw status verbose

本教程的其余部分将详细介绍如何使用UFW,包括允许和拒绝不同类型的连接。

第6步 — 允许其他连接

此时,您应该允许服务器需要正常运行的所有其他连接。您应该允许的连接取决于您的具体需求。您已经知道如何编写基于服务名称或端口的允许连接的规则;您已经为端口22上的SSH做过这个操作。

您可以为HTTP(使用端口80)执行此操作,这是未加密的Web服务器使用的端口。要允许此类型的流量,您应该键入:

  1. sudo ufw allow http

您也可以为HTTPS(使用端口443)执行此操作,这是加密的Web服务器使用的端口。要允许此类型的流量,您应该键入:

  1. sudo ufw allow https

在这两种情况下,指定端口也将起作用,HTTP为80,HTTPS为443。例如:

  1. sudo ufw allow 80

除了指定端口或已知服务之外,还有其他允许连接的方法,这将在下一节讨论。

特定端口范围

您可以使用 UFW 指定端口范围。例如,一些应用程序使用多个端口而不是单个端口。

例如,要允许使用端口 60006007X11 连接,请使用以下命令:

  1. sudo ufw allow 6000:6007/tcp
  2. sudo ufw allow 6000:6007/udp

在使用 UFW 指定端口范围时,必须指定规则应适用的协议(tcpudp)。之前没有提到这一点,因为不指定协议会自动允许两种协议,这在大多数情况下都可以。

特定 IP 地址

在使用 UFW 时,您还可以指定 IP 地址。例如,如果要允许从特定 IP 地址连接,例如工作或家庭 IP 地址 203.0.113.4,您需要指定 from 然后是 IP 地址:

  1. sudo ufw allow from 203.0.113.4

您还可以通过添加 to any port 后跟端口号来指定 IP 地址允许连接的特定端口。例如,如果要允许 203.0.113.4 连接到端口 22(SSH),请使用此命令:

  1. sudo ufw allow from 203.0.113.4 to any port 22

子网

如果你想允许一组IP地址的子网,请使用CIDR表示法来指定子网掩码。例如,如果你想允许从203.0.113.1203.0.113.254范围内的所有IP地址,你可以使用以下命令:

  1. sudo ufw allow from 203.0.113.0/24

同样,你也可以指定子网203.0.113.0/24可以连接到的目标端口。再次以端口22(SSH)为例:

  1. sudo ufw allow from 203.0.113.0/24 to any port 22

连接到特定网络接口

如果你想创建一个只适用于特定网络接口的防火墙规则,你可以通过指定allow in on,后跟网络接口的名称来实现。

在继续之前查看你的网络接口会很有帮助。要这样做,请使用以下命令:

  1. ip addr
Output
. . . 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state . . . 3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default . . .

突出显示的输出指示了网络接口名称。它们通常具有像eth0enp3s2这样的名称。

例如,如果你的服务器有一个名为eth0的公共网络接口,你可以使用以下命令允许HTTP流量:

  1. sudo ufw allow in on eth0 to any port 80

这样做将允许你的服务器从公共互联网接收HTTP请求。

或者,如果你想要一个 MySQL 数据库服务器(端口3306)监听私有网络接口eth1上的连接,你可以使用这个命令:

  1. sudo ufw allow in on eth1 to any port 3306

这将允许私有网络上的其他服务器连接到你的 MySQL 数据库。

第 7 步 — 拒绝连接

如果你没有更改传入连接的默认策略,UFW 被配置为拒绝所有传入连接。通常,这简化了通过要求你显式地创建规则来允许特定端口和 IP 地址的安全防火墙策略的过程。

有时,你会想要基于源 IP 地址或子网来拒绝特定的连接,可能是因为你知道你的服务器正在受到攻击。另外,如果你想要更改你的默认传入策略为允许(这是不推荐的),你需要为任何你不想允许连接的服务或 IP 地址创建拒绝规则。

要编写拒绝规则,你可以使用上面描述的命令,将允许替换为拒绝

例如,要拒绝 HTTP 连接,你可以使用这个命令:

  1. sudo ufw deny http

或者,如果你想要拒绝来自203.0.113.4的所有连接,你可以使用这个命令:

  1. sudo ufw deny from 203.0.113.4

现在,你可以学习如何实现删除规则。

步骤 8 — 删除规则

知道如何删除防火墙规则与知道如何创建它们一样重要。有两种方法可以指定要删除的规则:按规则编号或按规则本身。这与创建规则时指定规则的方式类似。

按规则编号

如果您要使用规则编号来删除防火墙规则,首先要做的是获取防火墙规则列表。UFW status 命令有 numbered 选项,可以在每个规则旁边显示编号:

  1. sudo ufw status numbered
Output
Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN 15.15.15.0/24 [ 2] 80 ALLOW IN Anywhere

如果您决定要删除允许在端口 80 上进行 HTTP 连接的规则 2,您可以在以下 UFW delete 命令中指定:

  1. sudo ufw delete 2

这将显示一个确认提示,您可以用 y/n 回答。键入 y 将删除规则 2。请注意,如果您启用了 IPv6,则还要删除相应的 IPv6 规则。

按实际规则

替代规则编号的方法是指定要删除的实际规则。例如,如果要删除 allow http 规则,可以这样写:

  1. sudo ufw delete allow http

你也可以使用 allow 80 来指定规则,而不是服务名称:

  1. sudo ufw delete allow 80

如果存在,此方法将删除 IPv4 和 IPv6 规则。

第 9 步 — 检查 UFW 的状态和规则

随时可以使用以下命令检查 UFW 的状态:

  1. sudo ufw status verbose

如果 UFW 被禁用(这是默认设置),输出将是这样:

Output
Status: inactive

如果 UFW 处于活动状态,这应该是你遵循第 3 步后的情况,输出将显示它处于活动状态,并列出您设置的任何规则。例如,如果防火墙设置为允许来自任何地方的 SSH(端口 22)连接,则输出可能包含类似于以下内容:

Output
Status: active To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere

如果想要检查 UFW 如何配置防火墙,请使用 status 命令。

第 10 步 — 禁用或重置 UFW(可选)

如果决定不使用 UFW,则可以使用以下命令禁用它:

  1. sudo ufw disable

任何您使用UFW创建的规则将不再生效。如果您需要以后激活它,您可以随时运行sudo ufw enable

如果您已经配置了UFW规则,但决定重新开始,您可以使用重置命令:

  1. sudo ufw reset

这将禁用UFW并删除您之前定义的任何规则。请注意,如果您曾经修改过默认策略,则默认策略不会更改为原始设置。这将为您提供一个全新的UFW起点。

结论

您的防火墙现已配置为允许(至少)SSH连接。确保允许服务器需要的任何其他传入连接,同时限制不必要的连接。这将确保您的服务器既功能齐备又安全。

要了解更多常见的UFW配置,请查看这篇关于UFW基础知识:常见防火墙规则和命令的教程。

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-debian