【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

自建 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:0113392
用户头像

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

关注

评论

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

DApp智能合约链上盲盒游戏代币质押项目挖矿系统开发

l8l259l3365

Pyth

内存都去哪了

BeyondLife

nmon 内存分配 free meminfo 内存定位

Parallels Desktop 19 for Mac(PD19虚拟机)无需关闭SIPv19.0.0一键激活版

mac

pd虚拟机 苹果mac Windows软件 Parallels Desktop 19

高性能网络 SIG 月度动态:推动 virtio 支持动态中断调节及更灵活的分流机制

OpenAnolis小助手

Linux 内核 龙蜥社区 virtio 高性能网络sig

本地缓存无冕之王Caffeine Cache

Java随想录

Java 缓存

高并发系统设计之缓存

Java随想录

Java nginx 缓存

GaussDB(for Redis)游戏实践:玩家下线行为上报

华为云开发者联盟

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

蓝易云:Linux系统查看log日志命令详解!

百度搜索:蓝易云

云计算 Linux log 云服务器, 运维‘

MAC地址修改软件推荐 WiFiSpoof免激活中文版

mac大玩家j

Mac软件 网络管理软件

中秋时节赏明月,五子棋戏月饼趣 — Flutter中秋限定版五子棋

编程的平行世界

flutter 游戏开发

蓝易云:linux系统 Apache服务配置教程。

百度搜索:蓝易云

Apache 云计算 Linux 运维 云服务器

五个月,秒杀,38个大的篇章,126+篇文章、视频、小册,150+源码分支,完美收官!

冰河

高可用 高并发 高性能 秒杀系统 高可扩展

20个最佳实践提升Terraform工作流程|Part 1

SEAL安全

基础设施 IaC terrafrom 企业号9月PK榜

程序员会使用的十个基础算法

小魏写代码

Bridge 2024 (br2024) for Mac v14.0.0.102 中文破解激活版

mac

windows 苹果mac Bridge 2024

ARTS 打卡第 5 周

AI帅辉

ARTS 打卡计划 学习分享

Nop平台与SpringCloud的功能对比

canonical

Spring Cloud 低代码 spring-boot 可逆计算 Nop平台

多云环境下实时计算场景实践经验

WuKongCoder

CodeArts Check代码检查服务用户声音反馈集锦(2)

华为云PaaS服务小智

云计算 软件开发 代码规范 华为云 代码检查

交易所开发 通过定制解决方案获得优势:加密货币交易服务

区块链软件开发推广运营

交易所开发 数字藏品开发 dapp开发 区块链开发 链游开发

简单好用的屏幕分辨率修改工具:SwitchResX 最新激活版

胖墩儿不胖y

Mac软件 屏幕分辨率调整 屏幕分辨率工具

怎么解决在数据采集时使用http代理ip效率不高的问题?

巨量HTTP

http代理

软件测试/测试开发丨​利用ChatGPT编写测试用例

测试人

软件测试 测试开发 ChatGPT

ARTS 打卡第 5 周

atom

Python 注释:解释和优化代码可读性

小万哥

Python 程序员 软件 后端 开发

架构误区系列17:“总线”模式

agnostic

微服务 企业服务总线

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