前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CDN中的ddos防护

CDN中的ddos防护

原创
作者头像
sheazhang
修改2019-07-15 11:29:31
4.4K0
修改2019-07-15 11:29:31
举报
文章被收录于专栏:加速视频
代码语言:txt
复制
title:      CDN中的ddos防护
author:     sheazhang

目录

DDOS大类可分为两种:

  1. 带宽消耗型:消耗带宽,在入口阻塞正常用户。类型有UDP FLOOD和ICMP FLOOD
  • 防御方法:提升服务器(交换机)入流量带宽,单机10G,机房一般是100G。针对UPD Flood,如果不提供UDP服务,可以直接丢弃,针对ICMP Flood,运营商层面一般就会阻断,禁止ping包可以。
  • 防御方法:针对带宽消耗型攻击,目前主要靠灵活调度来防御。而且这种情况下,流量根本就没有到我们的服务器,在机房交换机上一层就已经拥塞了,机房完全不可用。比如我们一个机房受到了300G DDOS攻击。导致机房上层拥塞,这种情况,探测到后,及时将业务迁移即可。

2. 资源消耗型攻击:攻击者利用协议的缺陷或者模拟应用层协议,构造恶意的攻击报文,这种报文没有作用但是目标服务器又不得不处理,消耗大量系统资源,导致目标服务器异常,影响正常应用。比如SYN Flood,ACK Flood,CC攻击。

get back

主要讲资源消耗型攻击

1. SYN Flood

TCP(Transmission Control Protocol)是有状态协议,会通过协议中的字段来维护各种状态,比如flag(指定包的类型:syn, ack, fin等),序列号(seq number,解决包乱序问题),窗口(滑动窗口,用于流控制)。

下图是TCP在整个周期中涉及的过程,包括初始化,数据传输和断开连接。SYN Flood就是根据TCP的三次握手原理,发动的攻击。 下面是详细的交互过程:

  • 关于建连接时SYN超时
    • 试想一下,如果server端接到了clien发的SYN后回了SYN-ACK后client掉线了,server端没有收到client回来的ACK,那么,这个连接处于一个中间状态,即没成功,也没失败。于是,server端如果在一定时间内没有收到的TCP会重发SYNACK。
    • 在Linux下,默认重试次数为5次,重试的间隔时间从1s开始每次都翻倍,5次的重试时间间隔为1s, 2s, 4s, 8s, 16s,总共31s,第5次发出后还要等32s都知道第5次也超时了,所以,总共需要 1s + 2s + 4s+ 8s+ 16s + 32s = 2^6 -1 = 63s,TCP才会把断开这个连接。
  • SYN FLOOD:
    • 一些恶意的人就为此制造了SYN Flood攻击——给服务器发了一个SYN后,就下线了,于是服务器需要默认等63s才会断开连接,这样,攻击者就可以把服务器的syn连接的队列耗尽,让正常的连接请求不能处理。
    • SYN队列值的大小在在`tcp_max_syn_backlog`设置。现在的linux版本有一个`tcp_syncookies`参数,能一定程度上抵御DDOS攻击,当SYN队列满了后,TCP 会通过源地址端口、目标地址端口和时间戳打造出一个特别的Sequence Number发回去(又叫cookie),如果是攻击者则不会有响应,如果是正常连接,则会把这个 SYN Cookie发回来,然后服务端可以通过cookie建连接(即使你不在SYN队列中)。
  • 改进的防御方式:
    • 上诉方法能抵御较少量的攻击,但实际测试过程中,对于TS80(24个逻辑CPU 64G内存),包量达到,154万/s时,CPU已经满负载了,ping测试丢包率达到80%。主要消耗CPU的地方在于过滤iptables规则和syncookies生成算法。
    • 针对这两个,DDOS专用内核有两个改进:
      • 把syncookies模块提前到ip_rcv中执行:IP层传到TCP层,需要根据包中的目的端口,现在iptalbes做一层过滤,如果规则是 drop,则直接丢弃,如果要放行,则传到TCP层处理。DDOS专用内核将这一层处理提前到ip_rsv,并设置端口白名单,如果包中的目的端口不是服务器监听的端口,直接丢弃,不用iptables过滤。
      • 更改syncookies生成算法:cookie的计算是目前内核是使用SHA1算法的,并只取其中的32个bit。SHA1计算的值是有160个bit的。而只需要一个32个bit的数,却使用了这么复杂的算法,划不来。DDOS内核采用了Jhash算法,快速计算出32个bit的cookie值的同时也不会导致SynCookies的安全性降低。Jhash的速度更快,消耗的CPU更小。
    • 攻击判定:在服务器上抓包,如果有SYN Flood攻击,包中应该有大量的SYN包。

2. ACK Flood

主机在接收到一个带有ACK标志位的数据包的时候,需要检查该数据包所表示的连接四元组是否存在,如果存在则检查该数据包所表示的 状态是否合法,然后再向应用层传递该数据包。如果不存在,且没有开syncookies则,直接返回rst。这种情况,ACK Flood并不会消耗太 多的CPU资源,攻击效果并不明显,但如果主机开了syncookies,并且遭受了SYN Flood攻击,对于攻击发送的ACK,都将需要计算 cookies,这也同样需要大量CPU资源,现在DDOS专用内核使用新hash算法,对此类攻击同样有较好的防护效果。

3. CC 攻击

CC攻击可以归为DDoS攻击的一种。他们之间的原理都是一样的,即发送大量的请求数据来导致服务器拒绝服务,是一种连接攻击。CC攻击又可分为代理CC攻击,和肉鸡CC攻击。请求的内容一般为动态资源,比如js/cgi/asp, 由于这类攻击能模仿正常用户请求,很难识别,较难防御。而且用户放在CDN的内容,针对这类文件一般都不会缓存,直接透传到源站。 针对这类攻击,只能在业务层面防护,比如针对某些动作,做限制频率,比如某个IP,5分钟内只能请求3次,超过就返回403。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
    • DDOS大类可分为两种:
      • 主要讲资源消耗型攻击
        • 1. SYN Flood
        • 2. ACK Flood
        • 3. CC 攻击
    相关产品与服务
    内容分发网络 CDN
    内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档