低成本实现百 Gbps ddos/CC 攻击防护
原创: 小昊@商业化运营 百姓网技术团队
背景介绍
年初启动的公司项目上线后陆续收到各种强度的 DDoS/CC 攻击,其中最大单次攻击流量达(只)到(有) 140Gbps+,这些攻击严重影响了用户的访问体验。
从技术角度来说,150Gbps 的攻击流量业内有很多成熟的解决方案,典型如阿里云的 20Gbps 保底和 150Gbps 弹性防护,开通这项服务需要 21800 软妹币/月的基础费用,再加上当天遇到的超出部分,例如 100Gb<攻击峰值≤150Gb 范围的弹性防护费用为 16453 软妹币/天。如果一个月遇到 3 次 140Gbps 的攻击,那么这个月的总费用至少为 21800+16453*3=71159 软妹币。
问题是没那么多预算的情况下,亏本生意谁都不愿意做。为了降低被攻击带来的投放损失,提高服务质量,我们尝试了国内外几家服务商的高防/流量清洗服务,最后取长补短采用了境外高防和国内 cdn 相结合的攻击防护方案,以较低成本实现攻击防护的同时保证了服务质量和用户体验。
相关名词解释
DDoS 和 CC 攻击
DDoS(Distributed denial-of-service attack)攻击全称分布式拒绝攻击,CC(Challenge collapsar)攻击是 DDoS 的一种,但和 DDoS 攻击不同的是,它发出了大量的正常请求给服务端使服务端资源耗尽。具体对两者的定义和攻击方式可见拒绝服务攻击 [注①]
高防服务和流量清洗
国内各大平台给出的基本都是高防服务,这和流量清洗并不是同一个概念。高防服务一般针对各类攻击(包括 DDoS 和 CC)都具有一定的防护能力,而流量清洗主要针对异常流量进行清洗和防护,但对 CC 攻击这种 “看起来正常” 的攻击流量并不能实现良好的防御。
举一个具体的栗子方便各位看官理解:
前段时间美罗城新开的喜茶人气爆棚,引来了无数顾客。这时候隔壁丧茶老板发现自己的生意被抢了,于是雇了几十个大汉把喜茶的门给堵了,顾客根本没法进店排队。(和 DDoS 暴力占满服务端网络资源或服务资源的方式一样,大汉堵门导致喜茶无法正常接单) 然后喜茶老板报警,丧茶老板被请去局子里,大汉被警察叔叔赶走。(这样做类似于流量清洗,由专门的设备清洗不正常的网络请求,防止服务端直接收到大量非法请求而资源耗尽无法正常服务) 丧茶老板看着络绎不绝的喜茶顾客,看着自己冷清的门庭和付完大汉工钱以后干瘪的钱包,决定一不做二不休——雇几十个黄牛。黄牛轮番排队,点制作时间最长,最畅销的喜茶,再高价抛售还能赚一波差价。(这和 CC 攻击如出一辙,攻击者发起了海量的正常请求,使服务端应接不暇最终还是无法正常为用户提供服务而瘫痪) 喜茶老板面对大量的黄牛,找来了人脸识别系统,规定 6 小时内同一个人只能购买一次喜茶(CC 防火墙会对记录其会话情况,对同一 IP 或其他特征进行记录,超过阈值即拒绝服务),买到的黄牛发现其他人都买到了喜茶,只能自己喝了……
业务:页面和访客
页面内容由常见的几个部分组成(好像网页基本都是这些):
页面:HTML
页面资源:CSS 、JS 等
富媒体内容:图片、视频等
由于内容页面地域和受众来源非常具有地域性特点,访问者绝大部分来自于中国大陆,极少情况会有在东南亚出(旅)差(游)办(休)事(闲)的爱国人士来刷存在感。中国大陆地区的访问情况大致如下,可以看到访客绝大部分来自于中、东部各省、市、自治区:
基础:分而治之
在项目最初的设计方案中,为了对不同资源实现优化访问(例如提高图片等较大文件的加载速度),同时避免 “蛋都放在一个篮子里” 的问题,方便地维护页面内容,所以把页面内容和页面资源、媒体内容在存储实现上做一个区分:
资源类型 需求
页面内容 变化频繁,包含客户转化入口,易被攻击
图片、视频、页面资源 上传后基本不变
页面投放目的在于客户转化,让页面无法展示是降低转化最简单直接有效的方式,所以这也决定了攻防要点在于页面内容。由上面对资源类型的分析可以看到,因为页面内容和其他资源被隔离开,所以可以更加方便地对页面内容做特定的防护和优化。
分析:攻击特征
从各类访问日志来看,来自于中国大陆的攻击流量占比不到一半,来自于中国台湾、美国、欧洲和南美的流量非常得多,总结如下:
国内外攻击占比
中国大陆流量 ~40%
大陆以外流量 ~60%
攻击方式
DDoS
CC
根据以上的情况,我们可以得出一些结论:
大多数正常访问都是国内流量,可以购买支持隔断境外访问的国内高防,减少海外攻击影响;
可以使用智能 DNS 把国外流量引到国外高防或蜜罐机,就算国外挂了也对国内没有影响;
国内需要防护来保证服务的可靠运行;
调研:防护策略
攻击目标已经明确的情况下,对页面内容的防护成为我们首要关心的问题,即:
需要防护的使用高防解决方案
需要大带宽和更快响应能力的使用 CDN 解决方案(本文不作讨论)
针对上面的需求做了一点微小的调研:
再回过头来看具体的防护需求:各位看(大)官(佬)可以发现,就算是防御有限的服务,都好贵啊……而且能做好通用高防也是不容易的一件事。
资源类型 需求
页面内容 易被攻击,需要防护
图片、视频、页面资源 不受攻击者重视,先放一放
由上表可以发现,需要防护的重点在页面内容上,这都是些小文件,聪明的同学可能要问提高服务的 QPS 行不行,例如:
提高 gzip 压缩比,减少网络开销;
使用 nginx 集群,提高负载能力;
加入各类缓存服务,让性能更上一层楼;
但是单纯通过提高自身的 QPS 来应对攻击,实际是不行的,因为带宽容易被 DDoS 挤满,后端性能再强也会因为带宽不足无法提供正常服务,另一方面,增加自身 QPS 性能带来的成本比攻击者提高攻击并发产生的成本大得多得多,对方少抽一包烟就能让你辛苦搭建的集群分分钟负载跑满。所以寻找一个低成本的流量清洗数据中心变得非常重要。
实践:防护实现
项目起于年初,在 2 月上线后陆续受到越来越大的攻击,为了稳定提供服务我们先使用了某云服务商的通用高防服务,并启用了弹性防护。使用了一个多月后,账单消费约 15000 元(不含因服务商本身事故导致的扣费),与此同时发生事故 3 次,业务因此中断十多小时。
因为高防防护的特殊性,我们调研并实现了一套防护体系,防护实现通过以下几个核心工具组合而成:
智能 DNS:国内常用 CloudXNS(https://www.cloudxns.net)、DNSPod(https://www.dnspod.cn)等;
境外流量清洗服务:本案例选择了 OVH(https://www.ovh.com),还有例如 Voxility(https://www.voxility.com)等供应商可以选择;
国内 CDN 服务:需要支持超出带宽峰值自动回源和单 IP QPS 限制;
金盾防火墙:提供 CC 攻击过滤和防护;
具体调度策略如上图所示,说明如下:
页面内容
同时放置在国内静态文件服务和境外高防的静态文件服务之上;
CDN 回源请求页面内容并提供访问服务;国内和国外静态文件服务有两个 DNS 记录进行解析;
正常服务时:DNS 解析大陆访客到大陆 CDN 访问,海外访客到 OVH 进行访问;
遇到攻击时:流量超出 CDN 预设的带宽峰值回源,直接回源到 OVH 地址进行流量清洗和防护;
以上策略实现了正常状态下的具有良好的访问体验,被攻击时保证页面可以正常浏览。 从国内高防服务完全迁移到国外前后使用了近一个月的时间,为了验证国外服务的可靠性和清洗能力,对迁移期间遭到的若干次攻击做了手动调度,即发现攻击后将流量全部迁移到国外,即时监控国外服务的清洗情况和服务质量并进行调整优化。
在使用 OVH 进行 DDoS 防护的时候需要注意,OVH 对流量清洗的能力令人较为满意,但是面对 CC 攻击 OVH 并不能良好地作出防御。所以需要手工对 OVH 进行 CC 攻击的加强防御。本案例使用了金盾防火墙来实现 CC 攻击的防御。如果遇到更大量级的 CC 攻击,则需要更多的主机实例或使用硬件混合云的架构实现更强的防护能力。
总结
我们最终采用的具体方案和支出情况如下:
上述方案每月支出不到人民币 1000 元,远小于使用国内通用高防月均万元的支出。至今已经稳定运行了 4 个月,业务不可用时间小于 1 小时/月,基本可以满足当前遇到的攻击防护需求,同时也具备必须的扩展能力,可以在一周内实现防护能力和访问体验的提升:
对更大量级的 CC 攻击: 横向扩展更多的金盾实例,或使用混合云方式部署硬件清洗设备;
中国大陆访问优化: 欧洲中立数据中心结合混合私有云实现调整回程路由或 BGP 接入中国运营商(实现欧洲到上海/北京 RTT 小于 200 ms,1‰ 以内丢包率)
原文链接:https://blog.csdn.net/weinnan/article/details/97390819
原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/22734