本页内容

  • 先决条件
  • 安装 UFW
  • UFW 基础命令
  • UFW 的 Allow 与 Deny 命令
  • UFW 高级命令
  • 删除 UFW 防火墙规则
  • 禁用并重置 UFW
  • 结语

UFW(Uncomplicated Firewall)是 Ubuntu 上用于管理基于 iptables 的防火墙的应用程序。UFW 是 Ubuntu Linux 默认的防火墙配置工具,提供了用户友好的方式来配置防火墙。UFW 命令就像英语一样直白,因此很容易记忆。UFW 防火墙支持 IPv4 和 IPv6。

UFW 还提供了图形界面(GUI)应用程序。如果你使用 GNOME 桌面,可以安装 gufw;如果你使用 KDE 桌面,可以安装 kcm-ufw。

先决条件

  • Ubuntu 16.04 至 22.04 版本。更新的 Ubuntu 版本通常也可以使用。
  • root 权限

本教程涵盖哪些内容?

  • 安装 UFW。
  • UFW 基础命令语法。
  • UFW 的 Allow 与 Deny 命令。
  • UFW 高级命令。
  • 在 UFW 中删除规则。
  • 禁用并重置 UFW。

安装 UFW

默认情况下,Ubuntu 20.04 上应该已经安装了 UFW。你可以用以下命令验证:

which ufw

在 Ubuntu 上入门使用 UFW 简易防火墙

如果它的输出没有像上面那样返回该命令的路径,则用以下 apt 命令安装 UFW:

sudo apt install ufw

在 Ubuntu 上入门使用 UFW 简易防火墙

然后运行以下命令启用 UFW:

sudo ufw enable

在 Ubuntu 上入门使用 UFW 简易防火墙

结果:

Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

UFW 基础命令

"ufw enable" 命令会以默认规则开启 UFW。你可以通过以下命令验证 UFW 是否正在运行:

sudo ufw status verbose

在 Ubuntu 上入门使用 UFW 简易防火墙

结果:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

如果你想禁用或关闭 UFW,可以使用:

sudo ufw disable

结果:

Firewall stopped and disabled on system startup

在 Ubuntu 上入门使用 UFW 简易防火墙

UFW 的 Allow 与 Deny 命令

1. UFW Allow(允许)命令

开启 UFW 后,它会拒绝所有传入连接。因此,如果你要远程管理系统,首先应该允许服务器的 SSH 访问。命令 "ufw allow sshport" 用于通过 SSH 放行访问,请将 SSHPORT 替换为 SSH 服务的端口号,默认的 SSH 端口是 22。

sudo ufw allow 22

结果:

Rules updated
Rules updated (v6) #For IPv6

如果你只想允许端口 22 上的 TCP 传入连接,可以在命令末尾加上 "/tcp",如下例所示。

sudo ufw allow 22/tcp

当你要放行访问的服务正在其默认端口上监听时,可以使用服务名称来代替端口号。这样更便于开放端口,因为你可能并不清楚具体端口。UFW 会替你在 /etc/services 中查到正确的端口号。

以下命令将开放默认的 SSH 端口:

sudo ufw allow ssh

现在用以下命令检查该规则:

sudo ufw status

在 Ubuntu 上入门使用 UFW 简易防火墙

2. UFW Deny(拒绝)命令

"deny" 命令的用法与 "allow" 命令类似,用于关闭防火墙中的某个端口:

使用端口选项的 Deny 命令:

sudo ufw deny 80

结果:

Rule updated
Rule updated (v6)

在 Ubuntu 上入门使用 UFW 简易防火墙

使用服务名的 "deny" 示例。在此示例中,我将阻止 http 端口(80):

sudo ufw deny http

在 Ubuntu 上入门使用 UFW 简易防火墙

注意:

所有端口及其服务名称都列在文件 "/etc/services" 中。

UFW 高级命令

现在我们将深入了解 UFW 命令语法,学习如何放行端口范围(例如 FTP 被动模式端口),以及仅允许来自某个 IP 或子网的访问。

1. 放行端口范围

你可以在 UFW 中放行一段端口范围。某些服务(如 FTP 或 IRC)会使用一段端口范围来与客户端通信。

在本示例中,我们将放行我的服务器上 ircd 所使用的端口范围。该范围是端口 6660 到 6670:

sudo ufw allow 6660:6670/tcp
sudo ufw allow 6660:6670/udp

该命令将允许通过 TCP 和 UDP 协议连接到端口 6660–6670。

2. 放行特定 IP 地址

你还可以通过添加 "from" 选项来放行某个特定 IP,使其可以访问所有服务。例如,如果你在家里或办公室有一个静态 IP,并希望允许该地址访问服务器上的所有服务,这会很有用。下面的命令将允许 IP 192.168.1.106 访问服务器上的所有端口:

sudo ufw allow from 192.168.1.106

结果:

Rule added

3. 放行子网

如果你想放行子网中的所有 IP 地址,可以像下面这样把 IP 子网(一段 IP 地址范围)加入 UFW 命令:

sudo ufw allow from 192.168.1.1/24

结果:

WARN: Rule changed after normalization
Rule added

4. 允许特定 IP 地址访问某个端口

如果你只想允许某个特定 IP 访问单一端口,可以组合使用上面学到的 UFW 命令。

例如,仅允许 IP 192.168.1.106 通过 TCP 访问 ssh 端口 22,其他 IP 将被拒绝访问该端口,可以使用以下命令:

sudo ufw allow from 192.168.1.106 proto tcp to any port 22

结果:

Rule added

5. 放行到特定端口的所有传入流量

如果你想放行端口 80 上的所有流量,可以使用该命令:

sudo ufw allow to any port 80

删除 UFW 防火墙规则

在本节中,你将学习如何删除 UFW 中已保存的规则。你可以使用 "delete" 命令来删除 UFW 规则。请输入 "ufw delete" 命令,后面跟上你要删除的选项(allow 或 deny)。

下面是一些示例:

使用服务名删除 allow SSH 规则:

sudo ufw delete allow ssh

结果:

Rule deleted
Rule deleted (v6)

该命令会删除 "allow ssh" 规则。请注意,不要把自己锁在服务器之外。

删除端口 80 上的 "deny" 规则:

sudo ufw delete deny 80

结果:

Rule deleted
Rule deleted (v6)

如果你有一条复杂的规则,有一个简单的方法可以通过规则 ID 来识别并删除它。运行以下命令可获取所有规则及其 ID 的列表:

sudo ufw status numbered

结果:

Status: active
 
     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 22/tcp (v6)                ALLOW IN    Anywhere (v6)

现在使用规则编号仅删除 IPv6 的 SSH 规则:

sudo ufw delete 2

禁用并重置 UFW

如果你想关闭 UFW 但不删除你的规则,可以使用 "disable" 命令:

sudo ufw disable

结果:

Firewall stopped and disabled on system startup

在 Ubuntu 上入门使用 UFW 简易防火墙

如果你想彻底关闭 UFW 并删除所有规则,可以使用 "reset" 命令:

sudo ufw reset

结果:

Resetting all rules to installed defaults. This may disrupt existing ssh
connections. Proceed with operation (y|n)? y
Backing up 'after6.rules' to '/etc/ufw/after6.rules.20150918_190351'
Backing up 'user.rules' to '/lib/ufw/user.rules.20150918_190351'
Backing up 'after.rules' to '/etc/ufw/after.rules.20150918_190351'
Backing up 'before.rules' to '/etc/ufw/before.rules.20150918_190351'
Backing up 'before6.rules' to '/etc/ufw/before6.rules.20150918_190351'
Backing up 'user6.rules' to '/lib/ufw/user6.rules.20150918_190351'

结语

UFW(Uncomplicated Firewall)是 Ubuntu 中默认的防火墙配置工具。UFW 命令与英语相似,易于使用和记忆。本 UFW 教程是上手这款优秀防火墙工具的指南;如果你想进一步了解 UFW,可以查阅 ubuntu wiki 或 ufw-manpage。