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

正确配置的防火墙是整个系统安全性最重要的方面之一。默认情况下, Ubuntu 附带一个名为 UFW (Uncomplicated Firewall) 的防火墙配置工具。 UFW 是一个用户友好的前端,用于管理 iptables 防火墙规则,其主要目标是使管理 iptables 更容易,或者就像它的名字一样不复杂。

先决条件

在开始本教程之前,请确保使用具有 sudo 权限的用户帐户或 root 用户登录到您的服务器。最佳做法是将管理命令作为 sudo 用户运行而不是 root 用户。如果您的 Ubuntu 系统上没有 sudo 用户,您可以按照这些说明创建一个。

安装 UFW

默认情况下,应在 Ubuntu 18.04 中已经安装 UFW,但如果系统上未安装,则可以通过输入以下内容来安装软件包:

1
sudo apt install ufw

检查 UFW 状态

安装完成后,您可以使用以下命令检查 UFW 的状态:

1
sudo ufw status verbose

默认情况下禁用 UFW 。如果之前从未激活过 UFW ,输出将如下所示:

1
Status: inactive

如果激活了 UFW ,输出将类似于以下内容:

1
2
3
4
5
6
7
8
9
10
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
8080/tcp ALLOW IN Anywhere

UFW 默认策略

默认情况下, UFW 将阻止所有输入连接并允许所有出站连接。这意味着除非您专门打开端口,否则任何尝试访问您的服务器的人都无法连接,而您服务器上运行的所有应用程序和服务都将能够访问外部世界。

默认策略在 /etc/default/ufw 文件中定义,可以使用该 sudo ufw default <policy> <chain> 命令进行更改。

防火墙策略是构建更详细和用户定义规则的基础。在大多数情况下,最初的 UFW 默认策略是一个很好的起点。

应用配置

使用该 apt 命令一个安装软件包时,就会添加一个应用程序配置文件到 /etc/ufw/applications.d 目录。该配置文件描述了该服务并包含 UFW 设置。

您可以通过输入以下内容列出服务器上可用的所有应用程序配置

1
sudo ufw app list

根据系统上安装的软件包,输出将类似于以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
Available applications:
Dovecot IMAP
Dovecot POP3
Dovecot Secure IMAP
Dovecot Secure POP3
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
Postfix
Postfix SMTPS
Postfix Submission

要查找一个指定配置文件和包含规则的更多信息,请使用以下命令:

1
sudo ufw app info 'Nginx Full'
1
2
3
4
5
6
Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server

Ports:
80,443/tcp

正如您从上面的输出中看到的 ‘Nginx Full’ 配置文件打开端口 80443

允许 SSH 连接

在启用 UFW 防火墙之前,我们需要添加允许输入 SSH 连接的规则。如果您从远程位置连接到服务器(几乎总是如此)并且在明确允许输入 SSH 连接之前启用 UFW 防火墙,您将无法再连接到 Ubuntu 服务器。

要配置 UFW 防火墙以允许输入 SSH 连接,请输入以下命令:

1
sudo ufw allow ssh
1
2
Rules updated
Rules updated (v6)

如果您将 SSH 端口更改为自定义端口而不是端口 22 ,则需要打开该端口。

例如,如果您的 ssh 守护程序侦听端口 4422 ,则可以使用以下命令允许该端口上的连接:

1
sudo ufw allow 4422/tcp

启用 UFW

既然您的 UFW 防火墙已配置为允许输入 SSH 连接,我们可以通过输入以下内容来启用它:

1
sudo ufw enable
1
2
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

您将收到警告,启用防火墙可能会破坏现有的 ssh 连接,只需输入 y 并命中即可 Enter

允许其他端口上的连接

根据服务器上运行的应用程序和您的特定需求,您还需要允许对其他端口的传入访问。

下面我们将向您展示一些关于如何允许传入连接到一些最常见服务的示例:

打开端口 80 - HTTP

使用以下命令可以允许 HTTP 连接:

1
sudo ufw allow http

或者你可以使用端口号 80 而不是 http

1
sudo ufw allow 80/tcp

或者您可以使用应用程序配置文件,在本例中为 Nginx HTTP

1
sudo ufw allow 'Nginx HTTP'

打开端口 443 - HTTPS

使用以下命令可以允许 HTTPS 连接:

1
sudo ufw allow https

h或者您可以使用端口 443 而不是使用 https 达到相同的目的 :

1
sudo ufw allow 443/tcp

或者您可以使用应用程序配置文件 ‘Nginx HTTPS’ :

1
sudo ufw allow 'Nginx HTTPS'

打开端口 8080

如果运行 Tomcat 或任何其他侦听端口 8080 的应用程序, 通过以下命令允许传入连接:

1
sudo ufw allow 8080/tcp

允许端口范围

UFW 允许我们设置允许访问端口的范围,而不是仅仅允许设置访问单个端口。使用 UFW 设置允许的端口范围时,必须指定协议, tcp 或者 udp 。例如,如果你想允许从端口 71007200 以及 tcpudp 则运行以下命令:

1
2
sudo ufw allow 7100:7200/tcp
sudo ufw allow 7100:7200/udp

允许特定的 IP 地址

要允许从计算机 (IP 地址为 64.63.62.61) 上的所有端口访问 ,请通过 from 后面跟上 IP 地址来添加白名单 :

1
sudo ufw allow from 64.63.62.61

允许特定端口上的特定 IP 地址

要允许来自 IP 地址为 64.63.62.61 的计算机在特定端口 (比如端口 22 ) 上访问,请使用 to any port 后跟端口号:

1
sudo ufw allow from 64.63.62.61 to any port 22

允许子网

允许子网的 IP 地址连接的命令与使用单个 IP 地址时的命令相同,唯一的区别是您需要指定网络掩码。例如,如果要允许从 192.168.1.1192.168.1.254 范围的 IP 地址到端口 3360 (MySQL) 的访问,可以使用以下命令:

1
sudo ufw allow from 192.168.1.0/24 to any port 3306

允许连接到特定的网络接口

要只允许到特定网络接口 eth2 在特定端口 (比如说 3360 ) 上访问,您需要通过 allow in on 指定网络接口的名称:

1
sudo ufw allow in on eth2 to any port 3306

拒绝连接

所有传入连接的默认策略都设置为 deny ,如果您尚未更改它, UFW 将阻止所有输入连接,除非您专门打开连接。

假设您打开了端口 80443 并且您的服务器受到来自 23.24.25.0/24 网络的攻击。要拒绝来自 23.24.25.0/24 您的所有连接,可以使用以下命令:

1
sudo ufw deny from 23.24.25.0/24

如果你只是想拒绝从 23.24.25.0/24 到端口 80443 的访问,您可以使用下面的命令:

1
2
sudo ufw deny from 23.24.25.0/24 to any port 80
sudo ufw deny from 23.24.25.0/24 to any port 443

写拒绝规则和写允许规则是一样的,你只需要 用 deny 更换 allow

删除 UFW 规则

有两种不同的方法可以删除 UFW 规则,根据规则编号或者根据实际规则,。

如果您不熟悉 UFW ,则按规则编号删除 UFW 规则会更容易。要按规则号删除规则,您需要先找到要删除的规则的编号,您可以使用以下命令执行此操作:

1
sudo ufw status numbered
1
2
3
4
5
6
7
Status: active

To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 8080/tcp ALLOW IN Anywhere

要删除 3 号规则(允许连接到端口 8080 的规则),请使用以下命令:

1
sudo ufw delete 3

第二种方法是通过指定实际规则来删除规则,例如,如果您添加规则以打开端口 8069 ,则可以使用以下命令将其删除:

1
sudo ufw delete allow 8069

禁用 UFW

如果您出于任何原因想要停止使用 UFW 并停用所有可以使用的规则:

1
sudo ufw disable

稍后如果要重新启用 UTF 并激活所有规则,只需输入:

1
sudo ufw enable

重置 UFW

重置 UFW 将禁用 UFW ,并删除所有活动的规则。如果您想要还原所有更改并重新开始,这非常有用。

要重置 UFW ,只需输入以下命令:

1
sudo ufw reset

结论

您已经学习了如何在 Ubuntu 18.04 服务器上安装和配置 UFW 防火墙。确保允许系统正常运行所需的所有输入连接,同时限制所有不必要的连接。