一、 目的
实现国外节点的访问加速,分区域分线路加速,防御来自竞争对手的DDos恶意攻击,常见的延缓性CC攻击和致命的大流量攻击。针对以上的加速策略和两种攻击方式进行一些防御方案的简单介绍。
二、 CDN加速
利用第三方的DNS智能解析分区域分线路进行,就近原则,例如Cloudxns/DNSpod/51DNS/DNSla 等。
CDN节点选择:
主节点选择香港VPS,其他节点根据应用部署区域进行优选(马来、新加坡、柬埔寨、菲律宾等),旁路做流量清洗(遭遇攻击),可以选择美国的高仿VPS进行引流。
自建CDN优势:
-
- 旁路做流量清洗
- 资源充分利用:无攻击时,做路由加速,被攻击时做节点切换
- 长远规划,后期可增加节点、硬件配置等,根据需要自由提升防御DDOS攻击能力
架构设计:
我们将CDN节点分解成反向代理+缓存加速+攻击防御这三个层次的功能结构。
-
- 反向代理: 路由加速,隐藏主节点,负载均衡
- 缓存加速:静态推送,节省后端主节点带宽
- 攻击防御:快速解析,建立syslog分析日志,匹配过滤恶意攻击, 多节点CDN可以采用联动方案,建立syslog系统,采集所有节点访问日志,编写脚本分析日志,发现异常请求后通过ansible工具发送命令到节点
三、 攻击防御
延缓性CC攻击:
这类攻击的主要特点是,攻击者借助网络上提供的大量代理服务器 IP,使用攻击软件,生成合法请求指向受害主机。这类攻击成本低,网上现成能发动攻击软件多,其目的是通过渐增的垃圾请求,消耗CPU、内存、网络资源,造成拥堵,达到网站访问变慢,直至无法访问。
防御思路:
这类攻击有两个特征比较明显,第一个特征,由于是人为生成了大量的非法请求,所以会引发网络的入口异常流量增大(正常情况下出口流量大,入口流量小);
第二个特征,攻击力度有一个渐增的过程,机器可以充分利用这个时间智能做出反应,调用日志分析脚本,进行引流和IP封杀。
具体策略:
1、采用监控软件的流量监控来触发日志分析脚本(zabbix 为例)
2、采用python脚本统计入口流量,发现异常时,调用日志分析脚本,第一时间找出IP、Agent等特征码,利用iptables对恶意IP进行过滤,应用层上利用nginx关键词进行过滤。
致命的大流量攻击:
这类攻击主要特点是,通常以 tcp,icmp 和 UDP(尤其是 UDP 包,单 UDP 的数据包可以很大)方式为主,攻击流量可以达到几十GB以上,整个机房都能受到影响,攻击者通常利用大量肉鸡,对目标进行流量打击,此时流量会迅速占满服务器的带宽,导致无法响应任何用户请求。
这类攻击需要购置大量带宽,对于攻击者来说,成本还挺高,但是下手“快狠准”,让网站在短时间内完全无响应。
由于这类攻击会引起流量剧增,IDC通常采取的措施是丢车保帅,直接
将被攻击IP下线,这无疑是落井下石。
防御思路:
架设硬防火墙(成本高)
租用高仿节点
租用大流量CDN分散目标流量(引流)
长久之计,自建CDN
防御策略:
HAProxy+Nginx/ Varnish/ATS组合,我们称它为防御型反向代理缓存策略,功能角色如下:
-
- HAProxy负责动静资源分离,实现会话粘滞,节点负载均衡,故障转移,开启 HAProxy 的 httplog 功能,做日志记录
- Nginx负责反向代理缓存
四、 架构细节
DNS智能解析+轮询+存活监测:
-
- 部署智能DNS就近匹配CDN节点
我们自建CDN其中一个目的是做访问优化,因此当部署完多个CDN节点后,为使这些节点协同运作,同时优化用户的访问路径,使得访客能够根据自己所在的区域和线路类型,就近从CDN节点上获取页面内容,从而优化访客的路由。
DNS自动轮询+故障监测
-
- 利用DNS轮询来为网站进行分流负载。如果条件充裕,后期可以部署冗余的CDN节点,这样既能缓解某个单一节点的负载,同时能为节点作互备,当一个区内的CDN节点因故障失效之后,调度机制要在最快时间内将故障节点的流量牵引至当前可用节点,不影响访客的正常请求。
日志分析+攻击防御:
CDN作为网站的前端节点,实时记录着访客的所有访问行为。利用好这些访问日志,对其进行的分析和挖掘,感知业务层面的一些异常活动,当面临DDoS攻击时,能够提供足够的证据来区分恶意的IP。
区分恶意攻击的主要依据类型有:
-
- 某个IP发起大量的并发请求
- 大量连续的IP段发起请求
- 大量无规则的IP发起请求
目前我们对HAProxy的日志分析仅作用于单节点,可以利用下面的CDN图形化管理工具对日志进行统一管理。
多节点CDN图形化管理工具:
管理和运维一套CDN系统是一件很麻烦的事,想要实现快速部署、集中管理,我们可以利用软件工具来管理所有CDN节点,这里采用Fikker 。