心语难诉

我是如何迎击百万CC攻击的?
被攻击的余温还未褪去,未来还要迎接多少突如其来的攻击尚不得知。作为一个小小站长,永远要做的就是时刻做好准备,也要做...
扫描右侧二维码阅读全文
08
2019/04

我是如何迎击百万CC攻击的?

被攻击的余温还未褪去,未来还要迎接多少突如其来的攻击尚不得知。作为一个小小站长,永远要做的就是时刻做好准备,也要做好最坏的打算,哪怕是最后一丝希望。

星星之火,可以燎原

  周日晚上9点左右,自己刚从嗜睡中醒来,肚子已经迫不及待地的开始迫索要口粮,洗了把脸就急匆匆出去觅食,在饭馆里坐下打开手机与一个博客群的伙伴儿们聊的不亦乐乎,大家开始互换链接分享自己的博文,我随手也发了一条比较新的文章链接出去,刚发出去没等到一分钟就有伙伴向我反馈链接已经打不开了……我心想,糟了一定是被CC了……
  我以迅雷不及掩耳之势一顿狼吞虎咽之后就往回赶,到家的时候博客已经陷入502 bad gateway状态(Web服务器网关请求失败,已经宕机),并且在502状态下请求还仍在继续,502的请求次数已经达到了1.7万次,为了尽快恢复服务,我选择了重启主机。
  我非常清楚这次攻击是出在博客群的某一个人,但没有足够的证据只好作罢,便对这位不露面的攻击者进行了好一番嘲讽。待服务器重启之后,流量已经开始越变越大……

持续发酵

  重新启动服务器后,网站经过短暂的正常之后又开始濒临502,流量开始进一步提升,为了保持网站的正常访问我开启了防火墙的强验证模式,并且屏蔽了海外IP,因为攻击者的代理IP来均来自海外。经过一番紧急的屏蔽措施之后网站的负载率基本平稳在了20-30%之间,此时的CC攻击量已经达到17万。

屏蔽海外IP

  正在向胜利准备挥手时,画风突变!攻击IP由海外变为大陆IP,攻击流量又开始回升。我压低了防火墙的容忍值,封堵了最少一半以上的CC流量,网站速度又恢复了正常。由于捕捉到该攻击者的国内IP资源不够多,采用的是某免费IP代理网站批量获取的免费,用了部分IP段,所以我把几个固定的IP段手动屏蔽掉之后网站几乎不影响访问。

被封堵的大陆IP

  机智的攻击者见攻势越来越弱,开始转变思路瞄准了防火墙规则 —— User-Agent(用户代理),攻击者把UA模拟成百度爬虫(Baiduspider),钻了防火墙屏蔽规则的漏洞,因为防火墙无视各大搜索引擎的爬虫,所以通过模拟搜索引擎爬虫访问网站的请求不会被拉黑(当然国外IP即使模拟UA也是无法通过的)。我本想着屏蔽掉爬虫规则,但是考虑到百度收录的问题只能另想办法。好在攻击者的国内IP资源并不多,继续手动屏蔽一些IP段还是可以有效的控制。

  经过一晚上的敌我的较量,我的博客勉强略胜一筹,还是挺到了最后。攻击者最后IP消失殆尽,在晚上11点50分停止了攻击(历时2个半小时)。攻击结束后我的博客已经被CC攻击打了70万+万次!终于可以抽颗烟睡觉了……

无利不起早

  早晨到公司简单地吃过早餐之后准备新一周的工作,在10点的时候接到微信推送来的服务器预警消息……

  昨晚的防御措施我并没有急着关闭,目的就是为了防御接下来的攻击,没想到攻击者一大早已经开始又一波攻击,真是无利不起早!看这种情形,我昨晚的防御措施已经被瞬间沦陷!

硝烟再起,群魔乱舞

  心里想着被攻击就被攻击吧,即便服务器瘫痪了我也不会造成什么损失,想把重心转移到工作上,但微信上一遍又一遍的警报时时刻刻提醒着我去看看!最后终于忍不住,那就开干吧!
  等我登陆到服务器上的时候,还没到半小时攻击量已经接近30万了,而且攻击思路沿用了昨天最后的套路,搞来了大量国内的垃圾IP,而且模拟UA不止单纯有百度,还有有道、谷歌。此时的CC防火墙已经形同虚设,只能拦截少数攻击。

  攻击者不仅伪装了多种搜索引擎的UA,还由HTTPS CC转为了HTTP CC,这样无论是国内IP还是国外IP都可以命中目标,因为我网站默认强制开启了HTTPS,所以请求HTTP链接时默认会301重定向到HTTPS,这个也是钻了防火墙的漏洞。一时间手慌脚乱,CPU负载已经趋近100%满负荷,网站已经开始出现访问延时。

  不管三七二十一,把CC容忍度一降再降,祭出最终大招,不管任何爬虫访问,真实的也好,模拟的也好,只要超出预设的CC容忍值一律送进小黑屋。(当时脑门一团乱,应该关闭HTTPS访问,转单向HTTP访问,这样防火墙规则就能正常了)。

所有爬虫列入规则名单

  经过这样一番调整之后,网站恢复正常访问状态,但负载依然超过40%,我选择死扛……

最终BOSS之战

  对于整个CC攻击事件,我前思后想很多,有很多巧合能与一个人关联上。甚至已经严重怀疑是我在群内认识的某一个人。因为我没有确切的证据,但是最后脑门一热,我把整站所有请求都301重定向到我怀疑的那一个人站点上,瞬间我网站的负载降至正常水平,所有的流量转达到对方站点,对方被我转过去的流量被CC到打不开页面,没过几分钟攻击便停止了,这不得不让我和其他群内伙伴深思……
  我不知道我的怀疑是不是一场误会,但事实告诉我,当我把整站重定向后攻击确实停止了,这该如何解释呢?如果我真的误会了,我真诚的在这里说声:“对不起!”

停止切磋,各自安好

  这次攻击的起始点和结束点都非常的突然,截止攻击结束,我站点CC攻击累计超过170万次(第一次累计70+万,第二次累计100万)我不知道什么样的人对我这样憎恨。我的服务器也相当脆弱,仅仅1核心2G内存,外加10Mbps带宽。小项目做惯了,自己第一次经历过这么大流量的攻击,竟然还是出自我自己服务器上,我也不知道自己的服务器防御极限究竟在哪里。无论如何权当这是一次攻击试验,希望攻击者和我都各自安好。搞成这样真没什么必要!

百万请求

模拟爬虫UA的请求

结语

  博主自认为是一个热心且好心肠的人,喜欢在一些技术群、博客群内和小伙伴们聚在一起无话不谈。喜欢分享自己知道的,也常常帮助小伙伴们解决一些力所能及的问题,不会去招惹跟自己合不来的人,根本不会节外生枝。博客也是同样,本身不是盈利的一个站点,攻击的意图又是什么呢?

“子曰:我未见好仁者,恶不仁者。好仁者,无以尚之;其为仁矣,不使不仁者加乎其身。”

最后修改:2019 年 04 月 09 日 06 : 47 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论

33 条评论

  1. 老俍

    我都是等敌人懒得攻击在恢复博客~~~

  2. 跋涉者

    博主厉害了,我遇到这种情况估计就挂了。。。。。。

  3. 耕读君

    一台小主机能承受这样的攻击,博主很厉害了!

    1. 心语难诉
      @耕读君

      其实有时候也想直接托管到Github page上也挺好,但是那样就是去了折腾的意义。其实还是多亏有防火墙协助,要不然是真的束手无策了。

      1. 耕读君
        @心语难诉

        还是自己的服务器比较好,至少都在自己手里掌控,谁知道哪天Github就不给玩了

  4. 奶爸de笔记

    ⌇●﹏●⌇这就厉害了。我的服务器1M小水管,都不用他攻击就自己卡死了。

    1. 心语难诉
      @奶爸de笔记

      图片不要放在本地,建议图片CDN,站点内容源站

      1. 奶爸de笔记
        @心语难诉

        (ฅ´ω`ฅ)我是站点内容cdn,图片另一个cdn,不过免费cdn有流量限制,用完就回源,所以经不起揍

        1. 心语难诉
          @奶爸de笔记

          这么晚了还在线,早些休息呀

  5. shihun

    我也遭遇过,比你更惨,(300Gbps) 。
    阿里云直接把我3000块一个月的服务器封了。。

  6. nikname

    |´・ω・)ノ真大佬 建议点击侧边menu不要返回顶部(自适应情况下

    1. 心语难诉
      @nikname

      没有明白说的是哪一个侧边menu

      1. 奶爸de笔记
        @心语难诉

        马上就睡了,你不也一样吗

  7. 黑桃三

    不明觉厉 OωO

  8. 叶戈

    看完这篇文章,整个人都是震惊的。我遇见的攻击同时连接数最多才达到1100,还真没有遇见过这么量大的。OωO

    1. 心语难诉
      @叶戈

      被攻击的都有点压抑了

  9. 苏英刚

    ୧(๑•̀⌄•́๑)૭刚开启CDN,,,确实怕闲人

  10. 呆小萌_Dream

    太猛了。。。才反应过来强制https也是个坑。。

  11. moozik

    我要是你我就把站关了,过两天再打开,不够折腾的

  12. 钧言

    的确够呛,如果防火墙规则开最大。牺牲一定量的搜索爬虫,收录也成问题。如果全站cdn如果量不大,分分钟欠费,亲有替换

    1. 心语难诉
      @钧言

      其实防火墙之前是对爬虫无视的,所以会钻这个BUG实现无拦截CC攻击。后来可能修复了( ๑´•ω•) "(ㆆᴗㆆ)

  13. 不停

    挺厉害的,之前我有一个业务站也是被人一直CC,我后来直接选择关掉那个站点了。毫无办法啊,服务器启动就被搞,远程都连接不上

    1. 心语难诉
      @不停

      为何被攻击呢

  14. 如默

    好吧,看来群里的那个人挺猛的,幸好我一般是屏蔽那个群的。否则攻击我的话我都不知道该怎么办

  15. 偶抒漫话

    百万cc竟然扛住了,服务器硬核~