如何在 Ubuntu 服务器上设置防火墙
已出版: 2025年2月15日 UTC 21:34:39
最后更新 2026年1月12日 UTC 08:37:33
本文解释并提供了一些示例,说明如何使用 ufw(Uncomplicated FireWall 的缩写)在 GNU/Linux 上设置防火墙——这个名字很贴切,它确实是一种非常简单的方法,可以确保您不会打开比需要的更多的端口。
How to Set Up a Firewall on Ubuntu Server
本文信息基于 Ubuntu Server 14.04 x64,可能不适用于其他版本。(更新:我确认本文信息在 Ubuntu Server 24.04 上基本仍然有效,但在过去的十年中,ufw 防火墙变得更加“智能”,它为常用服务器应用程序提供了配置文件(例如,您可以启用“Nginx full”而不是分别启用 80 和 443 端口),因此不再需要禁用/启用整个防火墙才能应用新规则。)
我刚开始接触 GNU/Linux(Ubuntu)服务器时,配置防火墙需要手动创建和维护一个可能非常复杂的 iptables 配置文件。不过,我最近发现了 ufw,它是 Uncomplicated Firewall(简易防火墙)的缩写——它确实非常简单 :-)
我的 Ubuntu Server 14.04 安装包里已经预装了 ufw,但如果你的没有,只需从软件仓库安装即可:
UFW 实际上只是一个简化 iptables 配置的工具——底层仍然是 iptables 和 Linux 内核防火墙在执行过滤操作,因此 ufw 的安全性并不比它们更高或更低。然而,由于 ufw 大大简化了防火墙的正确配置,它可以降低人为错误的风险,因此对于经验不足的管理员来说可能更安全。
如果您的服务器同时配置了 IPv4 和 IPv6,请确保 UFW 也启用了 IPv6。编辑 `/etc/default/ufw` 文件,查找包含 `IPV6=yes` 的行。我的服务器上已经存在这一行,但如果不存在或显示为 `no`,则需要进行编辑。
然后只需使用命令行启用您想要开放的端口即可。如果您是通过 SSH 连接到服务器,请确保也允许 SSH 访问,否则可能会中断您的连接,甚至在您启用 SSH 时将您锁定在服务器之外——这取决于您是否拥有服务器的物理访问权限,这可能会有点不方便 ;-)
例如,如果您使用标准端口 22 上的 ssh,并且您正在配置一个同时支持未加密(端口 80 上的 HTTP)和加密(端口 443 上的 HTTPS)连接的 Web 服务器,则您需要发出以下命令来配置 ufw:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
如果需要更多规则,只需按照上述步骤添加即可。
如果您拥有静态 IP 地址,并且只需要从一个位置通过 SSH 连接,您也可以像这样将 SSH 连接限制为单个源地址:
当然,您也可以输入您自己的 IP 地址。
完成后,输入以下命令启用ufw:
搞定!防火墙已启动,会在您重启服务器时自动启动 :-)
如果您更改了ufw配置,可能需要先禁用再重新启用它才能使更改生效,如下所示:
sudo ufw enable
要查看当前配置,只需输入:
如果 ufw 未启用,则会显示“未激活”消息;否则,将列出当前定义的规则。
