如何使用 UFW 防火墙保护您的 Linux 服务器

UFW 是“简单防火墙”的缩写,是更复杂的 iptables
实用程序的前端。它旨在使管理防火墙变得像设置端口打开和关闭以及调节允许通过的流量一样简单。
设置 UFW
UFW 在 Ubuntu 中默认安装,但如果没有,您可以从 apt
安装它:
sudo apt-get install ufw
如果您正在运行另一个发行版,则必须使用该发行版的包管理器,但 UFW 已广泛使用。您可以使用以下方式检查防火墙的状态:
sudo ufw status
如果您之前没有配置过,应该显示“Inactive”。
开始使用任何防火墙的一个好地方是关闭所有传入流量并允许传出流量。别担心,这不会立即切断您的 SSH 连接,因为防火墙尚未启用。
sudo ufw default deny incoming
sudo ufw default allow outgoing
这给了我们一个可以使用的空白板,并在其上添加规则。
使用 UFW 打开端口
要打开端口,请使用命令 ufw allow
。例如,您需要打开端口 22,所以继续运行:
sudo ufw allow 22
您还可以在添加任何规则时为未来的自己留言:
sudo ufw allow 8080/tcp comment 'Open port for Express API'
许多应用程序为 UFW 安装配置文件,SSH 就是其中之一。因此,您还可以通过指定名称来允许某些应用程序打开它们需要的端口:
sudo ufw allow ssh
您可以使用 ufw app list
查看可用应用程序列表,并使用 ufw app info [name]
查看有关应用程序的详细信息。
您还可以通过使用冒号作为分隔符来允许整个端口范围,并且您可以指定协议。例如,要仅允许端口 3000 到 3100 上的 TCP 流量,您可以运行:
sudo ufw allow 3000:3100/tcp
由于默认设置为拒绝传入,因此您不必手动关闭任何端口。如果你确实想关闭传出端口,你将在 ufw reject
旁边指定一个方向:
sudo ufw reject out 3001
使用 UFW 的白名单和速率限制
您可以允许某些 IP 地址具有不同的权限。例如,要允许来自您的 IP 地址的所有流量,您可以运行:
sudo ufw allow 192.168.1.1
要将特定端口列入白名单,您必须使用更完整的语法:
sudo ufw allow proto tcp from 192.168.1.1 to any port 22
你可能不想以这种方式将 SSH 访问列入白名单,除非你有备份连接或某种端口敲门设置,因为 IP 地址变化非常频繁。如果您确实想将 SSH 访问权限仅限于您,一种选择是在同一私有云中设置一个 OpenVPN 服务器,并将对该服务器的访问权限列入白名单。
如果您想将整个 IP 地址块列入白名单,就像您通过虚拟私有云提供商运行服务器时的情况一样,您可以使用标准的 CIDR 子网表示法:
sudo ufw allow 192.168.0.0/24
子网非常复杂,因此您可以阅读我们的使用它们的指南以了解更多信息。
速率限制是防火墙的另一个有用功能,它可以阻止明显滥用的连接。这用于防止攻击者试图暴力破解打开的 SSH 端口。显然你可以将端口列入白名单以完全保护它,但速率限制无论如何都是有用的。默认情况下,UFW 速率限制每 30 秒 6 个连接,它旨在用于 SSH:
sudo ufw limit ssh
开启 UFW
完成规则配置后,您可以启用 UFW。 确保端口 22 上的 SSH 已打开,否则您会将自己锁在门外。如果需要,您可以禁用 UFW 在启动时运行,以便重置可以解决任何潜在问题:
sudo systemctl disable ufw
然后,您可以通过以下方式启用 UFW:
sudo ufw enable
如果一切正常,您可以运行 ufw status
查看防火墙的当前状态。如果您没有被锁定,并且防火墙正在运行,请将其设置为在启动时运行:
sudo systemctl enable ufw
每次进行更改时,您都需要重新加载防火墙:
sudo ufw reload
您还可以打开日志记录,将连接记录到 /var/log/
:
sudo ufw logging on
管理和删除规则
如果你想删除一个规则,你必须得到它的编号:
sudo ufw status numbered

请注意,数字从 1 开始,而不是 0。您可以按数字删除规则:
sudo ufw delete [number]
同样,请确保您没有删除保持端口 22 打开的规则。您可以使用 --dry-run
参数让 UFW 要求您进行确认:

如果您进行任何更改,您将需要再次重新加载防火墙。