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 开放特定范围的端口。例如,要允许使用6000
–6007
端口的连接,请执行以下命令:
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp
使用 UFW 开放端口范围时,必须指定规则应适用的协议(tcp
或udp
)。如果不指定协议,会自动允许tcp
和udp
两种协议。
开放特定 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.1
为203.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
,ens1
或enp3s2
等等。因此,如果您的服务器有一个名为 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/