介绍
UFW(uncomplicated firewall)是一个运行在iptables
之上的防火墙配置工具,已经默认包含在Ubuntu发行版中。它提供了一个简化的界面,通过命令行配置常见的防火墙用例。
这份速查表样式的指南提供了常见的UFW用例和命令的快速参考,包括如何通过端口、网络接口和源IP地址允许和阻止服务的示例。
如何使用本指南
- 本指南采用速查表格式,包含了自包含的命令行片段。
- 跳转到任何与您正在尝试完成的任务相关的部分。
- 当您在本指南的命令中看到突出显示的文本时,请记住,此文本应指您自己网络中的IP地址。
请记住,您可以使用sudo ufw status
或sudo ufw status verbose
检查当前的UFW规则集。
使用DigitalOcean App Platform从GitHub部署您的前端应用程序。让DigitalOcean专注于扩展您的应用。
验证UFW状态
要检查 ufw
是否已启用,请运行:
OutputStatus: inactive
输出将指示防火墙是否处于活动状态。
启用 UFW
如果在运行 ufw status
时收到 Status: inactive
消息,则意味着系统上尚未启用防火墙。您需要运行一个命令来启用它。
默认情况下,启用 UFW 会阻止服务器上所有端口的外部访问。实际上,这意味着如果您通过 SSH 连接到服务器,并在允许通过 SSH 端口访问之前启用了 ufw
,您将会被断开连接。如果您的情况是这样,请确保在启用防火墙之前遵循本指南中关于如何启用 SSH 访问的部分。
要在您的系统上启用 UFW,请运行:
您将看到类似以下的输出:
OutputFirewall is active and enabled on system startup
要查看当前被阻止或允许的内容,您可以在运行 ufw status
时使用 verbose
参数,如下:
OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
禁用 UFW
如果由于某种原因您需要禁用 UFW,您可以使用以下命令执行此操作:
请注意,此命令将完全禁用系统上的防火墙服务。
阻止IP地址
要阻止所有源自特定IP地址的网络连接,请运行以下命令,将突出显示的IP地址替换为要阻止的IP地址:
OutputRule added
在这个示例中,from 203.0.113.100
指定了一个源IP地址为“203.0.113.100”。
如果现在运行 sudo ufw status
,你会看到指定的IP地址被列为被拒绝:
OutputStatus: active
To Action From
-- ------ ----
Anywhere DENY 203.0.113.100
所有进出的连接都被阻止了指定的IP地址。
阻止一个子网
如果需要阻止整个子网,可以使用子网地址作为 ufw deny
命令的 from
参数。这将阻止示例子网 203.0.113.0/24
中的所有IP地址:
OutputRule added
阻止网络接口的传入连接
要阻止特定IP地址对特定网络接口的传入连接,运行以下命令,将突出显示的IP地址替换为要阻止的IP地址:
OutputRule added
参数in
告诉ufw
仅对传入连接应用规则,参数on eth0
指定规则仅适用于eth0
接口。如果您有一个带有多个网络接口(包括虚拟接口)的系统,并且需要阻止对其中一些接口的外部访问,但不是全部,则可能会有所帮助。
允许IP地址
要允许来自特定IP地址的所有网络连接,请运行以下命令,将突出显示的IP地址替换为您要允许访问的IP地址:
OutputRule added
如果现在运行sudo ufw status
,您将看到类似于此输出,显示刚刚添加的IP地址旁边的ALLOW
一词。
OutputStatus: active
To Action From
-- ------ ----
...
Anywhere ALLOW 203.0.113.101
您还可以通过提供主机的相应子网掩码来允许来自整个子网的连接,例如203.0.113.0/24
。
允许对网络接口的传入连接
要允许特定IP地址的入站连接到特定的网络接口,请运行以下命令,将突出显示的IP地址替换为您想要允许的IP地址:
OutputRule added
in
参数告诉ufw
仅对入站连接应用规则,on eth0
参数指定规则仅适用于eth0
接口。
如果现在运行sudo ufw status
,您将看到类似于以下输出:
OutputStatus: active
To Action From
-- ------ ----
...
Anywhere on eth0 ALLOW 203.0.113.102
删除UFW规则
要删除之前在UFW中设置的规则,请使用ufw delete
,后跟规则(allow
或deny
)和目标规范。以下示例将删除先前设置为允许来自IP地址203.0.113.101
的所有连接的规则:
OutputRule deleted
另一种指定要删除的规则的方法是通过提供规则ID。此信息可以通过以下命令获取:
OutputStatus: 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.102
的eth0
接口的连接。
因为默认情况下 UFW 已经阻止了所有外部访问,除非显式允许,第一个规则是多余的,所以你可以移除它。要按 ID 删除规则,请运行:
系统会提示您确认操作,并确保您提供的 ID 指的是要删除的正确规则。
OutputDeleting:
deny from 203.0.113.100
Proceed with operation (y|n)? y
Rule deleted
如果您再次使用 sudo ufw status
列出规则,您会看到该规则已被删除。
列出可用的应用程序配置文件
在安装过程中,依赖网络通信的应用程序通常会设置一个 UFW 配置文件,您可以使用该配置文件允许来自外部地址的连接。这通常与运行 ufw allow from
相同,但具有提供快捷方式的优势,该快捷方式将服务使用的特定端口号抽象出来,并提供了一个友好的名称来引用服务。
要列出当前可用的配置文件,请运行以下命令:
如果您安装了诸如 Web 服务器或其他依赖网络的软件,并且在 UFW 中没有提供配置文件,请首先确保服务已启用。对于远程服务器,您通常会有 OpenSSH 可用:
OutputAvailable applications:
OpenSSH
启用应用程序配置文件
要启用UFW应用程序配置文件,请运行ufw allow
,然后是要启用的应用程序配置文件的名称,您可以使用sudo ufw app list
命令获取该名称。在下面的示例中,我们正在启用OpenSSH配置文件,这将允许默认SSH端口上的所有传入SSH连接。
OutputRule added
Rule added (v6)
请记住,对于由多个单词组成的配置文件名称,例如Nginx HTTPS
,请使用引号括起来。
禁用应用程序配置文件
要禁用您之前在UFW中设置的应用程序配置文件,您需要删除其相应的规则。例如,请考虑sudo ufw status
的以下输出:
OutputStatus: 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
规则:
请记住,您可以使用sudo ufw app list
命令列出所有可用的应用程序配置文件。
允许SSH
在使用远程服务器时,您需要确保SSH端口对连接是开放的,以便您能够远程登录到服务器。
以下命令将启用OpenSSH UFW应用程序配置文件,并允许所有连接到服务器上默认SSH端口的连接:
OutputRule added
Rule added (v6)
虽然不太用户友好,但另一种语法是指定SSH服务的确切端口号,通常默认设置为22
:
OutputRule added
Rule added (v6)
允许特定IP地址或子网的SSH入站连接
为了允许来自特定IP地址或子网的入站连接,您将包括一个from
指令来定义连接的来源。这将要求您还使用to
参数指定目标地址。为了将此规则限制为仅适用于SSH,您将限制proto
(协议)为tcp
,然后使用port
参数并将其设置为22
,即SSH的默认端口。
以下命令将仅允许来自 IP 地址 203.0.113.103
的 SSH 连接:
OutputRule added
您还可以使用子网地址作为 from
参数,以允许来自整个网络的传入 SSH 连接:
OutputRule added
允许特定 IP 地址或子网的传入 Rsync 连接
运行在端口 873
上的 Rsync 程序可用于在计算机之间传输文件。
要允许特定 IP 地址或子网的传入 rsync
连接,请使用 from
参数指定源 IP 地址,并使用 port
参数设置目标端口 873
。
以下命令将仅允许来自 IP 地址 203.0.113.103
的 Rsync 连接:
OutputRule added
要允许整个 203.0.113.0/24
子网能够向您的服务器 rsync
,运行:
OutputRule added
允许 Nginx HTTP / HTTPS
安装完成后,Nginx Web服务器会在服务器中设置几个不同的UFW配置文件。一旦安装并将Nginx作为服务启用,运行以下命令以确定可用的配置文件:
Output Nginx Full
Nginx HTTP
Nginx HTTPS
要启用HTTP和HTTPS流量,请选择Nginx Full
。否则,选择Nginx HTTP
只允许HTTP或Nginx HTTPS
只允许HTTPS。
以下命令将允许服务器上的HTTP和HTTPS流量(端口80
和443
):
OutputRule added
Rule added (v6)
允许Apache HTTP / HTTPS
安装完成后,Apache Web服务器会在服务器中设置几个不同的UFW配置文件。一旦安装并将Apache作为服务启用,运行以下命令以确定可用的配置文件:
Output Apache
Apache Full
Apache Secure
要启用HTTP和HTTPS流量,请选择Apache Full
。否则,选择Apache
用于HTTP或Apache Secure
用于HTTPS。
以下命令将允许服务器上的HTTP和HTTPS流量(端口80
和443
):
OutputRule added
Rule added (v6)
允许所有传入的HTTP流量(端口80
)
Web服务器(如Apache和Nginx)通常在端口80
上监听HTTP请求。如果您的默认入站流量策略设置为拒绝或丢弃,您需要创建一个UFW规则来允许外部访问端口80
。您可以使用端口号或服务名称(http
)作为此命令的参数。
要允许所有传入的HTTP(端口80
)连接,请运行:
OutputRule added
Rule added (v6)
另一种语法是指定HTTP服务的端口号:
OutputRule added
Rule added (v6)
允许所有传入的HTTPS(端口443
)
HTTPS通常在端口443
上运行。如果您的默认入站流量策略设置为拒绝或丢弃,您需要创建一个UFW规则来允许外部访问端口443
。您可以使用端口号或服务名称(https
)作为此命令的参数。
要允许所有传入的HTTPS(端口443
)连接,请运行:
OutputRule added
Rule added (v6)
另一种语法是指定HTTPS服务的端口号:
OutputRule added
Rule added (v6)
允许所有传入的HTTP和HTTPS
如果您想要允许HTTP和HTTPS流量,您可以创建一个允许这两个端口的单个规则。此用法要求您还使用proto
参数定义协议,此处应设置为tcp
。
要允许所有传入的HTTP和HTTPS(端口80
和443
)连接,请运行:
OutputRule added
Rule added (v6)
允许特定IP地址或子网的MySQL连接
MySQL侦听客户端连接的端口为3306
。如果您的MySQL数据库服务器被远程服务器上的客户端使用,您需要创建一个UFW规则来允许该访问。
要允许来自特定IP地址或子网的MySQL传入连接,请使用from
参数指定源IP地址,port
参数设置目标端口3306
。
以下命令将允许IP地址203.0.113.103
连接到服务器的MySQL端口:
OutputRule added
要允许整个203.0.113.0/24
子网能够连接到您的MySQL服务器,请运行:
OutputRule added
允许特定 IP 地址或子网的 PostgreSQL 连接
PostgreSQL 在端口 5432
上监听客户端连接。如果您的 PostgreSQL 数据库服务器被远程服务器上的客户端使用,您需要确保允许该流量。
为了允许特定 IP 地址或子网的 PostgreSQL 连入,可以使用 from
参数指定源,并将端口设置为 5432
:
OutputRule added
要允许整个 203.0.113.0/24
子网连接到您的 PostgreSQL 服务器,运行:
OutputRule added
阻止外发 SMTP 邮件
邮件服务器(如 Sendmail 和 Postfix)通常使用端口 25
进行 SMTP 流量。如果您的服务器不应该发送外发邮件,您可能希望阻止该类型的流量。要阻止外发 SMTP 连接,请运行:
OutputRule added
Rule added (v6)
这会配置您的防火墙以 拒绝 所有在端口 25
上的外发流量。如果您需要拒绝其他端口号的外发连接,您可以重复此命令,并将 25
替换为要阻止的端口号。
结论
UFW 是一个强大的工具,当正确配置时,可以极大地提高服务器的安全性。这个参考指南涵盖了一些常用的 UFW 规则,通常用于在 Ubuntu 上配置防火墙。
本指南中的大多数命令可以根据不同的用例和场景进行调整,通过更改参数,如源 IP 地址和/或目标端口。要获取有关每个命令参数和可用修饰符的更详细信息,您可以使用 man
实用程序来检查 UFW 的手册:
另一个资源是 Ubuntu 文档中的官方 UFW 页面,可作为更高级用例和示例的参考。
Source:
https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands