实战经验:电商平台遭遇CC攻击,我们是如何应对的?( 三 )


慢速攻击主要利用的是thread-based(基于线程)架构的服务器的特性 , 这种服务器会为每个新连接打开一个线程 , 它会等待接收完整的HTTP头部才会释放连接 。 比如Apache会有一个超时时间来等待这种不完全连接(默认是300s) , 但是一旦接收到客户端发来的数据 , 这个超时时间会被重置 。 正是因为这样 , 攻击者可以很容易保持住一个连接 , 因为攻击者只需要在即将超时之前发送一个字符 , 便可以延长超时时间 。 而客户端只需要很少的资源 , 便可以打开多个连接 , 进而占用服务器很多的资源 。
Apache、httpd都采用thread-based架构 , 很容易遭到慢速攻击 。 而另外一种event-based(基于事件)架构的服务器 , 比如 nginx 和 lighttpd 却不容易遭受慢速攻击 。
如何防御慢速攻击?
如果请求超过配置的超时时间或者传输速率低于最小速率 , 那么它就有可能是一个慢速攻击 。 可以配置合理的从客户端接收HTTP头部和HTTP body的超时时间和最小速率 , 来避免连接长时间等待 。
周期地统计报文数量 。 一个TCP连接 , HTTP请求的报文中 , 报文过多或者报文过少都是有问题的 , 如果一个周期内报文数量非常少 , 那么它就可能是慢速攻击 , 可以封禁对应IP;如果一个周期内报文数量非常多 , 那么它就可能是一个CC攻击 。
使用较多的慢速攻击工具有:Slowhttptest和Slowloris 。
CC等DDos攻击的防御方法如下:
按IP限流我们可以在网关层(Apache , Nginx , Zuul等) , 对IP限流 , 按分钟级和秒级维度限制接口访问次数 。 当访问次数超过指定阀值后对其他请求做抛弃处理 。 对访问量过大的IP , 放进黑名单 , 限制访问 。 将恶意请求的拦截前置到网关层处理 , 避免大量恶意请求打到后端服务 , 对服务造成巨大压力 。
分组部署 , 按用户限流可以将新用户和老用户路由到不同的服务器群组 。 如果新用户突然暴涨 , 很可能是混入了大量肉鸡注册的账号 , 可以将这些新用户的请求路由到专门的新用户服务器群组 , 保证老用户所在的服务器群组不受影响 。 之后再找出异常的用户进行封禁和拦截处理 。 另外还可以按USERID对用户进行限流 , 如新用户每分钟请求上限为60次/分钟 , 老用户为45次/分钟 。 这样可以避免同一用户在短时间内发送大量请求到后端服务器 。
实战经验:电商平台遭遇CC攻击,我们是如何应对的?文章插图
更改访问端口很多情况下 , Web Server通过80端口对外提供服务 , 攻击者也是针对目标站点的对应端口进行攻击的 。 发现被攻击后 , 可以临时改变该端口来应对攻击 。 但是这只是临时策略 , 稍微懂点网络知识的攻击者会很快发现新改变的接口 , 改变攻击脚本后即可发动新一轮的攻击 。
购买高防IP服务高仿IP服务算是终极抗D方案了 。 公司可以通过配置DDoS高防IP服务 , 把自己的网站域名解析指向高防IP , 并配置源站IP 。 所有公网流量都经过高防IP服务 , 在高防IP服务上进行清洗过滤后再将正常流量转发到源站IP , 从而确保源站IP稳定访问 。 另外 , 高防IP服务往往拥有超大带宽 , 一般的CC攻击几乎不可能耗尽高防IP服务的带宽资源 。 高防IP防御效果非常好 , 不过价格也比较贵 。 我们当时就是采用了这个方式 , 紧急采购了高防IP , 并快速接入我们的网站 。
实战经验:电商平台遭遇CC攻击,我们是如何应对的?文章插图
高防IP服务会通过多种手段对请求进行清洗 。 比如 , 会根据大数据分析结果 , 形成各种特征的IP名单 。 还会根据请求特征对攻击工具进行识别 。
实战经验:电商平台遭遇CC攻击,我们是如何应对的?文章插图
页面静态化尽量将页面静态化 , 减少对后端服务的访问 。 静态页面可以充分利用客户端浏览器和反向代理的缓存能力 。 还可以上CDN , 用CDN分担绝大部分的流量 。 可以大幅降低攻击流量到达后端服务的几率 。