上周,我们的网站遭到了一次DDoS攻击。虽然我对DDoS的防御还是比较了解,但是真正遇到时依然打了我个措手不及。DDoS防御是一件比较繁琐的事,面对各种不同类型的攻击,防御方式也不尽相同。对于攻击来的太快量也很大这种时,在自身环境下做调整已经无法抵抗攻击。为了缓解网站压力,在尝试了其他方式后最终还是选择切换到了知道创宇的高防产品。过程中也遇到了很多问题,但是为以后的DDoS防御留下的很多经验。所以写下这篇文章,与大家分享。

这次DDoS攻击的类型是CC攻击,CC攻击是目前应用层攻击的主要手段之一,只需要借助代理服务器生成指向目标系统的合法请求,就能实现伪装和DDoS。


其实我们都有这样的体验,访问一个静态页面,即使人多也不需要太长时间,但如果在高峰期访问论坛、贴吧等,那就很慢了,因为服务器系统需要到数据库中判断访问者是否有读帖、发言等权限。访问的人越多,论坛的页面越多,数据库压力就越大,被访问的频率也越高,占用的系统资源也就相当的大。CC攻击就充分利用了这个特点,模拟多个正常用户不停地访问如论坛这些需要大量数据操作的页面,造成服务器资源的浪费。

当时我们发现服务器的CPU长时间处于100%的状态,永远都有处理不完的请求,网络拥塞,正常访问被中止。但是由于CC攻击技术性含量高,我们又无法见到真实源IP,也见不到特别大的异常流量,但服务器就是无法进行正常连接。最后才确定,这些其实都是CC攻击的典型特征。

CC攻击之所以会选择代理服务器是因为代理可以有效地隐藏自己的身份,也可以绕开防火墙,因为基本上所有的防火墙都会检测并发的TCP/IP连接数目,超过一定数目一定频率就会被认为是Connection-Flood。当然也可以使用肉鸡来发动CC攻击,攻击者使用CC攻击软件控制大量肉鸡发动攻击,肉鸡可以模拟正常用户访问网站的请求伪造成合法数据包,相比前者来说更难防御。

CC攻击是针对Web服务在第七层协议发起的攻击,在越上层协议上发动DDoS攻击越难以防御,上层协议与业务关联愈加紧密,防御系统面临的情况也会更复杂。比如CC攻击中最重要的方式之一HTTP Flood,不仅会直接导致被攻击的Web前端响应缓慢,对承载的业务造成致命的影响,还可能会引起连锁反应,间接攻击到后端的Java等业务层逻辑以及更后端的数据库服务。真的非常的扎心!后来知道创宇的工程师告诉我们,由于CC攻击成本低、威力大,80%的DDoS攻击都是CC攻击。而攻击造成的后果就是:带宽资源严重被消耗,网站瘫痪;CPU、内存利用率飙升,主机瘫痪;瞬间快速打击,无法快速响应。

那我们是如何一步一步解决的?其实在遇到攻击时,我们有仔细考虑过很多方案,是选择高防机房、机房流量清洗还是云防御?

遭到攻击的第一刻,我们首先想到的是用机房进行流量迁移。网上也有很多过来人推荐这种办法。确实,这种办法能快速的响应,面对小流量的攻击时价钱合理同事也十分有效。但问题是,攻击者一直孜孜不倦,流量越打越大,我们花出去的钱也越来越多…无奈之下我们只能转向考虑高防,高防的优势还是很明显,配置简单接入方便,能很快见效,合理的套餐选择使得攻击大时价格能低于机房清洗。在选择高防产品时我们对阿里云、腾讯云和知道创宇三家进行了评估。三家实力都很雄厚,价格阿里云>腾讯云>知道创宇,但也就几百的差距,没什么影响。最后选择知道创宇的主要原因是,我们这次遭遇到的攻击也是以CC为主,他们防御CC的能力确实很牛,所以…

最后一点点经验给到大家:遇到1G以下的攻击,使用防火墙就可以搞定(或者使用一些免费的云防御产品);流量1G—10G时可以选择机房进行流量迁移和清洗;大于10G时使用高防CDN(云防御)是相对最靠谱并且价钱最能接受的。由于攻防资源和成本的天平严重倾斜,让攻击更加肆无忌惮。只有做好充分的准备,在威胁来临的时候才不至于乱了阵脚。因此,平时就对网络架构进行优化显得十分的必要,负载均衡方案也能大大提高应对DDoS攻击的能力。

希望这点经验能帮到大家,欢迎留言交流。

现身说法:面对DDoS攻击时该如何防御?的更多相关文章

  1. 工信部公示网络安全示范项目 网易云易盾“自适应DDoS攻击深度检测和防御系统”入选

    本文由  网易云发布. 工信部官网 2017年年底,经专家评审和遴选,中华人民共和国工业和信息化部(以下简称“工信部”)公示了2017年电信和互联网行业网络安全试点示范项目,网易云易盾的“自适应DDo ...

  2. 破坏之王DDoS攻击与防范深度剖析【学习笔记】

    一.DDoS初步印象 1.什么是分布式拒绝服务攻击? 1)首先它是一种拒绝服务攻击 我们可以这么认为,凡是导致合法用户不能访问服务的行为,就是拒绝服务攻击. 注:早期的拒绝服务主要基于系统和应用程序的 ...

  3. 从分析攻击方式来谈如何防御DDoS攻击

    DDoS攻击的定义: DDoS攻击全称——分布式拒绝服务攻击,是网络攻击中非常常见的攻击方式.在进行攻击的时候,这种方式可以对不同地点的大量计算机进行攻击,进行攻击的时候主要是对攻击的目标发送超过其处 ...

  4. DDOS攻击(流量攻击)防御步骤

    DDOS全名是Distributed Denial of service (分布式拒绝服务攻击),很多DOS攻击源一起攻击某台服务器就组成了DDOS攻击,DDOS 最早可追溯到1996年最初,在中国2 ...

  5. DDos攻击的常见方法及防御方法

    什么是DDoS? DDoS是英文Distributed Denial of Service的缩写,意即“分布式拒绝服务”,那么什么又是拒绝服务(Denial of Service)呢?可以这么理解,凡 ...

  6. DDoS攻击与防御(4)

    在发生DDoS攻击的情况下,可以通过一些缓解技术来减少攻击对自身业务和服务的影响,从而在一定程度上保障业务正常运行.缓解DDoS攻击的主要方法是对网络流量先进行稀释再进行清洗. 1.攻击流量的稀释 1 ...

  7. 怎样预防Ddos攻击

    一.为何要DDOS? 随着Internet互联网络带宽的增加和多种DDOS黑客工具的不断发布,DDOS拒绝服务攻击的实施越来越容易,DDOS攻击事件正在成上升趋势.出于商业竞争.打击报复和网络敲诈等多 ...

  8. 防止 DDoS 攻击的五个「大招」!

    提到 DDoS 攻击,很多人不会陌生.上周,美国当地时间 12 月 29 日,专用虚拟服务器提供商 Linode 遭到 DDoS 攻击,直接影响其 Web 服务器的访问,其中 API 调用和管理功能受 ...

  9. cc攻击和ddos攻击

    DoS攻击.CC攻击的攻击方式和防御方法 DDoS介绍 DDoS是英文Distributed Denial of Service的缩写,意即“分布式拒绝服务”,那么什么又是拒绝服务(Denial of ...

随机推荐

  1. asp.net form submit 在Chrome里面看Form提交

    Chrome中查看 request  form data 在Fiddler中查看

  2. Linux高级调试与优化——用户态堆

    内存问题是软件世界的住房问题 嵌入式Linux系统中,物理内存资源通常比较紧张,而不同的进程可能不停地分配和释放不同大小的内存,因此需要一套高效的内存管理机制. 内存管理可以分为三个层次,自底向上分别 ...

  3. Vue复杂路由器的实现

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  4. P3956 棋盘

    P3956 棋盘 题解 注释都在代码里了 这道题可以用DFS做,记忆化搜索,维护一个money[ ][ ] 表示到达当前节点的最小花费 不需要记录VIS,因为有一个最小值判断,如果走重复的话一定会得到 ...

  5. kolla-ansible-----常用命令

    常用命令 kolla-ansible prechecks -i multinode #部署前环境检测 kolla-genpwd #生成/etc/kolla/password.yml密码配置文件 kol ...

  6. bat脚本延时启动exe和bat文件

    @echo off ping >nul start D:\exe\a.exe start "C:\Program Files\维护工具\卸载清除一键清理系统垃圾文件.bat" ...

  7. android打包生成apk时自定义文件名版本号。自定义项目字段等等

    早期的AS2.0版本左右中这样配置: app---->build.gradle中设置 applicationVariants.all { variant -> variant.output ...

  8. kotlin之布尔类型

    var flag1 :Boolean = true val flag2 :Boolean = false if(flag1&&!flag2){ println("flag1& ...

  9. flask url_for后没有带端口号

    问题描述: 在本地运行flask项目,当运行到下面这句代码时,正常重定向 return redirect(url_for('.script_case')) 但项目布署到服务器之后,代码运行一这句话,却 ...

  10. JavaScript日常学习4

    JavaScript事件 1.<button id="btn1" onclick="document.getElementById("btn1" ...