Linux 服务器防火墙思路:nftables 与 UFW
Linux 服务器防火墙的两层关系:nftables 是内核里的实际执行者,UFW 是 Ubuntu 上的前端工具;默认放行出站、按服务放行入站的思路,以及最小规则集怎么搭。
结论先行
现代 Linux 的防火墙执行层是 nftables(内核表),UFW 是 Ubuntu 上包在 nftables 之上的前端工具(Ubuntu 26.04 Live Server 条目 默认带 UFW);Debian 裸装通常不带 UFW,直接用 nftables/iptables 前端管理。搭建思路统一:出站默认放行、入站默认拒绝、按服务逐条放行。
两层关系
| 层 | 角色 | 说明 |
|---|---|---|
| nftables(内核) | 实际过滤/ NAT | 规则最终都落在这里 |
| UFW(工具) | 用户友好前端 | ufw allow ssh 翻译成 nftables 表项 |
| iptables(工具,旧) | 传统前端 | 老文档还在用,新发行版默认 nftables |
「用 UFW 还是 nftables」不是二选一的功能竞争,而是「要不要工具层」;同一套 nftables 底下,两个前端改的是同一组表。
最小规则集思路
- 默认入站拒绝、出站放行。
- 逐服务放行:SSH 22、HTTP 80、HTTPS 443 等——只放行你确实开的服务。
- 已建立的连接放行(UFW 默认处理)。
- 改完先在自己终端别断开的情况下验证(SSH 场景尤其重要)。
Ubuntu 上:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp
sudo ufw enable
两个容易踩的点
- 放开 SSH 前确认远程能连,否则把自己锁门外;改规则前留一个已连接会话。
- 服务在 127.0.0.1 上的端口(数据库等)不要放行给外界,按最小面原则。
Debian 侧(Debian 13.7.0 DVD-1 条目 系统)没有 UFW 时,直接管理 nftables 规则表,思路同上。