我在DDoS下。我能做什么?


179

这是关于缓解DoS和DDoS 的规范问题

我在今天托管的网站上发现大量流量激增;我每秒获得数千个连接,我发现我正在使用所有100Mbps的可用带宽。因为所有请求都超时,所以没有人可以访问我的站点,而且由于SSH也超时,我什至无法登录服务器!这种情况以前发生过两次,每次持续几个小时并自行消失。

有时,我的网站还有另一个明显但相关的问题:我的服务器的平均负载(通常约为.25)猛增到20或更多,并且没有人能像其他情况一样访问我的网站。几个小时后它也会消失。

重新启动服务器没有帮助;我该怎么做才能再次访问我的网站,这是怎么回事?

相关地,我发现一两天,每次我启动服务时,它都从特定的IP地址获得了连接,然后崩溃了。一旦我再次启动它,这又发生了,又崩溃了。那有什么相似之处,我该怎么办?


Answers:


191

您正在遭受拒绝服务攻击。如果您看到来自多个网络的流量(不同子网中的不同IP),那么您将获得分布式拒绝服务(DDoS);如果全部来自同一地点,则您有一个普通的旧DoS。如果可能,进行检查会很有帮助;使用netstat进行检查。但是,这可能很难做到。

拒绝服务通常分为两类:基于流量和基于负载。最后一项(带有崩溃服务)是基于漏洞的DoS,完全不同。

如果您试图确定正在发生的攻击类型,则可能需要捕获一些流量(使用wireshark,tcpdump或libpcap)。如果可能,您应该但也应注意,您可能会捕获很多流量。

这些攻击通常很少来自僵尸网络(受感染主机的网络在某些攻击者的中央控制下,它们会出价)。这是攻击者(非常便宜)获取不同网络上许多不同主机的上游带宽以攻击您的同时掩盖其足迹的好方法。在低轨道离子炮是一个僵尸网络的一个例子(尽管是自愿的,而不是恶意软件衍生的); 宙斯是更典型的一种。

基于流量

如果您使用的是基于流量的DoS,则会发现有太多流量进入您的服务器,从而使其与Internet的连接完全饱和。从其他位置对服务器执行ping操作时,丢包率很高,并且(取决于所使用的路由方法)有时您还会看到非常长的延迟(ping很高)。这种攻击通常是DDoS。

尽管这确实是一种“响亮的”攻击,并且很明显正在发生什么,但是服务器管理员很难缓解(并且对于共享主机的用户来说,缓解几乎是不可能的)。您将需要ISP的帮助;让他们知道您处于DDoS之下,他们也许可以提供帮助。

但是,大多数ISP和运输提供商将主动了解正在发生的事情,并为您的服务器发布黑洞路由。这意味着他们通过0.0.0.0以下方式以尽可能少的成本发布了到您服务器的路由:他们使到您服务器的流量不再可以在Internet上路由。这些路由通常为/ 32,最终将其删除。这根本对您没有帮助;目的是保护ISP的网络免遭洪水泛滥。在此期间,您的服务器将有效地失去Internet访问。

您的ISP(或您,如果您拥有自己的AS)将能够提供帮助的唯一方法是,他们使用的智能流量整形器可以检测并限制可能的DDoS流​​量。并非每个人都拥有这项技术。但是,如果流量来自一个或两个网络或一台主机,它们也许也可以阻止您前面的流量。

简而言之,您几乎无能为力。最好的长期解决方案是将您的服务托管在Internet上的许多不同位置,这些服务必须分别并同时进行DDoSed处理,从而使DDoS更加昂贵。采取的策略取决于您需要保护的服务;可以使用多个权威名称服务器来保护DNS,使用备份MX记录和邮件交换器来保护SMTP,以及使用循环DNS或多宿主来保护HTTP(但是无论如何在一定程度上可能会导致性能下降)。

负载平衡器很少是解决此问题的有效解决方案,因为负载平衡器本身也会遇到相同的问题,并且只会造成瓶颈。IPTables或其他防火墙规则将无济于事,因为问题是您的管道已饱和。 一旦您的防火墙看到了连接,那就太迟了;您网站的带宽已被消耗。对连接做什么都没关系;当传入流量回落到正常水平时,攻击就会缓解或结束。

如果可以,请考虑使用Akamai,Limelight和CDN77等内容分发网络(CDN),或使用CloudFlare或Prolexic等DDoS清理服务。这些服务采取了积极的措施来减轻这些类型的攻击,并且在许多不同的地方都拥有太多可用带宽,以致于泛滥成灾通常是不可行的。

如果您决定使用CloudFlare(或任何其他CDN /代理),请记住隐藏服务器的IP。如果攻击者找到了IP,他可以绕过CloudFlare,再次直接DDoS服务器。要隐藏IP,除非服务器安全,否则您的服务器永远不要直接与其他服务器/用户通信。例如,您的服务器不应将电子邮件直接发送给用户。如果您将所有内容托管在CDN上,并且没有自己的服务器,则这将不适用。

此外,某些VPS和主机提供商在缓解这些攻击方面比其他方面更胜一筹。通常,它们越大,将越好。具有出色对等关系并具有大量带宽的提供商自然会更具弹性,而拥有活跃且人员充足的网络运营团队的提供商将能够做出更快的反应。

基于负载

当您遇到基于负载的DDoS时,您会发现平均负载异常高(或CPU,RAM或磁盘使用情况,具体取决于您的平台和具体情况)。尽管服务器似乎没有做任何有用的事情,但它非常忙。通常,日志中会有大量条目指示异常情况。通常,这是来自许多不同的地方,并且是DDoS,但这不是必然的情况。 甚至不必有很多不同的主机

这种攻击的基础是使您的服务执行大量昂贵的工作。这可能像是打开大量的TCP连接并强迫您维护它们的状态,或者将过大或大量文件上传到服务中,或者进行真正昂贵的搜索,或者进行任何处理成本很高的事情。流量在您计划的范围内并且可以进行,但是发出的请求类型太昂贵,无法处理那么多请求

首先,这种类型的攻击是可能的,通常表明存在配置问题或错误为您服务。例如,您可能打开了过于冗长的日志记录,并且可能将日志存储在写入速度很慢的东西上。如果有人意识到了这一点,并且做了很多事情导致您将大量日志写入磁盘,则服务器将缓慢进行爬网。对于某些输入情况,您的软件可能也会做得效率极低;原因与程序一样多,但是有两个例子可能会导致您的服务无法关闭原本已结束的会话,以及导致该服务产生一个子进程并使其离开的情况。如果最终有成千上万个具有状态以跟踪状态的开放连接,或者成千上万个子进程,那么您将遇到麻烦。

您可能要做的第一件事就是使用防火墙来降低流量。这并非总是可能的,但是如果您可以在传入流量中找到一个特征(如果流量很小,tcpdump可以很好地解决此问题),则可以将其丢弃在防火墙上,并且不会再造成麻烦。另一件事是修复服务中的错误(与供应商联系并准备长期的支持经验)。

但是,如果这是配置问题,请从此处开始。将生产系统上的日志记录降低到一个合理的水平(取决于程序,这通常是默认设置,通常将涉及确保关闭“调试”和“详细”日志记录级别;如果用户所做的一切均已正确登录且细节,您的日志记录太冗长)。此外,检查子进程和请求限制,可能油门传入请求,每IP连接,并允许子进程的数量,如适用。

毋庸置疑,服务器配置和配置得越好,这种类型的攻击就越困难。避免特别注意RAM和CPU。确保您与后端数据库和磁盘存储之类的连接快速可靠。

基于漏洞利用

如果您的服务在启动后突然异常迅速崩溃,特别是如果您可以在崩溃之前建立请求的模式并且该请求是非典型的或与预期的使用模式不匹配,则您可能正在经历基于漏洞利用的DoS。它可以来自仅一台主机(几乎具有任何类型的Internet连接)或许多主机。

这在很多方面类似于基于负载的DoS,并且具有基本相同的原因和缓解措施。所不同的只是,在这种情况下,该错误不会导致服务器浪费,而是会导致死亡。攻击者通常利用远程崩溃漏洞,例如输入错误,导致空引用或服务中的某些内容。

与未经授权的远程访问攻击类似地进行处理。 防火墙对源主机和流量的类型,如果他们可以牵制。 如果适用,请使用验证反向代理收集法证证据(尝试并捕获部分流量),向供应商提交错误通知单,并考虑针对来源提出滥用投诉(或法律投诉)。

如果可以找到漏洞利用,则这些攻击的安装成本相当低廉,并且可能非常有效,但也相对容易跟踪和阻止。但是,对基于流量的DDoS有用的技术通常对基于漏洞利用的DoS没有用。


1
关于最后一段,如果获得基于漏洞利用的D DoS,该怎么办?您如何跟踪并阻止它?
Pacerier,2014年

8

如果您是一家企业,则有很多选择。如果您是像我这样的小家伙,租用VPS或专用服务器来服务小型网站,则成本很快就会变得过高。

根据我的经验,我相信大多数专用和V​​PS提供商都不会仅为您的服务器设置特殊的防火墙规则。但是如今,您有一些选择。

CDN

如果您正在运行Web服务器,请考虑将其放在CloudFlare或Amazon CloudFront之类的CDN之后。

CDN很昂贵。为了控制成本,请直接从服务器而不是通过CDN提供大文件(大图像,音频,视频)。但是,这会将您的服务器IP地址暴露给攻击者。

私有云

私有云通常是昂贵的企业解决方案,但是Amazon VPC的设置成本几乎为零。但是,亚马逊的带宽通常很昂贵。如果负担得起,则可以设置Amazon VPC的安全组和网络ACL以在流量到达您的实例之前对其进行阻止。您应该阻止除TCP服务器端口之外的所有端口。

请注意,攻击者仍然可以攻击您的TCP服务器端口。如果是Web服务器,则考虑使用类似nginx的东西,该东西使用无阻塞IO并且可以处理大量连接。除此之外,除了确保运行最新版本的服务器软件外,您无能为力。

当您的TCP端口受到攻击而其他所有方法都失败时

这是我开发的一种解决方案,适用于无法隐藏在CDN后面的非Web服务器,例如WebSocket,媒体内容/流服务器。CloudFlare支持WebSocket,但目前仅适用于企业。

目标是足够快地更改您的TCP侦听端口,以使僵尸网络无法跟上,例如每10秒一次。这是通过执行端口漫游的简单代理程序完成的。端口的顺序是伪随机的,但必须基于服务器时间。并且计算服务器时间和端口的算法必须隐藏在您的客户端javascript / flash代码中。该程序还应在更改侦听端口时修改防火墙,并且防火墙必须是有状态的。如果有人感兴趣,我会将与Amazon一起使用的node.js脚本上传到GitHub。


4

更改您的域以在短时间内进入类似0.0.0.0的黑洞。

与您的服务器提供者交谈,查看他们是否可以为您提供另一个IP地址作为访问服务器的临时方式,或者查看服务器是否具有远程控制台访问权限(例如您坐在服务器前面)。在这里,您可以查看它是否是单个IP​​地址,并将其阻止来自站点或分布式攻击。


3
像这样更改DNS可能弊大于利。起初,我将减少A记录的TTL,但保留IP地址不变-直到有一个新IP指向它为止。
kasperd '16

1

当您遭受DDoS攻击时,您的ISP可以为您提供最大的帮助,但是,如果他们没有DDoS防护,则很有可能您将无法使用,直到攻击停止。通常,他们将看到被攻击的IP地址,并在其上游路由器上使网络为空。如果通信量不大,则可以使用许多在线服务来保护DDoS,在这种情况下,通信量将被重新路由,过滤并发送回服务器。


-1

我们以前也有类似的情况。下面是我们所做的。

首先,从服务器上拔下网络电缆。现在,通过查看性能监视器和任务管理器,检查服务器服务是否恢复正常。如果不是,请使用恶意软件软件扫描服务器,以确保服务器已被清理。此步骤通常将确保断开连接的服务器再次恢复正常。

接下来,您是否有防火墙?如果是,您是否续订了?确保在防火墙中启用IPS入侵功能。只需更新防火墙订阅即可解决我们的DDOS攻击。

我们了解到,我们应该续订安全订阅(例如,防火墙或防病毒),不要掉以轻心。DDOS攻击每天都在发生,小型企业也可能发生。希望这可以帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.