介绍
UFW,即Uncomplicated Firewall,是一个简化的防火墙管理界面,隐藏了诸如iptables
和nftables
等低级数据包过滤技术的复杂性。如果您想开始保护您的网络,但不确定要使用哪个工具,那么UFW可能是您的正确选择。
本教程将向您展示如何在Debian 11上使用UFW设置防火墙。
先决条件
要按照本教程操作,您需要一台安装有sudo
非root用户的Debian 11服务器,您可以按照Debian 11初始服务器设置教程中的第1至3步进行设置。
第1步 – 安装UFW
Debian 默认情况下不安装 UFW。如果您已经按照整个初始服务器设置教程进行操作,那么您将已经安装并启用了 UFW。如果没有,请使用 apt
现在安装它:
接下来,您将按照以下步骤设置并启用 UFW。
第 2 步 — 使用 IPv6(可选)
本教程是针对 IPv4 编写的,但如果启用了 IPv6,它也适用。如果您的 Debian 服务器启用了 IPv6,您将需要确保 UFW 配置为支持 IPv6。这将确保 UFW 管理 IPv6 和 IPv4 的防火墙规则。要配置此项,请使用 nano
或您喜欢的编辑器打开 UFW 配置文件 /etc/default/ufw
:
在文件中找到 IPV6
,并确保其值为 yes
:
IPV6=yes
保存并关闭文件。如果您使用的是 nano
,请按 CTRL+X
,然后 Y
,然后 ENTER
保存并退出文件。
现在,当 UFW 启用时,它将被配置为编写 IPv4 和 IPv6 防火墙规则。然而,在启用 UFW 之前,您需要确保防火墙已配置允许您通过 SSH 连接。从设置默认策略开始。
第3步 — 设置默认策略
如果您刚开始使用防火墙,首先要定义的规则是默认策略。这些规则处理不明确匹配任何其他规则的流量。默认情况下,UFW 设置为拒绝所有传入连接并允许所有传出连接。这意味着任何试图连接到您的服务器的人都无法连接,而服务器内的任何应用程序都可以访问外部世界。
将您的 UFW 规则设置回默认值,以确保您能够按照本教程操作。要设置 UFW 使用的默认值,请使用以下命令:
您将收到如下输出:
OutputDefault 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)
这些命令将默认设置为拒绝传入连接并允许传出连接。这些防火墙默认值可能足以满足个人计算机的需求,但服务器通常需要响应来自外部用户的传入请求。您将在下一步中开始这个过程。
第4步 — 允许 SSH 连接
您目前还不能启用UFW防火墙,因为这将拒绝所有传入连接,包括您访问服务器的尝试。这意味着您需要创建明确允许合法传入连接的规则,例如 SSH 或 HTTP 连接,如果您希望服务器响应这些类型的请求。如果您正在使用云服务器,您可能希望允许传入的 SSH 连接,以便您可以连接到并管理服务器。
要配置服务器以允许传入的 SSH 连接,请使用以下命令:
这将创建防火墙规则,允许默认情况下 SSH 守护程序监听的端口 22
上的所有连接。UFW 知道端口与 allow ssh
相关联,因为它在 /etc/services
文件中列为服务。
但是,您实际上可以通过指定端口而不是服务名称来编写等效规则。例如,此命令会产生与上述命令相同的结果:
如果您配置了 SSH 守护程序使用不同的端口,则必须指定相应的端口。例如,如果您的 SSH 服务器正在侦听端口 2222
,则可以使用相同的命令,但将 22
替换为 2222
。
现在,您的防火墙已配置为允许传入的 SSH 连接,您可以启用它。
步骤 5 — 启用 UFW
要启用 UFW,请使用此命令:
您将收到一个警告,指出该命令可能会中断现有的SSH连接。您已经设置了一个允许SSH连接的防火墙规则,所以继续执行应该是没问题的。请用y
回复提示,然后按ENTER
。
防火墙现在已经启用。要查看您设置的规则,请运行以下命令:
本教程的其余部分将详细介绍如何使用UFW,包括允许和拒绝不同类型的连接。
第6步 — 允许其他连接
此时,您应该允许服务器需要正常运行的所有其他连接。您应该允许的连接取决于您的具体需求。您已经知道如何编写基于服务名称或端口的允许连接的规则;您已经为端口22
上的SSH做过这个操作。
您可以为HTTP(使用端口80
)执行此操作,这是未加密的Web服务器使用的端口。要允许此类型的流量,您应该键入:
您也可以为HTTPS(使用端口443
)执行此操作,这是加密的Web服务器使用的端口。要允许此类型的流量,您应该键入:
在这两种情况下,指定端口也将起作用,HTTP为80
,HTTPS为443
。例如:
除了指定端口或已知服务之外,还有其他允许连接的方法,这将在下一节讨论。
特定端口范围
您可以使用 UFW 指定端口范围。例如,一些应用程序使用多个端口而不是单个端口。
例如,要允许使用端口 6000
到 6007
的 X11
连接,请使用以下命令:
在使用 UFW 指定端口范围时,必须指定规则应适用的协议(tcp
或 udp
)。之前没有提到这一点,因为不指定协议会自动允许两种协议,这在大多数情况下都可以。
特定 IP 地址
在使用 UFW 时,您还可以指定 IP 地址。例如,如果要允许从特定 IP 地址连接,例如工作或家庭 IP 地址 203.0.113.4
,您需要指定 from
然后是 IP 地址:
您还可以通过添加 to any port
后跟端口号来指定 IP 地址允许连接的特定端口。例如,如果要允许 203.0.113.4
连接到端口 22
(SSH),请使用此命令:
子网
如果你想允许一组IP地址的子网,请使用CIDR表示法来指定子网掩码。例如,如果你想允许从203.0.113.1
到203.0.113.254
范围内的所有IP地址,你可以使用以下命令:
同样,你也可以指定子网203.0.113.0/24
可以连接到的目标端口。再次以端口22
(SSH)为例:
连接到特定网络接口
如果你想创建一个只适用于特定网络接口的防火墙规则,你可以通过指定allow in on
,后跟网络接口的名称来实现。
在继续之前查看你的网络接口会很有帮助。要这样做,请使用以下命令:
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流量:
这样做将允许你的服务器从公共互联网接收HTTP请求。
或者,如果你想要一个 MySQL 数据库服务器(端口3306
)监听私有网络接口eth1
上的连接,你可以使用这个命令:
这将允许私有网络上的其他服务器连接到你的 MySQL 数据库。
第 7 步 — 拒绝连接
如果你没有更改传入连接的默认策略,UFW 被配置为拒绝所有传入连接。通常,这简化了通过要求你显式地创建规则来允许特定端口和 IP 地址的安全防火墙策略的过程。
有时,你会想要基于源 IP 地址或子网来拒绝特定的连接,可能是因为你知道你的服务器正在受到攻击。另外,如果你想要更改你的默认传入策略为允许
(这是不推荐的),你需要为任何你不想允许连接的服务或 IP 地址创建拒绝
规则。
要编写拒绝
规则,你可以使用上面描述的命令,将允许
替换为拒绝
。
例如,要拒绝 HTTP 连接,你可以使用这个命令:
或者,如果你想要拒绝来自203.0.113.4
的所有连接,你可以使用这个命令:
现在,你可以学习如何实现删除规则。
步骤 8 — 删除规则
知道如何删除防火墙规则与知道如何创建它们一样重要。有两种方法可以指定要删除的规则:按规则编号或按规则本身。这与创建规则时指定规则的方式类似。
按规则编号
如果您要使用规则编号来删除防火墙规则,首先要做的是获取防火墙规则列表。UFW status
命令有 numbered
选项,可以在每个规则旁边显示编号:
OutputStatus: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
如果您决定要删除允许在端口 80
上进行 HTTP 连接的规则 2
,您可以在以下 UFW delete
命令中指定:
这将显示一个确认提示,您可以用 y/n
回答。键入 y
将删除规则 2
。请注意,如果您启用了 IPv6,则还要删除相应的 IPv6 规则。
按实际规则
替代规则编号的方法是指定要删除的实际规则。例如,如果要删除 allow http
规则,可以这样写:
你也可以使用 allow 80
来指定规则,而不是服务名称:
如果存在,此方法将删除 IPv4 和 IPv6 规则。
第 9 步 — 检查 UFW 的状态和规则
随时可以使用以下命令检查 UFW 的状态:
如果 UFW 被禁用(这是默认设置),输出将是这样:
OutputStatus: inactive
如果 UFW 处于活动状态,这应该是你遵循第 3 步后的情况,输出将显示它处于活动状态,并列出您设置的任何规则。例如,如果防火墙设置为允许来自任何地方的 SSH(端口 22
)连接,则输出可能包含类似于以下内容:
OutputStatus: active
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
如果想要检查 UFW 如何配置防火墙,请使用 status
命令。
第 10 步 — 禁用或重置 UFW(可选)
如果决定不使用 UFW,则可以使用以下命令禁用它:
任何您使用UFW创建的规则将不再生效。如果您需要以后激活它,您可以随时运行sudo ufw enable
。
如果您已经配置了UFW规则,但决定重新开始,您可以使用重置命令:
这将禁用UFW并删除您之前定义的任何规则。请注意,如果您曾经修改过默认策略,则默认策略不会更改为原始设置。这将为您提供一个全新的UFW起点。
结论
您的防火墙现已配置为允许(至少)SSH连接。确保允许服务器需要的任何其他传入连接,同时限制不必要的连接。这将确保您的服务器既功能齐备又安全。
要了解更多常见的UFW配置,请查看这篇关于UFW基础知识:常见防火墙规则和命令的教程。
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-debian