用 UFW IP 白名单防止邻居扫端口

Setang 62 阅读 信息分享

你租了一台 VPS,用的是共享网段(比如 /24/20)。同一网段里可能住着几十甚至几百台其他人的机器。这些"邻居"天然能访问你的 443、80 等端口,更坏的情况是——他们还能把你的 IP 当出口用来偷流量。

本文用两条 ufw insert 规则,以最小代价解决这个问题。


原理:UFW 规则的优先级

UFW 的规则按插入顺序从上到下逐条匹配,第一条命中的规则即生效,后续规则不再执行。

ufw insert N 把规则插入到第 N 位,把原来第 N 位及之后的规则往后挤。所以:

  • insert 1 → 排最前,最先匹配

  • insert 2 → 紧跟其后

我们要实现的逻辑是:

先放行自己,再拒绝整个邻居网段。


第一步:确认你的 IP 和所在网段

curl -4 ip.sb

假设返回 1.2.3.45,那么你的 IP 是 1.2.3.45,所在的 /24 网段是 1.2.3.0/24

如果你不确定 VPS 分配的子网掩码,可以查看服务商后台,或者运行:

ip addr show

找到你的公网网卡,注意 inet 后面的 / 后面的数字就是掩码位数(常见是 24、20、22)。


第二步:执行这两条规则

# 规则1:最高优先,放行自己的 IP
sudo ufw insert 1 allow from 1.2.3.45

# 规则2:第二优先,拒绝整个邻居网段
sudo ufw insert 2 deny from 1.2.3.0/24

1.2.3.45 换成你自己的公网 IP,将 1.2.3.0/24 换成你实际所在的网段。


第三步:验证规则顺序

sudo ufw status numbered

正确的输出应该类似:

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] Anywhere                   ALLOW IN    1.2.3.45
[ 2] Anywhere                   DENY IN     1.2.3.0/24
...(你原有的其他规则)

规则 1 在规则 2 之前 ✅,逻辑才正确。如果顺序反了(deny 跑到第 1 位),你的 IP 也会被一起封掉,立刻断线。


第四步:测试是否生效

另一台同网段机器(或者让人帮你用同 ISP 的机器)尝试访问你的 443 端口:

curl -v --max-time 5 https://你的IP
# 或者
nc -zv 你的IP 443

正常情况下,同网段的请求会被直接 DENY,连接超时或立即 Reset,不会有任何响应。

从你自己的 IP 访问(比如本机 curl,或者你家的出口 IP)应该正常返回。


常见问题

Q:这两条规则会影响 VPS 出站流量吗?

不会。ufw insert 默认作用于 INPUT 链(入站),不影响出站(FORWARD / OUTPUT)。

Q:我现在的 ufw 没开,能直接用吗?

先确认 ufw 已启用,且已经有放行 SSH 的规则,再添加这两条,顺序很重要:

# 确保 SSH 先放行,别把自己锁外面
sudo ufw allow 22/tcp
sudo ufw enable

# 再插入这两条
sudo ufw insert 1 allow from 你的IP
sudo ufw insert 2 deny from 你的网段/24

Q:网段怎么算?

IP a.b.c.d,掩码 /24 → 网段是 a.b.c.0/24,把最后一段换成 0 即可。 掩码是 /20 的话需要算一下,可以用这个工具快速换算:cidr.xyz


小结

规则

位置

效果

allow from 自己IP

insert 1(最高优先)

自己永远能进

deny from 邻居网段

insert 2

同网段其他机器全部拒绝

引用:brewing834