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连接,请使用以下命令:
- 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
与特定网络接口的连接
如果您想创建一个仅适用于特定网络接口的防火墙规则,可以通过在“允许”后面指定“in on”加上网络接口的名称来实现。
在继续之前,查看您的网络接口会很有帮助。要做到这一点,请使用下面的命令。
- 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 状态命令有 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
这将显示一个确认窗口,您可以输入 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 如何配置防火墙,请使用 status
命令。
第十步 – 禁用或重置 UFW(可选)
如果您决定不想使用 UFW,您可以用以下命令来禁用它。
sudo ufw disable
如果您使用 UFW 创建了任何规则,它们将不再生效。如果您稍后需要激活它,您可以随时运行 sudo ufw enable
。
如果您已经配置了 UFW 规则,但决定重新开始,可以使用 reset
命令:
sudo ufw reset
这将禁用 UFW 并删除您之前定义的所有规则。请注意,如果您在任何时候修改了默认策略,则其原始设置不会恢复。这将让您以全新的状态开始使用 UFW。
结论
您的防火墙现在已经配置好允许(至少)SSH 连接。请确保允许服务器所需的其他所有传入连接,同时限制不必要的连接。这将确保您的服务器既功能正常又安全。
要了解更多常见的 UFW 配置,请参阅《UFW 入门:常见防火墙规则和命令》教程。