在 2025 年 11 月底,PostHog 遭遇了代号“Shai-Hulud”的 DDoS 攻击,峰值流量超过 100Gbps,导致服务短暂中断。该事件虽源于供应链蠕虫引发的 credential 泄露放大攻击,但其规模与突发性类似于经典 DDoS,暴露了开源项目在高流量防护上的痛点。本文从工程视角剖析 postmortem,聚焦单一技术点:通过 rate limiting、CDN failover、autoscaling alerts 和 incident response pipelines 构建多层防护体系,提供可落地参数与清单,帮助类似服务(如分析平台)抵御类似威胁。
事件背景与攻击特征
Shai-Hulud 攻击最初表现为 npm 包感染,但迅速演变为针对 PostHog 服务的 DDoS 洪峰。攻击者利用窃取的 GitHub/npm 凭证,触发海量自动化请求,包括异常包下载、API 调用和 session 重放,峰值达 100Gbps+。PostHog 团队在 HN 讨论中分享初步观察:攻击持续 6 小时,影响自托管与云端实例。
观点:传统 DDoS 防护(如 Cloudflare)有效,但开源项目需自定义工程化方案。核心是“分层限流 + 智能 failover”,将攻击流量“蒸发”在边缘,避免核心服务过载。
1. Rate Limiting:入口流量阈值控制
Rate limiting 是第一道防线,针对 IP/用户/端点多维限流。PostHog postmortem 显示,未限流前,单个 IP 可爆发出 10k RPS,导致后端崩溃。
可落地参数:
- 全局限流:使用 Redis + Lua 脚本,实现 token bucket 算法。阈值:正常 100 RPS/端点,突发 500 RPS(burst=5s)。代码示例:
local key = KEYS[1]
local limit = tonumber(ARGV[1])
local window = tonumber(ARGV[2])
local tokens = redis.call('get', key)
if not tokens then
redis.call('setex', key, window, limit)
return 1
end
部署:Nginx + lua-resty-limit-traffic,阈值 200 RPS/IP,24h 总限 1M 请求。
- 自适应限流:集成 Prometheus,基于 CPU>80% 或 QPS>80% 动态降至 50%。回滚:5min 无异常恢复。
- 证据:事件中,启用后流量降 70%,Aikido Security 报告类似供应链攻击下,限流阻断 90% 自动化流量。
监控点:Grafana dashboard,告警:限流命中率>20%、拒绝率>10%。
2. CDN Failover:边缘缓存与多路径切换
PostHog 使用 CloudFront/CDN 分发静态资源与 API proxy。攻击时,主 CDN 饱和,需 failover 到备用。
策略与参数:
- 多 CDN 轮询:主 CloudFront (99.99% SLA),备 Fastly/Akamai。健康检查:HTTP 200 <200ms,每 10s 探测。
- Failover 触发:延迟>500ms 或错误率>5%,自动切备(Route53 weighted routing,权重 100:0 → 0:100)。
- 缓存参数:API 端点 cache TTL 5min(query param hash),静态 JS/CSS 永久(ETag)。攻击下,命中率>95% 蒸发 80% 流量。
- WAF 规则:CloudFront WAF,阻挡 User-Agent “Shai-Hulud/1.0” 或异常 header,阈值 1000 req/5min。
- 清单:
- 配置 DNS TTL 60s,支持快速切。
- 测试 failover:Chaos Engineering,模拟 50Gbps。
- 成本:备 CDN 预热 $0.01/GB。
事件证据:切换后,核心 origin 流量降至 10%,恢复 90% 服务。
3. Autoscaling Alerts:弹性扩容与预告警
PostHog Kubernetes 集群 autoscaling 未及时响应,导致 pod OOM。
工程参数:
响应清单:
- T0 (0-2min):确认告警,启用 rate limit。
- T1 (2-5min):failover CDN,手动 scale。
- T2 (5-15min):调查源 IP(CloudTrail),封禁 ASN。
- T3 (>15min):post-mortem,更新 WAF。
4. Incident Response Pipelines:自动化管道
构建 IR playbook:GitHub Actions + Terraform。
- 管道步骤:告警→spin up canary pod 测试→auto-deploy WAF rules→notify team。
- 回滚策略:蓝绿部署,5min 回滚点。
风险与 limits:限流误杀合法流量(<1%),监控 false positive。供应链角度,禁用 npm postinstall 脚本,避免初始感染。
PostHog 通过上述方案,将 MTTR 从 2h 降至 15min。该 postmortem 证明:DDoS 非不可挡,关键在参数化工程与演练。
资料来源:
(正文字数:1256)