知名站长分享DDOS攻击的概念及防范教程

转载   阮一峰的网络日志  2018-07-09 07:02:53  191 人阅读  28 条评论

一个多月前,我的个人网站遭受 DDOS 攻击,下线了 50 多个小时。这篇文章就来谈谈,如何应对这种 DDO 攻击。需要说明的是,我对 DDOS 并不精通,从没想过自己会成为攻击目标。攻击发生以后,很多素昧平生的朋友提供了各种帮助和建议,让我学到了很多东西。这里记录的就是对我最有帮助的一些解决方案。

一、DDOS 是什么?

首先,我来解释一下,DDOS 是什么。

举例来说,我开了一家餐厅,正常情况下,最多可以容纳 30 个人同时进餐。你直接走进餐厅,找一张桌子坐下点餐,马上就可以吃到东西。很不幸,我得罪了一个流氓。他派出 300 个人同时涌进餐厅。这些人看上去跟正常的顾客一样,每个都说"赶快上餐"。但是,餐厅的容量只有 30 个人,根本不可能同时满足这么多的点餐需求,加上他们把门口都堵死了,里三层外三层,正常用餐的客人根本进不来,实际上就把餐厅瘫痪了。

知名站长分享DDOS攻击的概念及防范教程 建站经验 第1张

这就是 DDOS 攻击,它在短时间内发起大量请求,耗尽服务器的资源,无法响应正常的访问,造成网站实质下线。DDOS 里面的 DOS 是 denial of service(停止服务)的缩写,表示这种攻击的目的,就是使得服务中断。最前面的那个 D 是 distributed (分布式),表示攻击不是来自一个地方,而是来自四面八方,因此更难防。你关了前门,他从后门进来;你关了后门,他从窗口跳起来。

二、DDOS的种类

DDOS 不是一种攻击,而是一大类攻击的总称。它有几十种类型,新的攻击方法还在不断发明出来。网站运行的各个环节,都可以是攻击目标。只要把一个环节攻破,使得整个流程跑不起来,就达到了瘫痪服务的目的。

其中,比较常见的一种攻击是 cc 攻击。它就是简单粗暴地送来大量正常的请求,超出服务器的最大承受量,导致宕机。我遭遇的就是 cc 攻击,最多的时候全世界大概 20 多个 IP 地址轮流发出请求,每个地址的请求量在每秒 200 次~300 次。我看访问日志的时候,就觉得那些请求像洪水一样涌来,一眨眼就是一大堆,几分钟的时间,日志文件的体积就大了 100MB。说实话,这只能算小攻击,但是我的个人网站没有任何防护,服务器还是跟其他人共享的,这种流量一来立刻就下线了。

特别说明:本文以下的内容都是针对 cc 攻击。

三、备份网站

防范 DDOS 的第一步,就是你要有一个备份网站,或者最低限度有一个临时主页。生产服务器万一下线了,可以立刻切换到备份网站,不至于毫无办法。备份网站不一定是全功能的,如果能做到全静态浏览,就能满足需求。最低限度应该可以显示公告,告诉用户,网站出了问题,正在全力抢修。我的个人网站下线的时候,我就做了一个临时主页,很简单的几行 HTML 代码

知名站长分享DDOS攻击的概念及防范教程 建站经验 第2张

这种临时主页建议放到 Github Pages 或者 Netlify,它们的带宽大,可以应对攻击,而且都支持绑定域名,还能从源码自动构建。

四、HTTP 请求的拦截

如果恶意请求有特征,对付起来很简单:直接拦截它就行了。HTTP 请求的特征一般有两种:IP 地址和 User Agent 字段。比如,恶意请求都是从某个 IP 段发出的,那么把这个 IP 段封掉就行了。或者,它们的 User Agent 字段有特征(包含某个特定的词语),那就把带有这个词语的请求拦截。

拦截可以在三个层次做:

1)专用硬件:Web 服务器的前面可以架设硬件防火墙,专门过滤请求。这种效果最好,但是价格也最贵。

2)本机防火墙:操作系统都带有软件防火墙,Linux 服务器一般使用 iptables。比如,拦截 IP 地址 1.2.3.4 的请求,可以执行下面的命令:

  1. $ iptables -A INPUT -s 1.2.3.4 -j DROP

iptables 比较复杂,我也不太会用。它对服务器性能有一定影响,也防不住大型攻击。

3)Web 服务器:Web 服务器也可以过滤请求。拦截 IP 地址 1.2.3.4,nginx 的写法如下。

  1. location / {
  2.   deny 1.2.3.4;
  3. }

Apache 的写法是在.htaccess 文件里面,加上下面一段。

  1. <RequireAll>
  2.     Require all granted
  3.     Require not ip 1.2.3.4
  4. </RequireAll>

如果想要更精确的控制(比如自动识别并拦截那些频繁请求的 IP 地址),就要用到 WAF。这里就不详细介绍了,nginx 这方面的设置可以参考《Mitigating DDoS Attacks with NGINX and NGINX Plus》和《Rate Limiting with NGINX and NGINX Plus》这两篇文章。

Web 服务器的拦截非常消耗性能,尤其是 Apache。稍微大一点的攻击,这种方法就没用了。

五、带宽扩容

上一节的 HTTP 拦截有一个前提,就是请求必须有特征。但是,真正的 DDOS 攻击是没有特征的,它的请求看上去跟正常请求一样,而且来自不同的 IP 地址,所以没法拦截。这就是为什么 DDOS 特别难防的原因。当然,这样的 DDOS 攻击的成本不低,普通的网站不会有这种待遇。不过,真要遇到了该怎么办呢,有没有根本性的防范方法呢?

答案很简单,就是设法把这些请求都消化掉。30 个人的餐厅来了 300 人,那就想办法把餐厅扩大(比如临时再租一个门面,并请一些厨师),让 300 个人都能坐下,那么就不影响正常的用户了。对于网站来说,就是在短时间内急剧扩容,提供几倍或几十倍的带宽,顶住大流量的请求。这就是为什么云服务商可以提供防护产品,因为他们有大量冗余带宽,可以用来消化 DDOS 攻击。

一个朋友传授了一个方法,给我留下深刻印象。某云服务商承诺,每个主机保 5G 流量以下的攻击,他们就一口气买了 5 个。网站架设在其中一个主机上面,但是不暴露给用户,其他主机都是镜像,用来面对用户,DNS 会把访问量均匀分配到这四台镜像服务器。一旦出现攻击,这种架构就可以防住 20G 的流量,如果有更大的攻击,那就买更多的临时主机,不断扩容镜像。

六、CDN

CDN 指的是网站的静态内容分发到多个服务器,用户就近访问,提高速度。因此,CDN 也是带宽扩容的一种方法,可以用来防御 DDOS 攻击。

网站内容存放在源服务器,CDN 上面是内容的缓存。用户只允许访问 CDN,如果内容不在 CDN 上,CDN 再向源服务器发出请求。这样的话,只要 CDN 够大,就可以抵御很大的攻击。不过,这种方法有一个前提,网站的大部分内容必须可以静态缓存。对于动态内容为主的网站(比如论坛),就要想别的办法,尽量减少用户对动态数据的请求。

上一节提到的镜像服务器,本质就是自己搭建一个微型 CDN。各大云服务商提供的高防 IP,背后也是这样做的:网站域名指向高防 IP,它提供一个缓冲层,清洗流量,并对源服务器的内容进行缓存

这里有一个关键点,一旦上了 CDN,千万不要泄露源服务器的 IP 地址,否则攻击者可以绕过 CDN 直接攻击源服务器,前面的努力都白费。搜一下“绕过 CDN 获取真实 IP 地址”,你就会知道国内的黑产行业有多猖獗。

cloudflare 是一个免费 CDN 服务,并提供防火墙,高度推荐。我还要感谢 v2ex.com 的站长 @livid 热情提供帮助,我现在用的就是他们的 CDN 产品。

后语

攻击者看来订阅了我的微博。昨天这篇文章发布没多久,我就又遭受了攻击,他绕过 CDN 直接攻击源服务器(我不知道 IP 地址怎么泄漏的),流量还大过上一次。

感谢腾讯云的朋友,提供了一个高防 IP,使得网站可以重新上线。现在,我的防护措施是:源服务器前面有 CDN。如果攻击域名,CDN 可以挡住;如果直接攻击源服务器,我买了弹性 IP ,可以动态挂载主机实例,受到攻击就换一个地址。这只是一个技术博客,内容都是免费的,要防到这种地步,我也是无语了。

历史上的今天:

文章标签: ,   ,   ,   ,  
原文地址:http://www.ruanyifeng.com/blog/2018/06/ddos.html
温馨提示:文章内容仅代表作者个人观点,不代表boke112导航赞同其观点和对其真实性负责!
版权声明:本文为转载文章,来源于 阮一峰的网络日志 ,版权归原作者所有,欢迎分享本文,转载请保留出处!
转载砖家

相关文章 分类热门分类热评最新问答

 发表评论

中国赞表情摊手表情吃瓜表情笑哭表情偷笑表情衰表情汗表情思考表情费解表情抓狂表情晕表情流泪表情疑问表情嘻嘻表情吃惊表情鼓掌表情

  1. 憧憬点滴记忆
    憧憬点滴记忆 @回复

    前几周,用DDOS打死了几个钓鱼网站 [吃瓜] [吃瓜] [吃瓜]

  2. 明月清风
    明月清风 @回复

    大佬开头段落好像少一个s吧!对了为什么不几个人一起搞反代然后在dns轮训吧!

  3. 园子
    园子 @回复

    我们这种小博客,怕是没人看的上,也没有C和D的价值

    • 懿古今
      懿古今2018-07-13 08:49  回复

      @园子这个还真不好说,其实我们大家都是小博客网站,毕竟都没有盈利,但是也经常被攻击

  4. 轻羽
    轻羽 @回复

    真的很渗人

  5. 闲鱼
    闲鱼 @回复

    多点关爱,少点伤害 [可怜]

  6. 邮票目录
    邮票目录 @回复

    封IP我用过,效果还行

  7. 龙行博客
    龙行博客 @回复

    资本主义世界,哈哈

  8. 米扑博客
    米扑博客 @回复

    攻防都应该掌握点 [哈哈]

  9. 千眼网
    千眼网 @回复

    攻击成本低,防御成本高。没事恶心下竞争对手

  10. 手机兼职
    手机兼职 @回复

    有些人就是闲的 蛋疼去攻击别人的网站

  11. 魏艾斯博客
    魏艾斯博客 @回复

    这些人钱多的没地方花了啊,有钱买流量攻击别人,花钱买点吃的喝的不行嘛

  12. 沈唁志
    沈唁志 @回复

    [挖鼻] github能抗ddos

  13. 区块链
    区块链 @回复

    [摊手] 努力保证自己服务器安全!2333

  14. 学习笔记Blog
    学习笔记Blog @回复

    正所谓“罗马不是一天建成的,但被毁掉也就是一天不到的事儿!” [坏笑]

  15. 明月登楼
    明月登楼 @回复

    其实应对攻击到最后除了收费的防御设备没有其他办法!所以隐藏真实IP的重要性可见一斑!

  16. 易发网
    易发网 @回复

    [太开心] 能有这种待遇的,都是大佬级别,攻防都是需要成本的,谁的干爹强谁就强!

  17. 姚兵
    姚兵 @回复

    能有这种待遇的,都是大佬级别,像我这个自媒体之家小站不会有人去ddos攻击的,因为不值得

  18. 鬼手六
    鬼手六 @回复

    能有这种待遇的,都是大佬级别 [笑哭] ..

  19. 雅兮网
    雅兮网 @回复

    曾经被CC了大半年,超真实流量,不知道哪位大佬这么恨我,到现在都没有露面现身一下

  20. 菊
     @回复

    小站从来都没接受过这种待遇 希望以后也不要有这种待遇

  21. 券都有
    券都有 @回复

    哎,先收藏下来

  22. 云顶天的世界
    云顶天的世界 @回复

    emmm,多么痛的领悟~一般的个人站长根本没法防,看看了解一下就好~

  23. 土蜂蜜百科网
    土蜂蜜百科网 @回复

    [笑哭] 不会技术活

  24. 异星软件空间
    异星软件空间 @回复

    ddos攻击确实是网站杀手!太头大 [摊手] 感谢大佬教学!

  25. 梁兴健
    梁兴健 @回复

    这些喜欢无缘无故就攻击别人网站的人到底是什么人啊,人心真是险恶!