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

UFW,英文全称为 Uncomplicated Firewall,是简化 Ubuntu 防火墙管理的一种方法。本文将向您介绍如何在 Ubuntu 22.04 上使用 UFW 设置防火墙。

环境条件

本文内容基于 Ubuntu 22.04 服务器环境,并且有一个有 sudo 权限的非 root 用户。UFW 默认已被安装在 Ubuntu 上。如果已被卸载,可以使用下面的命令安装:

sudo apt install ufw

第 1 步 — 设置 IPv6 与 UFW 一起使用(可选)

如果您的 Ubuntu 服务器启用了 IPv6,请确保将 UFW 配置为支持 IPv6,以便除了 IPv4 之外,它也能管理 IPv6 的防火墙规则。为此,请使用nano或其他编辑器打开 UFW 配置。

sudo nano /etc/default/ufw

然后确保IPV6的值设置为yes

IPV6=yes

保存并关闭文件。当启用 UFW 时,它将被配置为同时编写 IPv4 和 IPv6 防火墙规则。在启用 UFW 之前,一定要确保已经配置防火墙允许 SSH 连接,否则可能导致服务通过 SSH 连接服务器。

第 2 步 — 设置默认策略

如果您刚开始使用防火墙,首先要定义默认策略。这些规则控制如何处理不明确匹配任何其他规则的流量。默认情况下,UFW 被设置为拒绝所有传入连接,并允许所有传出连接。这意味着任何其他人都无法访问服务器,而服务器内的任何应用都可以访问外部网络。

我们将 UFW 规则设置回默认值,这样就可以确保您能够按照本教程进行操作。要设置 UFW 使用的默认策略,请使用以下命令:

sudo ufw default deny incoming
sudo ufw default allow outgoing

将收到如下输出:

Output
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)

这些默认设置服务器拒绝传入连接,并允许传出连接。如果是个人电脑,这些设置就已经足够了,但服务器需要响应外部用户的传入请求,就需要进一步的设置。

第 3 步 — 允许 SSH 连接

如果现在启用 UFW 防火墙,它将拒绝所有传入的连接。我们需要创建规则,以允许合法传入连接(例如 SSH 或 HTTP 连接)。如果您使用的是云服务器,需要允许传入的 SSH 连接,以便可以连接和管理服务器。

要设置服务器允许传入的 SSH 连接,可以执行以下命令:

sudo ufw allow ssh

这将创建防火墙规则,允许22端口上的所有连接。22 是 SSH 守护程序侦听的默认端口,UFW 知道端口的含义。

所以,我们也可以通过开放端口来编写规则。例如,下面的命令与上面的命令的效果相同:

sudo ufw allow 22

如果您设置 SSH 守护程序使用不同的端口,则必须开放对应的端口。例如,如果 SSH 服务器使用2222端口,那么就行开放对应的端口:

sudo ufw allow 2222

现在,防火墙已配置为允许 SSH 连接,我们就可以启用 UFW 了。

第 4 步 – 启用 UFW

要启用 UFW,请执行以下命令:

sudo ufw enable

您将收到一条警告信息,提示该命令可能会中断现有的 SSH 连接。如果已经设置 UFW 允许 SSH 连接,可以根据提示输入y,然后点击ENTER确认。

这样,防火墙已经被打开。可以运行下面的命令查看已设置的规则。

sudo ufw status verbose

第 5 步 — 允许其他连接

作为服务器,我们可能要创建网站或其他项目,因此我们需要开放 80 端口的 HTTP 连接,以及开放 443 端口的 HTTPS 连接:

开放 80 端口的 HTTP 连接:

sudo ufw allow http

sudo ufw allow 80

开放 443 端口的 HTTPS 连接:

sudo ufw allow https

sudo ufw allow 443

除了开放端口或特定服务之外,还可以通过下面的方法允许其他连接。

开放特定端口范围

某些应用程序需要使用多个端口,所以要使用 UFW 开放特定范围的端口。例如,要允许使用60006007端口的连接,请执行以下命令:

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

使用 UFW 开放端口范围时,必须指定规则应适用的协议(tcpudp)。如果不指定协议,会自动允许tcpudp两种协议。

开放特定 IP 地址

使用 UFW 时,还可以开放指定 IP 地址。例如,如果只允许来自特定 IP 地址的连接,例如工作或家庭 IP 地址203.0.113.4,可以执行下面的命令:

sudo ufw allow from 203.0.113.4

还可以通过在上面的命令后,添加to any port加端口号,来限制允许该 IP 地址连接的端口。例如,如果想允许203.0.113.4连接到22端口(SSH),请使用以下命令:

sudo ufw allow from 203.0.113.4 to any port 22

开放子网

如果要允许 IP 地址的子网,可以使用 CIDR 表示法指定网络掩码。例如,如果想允许所有在203.0.113.1203.0.113.254范围内的IP地址,可以使用以下命令:

sudo ufw allow from 203.0.113.0/24

同样,也可以指定允许203.0.113.0/24 IP范围连接的端口:

sudo ufw allow from 203.0.113.0/24 to any port 22

与特定网络接口的连接

如果要创建仅适用于特定网络接口的防火墙规则,可以通过指定“allow in on”后跟网络接口名称来实现。

在继续之前,可能需要查看一下当前的网络接口。为此,请使用以下命令:

ip addr
Output
Excerpt2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
3: enp0s4: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
. . .

高亮显示的输出为网络接口名称。它们通常被命名为eth0,ens1enp3s2等等。因此,如果您的服务器有一个名为 ens3 的公共网络接口,可以使用以下命令允许 HTTP 流量(端口80)连接它:

sudo ufw allow in on ens3 to any port 80

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

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

sudo ufw allow in on eth1 to any port 3306

第 6 步 — 拒绝连接

有时,可能需要阻止来自特定 IP 地址或特定 IP 范围的连接,就需要创建相应的屏蔽规则。

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

sudo ufw deny http

或者,如果您想屏蔽来自203.0.113.4的所有连接,可以使用以下命令:

sudo ufw deny from 203.0.113.4

第 7 步 — 删除规则

有两种不同的方式来删除特定规则,可以通过规则编号或通过实际规则(类似于在创建规则时指定规则的方式)。

按规则编号删除

如果使用规则编号来删除防火墙规则,那么先要获取防火墙规则列表。可以使用下面的命令来查看:

sudo ufw status numbered
Numbered Output: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

这将显示一个确认提示,然后删除允许 HTTP 连接的规则 2。请注意,如果您启用了 IPv6,您还需要删除相应的 IPv6 规则。

按实际规则名称删除

除了按规则编号删除规则,我们还可以按要删除的实际规则名称来删除。例如,如果想删除 HTTP 规则,可以像下面这样写:

sudo ufw delete allow http

另外,还可以通过下面的方式来删除规则:

sudo ufw delete allow 80

此方法将删除 IPv4 和 IPv6 规则。

第 8 步 — 检查 UFW 状态和规则

可以使用以下命令检查 UFW 的状态:

sudo ufw status verbose

如果 UFW 被禁用(默认情况下),将看到如下输出内容:

Output
Status: inactive

如果 UFW 处于活动状态,输出将显示它处于活动状态,并且会列出所有设置的规则。例如,如果防火墙设置为允许对 SSH(22端口)的连接,则输出可能如下所示:

Output
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
22 (v6)                    ALLOW IN    Anywhere (v6)

第 9 步 – 禁用或重置 UFW(可选)

如果不想继续使用 UFW,可以使用以下命令关闭它:

sudo ufw disable

关闭 UFW 后,使用 UFW 创建的所有规则都将不再有效。如果以后要重新打开 UFW,可以运行下面的命令:

sudo ufw enable

如果已经配置了一些 UFW 规则,但想要重置 UFW 规则,可以使用 reset 命令:

sudo ufw reset

该命令将禁用 UFW 并删除之前定义的所有规则。

总结

综上所述,就是在 Ubuntu 22.04 服务器上配置 UFW 的方法。切记在启用 UFW 之前,先要配置 UFW 允许 SSH 连接。否则,可能会出现无法通过 SSH 连接和管理服务器的情况。

作者:牛奇网,本站文章均为辛苦原创,在此严正声明,本站内容严禁采集转载,面斥不雅请好自为之,本文网址:https://www.niuqi360.com/linux/how-to-set-up-a-firewall-with-ufw-on-ubuntu-22-04/

(1)
牛奇网牛奇网
上一篇 2022年10月18日 上午10:03
下一篇 2022年10月18日 下午2:41

相关推荐

发表回复

登录后才能评论