Hublog随手记录一些东西

Ufw 防火墙的使用

一、前提条件

仅仅 root 或者其他有 sudo 权限的用户可以管理系统防火墙。最佳实践就是以 sudo 用户来运行管理员任务。

二、安装 UFW

UFW 是标准 Ubuntu 20.04 安装过程中的一部分,它应该已经在你的系统上存在。如果因为某些原因,它没有被安装,你可以通过输入下面的命令安装它:

1
2
sudo apt update
sudo apt install ufw

安装 GUI 程序

1
sudo apt install gufw

UFW安装后,可以通过以下命令来启动UFW服务并使其在启动时启动(一般在完成默认配置后再重启):

1
# ufw enable

在开启防火墙后,修改防火墙配置后可以使用ufw reload重新加载防火墙

如果运行ufw命令时报Command Not Found错误,可以使用whereis ufw来确定ufw的位置,之后你也可以顺手设置一下alias。 接下来,使用以下命令检查UFW的状态,可以看到以下输出:

1
2
# ufw status
Status: active

还可以通过运行以下命令来禁用UFW防火墙(后面可以通过enable命令随时启用服务):

1
# ufw disable

如果你决定要重新开始,则可以使用reset命令:

1
# ufw reset

这将禁用UFW并删除之前定义的任何规则。

最新版的UFW默认启用了IPV6配置,你也可以通过以下命令进行检查,可以看到以下输出:

1
2
# cat /etc/default/ufw | grep -i ipv6
IPV6=yes

如果输出为IPV6=no,可以使用vim编辑该文件将其改为yes。

三、检查 UFW 的状态

安装过程不会自动激活防火墙,以避免服务器被锁住。你可以检查 UFW 的状态,输入:

1
sudo ufw status verbose

输出如下:

1
Status: inactive

如果 UFW 激活了,输入应该类似下面这样:

1
2
3
4
5
6
7
8
9
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere

四、UFW 默认策略

默认情况下,UFW默认策略设置为阻止所有传入流量并允许所有传出流量。默认的策略定义在/etc/default/ufw文件中。

默认策略可以通过使用sudo ufw default <policy> <chain>命令来修改。你可以使用以下命令来设置自己的默认策略:

1
2
# ufw default allow outgoing
# ufw default deny incoming

防火墙策略是用来构建更多详细的和用户自定义的规则的基础。通常情况下,初始的默认策略是一个很好的起点。

如果现在重启机器(这会儿不要这么做),UFW配置会在重启后生效,它将拒绝所有传入的连接。因为我们没有允许SSH连接,这意味着,重启过后我们将无法远程连接到服务器。如果我们希望服务器响应这些类型的请求,我们就需要明确指定允许传入连接的规则 (例如SSH或HTTP连接)。

要将防火墙配置为允许传入SSH连接,可以使用以下命令:

1
# ufw allow ssh

这将创建防火墙规则-允许端口22上的所有连接,这是SSH守护程序默认监听的端口,类似的快捷指令还有 ufw allow httpufw allow https

实际上也可以通过直接指定端口来创建等效规则,下面这条命令将产生相同的结果:

1
# ufw allow 22

如果你的SSH守护程序配置在其他端口,则需要手动指定相应的端口。

五、应用配置

大部分应用都附带一份应用配置,它描述了服务,并且包含了 UFW 设置。这个规则在软件包安装的时候,被自动创建在/etc/ufw/applications.d目录下。

想要列举出你系统上所有的应用配置,输入:

1
sudo ufw app list

与你系统上安装的软件包有关系,输出应该看起来像下面这样:

1
2
3
4
5
Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

想要查找更多关于指定配置和包含规则的信息,使用下面的命令:

1
sudo ufw app info 'Nginx Full'

输出应该显示"Nginx Full"配置打开了端口"80"和"443”。

1
2
3
4
5
6
Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server

Ports:
  80,443/tcp

你也可以为你的应用创建自定义的配置。

六、打开端口

取决于运行在你服务器上的应用,你需要根据服务打开不同的端口。

通用的打开端口的语法如下:

1
ufw allow port_number/protocol

下面是一些关于如何允许 HTTP 连接的方法。

第一个选项就是使用服务名。UFW 检查/etc/services文件,其中指定服务的端口和协议:

1
sudo ufw allow http

你也可以指定端口号和协议:

1
sudo ufw allow 80/tcp

当没有给出协议的时候,UFW 同时创建tcpudp的规则。

另外一个选项就是使用应用程序配置。在这个例子中,是"Nginx HTTP”:

1
sudo ufw allow 'Nginx HTTP'

UFW 还支持另外一种语法,使用 proto 关键字来指定协议。

7.1 端口范围

UFW 允许你打开端口范围。使用分号分隔开端口的起点和终点,当你指定协议时,或者是 tcp,或者是udp

例如,如果你想允许端口从71007200,同时支持tcpudp,你将要运行下面的命令:

1
2
sudo ufw allow 7100:7200/tcp
sudo ufw allow 7100:7200/udp

7.2 允许指定 IP 地址访问指定端口

想要允许指定源 IP 的所有端口上的所有连接通过,使用from关键字,加上源地址。

这里是一个 IP 地址白名单的例子:

1
sudo ufw allow from 64.63.62.61

如果你指向允许给定 IP 访问指定的端口,使用to any port关键字加上端口号。

例如,允许从 IP64.63.62.61的机器,通过22端口访问,输入:

1
sudo ufw allow from 64.63.62.61 to any port 22

7.3 允许子网

允许一个子网 IP 地址的访问和允许一个单个 IP 地址的访问,命令是一样的。唯一的不同是需要指定网络掩码。

下面是一个例子,显示如何允许 IP 地址(192.168.1.1 到 192.168.1.254),通过 3360(MySQL),你可以使用这个命令:

1
sudo ufw allow from 192.168.1.0/24 to any port 3306

7.4 允许指定网络接口的连接

想要允许连接通过指定网络接口,使用allow in on 和 网络接口的名字:

1
sudo ufw allow in on eth2 to any port 3306

七、禁止连接

对于所有进来连接的默认的策略被设置为deny,如果你没有修改它,UFW 将会屏蔽所有进来的连接,除非你指定打开连接。

写禁止规则和写允许规则是一样的,你需要的仅仅是使用deny关键字替换allow

比如说你打开了端口80443,并且你的服务器处于来自23.24.25.0/24网络的攻击。想要禁止来自23.24.25.0/24的所有连接,使用下面的命令:

1
sudo ufw deny from 23.24.25.0/24

这里是一个例子,关于禁止从23.24.25.0/2480443端口的访问,你可以使用下面的命令:

1
sudo ufw deny proto tcp from 23.24.25.0/24 to any port 80,443

八、删除 UFW 规则

有两种不同的方式可以删除 UFW 规则。通过规则序号和通过指定的规则。

通过规则序号来删除 UFW 规则很简单,特别是你刚接触 UFW。

想要通过规则序号来删除,你需要找到你想删除的规则序号。想要这么做,运行下面的命令:

1
sudo ufw status numbered

输出:

1
2
3
4
5
6
7
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 8080/tcp                   ALLOW IN    Anywhere

想要删除规则,序号为3,这个规则允许对端口8080的连接,你可以使用下面的命令:

1
sudo ufw delete 3

删除规则的第二种方法就是指定实际的规则。例如,如果你添加过一个打开端口8069的规则,你可以通过下面的命令删除它:

1
sudo ufw delete allow 8069

参考文档

1、如何在 Ubuntu 20.04 上使用 UFW 来设置防火墙

2、简明教程|Linux中UFW的使用

3、 Ubuntu manuals UFW

4、[Uncomplicated Firewall (ufw)](https://wiki.debian.org/Uncomplicated Firewall (ufw))

0%