NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

自建 CDN 防御 DDoS(1):知己知彼,建设持久防线

  • 2013-02-18
  • 本文字数:3262 字

    阅读完需:约 11 分钟

前言

本议题是我们在 OWASP 杭州区 2013 年岁末年初安全沙龙中进行分享的内容,在此我们对这个议题的整体内容进行了重新归纳梳理,形成了文字版。

在本文中,DDoS 的案例与应对经验均来自于某市场占有率很高的客服系统所遇到的实际场景,分别从成本、效率和具体架构设计(选型、配置、优化等)角度来分析通过自建 CDN 来应对不同类型的 DDoS 攻击。

背景介绍

客服系统的主要业务是提供基于网页的实时动态的文字聊天,主要应用在各类网络商品销售、网站在线客服等领域,总用户数 58 万,同时在线活跃的用户约 12 万 / 天。

这些应用领域通常行业之间的竞争比较激烈,其中包括在线下无法名正言顺的灰色 + 暴利产业,导致竞争对手之间经常发动 DDoS 恶意攻击。但营销网站往往是单面加速,加上推广时效性很强,很难被彻底打击,于是一些自作聪明的黑客通过攻击网站的在线客服系统,导致网站无法跟访客沟通,不能交易,从而达到恶意攻击的目的。因此客服系统这个原本有助于网站营销的工具反而成了被攻击的主要对象,虽然伤得委屈,但也不得不面对挑战。

我们遭遇的 DDoS 攻击类型包括:延缓性的 CC 攻击和致命的大流量攻击。下面将对两种攻击方式的攻击特点、防御思路和我们用过的一些防御方案进行简单的介绍。

延缓性的 CC 攻击

攻击特点

攻击者借助网络上提供的大量代理服务器 IP,利用攻击软件,生成指向受害主机的合法请求。

这类攻击对攻击者来说成本低,而且网上现成的软件多,攻击的风格相对比较”温柔谨慎”,其目的是通过逐渐增多的垃圾请求,消耗服务器的正常应用开销如 CPU, 内存, 网卡压力,甚至是网络拥堵,然后请求无响应,无出口流量,导致网站变慢,达到网站无法访问的目的。

防御思路

对于这类攻击,有两个漏洞特点可以被我们利用,从而阻止这类恶意的 CC 攻击,关键是响应一定要快。

第一个特征,由于是人为生成了大量的非法请求,引发网络的 incoming 流量会异常增大(正常情况下,incoming 流量小,outgoing 流量大);第二个特征,攻击力度有一个渐增过程,我们要充分利用这个宝贵的时间,让机器第一时间智能的做出反应,调用日志分析脚本做决策,加以防御或者引流。

具体的方法有多种,这里只列举我们所使用的两种:

  1. 使用监控软件的流量监控图来触发日志分析脚本,如图所示(zabbix 为例):
  2. 利用 bash 脚本来统计 incoming 流量,发现异常时,调用相应日志分析脚本,实现阻击。
复制代码
#!/bin/bash
DEV=$1 # 定义监听网卡
LIMIT=$2 # 定义触发阙值
WARN=$3 #定义报警阙值
TIME=$4 # 定义网卡数据采集频率
mobile_num="13xxxxxxxxxx" # 定义接收报警短信手机号码
LOCK="/tmp/.exchange_proxy.lock"
[ -z $DEV ] && echo "$0 ethx limit_band(kbps) warn_limit(kbps) seconds" && exit 0
[ -z $LIMIT ] && LIMIT=800000 # 800 kbps
[ -z $WARN ] && WARN=900000 # 900 kbps
[ -z $TIME ] && TIME=10 # 10s
send_fetion() {
#定义飞信报警短信接口
}
while : ; do
net_flood=`ifconfig $DEV|sed -n "8"p`
rx_before=`echo $net_flood|awk '{print $2}'|cut -c7-`
sleep $TIME
net_flood=`ifconfig $DEV|sed -n "8"p`
rx_after=`echo $net_flood|awk '{print $2}'|cut -c7-`
rx_result=$[(rx_after-rx_before)/$TIME]
over_bw=$[(rx_result-LIMIT)]
if [ $over_bw -gt 0 ];then
BOOL=`echo "$rx_result>$WARN"|bc` #判断是否为攻击
if [ $BOOL -eq 1 ];then
# 确认为攻击,执行策略并发送短信
send_fetion $mobile_num "$STR"
else
# 流量超标,发送短信,请留意
send_fetion $mobile_num "$STR"
fi
fi
sleep $TIME
done

过滤脚本实现原理就是在服务器上启动日志分析机制,在第一时间找出异常的 IP、Agent,URL 或者其它特征码,从内核层利用 iptables 对恶意 IP 进行过滤,在应用层上利用 nginx 的 http 关键词进行过滤,直接返回 badcode 444 进行拦截。

方案缺点

无论是从内核级别还是应用级别,对服务器本身的 CPU 和内存的依赖度高,如 iptables 的过滤本身对服务器的 CPU 压力很大,在阻止 IP 超过 15K 个,服务器基本不可用了;Nginx 在阻止 HTTP 请求时,由于 nginx 会给每个 http 请求分配内存和处理链规则,内存资源耗尽;随着流量的不断增大和攻击时间的持续,网卡压力也大,资源最终被耗尽。

所以,这个方案治标不治本。

致命的大流量攻击

攻击特点

这种攻击通常以 tcp syn,icmp 和 UDP(尤其是 UDP 包,单 UDP 的数据包可以很大)方式为主。客服系统遭遇到的最大的一次为 16G 的攻击流量,整个机房都被影响到。攻击者通常控制大量肉鸡或者直接勾结 IDC 里的服务器和带宽资源,对目标进行流量打击。此时流量会快速占满服务器的网络带宽,导致无法响应任何用户请求。

这类攻击需要购买大量带宽资源,对于攻击方来说,成本挺高,但是下手“快狠准”,目的是让网站在短时间内彻底无响应。

由于这类攻击会引起流量陡增,IDC 里的流量监控设备也会很明显的察觉到这个现象。IDC 通常采取的措施一般是丢车保帅,直接将这个被攻击的 IP 拉黑名单甚至直接拔线,让攻击对象自杀。这对本应该需要帮助的客户无疑是落井下石,雪上加霜。

防御思路

应付此类流量攻击的防御方式有:

  • 架设硬防火墙
  • 租用高防节点
  • 租用 CDN 分散目标流量

方案缺点

  • 架设硬防火墙:市面上 2G 硬防单价在 10W 左右,集群防御代价更大,虽然硬件级的防御性能较高,但面对流量洪水也是杯水车薪,且副作用也不容小觑。
  • 租用高防节点:高防节点有防御带宽,防御流量,共享独享区分,各个套餐的组合价格相差很大,分流策略也不同,超过高防承诺的流量后,防御失效或者再加钱,但都有性能损耗和副作用。
  • 租用 CDN 分散目标流量:市面上的 CDN 提供商都是以流量为收费标准,这对于经常遭受流量攻击的网站来说,反而要为攻击流量买单,这着实让人哭笑不得。

无论是采购的硬件成本和高防资源还是 CDN 加速,都成本昂贵,闲时资源利用率低,攻击高峰时面对有组织有规模的流量时又捉襟见肘,还伴有副作用(参见绿盟黑洞防火墙的原理),并非长久之计。

处于弱势的被打击方

综上所述,我们无论做哪个抉择都很痛苦。

我们跟发起攻击的人有过长达近一年的交流,目前了解到这是一个非常完整的产业链(上游人员早已身居海外,远程遥控指挥行动,根本无法查处),他们手上控制了大量的攻击资源,并且攻击资源本身就来自于 IDC。攻击者为了快速牟利,本身也喜欢和推荐这种直接了当的方式来对目标进行打击,在发动攻击时,他们能够调集到多个 IDC 的带宽资源来对目标打击(这一现象也折射出了当前国内不规范的 IDC 管理)。

从这一角度来看,被打击方永远都处于弱势地位,以势单力薄的架构和极其有限的资源,根本无法抵抗强大的集群资源攻击。

我们一直思考一个问题:如果我们持续投入这些资金,危机过去或者若干年后,能给我们留下些什么?因此,我们跳出了单节点防御和租用 CDN 的思路,综合上述方案的优点,转而自建 CDN 的方案。

长久之计:自建 CDN

自建 CDN 的好处有几个方面:

  • 旁路做流量清洗(痘痘长在别人脸上最好)
  • 资源充分利用:无攻击的时候,做路由加速,有攻击的时候,做节点切换(一物多用)
  • 随着投入的资金增加,防御 DDoS 攻击的能力增强(长远规划,资金回报率高)

有关自建 CDN 具体建设的思路如何,成本多少,我们会在系列的下一篇文章中进行介绍。

作者简介

邵海杨(个人页面),来自杭州 Linux 用户组。网名“海洋之心”,系统架构师,业余撰稿人,致力于开源软件及前沿科技的研究和探索。

张磊(微博博客),来自杭州谷歌开发者社区。专注于信息安全技术领域,曾主导多项银行 / 证券行业网站安全测试和入侵取证分析项目,为四大银行提供安全防护技术支持。目前创业做互联网安全防护。

相关阅读

  1. 自建 CDN 防御 DDoS(2):架构设计、成本与部署细节
  2. 自建 CDN 防御 DDoS(3):架构的后续改进
2013-02-18 00:0113396
用户头像

发布了 40 篇内容, 共 25.7 次阅读, 收获喜欢 142 次。

关注

评论

发布
暂无评论
发现更多内容

直播源码硬核技术分析:主播PK功能

山东布谷网络科技

直播源码

解锁Spring组件扫描的新视角

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 8 月 PK 榜

软件测试 | Java接口的实际应用—制定标准

测吧(北京)科技有限公司

测试

Hybrid技术的下一站是什么?

FinFish

Hybrid 小程序技术 小程序容器技术 Hybrid App

利用uplugin对比Webpack和Rollup插件系统

OpenTiny社区

前端

杭钢集团:以一体化管控赋能为引领提升五大能力

用友BIP

数智化转型

Hybrid App 性能优化的一些技术探讨

Onegun

性能 Hybrid

Nevercenter CameraBag Photo for Mac(照片滤镜软件) 2023.3.0激活版

mac

苹果mac Windows软件 Nevercenter CameraBag 相机和滤镜应用程序

速度提升10倍,腾讯基于Iceberg的数据治理与优化实践

腾讯云大数据

数据湖

啾啾火箭队 宇宙 ChuChu Rocket Universe for Mac(益智解谜游戏)v1.3.0中文版

mac

mac游戏 苹果mac ChuChu Rocket Universe 益智游戏

实时入库不用愁,HStore帮分忧

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

软件测试/测试开发丨Python 内置库 日期与时间处理

测试人

Python 软件测试 内置库

关于ANCE OS兼容性评估 & Linux智能全栈调优KeenTune介绍 | 第 93-94 期

OpenAnolis小助手

QA sig 龙蜥大讲堂 KeenTune ANCE

常见的CAE软件有哪些?

思茂信息

仿真软件 仿真技术 abaqus有限元仿真 CAE软件 结构分析软件

使用 Signia 实现 React 状态管理

高端章鱼哥

React Signia

华为与二十多家伙伴达成游戏先锋合作,共筑鸿蒙生态繁荣

最新动态

C4D软件都应用在影视后期什么领域?

Finovy Cloud

搭载KaihongOS的工业平板、机器人、无人机等产品通过OpenHarmony3.2 Release版本兼容性测评

Geek_2d6073

仅使用 CSS 创建打字机动画效果

互联网工科生

CSS JavaScript 前端

平台赋能技术创新,和鲸科技持续助力气象顶尖算法大赛

ModelWhale

人工智能 算法 气象 大气科学 在线编程

软件测试 | Java抽象类的实际应用——模版设计

测吧(北京)科技有限公司

测试

以数驱动 | 智能分析云助力流程制造行业绿色高效运营

用友BIP

智能分析

AI概念引爆ChinaJoy,聆心智能助力数字娱乐产业新应用

硬科技星球

使用TransBigData快速高效地处理、分析、挖掘出租车GPS数据

TiAmo

数据可视化 交互式可视化工具 TransBigData

探索 TypeScript 元组的用例

这我可不懂

typescript 数组 元组

什么是CAE软件?哪个CAE软件好用?

智造软件

CAE 仿真软件 CAE软件

golang trace view 视图详解

蓝胖子的编程梦

golang Profile pprof Trace go tool

一条SQL如何被MySQL架构中的各个组件操作执行的?

砖业洋__

MySQL MySQL架构 MySQL优化器 MySQL执行器 MySQL存储引擎

亚信科技AntDB数据库与库瀚存储方案完成兼容性互认证,联合方案带来约20%性能提升

亚信AntDB数据库

数据库 AntDB AntDB数据库 企业号 8 月 PK 榜

软件测试 | 设计模式——代理设计

测吧(北京)科技有限公司

测试

软件测试 | Java设计模式——适配器设计

测吧(北京)科技有限公司

测试

自建CDN防御DDoS(1):知己知彼,建设持久防线_安全_张磊_InfoQ精选文章