Debian 10 UFW防火墙配置完全指南:保护服务器安全的详细教程

简介

UFW,即简化防火墙(Uncomplicated Firewall),是一个简化的防火墙管理界面,它隐藏了像iptables和nftables之类的底层数据包过滤技术的复杂性。如果您想开始保护您的网络,但又不确定要使用哪个工具,UFW可能是适合您的选择。

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

先决条件

为了跟随本教程,您需要一个带有sudo非root用户的Debian 10服务器,您可以通过按照Debian 10初始服务器设置教程中的第1到3步进行设置。

第一步 – 安装UFW

Debian默认不安装UFW。如果你按照完整的服务器初始化教程操作,你已经安装并启用了UFW。如果没有安装,请使用apt进行安装。

sudo apt install ufw

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

第二步 – 使用IPv6与UFW(可选)

这个教程是以IPv4为主,但是如果你启用了IPv6,它也适用于IPv6。如果你的Debian服务器启用了IPv6,你需要确保UFW已配置支持IPv6。这将确保UFW除了IPv4之外,还能管理IPv6的防火墙规则。要进行配置,请用nano或你喜欢的编辑器打开UFW的配置文件/etc/default/ufw。

sudo nano /etc/default/ufw

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

以下是/etc/default/ufw的摘录。

IPV6=yes

保存并关闭文件。如果你使用的是nano编辑器,按下CTRL+X,然后按Y,再按ENTER保存并退出文件。

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

第三步 – 设置默认策略

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

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

sudo ufw default deny incoming
sudo ufw default allow outgoing

你将会收到类似以下的输出。

输出
默认传入策略已更改为'deny'(请确保相应地更新您的规则)
默认传出策略已更改为'allow'(请确保相应地更新您的规则)

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

第四步 – 允许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连接,你可以启用它。

步骤5 — 启用UFW

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

sudo ufw enable

您将收到一条警告,警告称该命令可能会中断现有的SSH连接。您已设置了一个允许SSH连接的防火墙规则,所以继续操作应该没问题。请回答提示输入y并按下回车键。

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

sudo ufw status verbose

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

步骤6 — 允许其他连接

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

你可以在端口80上使用HTTP来完成这个操作,这正是未加密的网页服务器所使用的。为了允许这种类型的流量通过,你需要输入:

sudo ufw allow http

您还可以在端口443上为HTTPS执行此操作,这是加密的Web服务器使用的端口。为了允许此类流量,您需要输入:

sudo ufw allow https

无论是哪种情况,指定端口也能起到作用,其中HTTP的端口是80,HTTPS的端口是443。除了指定端口或已知服务外,还有其他方法可以允许连接。这将在下面讨论。

特定的端口范围

这是文章《如何在Debian 10上使用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地址的连接,如203.0.113.4的工作或家庭IP地址,您需要指定”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.1到203.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
输出

. . . 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 . . .

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

如果您的服务器有一个名为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状态命令具有编号选项,可以在每个规则旁边显示编号。

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

这将显示一个确认提示,你可以用”是”或”否”回答。键入”是”将删除规则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如何配置防火墙,请使用状态命令。

步骤十 — 禁用或重置UFW(可选)

如果你决定不想使用UFW,你可以使用以下命令来将其禁用。

sudo ufw disable

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

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

sudo ufw reset

这将禁用UFW并删除您以前定义的任何规则。请记住,如果您在任何时候修改了默认策略,它们的设置将不会返回到原始状态。这将让您以全新的状态重新开始使用UFW。

结论

您的防火墙已配置允许(至少)SSH连接。请确保允许服务器需要的任何其他传入连接,并限制无关的连接。这将确保您的服务器既功能正常又安全。

学习更多常见的UFW配置,看看这个关于UFW基本知识的教程:常用防火墙规则和命令。

bannerAds