怎样在 Ubuntu 20.04 上安装和配置简单的防火墙

介绍

正如普通访问者每天访问我们的服务器一样,其他具有更邪恶意图的访问者也是如此。 在没有某种保护层的情况下运行在线服务是不合理的。 为了防止其中一些攻击,Ubuntu 附带了 ufw(简单防火墙)。 这是一个旨在使 Ubuntu 防火墙管理尽可能简单和用户友好的工具。 具体来说,ufw 为核心防火墙工具 netfilter 和 iptables 提供了一个更清晰的界面,虽然它们很健壮,但掌握起来可能具有挑战性。

什么是防火墙?

从广义上讲,防火墙是网络或服务器的一部分,旨在限制对硬件的潜在恶意和未经授权的访问,同时仍允许来自网络或服务器的向外通信。 为了帮助理解这里的概念,我们首先需要对防火墙的工作原理有一个很好的理解。 如果您已经熟悉本节,请随意跳过。

防火墙的工作原理

任何进出服务器的连接都有两个主要信息可用于识别它。

  • 远程地址(服务器正在与之通话)。
  • 港口。

把港口想象成一条双向街道。 每个端口都可以有自己的服务在其上运行以与外界进行通信或根本不进行通信。 按照惯例,0 到 1023 之间的端口专用于系统服务。 动态分配时 1024 和 49151 之间的端口。 49152 和 65535 之间的端口,在需要时使用和释放。

防火墙有一组针对每个传入连接进行检查的规则。 使用这些规则,防火墙决定是允许还是中断连接。 默认情况下禁止所有连接,然后只允许我们需要的连接是个好主意。 这可以防止攻击者连接到服务器。

我们的 Ubuntu 防火墙的初始设置

以下所有示例均基于使用新的 Ubuntu 服务器,使用以下工具之一安装 官方 Ubuntu 镜像.

注意:需要管理员权限,所以每个命令都会以 sudo.

自 8.04 LTS 以来的每个 ubuntu 版本都默认安装了 ufw。 如果需要,我们可以运行以下命令来安装它。

sudo apt install ufw -y

安装后全新,防火墙被禁用。

[email protected]:~$ sudo ufw status
[sudo] password for user:
Status: inactive 

允许用户访问

现在,我们还不想启用它,因为我们通过 SSH 通过端口 22 连接到服务器。 如果防火墙切断该连接,我们可能会遇到很多麻烦。 幸运的是,很容易告诉防火墙让我们通过。

首先,我们必须弄清楚服务器看到我们使用的 IP 地址。 我们可以通过发出 who 命令来找到该信息。

[email protected]:~$ who
user  pts/0     2021-01-02 23:55 (192.168.226.1) 

在那里我们可以看到我们当前的连接,它的远程 IP 地址在括号中。 然后我们将该 IP 地址列入白名单,因此允许来自我们 IP 的任何连接。

[email protected]:~$ sudo ufw allow from 192.168.226.1
Rules updated 

启用防火墙

即使我们已经添加了我们的第一条规则,防火墙还没有过滤任何东西。 我们可以通过运行 ufw enable 来改变它。

[email protected]:~$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup 

我们现在收到一个明确的警告,该命令可能会破坏现有的 SSH 连接。 这是一个很好的健全性检查,以确保我们实际上已经完成了允许自己访问的早期步骤。 既然我们已经做到了,我们继续说是。

在检查服务器状态时,我们现在看到防火墙处于活动状态。 此外,它默认拒绝传入连接,只有一个规则。

 [email protected]:~$ sudo ufw status verbose
 Status: active
 Logging: on (low)
 Default: deny (incoming), allow (outgoing), disabled (routed)
 New profiles: skip
 To                      Action   From
 --                      ------   ----
 Anywhere                ALLOW IN 192.168.226.1 

添加和删​​除防火墙规则

由于我们计划将其用作 Web 服务器,因此需要打开端口 80 和 443。这些是 HTTP 和 HTTPS 流量的常用端口。 虽然我们可以使用端口号添加规则,但 ufw 包括使用服务名称的功能。

 [email protected]:~$ sudo ufw allow 80/tcp
 Rule added
 Rule added (v6)
 [email protected]:~$ sudo ufw allow https
 Rule added
 Rule added (v6)
 [email protected]:~$ sudo ufw status
 Status: active
 To                      Action   From
 --                      ------   ----
 Anywhere                ALLOW    192.168.226.1
 80/tcp                  ALLOW    Anywhere
 443/tcp                 ALLOW    Anywhere
 80/tcp (v6)             ALLOW    Anywhere (v6)
 443/tcp (v6)            ALLOW    Anywhere (v6) 

在这里,我们使用端口号 (80) 允许 HTTP 流量,并使用服务名称允许 HTTPS 流量。 注意结果是一样的; 端口 80 和 443 现在对 IPv4 和 IPv6 流量都开放。

协议

/etc/services 文件中提供了完整的协议列表。 它很长,但我们可以通过运行 less /etc/services 命令来查看它。 一些需要记住的有用协议如下。

对于电子邮件传输:

  • SMTP/SMTPS
  • POP3/POP3S
  • IMAP/IMAP

对于文件传输:

  • FTP/FTPS

上述以 S 结尾的协议表示通过 TLS 协议等价物的安全使用。 有很多选项可供选择,具体取决于我们计划对服务器做什么。

添加允许规则

来个实用的 example. 想象一下,我们有一个远程开发人员需要连接到服务器上的 MySQL 数据库。 同样,只允许我们需要的连接是一个好主意。 所以,我们只想打开这个端口到他们的 IP 地址。 如果他们的 IP 是,对于 example, 192.168.1.50,我们可以使用以下命令让他们访问 MySQL 端口:

 [email protected]:~$ sudo ufw allow from 192.168.1.50 to any port mysql
 Rule added
 [email protected]:~$ sudo ufw status
 Status: active
 To                      Action   From
 --                      ------   ----
 Anywhere                ALLOW    192.168.226.1
 80/tcp                  ALLOW    Anywhere
 443/tcp                 ALLOW    Anywhere
 3306/tcp                ALLOW    192.168.1.50
 80/tcp (v6)             ALLOW    Anywhere (v6)
 443/tcp (v6)            ALLOW    Anywhere (v6) 

添加拒绝规则

请注意,端口 3306 现在仅对开发人员的 IP 开放。 一旦我们决定他们不再需要此访问权限,我们就可以删除该规则。 我们使用 ufw delete 运行相同的命令来完成此操作,如下所示。

 [email protected]:~$ sudo ufw delete allow from 192.168.1.50 to any port mysql
 Rule deleted 

如果出于任何原因,我们想完全阻止这位前开发人员访问我们的服务器,我们可以使用此命令轻松完成。

 [email protected]:~$ sudo ufw deny from 192.168.1.50
 Rule added 

上述命令对 IP 范围或子网的作用相同,例如 192.168.0.0/24。 允许来自内部 IP 地址的连接可以节省时间。

删除规则

删除规则的另一种简单方法是按编号寻址。 我们可以通过运行 ufw status numbered 来查看每个规则的编号。

 [email protected]:~$ sudo ufw status numbered
 Status: active
      To                         Action      From
      --                         ------      ----
 [ 1] Anywhere                   ALLOW IN    192.168.226.1
 [ 2] 80/tcp                     ALLOW IN    Anywhere
 [ 3] 443/tcp                    ALLOW IN    Anywhere
 [ 4] Anywhere                   DENY IN     192.168.1.50
 [ 5] 80/tcp (v6)                ALLOW IN    Anywhere (v6)
 [ 6] 443/tcp (v6)               ALLOW IN    Anywhere (v6)
 [email protected]:~$ sudo ufw delete 4
 Deleting:
  deny from 192.168.1.50
 Proceed with operation (y|n)? y
 Rule deleted 

应用程序集成

ufw 的另一个非常有用的功能是我们安装的应用程序能够在 Ubuntu 防火墙上注册自己。 我们可以使用 ufw app list 命令查看这些规则。 在下面的 example,我们已经有了 Apache 并安装了 OpenSSH。 列表功能使我们能够轻松打开其他端口。

 [email protected]:~$ sudo apt install apache2
 [...]
 apache2 is already the newest version (2.4.41-4ubuntu3.1).
 [email protected]:~$ sudo ufw app list
 Available applications:
   Apache
   Apache Full
   Apache Secure
   OpenSSH 

有了这个,我们可以使用服务的全名来快速允许或拒绝完整的服务。 为了这 example,我们还删除了之前添加的端口 80 和 443。

 [email protected]:~$ sudo ufw status
 Status: active
 To                      Action   From
 --                      ------   ----
 Anywhere                ALLOW    192.168.226.1
 [email protected]:~$ sudo ufw allow "Apache Full"
 Rule added
 Rule added (v6)
 [email protected]:~$ sudo ufw status
 Status: active
 To                      Action   From
 --                      ------   ----
 Anywhere                ALLOW    192.168.226.1
 Apache Full             ALLOW    Anywhere
 Apache Full (v6)        ALLOW    Anywhere (v6) 

这些应用程序集成与我们之前使用的化名不同(分别用于 HTTPS 和 MySQL)。 它允许应用程序为其特定需求制定复杂的规则,而不是简单地转换为单个开放端口。 同样,它让我们只需一个命令就可以方便地启用或禁用此应用程序所需的所有规则。

结论

ufw 中包含了更多超出本文范围的工具。 这些包括日志记录控制、更复杂的规则语法、速率限制和多个网络接口的管理。 如果您对与此 Ubuntu 防火墙工具相关的高级功能感兴趣,我们鼓励您在非生产服务器或虚拟机上探索 ufw,我们更愿意在那里进行更改。 更多的 有关 ufw 功能的信息 可以通过手册页找到。

我们以成为 Hosting™ 中最有帮助的人而自豪!

我们的技术支持人员一年 365 天、每周 7 天、每天 24 小时随时为您提供与本文相关的任何问题的帮助。

我们可以通过我们的票务系统 [email protected]、电话(800-580-4986)或通过 在线聊天 或任何你喜欢的方法。 我们为您努力工作,以便您可以放松。

相关阅读:

Posted in: LinuxTags: ,