如何在 Ubuntu 22.04 上使用 UFW 设置防火墙

介绍

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

本教程将向您展示如何在Ubuntu 22.04上设置防火墙。

前提条件

要遵循本教程,您将需要:

UFW是默认安装在Ubuntu上. 如果它因某种原因被卸载,你可以用sudo apt install ufw安装它。

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

如果您的Ubuntu服务器具有IPv6启用,请确保UFW配置支持IPv6,以便它将管理IPv6防火墙规则,除了IPv4。

1sudo nano /etc/default/ufw

然后确保IPV6的值为

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

保存和关闭文件. 现在,当 UFW 启用时,它将被配置为写入 IPv4 和 IPv6 防火墙规则。 但是,在启用 UFW 之前,我们将希望确保您的防火墙配置为允许您通过 SSH 连接。

步骤 2 – 设置默认策略

如果你刚刚开始使用防火墙,第一个要定义的规则是你的默认策略. 这些规则控制如何处理不明确匹配任何其他规则的流量。 默认情况下,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)

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

步骤 3 – 允许 SSH 连接

如果我们现在启用了我们的 UFW 防火墙,它将拒绝所有接入连接,这意味着我们需要创建明确允许合法的接入连接的规则 - 例如 SSH 或 HTTP 连接 - 如果我们希望我们的服务器响应这些类型的请求。

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

1sudo ufw allow ssh

这将创建防火墙规则,允许所有连接在端口22,这是 SSH 示威者默认地倾听的端口. UFW 知道端口允许 ssh意味着什么,因为它在/etc/services文件中列为服务。

然而,我们实际上可以通过指定端口而不是服务名称来写出相当规则,例如,这个命令与上面的命令相同:

1sudo ufw allow 22

例如,如果您的 SSH 服务器正在听到端口 2222,您可以使用此命令允许该端口上的连接:

1sudo ufw allow 2222

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

步骤 4 – 允许 UFW

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

1sudo ufw enable

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

防火墙现在是活跃的。运行sudo ufw status verbose命令,查看设置的规则。本教程的其余部分涵盖了如何更详细地使用UFW,例如允许或拒绝不同类型的连接。

步骤 5 – 允许其他连接

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

  • HTTP 在端口 80,这是未加密的 Web 服务器使用的,使用sudo ufw允许 httpsudo ufw允许 80
  • HTTPS 在端口 443,这是加密的 Web 服务器使用的,使用sudo ufw允许 httpssudo ufw允许 443

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

具体港口范围

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

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

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.1 到 203.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 Excerpt]
22: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
3. . .
43: enp0s4: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
5. . .

突出的输出表示网络接口的名称,它们通常被命名为eth0,ens1enp3s2

因此,如果您的服务器有一个名为ens3的公共网络接口,您可以使用以下命令允许HTTP流量(端口80)到其上:

1sudo ufw allow in on ens3 to any port 80

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

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

1sudo ufw allow in on eth1 to any port 3306

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

步骤6:拒绝连接

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

但是,有时你会想要基于源 IP 地址或子网拒绝特定连接,也许是因为你知道你的服务器在那里受到攻击。

要编写 ** deny** 规则,您可以使用上面描述的命令,用 ** deny** 代替 allow

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

1sudo ufw deny http

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

1sudo ufw deny from 203.0.113.4

现在让我们来看看如何删除规则。

第7步:删除规则

知道如何删除防火墙规则与知道如何创建它们一样重要. 指定要删除的规则有两种不同的方式:通过规则号码或实际规则(类似于规则创建时的规则)。

规则号码

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

1sudo ufw status numbered
1[secondary_label Numbered 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

这会显示一个确认提示,然后删除规则2,允许HTTP连接. 请注意,如果您已启用IPv6,您也希望删除相应的IPv6规则。

根据当前规则

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

1sudo ufw delete allow http

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

1sudo ufw delete allow 80

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

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

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

1sudo ufw status verbose

如果 UFW 被禁用,这是默认的,你会看到这样的东西:

1[secondary_label Output]
2Status: inactive

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

 1[secondary_label Output]
 2Status: active
 3Logging: on (low)
 4Default: deny (incoming), allow (outgoing), deny (routed)
 5New profiles: skip
 6
 7To Action From
 8--                         ------      ----
 922/tcp ALLOW IN Anywhere
1022 (v6)                    ALLOW IN Anywhere (v6)

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

步骤 9 – 禁用或重置 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