UFW基础知识:常见防火墙规则和命令

介绍

UFW(uncomplicated firewall)是一个运行在iptables之上的防火墙配置工具,已经默认包含在Ubuntu发行版中。它提供了一个简化的界面,通过命令行配置常见的防火墙用例。

这份速查表样式的指南提供了常见的UFW用例和命令的快速参考,包括如何通过端口、网络接口和源IP地址允许和阻止服务的示例。

如何使用本指南

  • 本指南采用速查表格式,包含了自包含的命令行片段。
  • 跳转到任何与您正在尝试完成的任务相关的部分。
  • 当您在本指南的命令中看到突出显示的文本时,请记住,此文本应指您自己网络中的IP地址。

请记住,您可以使用sudo ufw statussudo ufw status verbose检查当前的UFW规则集。

使用DigitalOcean App Platform从GitHub部署您的前端应用程序。让DigitalOcean专注于扩展您的应用。

验证UFW状态

要检查 ufw 是否已启用,请运行:

  1. sudo ufw status
Output
Status: inactive

输出将指示防火墙是否处于活动状态。

启用 UFW

如果在运行 ufw status 时收到 Status: inactive 消息,则意味着系统上尚未启用防火墙。您需要运行一个命令来启用它。

默认情况下,启用 UFW 会阻止服务器上所有端口的外部访问。实际上,这意味着如果您通过 SSH 连接到服务器,并在允许通过 SSH 端口访问之前启用了 ufw,您将会被断开连接。如果您的情况是这样,请确保在启用防火墙之前遵循本指南中关于如何启用 SSH 访问的部分。

要在您的系统上启用 UFW,请运行:

  1. sudo ufw enable

您将看到类似以下的输出:

Output
Firewall is active and enabled on system startup

要查看当前被阻止或允许的内容,您可以在运行 ufw status 时使用 verbose 参数,如下:

  1. sudo ufw status
Output
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), deny (routed) New profiles: skip

禁用 UFW

如果由于某种原因您需要禁用 UFW,您可以使用以下命令执行此操作:

  1. sudo ufw disable

请注意,此命令将完全禁用系统上的防火墙服务。

阻止IP地址

要阻止所有源自特定IP地址的网络连接,请运行以下命令,将突出显示的IP地址替换为要阻止的IP地址:

  1. sudo ufw deny from 203.0.113.100
Output
Rule added

在这个示例中,from 203.0.113.100 指定了一个源IP地址为“203.0.113.100”。

如果现在运行 sudo ufw status,你会看到指定的IP地址被列为被拒绝:

Output
Status: active To Action From -- ------ ---- Anywhere DENY 203.0.113.100

所有进出的连接都被阻止了指定的IP地址。

阻止一个子网

如果需要阻止整个子网,可以使用子网地址作为 ufw deny 命令的 from 参数。这将阻止示例子网 203.0.113.0/24 中的所有IP地址:

  1. sudo ufw deny from 203.0.113.0/24
Output
Rule added

阻止网络接口的传入连接

要阻止特定IP地址对特定网络接口的传入连接,运行以下命令,将突出显示的IP地址替换为要阻止的IP地址:

  1. sudo ufw deny in on eth0 from 203.0.113.100
Output
Rule added

参数in告诉ufw仅对传入连接应用规则,参数on eth0指定规则仅适用于eth0接口。如果您有一个带有多个网络接口(包括虚拟接口)的系统,并且需要阻止对其中一些接口的外部访问,但不是全部,则可能会有所帮助。

允许IP地址

要允许来自特定IP地址的所有网络连接,请运行以下命令,将突出显示的IP地址替换为您要允许访问的IP地址:

  1. sudo ufw allow from 203.0.113.101
Output
Rule added

如果现在运行sudo ufw status,您将看到类似于此输出,显示刚刚添加的IP地址旁边的ALLOW一词。

Output
Status: active To Action From -- ------ ---- ... Anywhere ALLOW 203.0.113.101

您还可以通过提供主机的相应子网掩码来允许来自整个子网的连接,例如203.0.113.0/24

允许对网络接口的传入连接

要允许特定IP地址的入站连接到特定的网络接口,请运行以下命令,将突出显示的IP地址替换为您想要允许的IP地址:

  1. sudo ufw allow in on eth0 from 203.0.113.102
Output
Rule added

in参数告诉ufw仅对入站连接应用规则,on eth0参数指定规则仅适用于eth0接口。

如果现在运行sudo ufw status,您将看到类似于以下输出:

Output
Status: active To Action From -- ------ ---- ... Anywhere on eth0 ALLOW 203.0.113.102

删除UFW规则

要删除之前在UFW中设置的规则,请使用ufw delete,后跟规则(allowdeny)和目标规范。以下示例将删除先前设置为允许来自IP地址203.0.113.101的所有连接的规则:

  1. sudo ufw delete allow from 203.0.113.101
Output
Rule deleted

另一种指定要删除的规则的方法是通过提供规则ID。此信息可以通过以下命令获取:

  1. sudo ufw status numbered
Output
Status: active To Action From -- ------ ---- [ 1] Anywhere DENY IN 203.0.113.100 [ 2] Anywhere on eth0 ALLOW IN 203.0.113.102

从输出中,您可以看到有两条活动规则。第一条规则,突出显示的值,拒绝来自IP地址203.0.113.100的所有连接。第二条规则允许来自IP地址203.0.113.102eth0接口的连接。

因为默认情况下 UFW 已经阻止了所有外部访问,除非显式允许,第一个规则是多余的,所以你可以移除它。要按 ID 删除规则,请运行:

  1. sudo ufw delete 1

系统会提示您确认操作,并确保您提供的 ID 指的是要删除的正确规则。

Output
Deleting: deny from 203.0.113.100 Proceed with operation (y|n)? y Rule deleted

如果您再次使用 sudo ufw status 列出规则,您会看到该规则已被删除。

列出可用的应用程序配置文件

在安装过程中,依赖网络通信的应用程序通常会设置一个 UFW 配置文件,您可以使用该配置文件允许来自外部地址的连接。这通常与运行 ufw allow from 相同,但具有提供快捷方式的优势,该快捷方式将服务使用的特定端口号抽象出来,并提供了一个友好的名称来引用服务。

要列出当前可用的配置文件,请运行以下命令:

  1. sudo ufw app list

如果您安装了诸如 Web 服务器或其他依赖网络的软件,并且在 UFW 中没有提供配置文件,请首先确保服务已启用。对于远程服务器,您通常会有 OpenSSH 可用:

Output
Available applications: OpenSSH

启用应用程序配置文件

要启用UFW应用程序配置文件,请运行ufw allow,然后是要启用的应用程序配置文件的名称,您可以使用sudo ufw app list命令获取该名称。在下面的示例中,我们正在启用OpenSSH配置文件,这将允许默认SSH端口上的所有传入SSH连接。

  1. sudo ufw allow “OpenSSH”
Output
Rule added Rule added (v6)

请记住,对于由多个单词组成的配置文件名称,例如Nginx HTTPS,请使用引号括起来。

禁用应用程序配置文件

要禁用您之前在UFW中设置的应用程序配置文件,您需要删除其相应的规则。例如,请考虑sudo ufw status的以下输出:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

此输出指示当前启用了Nginx Full应用程序配置文件,允许通过HTTP和HTTPS连接到Web服务器的任何和所有连接。如果您只想允许来自Web服务器的HTTPS请求,并且向Web服务器发送HTTPS请求,则必须首先启用最严格的规则,即此处的Nginx HTTPS,然后禁用当前活动的Nginx Full规则:

  1. sudo ufw allow "Nginx HTTPS"
  2. sudo ufw delete allow "Nginx Full"

请记住,您可以使用sudo ufw app list命令列出所有可用的应用程序配置文件。

允许SSH

在使用远程服务器时,您需要确保SSH端口对连接是开放的,以便您能够远程登录到服务器。

以下命令将启用OpenSSH UFW应用程序配置文件,并允许所有连接到服务器上默认SSH端口的连接:

  1. sudo ufw allow OpenSSH
Output
Rule added Rule added (v6)

虽然不太用户友好,但另一种语法是指定SSH服务的确切端口号,通常默认设置为22

  1. sudo ufw allow 22
Output
Rule added Rule added (v6)

允许特定IP地址或子网的SSH入站连接

为了允许来自特定IP地址或子网的入站连接,您将包括一个from指令来定义连接的来源。这将要求您还使用to参数指定目标地址。为了将此规则限制为仅适用于SSH,您将限制proto(协议)为tcp,然后使用port参数并将其设置为22,即SSH的默认端口。

以下命令将仅允许来自 IP 地址 203.0.113.103 的 SSH 连接:

  1. sudo ufw allow from 203.0.113.103 proto tcp to any port 22
Output
Rule added

您还可以使用子网地址作为 from 参数,以允许来自整个网络的传入 SSH 连接:

  1. sudo ufw allow from 203.0.113.0/24 proto tcp to any port 22
Output
Rule added

允许特定 IP 地址或子网的传入 Rsync 连接

运行在端口 873 上的 Rsync 程序可用于在计算机之间传输文件。

要允许特定 IP 地址或子网的传入 rsync 连接,请使用 from 参数指定源 IP 地址,并使用 port 参数设置目标端口 873
以下命令将仅允许来自 IP 地址 203.0.113.103 的 Rsync 连接:

  1. sudo ufw allow from 203.0.113.103 to any port 873
Output
Rule added

要允许整个 203.0.113.0/24 子网能够向您的服务器 rsync,运行:

  1. sudo ufw allow from 203.0.113.0/24 to any port 873
Output
Rule added

允许 Nginx HTTP / HTTPS

安装完成后,Nginx Web服务器会在服务器中设置几个不同的UFW配置文件。一旦安装并将Nginx作为服务启用,运行以下命令以确定可用的配置文件:

  1. sudo ufw app list | grep Nginx
Output
Nginx Full Nginx HTTP Nginx HTTPS

要启用HTTP和HTTPS流量,请选择Nginx Full。否则,选择Nginx HTTP只允许HTTP或Nginx HTTPS只允许HTTPS。

以下命令将允许服务器上的HTTP和HTTPS流量(端口80443):

  1. sudo ufw allow "Nginx Full"
Output
Rule added Rule added (v6)

允许Apache HTTP / HTTPS

安装完成后,Apache Web服务器会在服务器中设置几个不同的UFW配置文件。一旦安装并将Apache作为服务启用,运行以下命令以确定可用的配置文件:

  1. sudo ufw app list | grep Apache
Output
Apache Apache Full Apache Secure

要启用HTTP和HTTPS流量,请选择Apache Full。否则,选择Apache用于HTTP或Apache Secure用于HTTPS。

以下命令将允许服务器上的HTTP和HTTPS流量(端口80443):

  1. sudo ufw allow "Nginx Full"
Output
Rule added Rule added (v6)

允许所有传入的HTTP流量(端口80

Web服务器(如Apache和Nginx)通常在端口80上监听HTTP请求。如果您的默认入站流量策略设置为拒绝或丢弃,您需要创建一个UFW规则来允许外部访问端口80。您可以使用端口号或服务名称(http)作为此命令的参数。

要允许所有传入的HTTP(端口80)连接,请运行:

  1. sudo ufw allow http
Output
Rule added Rule added (v6)

另一种语法是指定HTTP服务的端口号:

  1. sudo ufw allow 80
Output
Rule added Rule added (v6)

允许所有传入的HTTPS(端口443

HTTPS通常在端口443上运行。如果您的默认入站流量策略设置为拒绝或丢弃,您需要创建一个UFW规则来允许外部访问端口443。您可以使用端口号或服务名称(https)作为此命令的参数。

要允许所有传入的HTTPS(端口443)连接,请运行:

  1. sudo ufw allow https
Output
Rule added Rule added (v6)

另一种语法是指定HTTPS服务的端口号:

  1. sudo ufw allow 443
Output
Rule added Rule added (v6)

允许所有传入的HTTP和HTTPS

如果您想要允许HTTP和HTTPS流量,您可以创建一个允许这两个端口的单个规则。此用法要求您还使用proto参数定义协议,此处应设置为tcp

要允许所有传入的HTTP和HTTPS(端口80443)连接,请运行:

  1. sudo ufw allow proto tcp from any to any port 80,443
Output
Rule added Rule added (v6)

允许特定IP地址或子网的MySQL连接

MySQL侦听客户端连接的端口为3306。如果您的MySQL数据库服务器被远程服务器上的客户端使用,您需要创建一个UFW规则来允许该访问。

要允许来自特定IP地址或子网的MySQL传入连接,请使用from参数指定源IP地址,port参数设置目标端口3306

以下命令将允许IP地址203.0.113.103连接到服务器的MySQL端口:

  1. sudo ufw allow from 203.0.113.103 to any port 3306
Output
Rule added

要允许整个203.0.113.0/24子网能够连接到您的MySQL服务器,请运行:

  1. sudo ufw allow from 203.0.113.0/24 to any port 3306
Output
Rule added

允许特定 IP 地址或子网的 PostgreSQL 连接

PostgreSQL 在端口 5432 上监听客户端连接。如果您的 PostgreSQL 数据库服务器被远程服务器上的客户端使用,您需要确保允许该流量。

为了允许特定 IP 地址或子网的 PostgreSQL 连入,可以使用 from 参数指定源,并将端口设置为 5432

  1. sudo ufw allow from 203.0.113.103 to any port 5432
Output
Rule added

要允许整个 203.0.113.0/24 子网连接到您的 PostgreSQL 服务器,运行:

  1. sudo ufw allow from 203.0.113.0/24 to any port 5432
Output
Rule added

阻止外发 SMTP 邮件

邮件服务器(如 Sendmail 和 Postfix)通常使用端口 25 进行 SMTP 流量。如果您的服务器不应该发送外发邮件,您可能希望阻止该类型的流量。要阻止外发 SMTP 连接,请运行:

  1. sudo ufw deny out 25
Output
Rule added Rule added (v6)

这会配置您的防火墙以 拒绝 所有在端口 25 上的外发流量。如果您需要拒绝其他端口号的外发连接,您可以重复此命令,并将 25 替换为要阻止的端口号。

结论

UFW 是一个强大的工具,当正确配置时,可以极大地提高服务器的安全性。这个参考指南涵盖了一些常用的 UFW 规则,通常用于在 Ubuntu 上配置防火墙。

本指南中的大多数命令可以根据不同的用例和场景进行调整,通过更改参数,如源 IP 地址和/或目标端口。要获取有关每个命令参数和可用修饰符的更详细信息,您可以使用 man 实用程序来检查 UFW 的手册:

  1. man ufw

另一个资源是 Ubuntu 文档中的官方 UFW 页面,可作为更高级用例和示例的参考。

Source:
https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands