• 作者:老汪软件技巧
  • 发表时间:2024-10-30 07:02
  • 浏览量:

在服务器安全领域,防火墙是守护网络安全的坚实盾牌。UFW(Uncomplicated Firewall),即“不复杂的防火墙”,是一个运行在iptables之上的防火墙配置工具,它为Ubuntu系统默认提供了一个简洁的命令行界面,用于配置常见的防火墙使用场景。

本文将带你快速掌握UFW的常用规则和命令,包括如何通过端口、网络接口和源IP地址来允许或阻止服务。

快速上手指南

使用sudo ufw status或sudo ufw status verbose可以检查你当前的UFW规则集。

注意:

在尝试使用本篇博客的 UFW 命令前记得先备份你的云服务器的重要数据,建议可以为服务器创建一个快照,学习完 UFW 命令后恢复快照即可。

服务器准备

想要完全理解UFW防火墙规则,建议还是搭配一台云服务器作为测试以及实际操作的工具,毕竟孰能生巧嘛。

注册完毕后,请按照以下步骤创建一台自己的云服务器。

创建云服务器

点击 云产品 → 云服务器 → 立即购买。

建议选择距离您较近的区域,以保证低延迟。

带宽以及配置自行选择。

选择 Ubuntu 22.04 版本。

最后点击 立即购买,并按照提示进行购买。购买后等待机器部署完毕,点击购买的服务器,进入管理面板,找到远程连接相关信息。

使用 PowerShell 进行远程连接。

输入 ssh root@您的服务器IP 例如 ssh root@154.9.227.239 回车后,首次需要输入 yes,再次回车后即可登录服务器。

到此为止,我们的云服务器就创建好了,接下来就可以在终端运行下面教程中的命令。

基础命令检查UFW状态

要检查ufw是否已启用,运行以下命令:

sudo ufw status

如果输出显示Status: inactive,则表示你的防火墙尚未激活。

启用UFW

如果你在运行ufw status后输出了Status: inactive的消息,这表示系统上的防火墙并未启用。你需要运行一个命令来启用它。默认情况下,启用UFW会阻止服务器上所有端口的外部访问。实际上,如果你在通过SSH连接到服务器并启用ufw之前没有允许通过SSH端口访问,你将会被断开连接。因此,如果你的情况是这样,请确保按照本指南中的部分先启用SSH访问,然后再启用防火墙。要在你的系统上启用UFW,运行:

sudo ufw enable

你会看到如下输出:

Firewall is active and enabled on system startup

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

sudo ufw status verbose

禁用UFW

如果你出于某种原因需要禁用UFW,可以使用以下命令:

sudo ufw disable

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

阻止IP地址

要阻止来自特定IP地址的所有网络连接,请运行以下命令,将高亮的IP地址替换为你想要阻止的IP地址:

sudo ufw deny from 203.0.113.100

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

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

对于指定的IP地址,所有传入和传出的连接都被阻止。

阻止子网

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

sudo ufw deny from 203.0.113.0/24

阻止特定网络接口的传入连接

要阻止来自特定IP地址到特定网络接口的传入连接,请运行以下命令,将高亮的IP地址替换为你想要阻止的IP地址:

sudo ufw deny in on eth0 from 203.0.113.100

ubuntu命令大全_ubuntu终端命令大全_

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

允许IP地址

要允许来自特定IP地址的所有网络连接,请运行以下命令,将高亮的IP地址替换为你想要允许访问的IP地址:

sudo ufw allow from 203.0.113.101

如果你现在运行sudo ufw status,你会看到输出类似于这样,显示你刚刚添加的IP地址旁边的ALLOW字样。

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

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

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

删除UFW规则

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

sudo ufw delete allow from 203.0.113.101

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

sudo ufw status numbered

从输出中,你可以看到有两个活动规则。第一个规则,带有高亮值,阻止了来自IP地址203.0.113.100的所有连接。第二个规则允许来自IP地址203.0.113.102的连接在eth0接口上。由于默认情况下UFW已经阻止了所有外部访问,除非明确允许,所以第一个规则是多余的,因此你可以删除它。要按ID删除规则,请运行:

sudo ufw delete 1

你将被提示确认操作,并确保你提供的ID指的是你想要删除的正确规则。

列出可用的应用配置文件

安装后,依赖于网络通信的应用程序通常会设置一个UFW配置文件,你可以使用它来允许来自外部地址的连接。这通常与运行ufw allow from相同,优点是提供了一个快捷方式,抽象了服务使用的具体端口号,并提供了用户友好的术语来引用服务。

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

sudo ufw app list

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

启用应用配置文件

要启用UFW应用配置文件,请运行ufw allow后跟你想要启用的应用配置文件的名称,你可以通过sudo ufw app list命令获得。以下示例中,我们启用了OpenSSH配置文件,这将允许所有传入的SSH连接在服务器的默认SSH端口上:

sudo ufw allow "OpenSSH"

记住,如果配置文件名称由多个单词组成,如Nginx HTTPS,则需要引用配置文件名称。

禁用应用配置文件

要禁用你之前在UFW中设置的应用配置文件,你需要移除其对应的规则。例如,考虑以下来自sudo ufw status的输出:

sudo ufw status

这表明Nginx Full应用配置文件当前已启用,允许任何和所有连接到Web服务器,无论是通过HTTP还是HTTPS。如果你想只允许HTTPS请求从和到你的Web服务器,你首先需要启用最限制性的规则,在这种情况下将是Nginx HTTPS,然后禁用当前活动的Nginx Full规则:

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

记住你可以使用sudo ufw app list列出所有可用的应用配置文件。

允许SSH

在处理远程服务器时,你需要确保SSH端口是开放的,以便能够远程登录到你的服务器。

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

sudo ufw allow OpenSSH

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

sudo ufw allow 22

允许特定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

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

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

允许特定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

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

sudo ufw allow from 203.0.113.0/24 to any port 873