VPN 访客检查:安全地为声誉与延迟打分
把 VPN 识别看作带分数的估计。收集可辩护的请求事实,测量路径耗时,并用可逆的升级核验代替封禁。
欺诈看板把访客标记为 VPN,分析师要求封禁,而请求带着供应商的一个布尔值就到了平台团队。那个布尔值只是估计,它的出错方向与延迟测量不同。动手之前,先把请求本身证明了什么、声誉服务声称了什么、时间测量只是暗示了什么区分开。然后选择一个在估计出错时能撤回的响应。
收集你能辩护的请求事实
服务器唯一确定知道的地址,是完成连接的 TCP 对端。当 CDN 或反向代理终结该连接时,对端就是边缘,客户端地址位于转发头中,只有你自己边缘写入的那一条才可信。读代理写入的那条,永远不要读最左边的字符串,因为客户端可以在那个位置放任何值。下游的一切都必须保留这个区别。
两种廉价补全让地址变得可复核:宣告它的自治系统,以及指回它的 PTR 记录。两者描述的是注册信息而非行为,而且之后都能复现。
IP=203.0.113.10
dig +short -x "$IP"
whois "$IP" | grep -iE "origin|netname" | head -5托管 ASN 是强线索而不是判决。企业 VPN 集中器、云出口和部分高校网络同样位于数据中心,所以抓住商业出口的同一信号也会抓住合法办公室。只在复核需要的时间内保留地址,因为在多数隐私制度下 IP 属于个人数据。按计划删除,而不是无限期保留。
先给访客打分,再限制他们
任何新信号都先在观察模式下运行。记录输入与原因码,放行所有请求,并把分数分布与你知道合法的账户对比。这样在任何人失去访问之前就得到误报估计,而正是这个数字决定规则能否安全启用。
| Signal | What it supports | How it fails | Typical action |
|---|---|---|---|
| Hosting ASN | Traffic likely originated from infrastructure | Corporate VPN and cloud egress look the same | Add weight, not a block |
| Reputation verdict | A vendor's dated classification | Vendors disagree; self-hosted exits look clean | Step-up challenge |
| RTT versus baseline | The path is longer than usual | Anycast, mobile networks, in-country exits | Weak weight only |
| Forwarded header consistency | Whether the edge saw the claimed client | Misconfigured proxies produce noise | Drop the value, do not score it |
把总分映射到三种动作而不是两种:允许、升级质询、人工复核。永久封禁应当要求由人确认的反复滥用,因为对企业出行者的误报会带来一张工单和一次丢失的会话,而单个请求的漏报几乎不花成本。
把声誉查询放在服务端并加以边界
从后端以较短的超时调用声誉服务,把判定缓存固定时长,并把超时当作未知而非干净。绝不要把 API 密钥放进客户端代码,也绝不要让查询阻塞页面渲染;慢的第三方应该拉低分数,而不是拖垮站点。
按地址缓存,而不是按网段。用一次查询给整个 /24 分类,会把错误判定扩散到你从未测量过的邻居。把供应商、响应日期和分类值记在原因码旁边,以便后续复核知道当时生效的是哪个判断。
两个供应商可能在一天内对同一地址给出不同分类,所以判定属于证据列而不属于身份列。这还是一种处理关系:把每位访客的地址发给第三方,需要法律依据、保留规则以及隐私声明中的一行。
用中位数测量延迟,而不是单次采样
往返时间描述的是你测量那一刻的路径。附近的 anycast 边缘可以服务远方用户,移动网络会加入与地理无关的延迟,而访客本国的 VPN 出口看起来像本地。城市级定位经常报告的是数据中心而不是人。
多采几次样并用中位数,避免一次慢请求改变结果。下面的循环打印五个样本的中位数。
for i in 1 2 3 4 5; do
curl -o /dev/null -s -w "%{time_connect} %{time_starttransfer}\n" https://www.example.com/
done | sort -n | sed -n 3p把数字与已知良好用户的分布比较,而不是用绝对阈值,并把它与 ASN 结合。两个一致的弱信号比任何单独一个都强,但结论仍然是关于路径而不是意图,所以它属于分数而不是禁令。
决策、记录并回滚
启用规则之前,在观察模式下重放一天的流量,数一数本来会发生什么。保存分数输入、原因码和规则版本,但原始地址只保留复核窗口。如果规则命中合法账户,记录应当无需二次调查就能解释原因。
给每条规则各自的开关。当升级完成率下降或工单激增时,关掉那条规则而让其余流水线继续运行;一个全局急停开关会把调参问题变成故障。变更之后要关注挑战完成率和申诉队列,而不只是封禁数量。
最后,让响应与你正在避免的损失成比例。在广告欺诈中,VPN 状态只是虚假点击的弱代理,而转化模式和设备一致性等行为信号才针对真实损害。可逆的质询同时保护收入和真实用户。