每份主机价目表上都印着“含 DDoS 防护”,而它在每家服务商那里的含义都不一样。本文按攻击期间事件实际发生的先后顺序,说明我们的防护是怎么运作的、它会让您付出多少延迟代价(正常情况下为零),以及哪一类攻击是任何网络层缓解手段都无法替您吸收的。
检测:边缘处的 sFlow
我们六个机房位置中的每一台边界路由器,都会把采样得到的流记录导出到同一节点内的采集器。采集器为每个目标地址维护一条基线(每秒数据包数、每秒比特数以及协议构成),并拿最近几秒的数据与之对比。如果某个目标地址的流量激增了一个数量级,而且形态像是攻击,比如来自数万个源地址的数百万个 UDP 数据包,或者正常服务根本不会产生的 SYN 速率,那么在洪水开始后的两到四秒内,它就会被标记出来。
采样意味着采集器每几千个包才会看到一个,这足以识别流量型攻击,却不足以发现缓慢的应用层攻击。这一局限,我们会在文末回头再谈。
牵引:只有受影响的前缀改道,其余不受影响
一旦某个目标地址被标记,采集器就会把它的 /32(或 /128)路由发布到该节点的路由系统中,下一跳指向清洗集群。只有这一个地址的路径会发生变化;同一台宿主机、同一个机架或同一个 /24 中的其他所有服务器,都保持正常路由。牵引只需要在节点内部发出一次 BGP 更新,因此从检测到开始清洗,通常不到十秒。
发往被标记地址的流量现在会进入清洗集群。这是一组运行基于 DPDK 的过滤器的服务器,容量远高于该节点 transit 的总带宽。过滤器先按特征丢弃攻击流量(放大攻击源、畸形数据包、伪造的源地址段),再按行为丢弃(按源地址限速、SYN cookie、TCP 握手校验),然后通过内部网络,把留下来的流量转发给原来的服务器。您的服务器看到的是清洗后的剩余流量,原始源地址保持不变。
“始终开启”对您的延迟意味着什么
它的意思是:在检测到攻击之前,没有任何设备串联在转发路径上。正常运行时,数据包从边界路由器直达您的服务器,清洗集群并不在这条路径上,因此没有额外的跳数,没有额外的延迟,也没有代理去改写您的请求头。攻击发生期间,经过清洗集群的这一跳会在节点内增加几百微秒。这就是该防护带来的全部延迟成本,而且只有在遭受攻击时才需要付出。
另一种设计是让所有流量始终经过过滤器,它并不能多防住任何东西,却要让所有人时时刻刻都多付一点延迟。我们不这样做。
防护容量及其来源
每个枢纽节点(法兰克福、纽约、新加坡)的清洗容量,都大于其 transit 与 peering 带宽之和,因此能把上游链路打满的攻击,在得逞之前就已被拦下。规模超过单个节点 transit 带宽的攻击,是我们保留多条路径相互独立的上游的原因,也是最大规模的洪水在抵达我们之前,就被上游运营商自有的清洗服务(按签订的合同启用)吸收掉的原因。较小的节点(阿姆斯特丹、赫尔辛基、洛杉矶)则通过我们的骨干网,把受攻击的前缀牵引到最近的枢纽节点。
我们不公布一个笼统的 Tbps 数字,因为它只对某一种攻击形态成立。真正重要的数字是:过去十二个月里,没有任何一次针对某个客户的攻击,给同一节点上并非攻击目标的客户造成过可测量的损失。这就是我们的承诺:邻居的麻烦,始终只是邻居的麻烦。
解除
当采集器发现攻击流量已回落到基线水平并持续数分钟后,就会撤销牵引,该地址重新回到直连路径。对同一地址的反复攻击,会让牵引保持更久,最长可达数小时,以避免路由抖动。您可以在控制面板中该服务器的网络标签页以及事件日志里查看当前状态,并看到观测到的峰值速率。
我们无法替您吸收的攻击
应用层(第 7 层)洪水,是指每秒数千个格式完全正确的 HTTPS 请求,打向您自己应用中某个开销很大的接口,来源可能是真实的浏览器,也可能是能正确完成 TLS 的僵尸网络。对网络来说,它只是普通流量;对您的应用来说,它像是忙碌异常的一天,而且早在任何数据包计数越过阈值之前,您的 CPU 或数据库就已经被压垮了。网络层的缓解手段分辨不出这些请求和真实客户的请求,我们也一样,除非解密您的流量,而我们不会这样做。
这类攻击的防御措施要落在您自己的技术栈里:
- 在 nginx 或 Caddy 中按客户端限速(
limit_req,或 Caddy 的限速插件),并对登录和搜索接口设置更严格的限额。 - 凡是能缓存的内容都缓存起来,让攻击打在缓存上,而不是应用上。
- 如果需要质询页面和机器人评分,就在源站前部署 CDN 或 WAF;同时不要让源站 IP 出现在 DNS 中,以免攻击者绕过它。
- 调好连接数限制和超时时间,使慢速请求攻击无法占满所有工作进程。
以上任何一项,我们都乐意通过工单协助;遭受第 7 层攻击的服务器,绝不会因此被做黑洞路由,只是需要只有您自己才能配置的应用层防御。
规则汇总
- 秒级检测,只牵引被攻击的地址,在同一节点内完成清洗。
- 未受攻击时没有延迟成本;遭受攻击时增加几百微秒。
- 不限制攻击的次数和持续时间;防护是每个套餐自带的,而不是附加项。
- 我们绝不会因为客户遭受攻击而对其做黑洞路由。黑洞路由只用于出站滥用,那是另一回事,详见我们的滥用政策文章。
