“网站有大量流量高峰!”
“每秒有成千上万链接!”
“所有请求都超时!”
(资料图片)
“没有人可以访问我的网站,我自己也没法登陆服务器,SSH都超时了!”
上面的问题你遇到过吗?有可能几十分钟,有可能持续几个小时,甚至有的时候会断断续续好几天。
到底发生了什么?答案就是:你被DDoS攻击了。
DDoS攻击会带来巨大的损失,而黑客发起一次攻击可能只需要几十元的成本。道高一尺魔高一丈,我们该如何防范呢?
本文将详细描述DDoS攻击防范原理及解决方案。
一、什么是DDoS攻击?
1.1 DoS
首先了解一个名词DoS(Denial-of-service),拒绝服务(攻击)。目的是让目标无法继续(为其原本设定的服务对象进行)服务。DDoS由该词而来,攻击目的一样,但攻击手法不一定一样,本文不作展开。
1.2 DDoS
Distributed Denial of Service,即分布式拒绝服务。DDoS攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。
二、DDoS攻击的分类
DDoS攻击的分类有不同维度。
一般会从发起DDoS攻击的网络层次上进行分类,比如:畸形报文、传输层DDoS攻击、Web应用DDoS攻击、Web应用层攻击、DNS DDoS攻击、连接型DDoS攻击(TCP慢速连接攻击)等。
本文从另一个维度进行分类,将DDoS攻击分为:
基于流量的 DDoS 攻击:主要现象是服务器上流量太大,导致其与Internet的连接完全饱和。从其他地方ping服务器时,丢包率很高,有时您也会看到非常高的延迟(ping时间值很高)。基于负载的 DDoS 攻击:主要现象当您遇到基于负载的DDoS时,您会注意到负载平均值异常高(或CPU,RAM或磁盘使用情况,具体取决于您的平台和详细信息)。虽然服务器似乎没有做任何有用的事情,但它非常繁忙。通常,日志中会有大量条目表明异常情况。这通常来自很多不同的地方并且是DDoS,但情况不一定如此。 甚至不需要很多不同的主机。基于漏洞的 DDoS 攻击:如果您的服务在启动后会非常快速地崩溃,特别是如果您可以在崩溃之前建立请求模式并且请求是非典型的或与预期使用模式不匹配,那么您可能正在体验基于漏洞的DoS。这可以来自只有一个主机(几乎任何类型的互联网连接)或许多主机。三、DDoS攻击防范原理、方法分析及解决方案
DDoS防御是一种资源对抗的防御,攻击者由于采用的是违法手段获取的失陷主机(肉鸡),所以攻击成本远远小于防御成本,这是攻防不对等的原因。
一般认为防御DDoS攻击最有效的方式是使用清洗设备对所有流量进行“清洗”,尽可能的筛去攻击流量,然后将剩余流量给与到应用服务器。但是不是所有的DDoS攻击都适用清洗方法。需要根据不同种类针对性的分析和解决。
3.1 基于流量的 DDoS 攻击
分析1)从系统管理员角度很难缓解此类攻击,需要借助ISP的帮助。
2)但是大多数ISP和转接提供商将主动了解正在发生的事情并为您的服务器发布黑洞路由。这意味着他们通过0.0.0.0以下方式以尽可能低的成本向您的服务器发布路由:它们使您的服务器的流量不再可在Internet上路由。这其实对你没有任何帮助; 目的是保护ISP的网络不受大洪水的影响。在此期间,您的服务器将失去Internet访问权限。
解决方案1)关于这个问题,当攻击已经发生时你几乎无能为力。
2)最好的长期解决方案是在互联网上的许多不同位置托管您的服务,这样对于攻击者来说他的DDoS攻击成本会更高。
3)这方面的策略取决于您需要保护的服务; DNS可以使用多个权威名称服务器,具有备份MX记录和邮件交换器的SMTP以及使用循环DNS或多宿主的HTTP进行保护(但是在某段时间内可能会出现一些明显的降级)。
4)负载均衡设备并不是解决此问题的有效方法,因为负载均衡设备本身也会遇到同样的问题并且只会造成瓶颈。
5)IPTables或其他防火墙规则无济于事,因为问题是您的管道已经饱和。 一旦防火墙看到连接,就已经太晚了 ; 您的网站带宽已被消耗。你用连接做什么都没关系; 当传入流量恢复正常时,攻击会缓解或完成。
6)内容分发网络(CDN)以及专业安全与网络性能公司的DDoS清理服务。这将是缓解这些类型的攻击的积极措施,并且在许多不同的地方拥有大量的可用带宽。请注意:要隐藏服务器的IP。
7)此外一些VPS和托管服务提供商、云计算厂商在减轻这些攻击方面比其他提供商更好。因为规模越大,会拥有更大带宽,自然也会更有弹性。
3.2 基于负载的 DDoS 攻击
分析这种攻击的基础是让你的服务做很多昂贵的事情。这可能就像打开庞大数量的TCP连接并强迫您维护它们的状态,或者将过多或大量的文件上传到您的服务,或者可能进行非常昂贵的搜索,或者真正做任何昂贵的处理。流量在您计划和可以承担的范围内,但是所提出的请求类型太昂贵,无法处理这么多。
如果是遇到这种类型的攻击,有可能你的配置存在错误,或者程序存在 bug 。如:
1) 您可能打开了过于冗长的日志记录,并且可能将日志存储在写入速度非常慢的内容上。如果有人意识到这一点,并做了很多导致你将大量日志写入磁盘的东西,那么你的服务器就会慢慢爬行。
2)您的应用软件有可能在输入场景下做了大量极端低效的操作。如果程序或进程很多情况将更加明显,比如有很多的状态开放连接,或者很多的子进程。这些 bug 也将被攻击者利用和放大。
解决方案1) 通过防火墙丢弃流量是常见方案,尤其是对于有一些特定特性的流量,在流量很小的时候可以通过 tcpdump 抓包分析,在防火墙上配置。
2)修复软件 bug ;检查进程和子进程,限制传入请求、每个IP的连接数、及允许的子进程数。
3)修复配置错误,比如:将生产系统上的日志记录调低到合理的水平(因程序而异,通常涉及确保“调试”和“详细”日志记录级别关闭;日志记录适当即可,不需太冗长);
4)毫无疑问,配置越高,抵抗此类攻击效果会越好。所以不要过于吝啬你的CPU、内存,确保应用程序与后端数据库和磁盘存储等连接快速可靠。
3.3 基于漏洞的 DDoS 攻击
分析类似于基于负载的DoS,并且具有基本相同的原因和解决方案。
不同之处仅在于,在这种情况下,错误不会导致您的服务器浪费,而是会直接死亡。攻击者通常利用远程崩溃漏洞,例如乱码输入,导致无法解除引用或服务中的某些内容。
解决方案处理这类攻击的方法,类似于处理未经授权的远程访问攻击。
1)可以针对发起主机和固定的流量类型配置防火墙。
2)如果可以的话,使用验证反向代理。
3)收集证据(尝试捕获一些流量),向供应商提交bug,并考虑针对来源寻求法律申诉。
4)攻击者如果可以找到漏洞,这些攻击的发起成本会相当便宜,并且它们可以非常直接有效,但也相对容易追踪和停止。
5)需要注意的是,对基于流量的DDoS有用的技术通常对基于漏洞的DoS无用。
关键词: