在 Linux 安全运维中,UFW 虽被称为"简单防火墙",但其背后是对 iptables 规则的高度封装。若仅停留在 allow 22 这种表层操作,极易在复杂网络环境中留下安全隐患,甚至导致生产环境脱管。
{#section path-to-node="5"}
1. 规则前置:从内核绑定(Kernel Binding)视角出发
在执行任何 ufw 指令前,必须理解:防火墙规则仅对内核中的"监听者"生效。
通过 ss -tulpn (或旧版的 netstat) 确认服务的监听地址(Binding Address):
-
127.0.0.1:仅限本机访问,无需 UFW 规则。
-
0.0.0.0 / :::全接口暴露,这是最危险的状态。
-
私有 IP:仅在 VPC 或内网内通信。
专业建议: 先快照当前监听状态、ufw status 和云安全组规则。只有这三者完全对齐,才能确保策略变更后的系统连通性。
{#section-1 path-to-node="9"}
2. 避免 SSH 锁定:严谨的配置序列
生产环境下,"误封 SSH"是初级运维的低级错误。标准的加固序列应当是:
-
设置默认策略:
sudo ufw default deny incoming且sudo ufw default allow outgoing。 -
定义 SSH 规则:优先使用 OpenSSH 应用配置文件(
ufw allow OpenSSH),这比直接开放 22 端口更具服务识别性。 -
灰度测试:保持当前的 SSH 会话不关闭,新开窗口验证连通性。
{#section-2 path-to-node="12"}
3. 场景化加固:VPN 与隧道接口过滤
当服务器运行在 WireGuard、Tailscale 或 ZeroTier 等 VPN 上时,应将管理权限严格限制在虚拟网卡(如 wg0):
[Bash]{ngcontent-ng-c198275178=""}
# 仅允许通过 VPN 接口进行 SSH 访问
sudo ufw allow in on wg0 to any port 22
# 显式拒绝物理公网网卡的 SSH 请求
sudo ufw deny in on eth0 to any port 22
底层逻辑: 这强制要求管理员必须先通过加密隧道验证身份,极大地缩小了暴力破解的攻击面。
{#section-3 path-to-node="16"}
4. 警惕 IPv6 幽灵暴露
这是许多资深工程师也会忽略的盲区。如果 /etc/default/ufw 中的 IPV6=yes 未启用,UFW 只会处理 IPv4 流量。此时,若服务监听在 ::(全地址),攻击者可以绕过 IPv4 的防火墙规则,直接通过 IPv6 入侵。
务必检查: 确保双栈环境下的 UFW 规则对 IPv6 同样具备约束力。
{#section-4 path-to-node="18"}
5. 数据库层面的"零信任"策略
PostgreSQL 或 MySQL 绝不应暴露在公网接口。针对数据库的 UFW 规则应严格基于源 IP(CIDR):
-
应用层网段:仅允许应用服务器所在的子网。
-
管理堡垒机:仅允许运维跳板机的 IP。
-
绑定策略:数据库应首选绑定在
127.0.0.1或私有网卡,而非0.0.0.0。
{#section-5 path-to-node="21"}
6. 进阶:出站流量监控(Egress Filtering)
在极高安全等级的环境中,应限制服务器的出站行为(Outbound Traffic),以防止反弹 Shell 或数据窃取(Exfiltration):
-
禁用默认出站:
sudo ufw default deny outgoing。 -
按需开启:仅允许 DNS(53)、APT 更新(80/443)以及必要的备份同步地址。
-
封杀 SMTP:默认封禁 25/465/587 端口,防止被利用为垃圾邮件中继站。
{#section-6 path-to-node="24"}
7. 规则审计与优先级管理
UFW 遵循 First-Match(首条匹配) 原则。
-
审计指令:
sudo ufw status numbered。查看规则序号,确认是否存在宽泛规则遮蔽了精细化规则。 -
精确修改:使用
sudo ufw insert 1 allow ...将紧急规则置顶。 -
重置机制:在规则逻辑混乱时,使用
sudo ufw reset回归基线,但操作前务必确保拥有带外访问权限(如 IPMI 或 VNC)。
结语: 真正的安全不仅仅是"关掉端口",而是对流量流向的精准编排。在 AI 泛滥的时代,理解内核态下的网络行为,才是工程师不可替代的核心竞争力。
更多 Linux 深度技巧,请关注 B 站同名频道:LeisureLinux。