如何在 Debian 11 上使用 UFW 设置防火墙

介绍

UFW,或不复杂的防火墙,是一个简化的防火墙管理接口,隐藏了低级别的数据包过滤技术的复杂性,如iptablesnftables

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

前提条件

要遵循本教程,您将需要一个 Debian 11 服务器和一个sudo非 root 用户,您可以通过遵循 Debian 11 初始服务器设置教程中的 **步骤 1 到 3 来设置。

步骤 1 – 安装 UFW

Debian 默认情况下不安装 UFW. 如果您遵循了整个 初始服务器设置教程,您将安装并启用 UFW。

1sudo apt install ufw

您将设置 UFW 并在以下步骤中启用它。

步骤 2 — 使用IPv6与UFW(可选)

如果您的 Debian 服务器具有 IPv6 启用,您将想要确保 UFW 已配置为支持 IPv6。这将确保 UFW 将管理 IPv6 的防火墙规则,除 IPv4 外。

1sudo nano /etc/default/ufw

在文件中找到IPV6,并确保值为:

1[label /etc/default/ufw excerpt]
2IPV6=yes

如果您正在使用nano,请按CTRL+X,然后按Y,然后按ENTER,以保存和退出文件。

现在,当 UFW 启用时,它将配置为写入 IPv4 和 IPv6 防火墙规则。 但是,在启用 UFW 之前,您需要确保防火墙配置为允许您通过 SSH 连接。

步骤 3 – 设置默认策略

如果你刚刚开始使用防火墙,第一个要定义的规则是你的默认策略. 这些规则处理的流量不明确匹配任何其他规则. 默认情况下,UFW 设置为拒绝所有传入连接,并允许所有传出连接. 这意味着任何试图到达你的服务器的人都无法连接,而服务器中的任何应用程序都可以到达外部世界。

将您的 UFW 规则重新设置为默认值,以便您可以确定您将能够跟随本教程。

1sudo ufw default deny incoming
2sudo ufw default allow outgoing

您将获得如下结果:

1[secondary_label Output]
2Default incoming policy changed to 'deny'
3(be sure to update your rules accordingly)
4Default outgoing policy changed to 'allow'
5(be sure to update your rules accordingly)

这些命令设置了默认值,以拒绝接入并允许输出连接. 这些默认值单独可能足以为个人计算机,但服务器通常需要响应来自外部用户的接入请求。

第4步:允许 SSH 连接

您还不能启用 UFW 防火墙,因为它会拒绝所有接入连接,包括您试图访问服务器的尝试,这意味着您需要创建明确允许合法的接入连接的规则 - 例如 SSH 或 HTTP 连接 - 如果您希望您的服务器响应这些类型的请求。

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

1sudo ufw allow ssh

这将创建防火墙规则,允许所有连接在端口22,这是 SSH 示威者默认听取的端口. UFW 知道哪个端口与允许 ssh关联,因为它在/etc/services文件中列为服务。

但是,您实际上可以通过指定端口而不是服务名称来编写等效规则,例如,此命令会产生与上面的命令相同的结果:

1sudo ufw allow 22

例如,如果您的 SSH 服务器正在倾听 2222 端口,您可以使用相同的命令,但可以用 2222 代替 2222

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

步骤 5 – 允许 UFW

要启用 UFW,请使用此命令:

1sudo ufw enable

您将收到一个警告,称该命令可能会干扰现有 SSH 连接. 您已经设置了一个允许 SSH 连接的防火墙规则,所以应该保持正常。

防火墙已启动. 若要查看您已设置的规则,请运行此命令:

1sudo ufw status verbose

本教程的其余部分涵盖了如何更详细地使用UFW,包括允许和拒绝不同类型的连接。

步骤 6 – 允许其他连接

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

对于 HTTP,您可以在端口80上执行此操作,这就是未加密的 Web 服务器所使用的。

1sudo ufw allow http

您也可以在端口443上对HTTPS进行此操作,这是加密网页服务器所使用的。

1sudo ufw allow https

在这两种情况下,指定端口也会起作用,HTTP为80和HTTPS为443

1sudo ufw allow 80

然而,除了指定端口或已知服务之外,还有其他方式允许连接。

具体港口范围

您可以使用 UFW 指定端口范围,例如,一些应用程序使用多个端口而不是单个端口。

例如,要允许使用端口60006007X11连接,请使用以下命令:

1sudo ufw allow 6000:6007/tcp
2sudo ufw allow 6000:6007/udp

在使用 UFW 指定端口范围时,您必须指定该规则应适用于的协议(‘tcp’或 ‘udp’)。

具体的IP地址

例如,如果您想要允许从特定 IP 地址(例如工作或家庭 IP 地址)的连接,则需要指定,然后是 IP 地址:

1sudo ufw allow from 203.0.113.4

您也可以通过添加到任何端口,然后添加端口号来指定某个特定端口,IP 地址允许连接,例如,如果您希望允许203.0.113.4连接到端口22(SSH),请使用以下命令:

1sudo ufw allow from 203.0.113.4 to any port 22

子网

如果您想要允许 IP 地址的子网,您可以使用 CIDR 标注来指定一个 netmask. 例如,如果您想要允许从 203.0.113.1203.0.113.254 的所有 IP 地址,您可以使用此命令:

1sudo ufw allow from 203.0.113.0/24

同样,您也可以指定203.0.113.0/24子网允许连接的目标端口。

1sudo ufw allow from 203.0.113.0/24 to any port 22

连接到特定网络接口

如果您想要创建一个仅适用于特定网络接口的防火墙规则,则可以通过指定允许启用,然后是网络接口的名称。

继续前要查找您的网络接口将是有帮助的. 要做到这一点,请使用以下命令:

1ip addr
1[secondary_label Output]
2. . .
32: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
4. . .
53: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
6. . .

突出输出表示网络界面名称,它们通常有类似eth0enp3s2的名称。

例如,如果您的服务器有一个名为eth0的公共网络接口,您可以使用此命令允许 HTTP 流量:

1sudo ufw allow in on eth0 to any port 80

这样做将允许您的服务器从公共互联网接收HTTP请求。

或者,如果您希望 MySQL 数据库服务器(端口 3306)在私人网络接口 eth1 上听取连接,则可以使用以下命令:

1sudo ufw allow in on eth1 to any port 3306

这将允许您私人网络上的其他服务器连接到您的MySQL数据库。

步骤7:拒绝连接

如果您尚未更改入口连接的默认策略,则 UFW 将被配置为拒绝所有入口连接,这通常简化了创建安全防火墙策略的过程,要求您创建明确允许特定端口和 IP 地址通过的规则。

然而,有时你会想要基于源 IP 地址或子网拒绝特定连接,也许是因为你知道你的服务器正在从那里受到攻击. 此外,如果你想将默认的入口策略更改为允许(不建议),你需要为任何不希望允许连接的服务或 IP 地址创建拒绝规则。

要写否定规则,您可以使用上面描述的命令,用否定代替允许

例如,要拒绝 HTTP 连接,您可以使用以下命令:

1sudo ufw deny http

或者,如果你想拒绝从203.0.113.4的所有连接,你可以使用这个命令:

1sudo ufw deny from 203.0.113.4

现在,您可以学习如何执行删除规则。

第8步:删除规则

知道如何删除防火墙规则与知道如何创建它们一样重要. 指定要删除的规则有两种方式:通过规则号码或规则本身。

规则号码

如果您使用规则号码删除防火墙规则,您要做的第一件事就是获取防火墙规则列表。

1sudo ufw status numbered
1[secondary_label Output]
2Status: active
3
4     To Action From
5     --                         ------      ----
6[ 1] 22 ALLOW IN 15.15.15.0/24
7[ 2] 80 ALLOW IN Anywhere

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

1sudo ufw delete 2

这样会显示一个确认提示,你可以用y/n来回答。输入y就会删除2规则。

根据当前规则

对数规则的替代方法是指定要删除的实际规则,例如,如果你想删除‘允许 http’规则,你可以这样写:

1sudo ufw delete allow http

您还可以指定规则允许 80而不是服务名称:

1sudo ufw delete allow 80

此方法将删除IPv4和IPv6规则,如果它们存在。

步骤 9 – 检查 UFW 状态和规则

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

1sudo ufw status verbose

如果 UFW 被禁用,这是默认的,输出将是这样的:

1[secondary_label Output]
2Status: inactive

如果 UFW 是活跃的,如果您遵循第 3 步,输出将表示它是活跃的,并列出您已设置的任何规则,例如,如果防火墙设置为允许 SSH (端口 22) 连接从任何地方,输出可能会包含这样的东西:

1[secondary_label Output]
2Status: active
3
4To Action From
5--                         ------      ----
622/tcp ALLOW IN Anywhere

使用状态命令来检查 UFW 如何配置防火墙。

步骤 10 – 禁用或重置 UFW (可选)

如果您决定不希望使用 UFW,您可以使用此命令禁用它:

1sudo ufw disable

您使用 UFW 创建的任何规则将不再活跃,如果需要稍后激活,您可以随时运行sudo ufw 启用

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

1sudo ufw reset

这将禁用 UFW 并删除您之前定义的任何规则. 请记住,如果您在任何时候修改它们,默认策略将不会改变原始设置。

结论

您的防火墙现在已配置为允许(至少)SSH连接。请确保允许您的服务器需要的任何其他接入连接,同时限制不必要的连接。

要了解更多常见的 UFW 配置,请参阅本教程在 UFW Essentials: Common Firewall Rules and Commands

Published At
Categories with 技术
comments powered by Disqus