Debian 11防火墙配置终极指南:UFW从入门到精通

UFW入门:Debian 11防火墙配置指南

UFW(Uncomplicated Firewall,无复杂防火墙)是一个简化的防火墙管理接口,它巧妙地隐藏了底层数据包过滤技术(如iptables和nftables)的复杂性。如果您希望开始保护您的网络,但又不确定应选择哪种工具,UFW无疑是您的理想之选。

本教程将详细指导您如何在Debian 11系统上使用UFW设置防火墙。

先决条件

为了顺利完成本教程,您需要一台运行Debian 11的服务器,并拥有一个具备sudo权限的非root用户。您可以参考《Debian 11初始服务器设置教程》中的第1至3步来完成这些设置。

第一步:安装UFW

Debian系统默认情况下并未安装UFW。如果您已经按照完整的初始服务器设置教程进行操作,那么UFW应该已经安装并启用。如果尚未安装,请立即使用apt命令进行安装。

sudo apt install ufw

您将按照以下步骤设置并启用UFW防火墙。

第二步:配置UFW支持IPv6(可选)

本教程主要以IPv4环境为背景编写,但如果您的系统启用了IPv6,本教程同样适用。若您的Debian服务器已启用IPv6,您需要确保UFW也配置为支持IPv6。这将确保UFW除了管理IPv4防火墙规则外,也能管理IPv6规则。要进行此配置,请使用nano或您偏好的文本编辑器打开UFW的配置文件/etc/default/ufw

sudo nano /etc/default/ufw

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

IPV6=yes

保存并关闭文件。如果您使用的是nano,请按下CTRL+X,然后按下Y,再按下回车键以保存并退出。

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

第三步:设置默认策略

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

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

sudo ufw default deny incoming
sudo ufw default allow outgoing

您将看到类似以下的输出:

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)

这些命令将默认设置为拒绝传入连接和允许传出连接。对于个人电脑而言,这些防火墙默认设置可能已经足够了,但服务器通常需要响应来自外部用户的传入请求。您将在下一步中开始此过程。

第四步:允许SSH连接

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

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

sudo ufw allow ssh

这将创建防火墙规则,允许所有连接到端口22,该端口是SSH守护进程默认监听的端口。UFW之所以能够识别并允许SSH连接的端口,是因为在/etc/services文件中将其列为一项服务。

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

sudo ufw allow 22

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

既然您的防火墙已经配置好允许进入的SSH连接,您就可以启用它了。

第五步:启用UFW

要启用UFW,请使用以下命令:

sudo ufw enable

您将收到一条警告,指出该命令可能会中断现有的SSH连接。由于您已经设置了一个允许SSH连接的防火墙规则,您可以继续进行。在提示时输入y并按回车键。

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

sudo ufw status verbose

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

第六步:允许其他连接

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

您可以在端口80上执行此操作,这是未加密的Web服务器所使用的端口。要允许这种类型的流量,您需要输入以下内容:

sudo ufw allow http

您也可以对HTTPS使用443端口进行此操作,这是加密的Web服务器使用的端口。要允许这种类型的流量,您需要输入:

sudo ufw allow https

在这两种情况下,指定端口也可以使用,其中HTTP端口是80,HTTPS端口是443。例如:

sudo ufw allow 80

除了指定端口或已知服务之外,还有其他方法可以允许连接。下面将对此进行讨论。

特定端口范围

在Debian 11上使用UFW配置防火墙:高级规则设置

这是文章《如何在Debian 11上使用UFW配置防火墙》的第2部分(共3部分)。

指定端口范围

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

例如,要允许使用端口6000-6007进行X11连接,请使用以下命令:

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

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

特定IP地址的规则

在使用UFW时,您还可以指定IP地址。例如,如果您想允许来自特定IP地址的连接,比如工作或家庭的IP地址203.0.113.4,您需要指定“from”和该IP地址。

  1. sudo ufw allow from 203.0.113.4

您还可以通过在任何端口后面添加端口号来指定允许连接的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

与特定网络接口的连接

如果您想创建一个仅适用于特定网络接口的防火墙规则,可以通过在“允许”后面指定“in on”加上网络接口的名称来实现。

在继续之前,查看您的网络接口会很有帮助。要做到这一点,请使用下面的命令。

  1. ip addr

输出示例:

. . . 
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数据库。

第七步 – 拒绝连接

如果您没有更改传入连接的默认策略,那么UFW已配置为拒绝所有传入连接。通常,这简化了创建安全防火墙策略的过程,因为您需要明确允许特定端口和IP地址通过的规则。

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

要编写拒绝规则,您可以使用上面描述的命令,将allow替换为deny

例如,要拒绝HTTP连接,您可以使用以下命令:

  1. sudo ufw deny http

如果您想拒绝来自203.0.113.4的所有连接,您可以使用以下命令:

  1. sudo ufw deny from 203.0.113.4

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

第八步 — 删除规则

知道如何删除防火墙规则和知道如何创建规则一样重要。可以通过规则编号或规则本身来指定要删除的规则,这与创建规则时的指定方式类似。

根据规则编号删除

删除防火墙规则

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

sudo ufw status numbered

输出示例:

Status: active
To                         Action      From
--                         ------      ----
[ 1] 22                         ALLOW IN    15.15.15.0/24
[ 2] 80                         ALLOW IN    Anywhere

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

sudo ufw delete 2

这将显示一个确认窗口,您可以输入 yn 进行回答。输入 y 将删除规则 2。请注意,如果您启用了 IPv6,您也需要删除相应的 IPv6 规则。

通过指定实际规则删除

删除规则号的替代方案是指定要删除的实际规则。例如,如果您想删除允许 HTTP 的规则,可以这样写:

sudo ufw delete allow http

您也可以使用“允许 80”来指定规则,而不是使用服务名称。

sudo ufw delete allow 80

如果存在 IPv4 和 IPv6 规则,该方法将同时删除它们。

第九步 — 检查 UFW 状态和规则

任何时候,您都可以使用此命令检查 UFW 的状态。

sudo ufw status verbose

如果 UFW 被禁用(默认情况下),输出将为:

Status: inactive

如果 UFW 处于激活状态(如果您按照第三步进行操作,则会是这种情况),输出结果将显示它正在运行并列出您所设置的任何规则。例如,如果防火墙设置为允许从任何地方进行 SSH(端口 22)连接,输出结果可能会包含类似以下内容:

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

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

第十步 – 禁用或重置 UFW(可选)

如果您决定不想使用 UFW,您可以用以下命令来禁用它。

sudo ufw disable

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

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

sudo ufw reset

这将禁用 UFW 并删除您之前定义的所有规则。请注意,如果您在任何时候修改了默认策略,则其原始设置不会恢复。这将让您以全新的状态开始使用 UFW。

结论

您的防火墙现在已经配置好允许(至少)SSH 连接。请确保允许服务器所需的其他所有传入连接,同时限制不必要的连接。这将确保您的服务器既功能正常又安全。

要了解更多常见的 UFW 配置,请参阅《UFW 入门:常见防火墙规则和命令》教程。

bannerAds