介绍
UFW(uncomplicated firewall)是一个防火墙配置工具,运行在iptables
上,默认包含在Ubuntu发行版中。
此 Cheat Sheet 风格指南为常见 UFW 使用案例和命令提供了快速参考,包括如何通过端口、网络接口和源 IP 地址允许和阻止服务的示例。
如何使用此指南
- 此指南是 cheat sheet 格式,包含自含的命令行片段
- 跳到任何与您正在尝试完成的任务相关的部分
- 当您在本指南的命令中看到突出文本时,请记住,此文本应该指向您自己的网络的 IP 地址
请记住,你可以用sudo ufw status
或sudo ufw status verbose
来检查当前的UFW规则集。
查看 UFW 状态
要检查ufw
是否已启用,请运行:
1sudo ufw status
1[secondary_label Output]
2Status: inactive
输出将显示您的防火墙是否活跃。
允许 UFW
如果在运行ufw status
时收到状态:不活跃
消息,则意味着系统上尚未启用防火墙。
<$>[注]
默认情况下,在启用 UFW 时,它将阻止服务器上的所有端口的外部访问。在实践中,这意味着,如果您通过 SSH 连接到服务器并在允许通过 SSH 端口访问之前启用ufw
,则将被断开连接。
要在您的系统上启用 UFW,运行:
1sudo ufw enable
你会看到这样的输出:
1[secondary_label Output]
2Firewall is active and enabled on system startup
要查看目前被阻止或允许的内容,您可以在运行ufw status
时使用verbose
参数,如下所示:
1sudo ufw status
1[secondary_label Output]
2Status: active
3Logging: on (low)
4Default: deny (incoming), allow (outgoing), deny (routed)
5New profiles: skip
无障碍 UFW
如果出于某种原因,您需要禁用 UFW,您可以使用以下命令:
1sudo ufw disable
请注意,此命令将完全禁用您的系统上的防火墙服务。
阻止 IP 地址
若要阻止来自特定 IP 地址的所有网络连接,请执行以下命令,将突出的 IP 地址替换为您想要阻止的 IP 地址:
1sudo ufw deny from 203.0.113.100
1[secondary_label Output]
2Rule added
在本示例中,从 203.0.113.100
指定203.0.113.100
的 IP 地址。
如果你现在运行sudo ufw status
,你会看到指定的IP地址列为被拒绝的:
1[secondary_label Output]
2Status: active
3
4To Action From
5-- ------ ----
6Anywhere DENY 203.0.113.100
所有连接,无论是进出还是进出,都被阻止给定的IP地址。
区块链和子网
如果您需要阻止一个完整的子网,则可以在ufw deny
命令中使用子网地址作为from
参数,这将阻止示例子子网中的所有IP地址203.0.113.0/24
:
1sudo ufw deny from 203.0.113.0/24
1[secondary_label Output]
2Rule added
阻止接入到网络接口的连接
若要阻止从特定 IP 地址到特定网络接口的接入连接,请运行以下命令,将突出的 IP 地址替换为您想要阻止的 IP 地址:
1sudo ufw deny in on eth0 from 203.0.113.100
1[secondary_label Output]
2Rule added
在
参数告诉ufw
只适用于 接入连接,而on eth0
参数表示该规则仅适用于eth0
接口。
允许一个IP地址
若要允许来自特定 IP 地址的所有网络连接,请执行以下命令,将突出的 IP 地址替换为您想要允许访问的 IP 地址:
1sudo ufw allow from 203.0.113.101
1[secondary_label Output]
2Rule added
如果您现在运行sudo ufw 状态
,您将看到类似于此的输出,显示您刚刚添加的 IP 地址旁边的ALLOW
字。
1[secondary_label Output]
2Status: active
3
4To Action From
5-- ------ ----
6...
7Anywhere ALLOW 203.0.113.101
您还可以通过为主机提供相应的子网面具来允许来自整个子网的连接,例如「203.0.113.0/24」。
允许接入到网络接口的连接
若要允许从特定 IP 地址到特定网络接口的接入连接,请运行以下命令,将突出的 IP 地址替换为您要允许的 IP 地址:
1sudo ufw allow in on eth0 from 203.0.113.102
1[secondary_label Output]
2Rule added
在
参数告诉ufw
只适用于 接入连接,而在 eth0
参数则指定该规则仅适用于eth0
接口。
如果您现在运行sudo ufw 状态
,您将看到类似于此的输出:
1[secondary_label Output]
2Status: active
3
4To Action From
5-- ------ ----
6...
7Anywhere on eth0 ALLOW 203.0.113.102
删除UFW规则
要删除您之前在 UFW 中设置的规则,请使用ufw 删除
,然后使用规则(允许
或拒绝
)和目标规格。
1sudo ufw delete allow from 203.0.113.101
1[secondary_label Output]
2Rule deleted
指定要删除哪个规则的另一种方法是提供规则ID,您可以使用以下命令获取此信息:
1sudo ufw status numbered
1[secondary_label Output]
2Status: active
3
4 To Action From
5 -- ------ ----
6[ 1] Anywhere DENY IN 203.0.113.100
7[ 2] Anywhere on eth0 ALLOW IN 203.0.113.102
从输出中,你可以看到有两个活跃的规则。第一个规则,具有突出值,否认来自IP地址的所有连接 203.0.113.100
。
由于默认情况下,UFW 已经阻止了所有外部访问,除非明确允许,所以第一个规则是多余的,所以您可以删除它。
1sudo ufw delete 1
您将被要求确认操作,并确保您提供的 ID 指向您想要删除的正确规则。
1[secondary_label Output]
2Deleting:
3 deny from 203.0.113.100
4Proceed with operation (y|n)? y
5Rule deleted
如果您再次列出您的规则以sudo ufw 状态
,您将看到该规则已被删除。
可用的应用程序配置文件
在安装时,依赖网络通信的应用程序通常会设置一个 UFW 配置文件,您可以使用它来允许来自外部地址的连接。
若要列出目前可用的配置文件,请运行以下操作:
1sudo ufw app list
如果您安装了 Web 服务器或其他网络依赖软件等服务,并且在 UFW 内未提供配置文件,请先确保该服务已启用。
1[secondary_label Output]
2Available applications:
3 OpenSSH
启用应用程序配置文件
要启用 UFW 应用程序配置文件,请运行UFW 允许
,然后运行您要启用的应用程序配置文件的名称,您可以使用sudo ufw 应用程序列表
命令获取该命令。
1sudo ufw allow “OpenSSH”
1[secondary_label Output]
2Rule added
3Rule added (v6)
请记住引用由多个单词组成的个人资料名称,例如Nginx HTTPS
。
禁用应用程序配置文件
要禁用您之前在 UFW 中设置的应用程序配置文件,您需要删除相应的规则,例如,从sudo ufw 状态
中考虑以下输出:
1sudo ufw status
1[secondary_label Output]
2Status: active
3
4To Action From
5-- ------ ----
6OpenSSH ALLOW Anywhere
7Nginx Full ALLOW Anywhere
8OpenSSH (v6) ALLOW Anywhere (v6)
9Nginx Full (v6) ALLOW Anywhere (v6)
此输出表明Nginx Full
应用程序配置文件目前已启用,允许通过HTTP和HTTPS连接到Web服务器,如果您只希望允许从您的Web服务器发送和发送HTTPS请求,您必须首先启用最具限制性的规则,在这种情况下将是Nginx HTTPS
,然后禁用当前有效的Nginx Full
规则:
1sudo ufw allow "Nginx HTTPS"
2sudo ufw delete allow "Nginx Full"
请记住,你可以列出所有可用的应用程序配置文件与sudo ufw应用程序列表
。
允许 SSH
在使用远程服务器时,您需要确保 SSH 端口对连接开放,以便您可以远程登录您的服务器。
以下命令将启用 OpenSSH UFW 应用程序配置文件,并允许所有连接到服务器上的默认 SSH 端口:
1sudo ufw allow OpenSSH
1[secondary_label Output]
2Rule added
3Rule added (v6)
虽然不那么用户友好,但另一种语法是指定SSH服务的准确端口号,默认情况下通常设置为22
:
1sudo ufw allow 22
1[secondary_label Output]
2Rule added
3Rule added (v6)
允许从特定 IP 地址或子网接收的 SSH
要允许从特定的 IP 地址或子网接入连接,您将包含一个从
指令来定义连接的来源。这将要求您也指定目的地地址以一个到
参数。 要将此规则锁定为 SSH 仅限,您将proto
(协议)限制为tcp
,然后使用端口
参数并将其设置为22
,这是 SSH 的默认端口。
下列命令只允许来自 IP 地址 203.0.113.103
的 SSH 连接:
1sudo ufw allow from 203.0.113.103 proto tcp to any port 22
1[secondary_label Output]
2Rule added
您还可以使用子网地址作为从
参数来允许从整个网络接入的 SSH 连接:
1sudo ufw allow from 203.0.113.0/24 proto tcp to any port 22
1[secondary_label Output]
2Rule added
允许从特定 IP 地址或子网接收的 Rsync
在端口873
上运行的 Rsync程序可用于从一个计算机传输文件到另一个计算机。
要允许从特定 IP 地址或子网接入的rsync
连接,请使用from
参数来指定源 IP 地址和port
参数来设置目标端口873
。
1sudo ufw allow from 203.0.113.103 to any port 873
1[secondary_label Output]
2Rule added
要允许整个203.0.113.0/24
子网能够rssync
到您的服务器,运行:
1sudo ufw allow from 203.0.113.0/24 to any port 873
1[secondary_label Output]
2Rule added
允许 Nginx HTTP / HTTPS
安装后, Nginx 网页服务器在服务器中设置了几种不同的 UFW 配置文件。一旦您安装并启用了 Nginx 作为服务,请运行以下命令来识别哪些配置文件可用:
1sudo ufw app list | grep Nginx
1[secondary_label Output]
2 Nginx Full
3 Nginx HTTP
4 Nginx HTTPS
若要啟用 HTTP 和 HTTPS 流量,請選擇「Nginx Full」,否則選擇「Nginx HTTP」只允許 HTTP,或「Nginx HTTPS」只允許 HTTPS。
以下命令将允许服务器上的 HTTP 和 HTTPS 流量(端口 80' 和
443'):
1sudo ufw allow "Nginx Full"
1[secondary_label Output]
2Rule added
3Rule added (v6)
允许 Apache HTTP / HTTPS
安装时,Apache Web 服务器在服务器中设置了几种不同的 UFW 配置文件,一旦您已安装和启用 Apache 作为服务,请运行以下命令来识别哪些配置文件可用:
1sudo ufw app list | grep Apache
1[secondary_label Output]
2 Apache
3 Apache Full
4 Apache Secure
若要啟用 HTTP 和 HTTPS 流量,請選擇「Apache Full」,否則選擇「Apache」為 HTTP 或「Apache Secure」為 HTTPS。
以下命令将允许服务器上的 HTTP 和 HTTPS 流量(端口 80' 和
443'):
1sudo ufw allow "Nginx Full"
1[secondary_label Output]
2Rule added
3Rule added (v6)
允许所有接入 HTTP(端口 80
)
Apache 和 Nginx 等 Web 服务器通常在端口 80 上收听 HTTP 请求. 如果您的入口流量默认策略设置为 drop 或 deny,则需要创建 UFW 规则以允许对端口 80 的外部访问。
要允许所有接入的 HTTP (端口 80
) 连接,运行:
1sudo ufw allow http
1[secondary_label Output]
2Rule added
3Rule added (v6)
另一种语法是指定 HTTP 服务的端口号:
1sudo ufw allow 80
1[secondary_label Output]
2Rule added
3Rule added (v6)
允许所有接入 HTTPS (端口 443
)
HTTPS 通常在端口 443
上运行. 如果您的入口流量默认策略设置为 drop 或 deny,则需要创建一个 UFW 规则来允许对端口 443
进行外部访问。
要允许所有接入的 HTTPS (端口 443
) 连接,运行:
1sudo ufw allow https
1[secondary_label Output]
2Rule added
3Rule added (v6)
另一种语法是指定 HTTPS 服务的端口号:
1sudo ufw allow 443
1[secondary_label Output]
2Rule added
3Rule added (v6)
允许所有传入的 HTTP 和 HTTPS
如果您要允许 HTTP 和 HTTPS 流量,您可以创建一个允许两个端口的单一规则。
要允许所有接入的 HTTP 和 HTTPS (端口 80 和
443) 连接,运行:
1sudo ufw allow proto tcp from any to any port 80,443
1[secondary_label Output]
2Rule added
3Rule added (v6)
允许来自特定 IP 地址或子网的 MySQL 连接
如果您的 MySQL 数据库服务器正在远程服务器上的客户端使用,则需要创建一个 UFW 规则来允许此类访问。
要允许从特定 IP 地址或子网接入 MySQL 连接,请使用从
参数来指定源 IP 地址和端口
参数来设置目标端口3306
。
下列命令将允许IP地址203.0.113.103
连接到服务器的MySQL端口:
1sudo ufw allow from 203.0.113.103 to any port 3306
1[secondary_label Output]
2Rule added
要让整个203.0.113.0/24
子网能够连接到您的MySQL服务器,运行:
1sudo ufw allow from 203.0.113.0/24 to any port 3306
1[secondary_label Output]
2Rule added
允许特定 IP 地址或子网的 PostgreSQL 连接
如果您的 PostgreSQL 数据库服务器正在被远程服务器上的客户端使用,您需要确保允许此类流量。
要允许从特定的 IP 地址或子网接入 PostgreSQL 连接,请用从
参数指定源,并将端口设置为5432
:
1sudo ufw allow from 203.0.113.103 to any port 5432
1[secondary_label Output]
2Rule added
要允许整个203.0.113.0/24
子网连接到您的 PostgreSQL 服务器,运行:
1sudo ufw allow from 203.0.113.0/24 to any port 5432
1[secondary_label Output]
2Rule added
阻止 SMTP 邮件
邮件服务器,如Sendmail和Postfix,通常使用端口25
为SMTP流量. 如果您的服务器不应该发送出发邮件,您可能想要阻止此类流量。
1sudo ufw deny out 25
1[secondary_label Output]
2Rule added
3Rule added (v6)
这将您的防火墙配置为 drop 在端口 25 上的所有输出流量. 如果您需要拒绝在不同的端口号上的输出连接,您可以重复这个命令,并用想要阻止的端口号取代
25。
结论
UFW是一个强大的工具,在正确配置时可以大大提高您的服务器的安全性。本参考指南涵盖了一些常见的UFW规则,这些规则通常用于在Ubuntu上配置防火墙。
本指南中的大多数命令可以通过更改源 IP 地址和/或目标端口等参数来适应不同的用例和场景来调整。
1man ufw
Ubuntu 文档上的官方 UFW 页面是另一个资源,您可以用作更先进的使用案例和示例的参考。