Skip to content
VDS · 网络、IP 地址与域名

ufw 防火墙:关闭不需要的端口

如何在五分钟内配置 ufw:放行必要端口,关闭其余端口,按地址限制访问,以及避免切断自己的 SSH。

更新于 2026年8月23日

在一台全新的机器上,所有监听网络的服务都是开放的。有些服务是您主动安装的,有些则是随软件包一起装上的。防火墙可以一次性解决这个问题:除了您列出的内容,其余全部拒绝。

ufw 是对内核规则的一层简单封装。在绝大多数情况下它已经够用;更复杂的配置请参阅 nftables 一文。

基本配置

apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw enable
ufw status verbose

这里的顺序很重要:SSH 规则要在启用之前添加。否则 ufw enable 会切断您的连接,您只能通过面板控制台 /hosting/vds/m/<id> 或救援模式重新进入。

面板中的控制台独立于网络运行,所以您不会把自己彻底锁在外面——但这会浪费时间。

常用规则

ufw allow 80/tcp
ufw allow 443/tcp
ufw allow from 203.0.113.5 to any port 22 proto tcp
ufw limit 22/tcp
ufw delete allow 80/tcp
ufw status numbered
ufw delete 3

ufw limit 会限制在 30 秒内发起超过六个连接的来源——这是防范密码暴力破解的廉价手段。完成同样任务且更精细的工具是 fail2ban。

allow from 规则适用于不应公开的服务:数据库、管理面板、指标导出器。

ufw allow from 203.0.113.5 to any port 5432 proto tcp

验证结果

ufw status verbose
ss -tulpn

ss 显示系统正在监听什么,ufw status 显示外部允许通过什么。两个列表的差集就是您已关闭的服务,这很正常。反过来才糟糕:某个端口在 ufw 中是开放的,却没有监听者。

从外部检查时,请用端口而不是 ping:

nc -vz <address> 443

Docker 与 ufw

如果机器上运行着 Docker,请注意:容器端口转发在内核链中处理,早于 ufw 规则。用 -p 5432:5432 启动的容器,即使 ufw status 显示 deny,也能从外部访问。请把这类端口绑定到本地接口:

docker run -p 127.0.0.1:5432:5432 postgres

常见错误

错误后果解决方法
未添加 SSH 规则就执行 ufw enable失去网络访问通过面板控制台进入,执行 ufw allow 22/tcp
修改了 SSH 端口,却保留了旧规则同样的问题先加规则,再改端口
端口开放,服务却不响应服务监听在 127.0.0.1修改绑定地址
尽管是 deny,容器仍可访问Docker 绕过了 ufw绑定到 127.0.0.1

在关闭某个端口之前,先运行 ss -tulpn,确认您清楚上面运行着什么。被关掉的监控端口,之后看起来就像“服务挂了”。