UFWEssentials:通用防火墙规则和命令

来自菜鸟教程
跳转至:导航、​搜索

介绍

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

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

如何使用本指南

  • 本指南采用备忘单格式,带有独立的命令行片段。
  • 跳转到与您尝试完成的任务相关的任何部分。
  • 当您在本指南的命令中看到突出显示的文本时,请记住该文本应指您自己网络中的 IP 地址。

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

验证 UFW 状态

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

sudo ufw status
OutputStatus: inactive

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

启用 UFW

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

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


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

sudo ufw enable

你会看到这样的输出:

OutputFirewall is active and enabled on system startup

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

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

禁用 UFW

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

sudo ufw disable

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

阻止 IP 地址

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

sudo ufw deny from 203.0.113.100
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 地址:

sudo ufw deny from 203.0.113.0/24
OutputRule added

阻止到网络接口的传入连接

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

sudo ufw deny in on eth0 from 203.0.113.100
OutputRule added

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

允许 IP 地址

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

sudo ufw allow from 203.0.113.101
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 地址:

sudo ufw allow in on eth0 from 203.0.113.102
OutputRule added

in 参数告诉 ufw 仅将规则应用于 传入 连接,on eth0 参数指定规则仅适用于 【X175X】接口。

如果你现在运行 sudo ufw status,你会看到类似这样的输出:

OutputStatus: active

To                         Action      From
--                         ------      ----
...         
Anywhere on eth0           ALLOW       203.0.113.102            

删除 UFW 规则

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

sudo ufw delete allow from 203.0.113.101
OutputRule deleted

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

sudo ufw status numbered
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.102eth0 接口上的连接。

因为默认情况下,除非明确允许,否则 UFW 已经阻止所有外部访问,所以第一条规则是多余的,因此您可以将其删除。 要按 ID 删除规则,请运行:

sudo ufw delete 1

系统将提示您确认操作并确保您提供的 ID 引用了您要删除的正确规则。

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

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

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

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

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

sudo ufw app list

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

OutputAvailable applications:
  OpenSSH

启用应用程序配置文件

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

sudo ufw allow “OpenSSH”
OutputRule added
Rule added (v6)

请记住引用包含多个单词的配置文件名称,例如 Nginx HTTPS

禁用应用程序配置文件

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

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 请求,您必须首先启用最严格的规则,在这种情况下为 Nginx HTTPS,然后禁用当前活动的 [X203X ] 规则:

sudo ufw allow "Nginx HTTPS"
sudo ufw delete allow "Nginx Full"

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

允许 SSH

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

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

sudo ufw allow OpenSSH
OutputRule added
Rule added (v6)

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

sudo ufw allow 22
OutputRule added
Rule added (v6)

允许来自特定 IP 地址或子网的传入 SSH

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

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

sudo ufw allow from 203.0.113.103 proto tcp to any port 22
OutputRule added

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

sudo ufw allow from 203.0.113.0/24 proto tcp to any port 22
OutputRule added

允许来自特定 IP 地址或子网的传入 Rsync

Rsync 程序在端口 873 上运行,可用于将文件从一台计算机传输到另一台计算机。

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

sudo ufw allow from 203.0.113.103 to any port 873
OutputRule added

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

sudo ufw allow from 203.0.113.0/24 to any port 873
OutputRule added

允许 Nginx HTTP / HTTPS

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

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):

sudo ufw allow "Nginx Full"
OutputRule added
Rule added (v6)

允许 Apache HTTP / HTTPS

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

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

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

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

sudo ufw allow "Nginx Full"
OutputRule added
Rule added (v6)

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

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

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

sudo ufw allow http
OutputRule added
Rule added (v6)

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

sudo ufw allow 80
OutputRule added
Rule added (v6)

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

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

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

sudo ufw allow https
OutputRule added
Rule added (v6)

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

sudo ufw allow 443
OutputRule added
Rule added (v6)

允许所有传入的 HTTP 和 HTTPS

如果您希望同时允许 HTTP 和 HTTPS 流量,您可以创建一个允许两个端口的规则。 此用法要求您还使用 proto 参数定义协议,在这种情况下应设置为 tcp

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

sudo ufw allow proto tcp from any to any port 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 端口:

sudo ufw allow from 203.0.113.103 to any port 3306
OutputRule added

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

sudo ufw allow from 203.0.113.0/24 to any port 3306
OutputRule added

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

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

要允许来自特定 IP 地址或子网的传入 PostgreSQL 连接,请使用 from 参数指定源,并将端口设置为 5432

sudo ufw allow from 203.0.113.103 to any port 5432
OutputRule added

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

sudo ufw allow from 203.0.113.0/24 to any port 5432
OutputRule added

阻止传出 SMTP 邮件

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

sudo ufw deny out 25
OutputRule added
Rule added (v6)

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

结论

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

本指南中的大多数命令都可以通过更改源 IP 地址和/或目标端口等参数来适应不同的用例和场景。 有关每个命令参数和可用修饰符的更多详细信息,您可以使用 man 实用程序查看 UFW 的手册:

man ufw

Ubuntu 文档 上的 official UFW 页面是另一个资源,您可以将其用作更高级用例和示例的参考。