如何在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进行安装。

  1. sudo apt install ufw

 

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

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

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

  1. 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使用的默认设置:

  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)

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

第四步 – 允许SSH连接

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

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

  1. sudo ufw allow ssh

 

这将创建防火墙规则,允许所有连接到22端口,这是默认情况下SSH守护程序监听的端口。UFW知道将哪个端口与允许SSH绑定,因为在/etc/services文件中它列为一个服务。

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

  1. sudo ufw allow 22

 

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

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

步骤5 — 启用UFW

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

  1. sudo ufw enable

 

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

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

  1. sudo ufw status verbose

 

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

步骤6 — 允许其他连接

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

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

  1. sudo ufw allow http

 

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

  1. sudo ufw allow https

 

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

特定的端口范围

您可以使用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

 

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

被突出显示的输出指示了网络接口的名称。它们通常具有像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状态命令具有编号选项,可以在每个规则旁边显示编号。

  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

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

  1. sudo ufw delete 2

 

这将显示一个确认提示,你可以用“是”或“否”回答。键入“是”将删除规则2。请注意,如果你启用了IPv6,你也需要删除相应的IPv6规则。

按照实际规则执行

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

  1. sudo ufw delete allow http

 

你也可以通过允许80端口来指定该规则,而不是使用服务名称。

  1. sudo ufw delete allow 80

 

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

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

您可以随时使用此命令来检查UFW的状态。

  1. sudo ufw status verbose

 

如果UFW被禁用(默认情况下),输出将是这样的:

Output

Status: inactive

如果UFW被激活了,而且你按照第三步的指示进行了设置,输出结果会显示它是处于激活状态的,并列出你所设置的规则。例如,如果防火墙允许从任何地方进行SSH(端口22)连接,输出结果可能会包含以下内容:

Output

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

如果您想检查UFW如何配置防火墙,请使用状态命令。

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

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

  1. sudo ufw disable

 

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

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

  1. sudo ufw reset

 

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

结论

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

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

广告
将在 10 秒后关闭
bannerAds