如何在Debian 11上使用UFW配置防火墙
开始
UFW,即无复杂防火墙,是一个简化的防火墙管理接口,隐藏了底层数据包过滤技术(如iptables和nftables)的复杂性。如果您想开始保护您的网络,但不确定要使用哪种工具,UFW可能是您的正确选择。
本教程将向您展示如何在Debian 11上使用UFW设置防火墙。
先决条件
为了按照本教程操作,您需要具备一个带有sudo权限的非root用户的Debian 11服务器,您可以按照《Debian 11初始服务器设置教程》中的第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并确保其值为是。
IPV6=yes
保存并关闭文件。如果您使用nano,请按下CTRL+X,然后按下Y,再按下回车键保存并退出文件。
现在当UFW启用时,它将被配置为编写IPv4和IPv6防火墙规则。然而,在启用UFW之前,您将希望确保您的防火墙已配置为允许通过SSH连接。首先,设置默认策略。
步骤3 — 设置默认政策
如果您刚开始使用防火墙,首先需要定义的规则是默认策略。这些规则处理那些没有明确匹配其他规则的流量。默认情况下,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
除了指定端口或已知服务之外,还有其他方法可以允许连接。下面将对此进行讨论。
特定端口范围
您可以使用UFW来指定端口范围。例如,有些应用程序使用多个端口而不是一个单一的端口。
例如,要允许使用端口6000-6007进行X11连接,请使用以下命令:
- sudo ufw allow 6000:6007/tcp
- sudo ufw allow 6000:6007/udp
当使用UFW指定端口范围时,你必须同时指定规则应用于的协议(tcp或udp)。之前没有提到这一点是因为不指定协议会自动允许两种协议,对大多数情况来说这是可以的。
特定的IP地址
在使用UFW时,您还可以指定IP地址。例如,如果您想允许来自特定IP地址的连接,比如工作或家庭的IP地址203.0.113.4,您需要指定”from”和该IP地址。
- sudo ufw allow from 203.0.113.4
你还可以通过在任何端口后面添加端口号来指定允许连接的IP地址的特定端口。例如,如果您希望允许203.0.113.4连接到22号端口(SSH),请使用以下命令:
- sudo ufw allow from 203.0.113.4 to any port 22
子网
如果您想允许IP地址子网,您可以使用CIDR记法来指定子网掩码。例如,如果您想允许从203.0.113.1到203.0.113.254的所有IP地址范围,您可以使用以下命令:
- sudo ufw allow from 203.0.113.0/24
同样,您还可以指定子网203.0.113.0/24允许连接的目标端口。以端口22(SSH)为例:
- sudo ufw allow from 203.0.113.0/24 to any port 22
与特定网络接口的连接
如果你想创建一个仅适用于特定网络接口的防火墙规则,可以通过在“允许”后面指定“在”加上网络接口的名称来实现。
在继续之前,查看你的网络接口会很有帮助。要做到这一点,请使用下面的命令。
- 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流量访问它。
- sudo ufw allow in on eth0 to any port 80
这样做可以让您的服务器接收来自公共互联网的HTTP请求。
或者,如果您想要一个MySQL数据库服务器(端口3306)在私有网络接口eth1上监听连接,您可以使用以下命令:
- sudo ufw allow in on eth1 to any port 3306
这将允许您私有网络中的其他服务器连接到您的MySQL数据库。
第七步 – 否定连接
如果您没有更改传入连接的默认策略,那么UFW已配置为拒绝所有传入连接。通常,这简化了创建安全防火墙策略的过程,因为您需要明确允许特定端口和IP地址通过的规则。
有时候你可能会基于源IP地址或子网来拒绝特定的连接,这可能是因为你知道你的服务器正在受到该地区的攻击。另外,如果你想改变默认的传入策略为允许(尽管不推荐),你需要为任何不想允许连接的服务或IP地址创建拒绝规则。
要编写拒绝规则,您可以使用上面描述的命令,将allow替换为deny。
例如,要拒绝HTTP连接,您可以使用以下命令:
- sudo ufw deny http
如果你想拒绝来自203.0.113.4的所有连接,你可以使用以下命令:
- 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
这将显示一个确认窗口,你可以用y/n回答。输入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如何配置防火墙,请使用状态命令。
第十步 – 禁用或重置UFW(可选)
如果你决定不想使用UFW,你可以用以下命令来禁用它。
- sudo ufw disable
如果您使用UFW创建了任何规则,它们将不再生效。如果您稍后需要激活它,您可以随时运行sudo ufw enable。
如果您已經配置了UFW規則,但決定重新開始,可以使用reset命令:
- sudo ufw reset
这将禁用UFW并删除您之前定义的任何规则。请注意,如果您在任何时候修改了默认策略,则其原始设置不会恢复。这将让您以全新的状态开始使用UFW。
结论
你的防火墙现在已经配置好允许(至少)SSH连接。请确保允许服务器所需的其他所有传入连接,同时限制不必要的连接。这将确保你的服务器既功能正常又安全。
要了解更多常见的UFW配置,请参阅《UFW入门:常见防火墙规则和命令》教程。