题 我在DDoS下。我能做什么?


这是一个 典型问题 关于DoS和DDoS缓解。

我在今天主持的网站上发现了大量的流量高峰;我每秒都有数千个连接,我看到我正在使用所有100Mbps的可用带宽。没有人可以访问我的网站,因为所有请求都超时,我甚至无法登录到服务器,因为SSH也超时了!这种情况曾经发生过几次,每次都持续了几个小时而且自行消失了。

偶尔,我的网站有另一个明显但相关的问题:我的服务器的平均负载(通常约为.25)会发出高达20或更多的火箭,没有人可以像其他情况一样访问我的网站。它也会在几个小时后消失。

重新启动我的服务器没有帮助;我该怎么做才能让我的网站再次访问,以及发生了什么?

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


171
2017-08-19 09:14




我在阅读之后(创建一个规范的“帮助,我正在获取DDOS!”问题?)。我只是想说好工作! - AngryWombat
另见 security.stackexchange.com/a/792/2379 - Pacerier


答案:


您正在遭受拒绝服务攻击。如果您看到来自多个网络(不同子网上的不同IP)的流量,您将获得分布式拒绝服务(DDoS);如果它们都来自同一个地方你就有一个普通的旧DoS。如果你能,检查是有帮助的;使用netstat来检查。但这可能很难做到。

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

如果您正在尝试确定正在发生的攻击类型,您可能希望捕获一些流量(使用wireshark,tcpdump或libpcap)。如果可能的话,您应该知道您可能会捕获相当多的流量。

通常情况下,这些将来自僵尸网络(受攻击主机的网络在一些攻击者的中央控制下,他们会做出招标)。这是攻击者(非常便宜地)获取不同网络上许多不同主机的上游带宽以攻击你的好方法,同时覆盖他们的轨道。该 低轨道离子加农炮 是僵尸网络的一个例子(尽管是自愿的而不是恶意软件衍生的);宙斯是一个更典型的一个。

基于流量

如果你是基于交通的DoS,你就是找到了 有这么多的流量 来到您的服务器,它与Internet的连接完全饱和。从其他地方ping服务器时,丢包率很高,并且(取决于使用的路由方法)有时您也会看到非常高的延迟(ping很高)。这种攻击通常是DDoS。

虽然这是一次非常“大声”的攻击,而且显而易见的是,服务器管理员很难缓解(并且共享主机用户基本上无法缓解)。您需要ISP的帮助;让他们知道你是在DDoS下,他们可能会帮助你。

但是,大多数互联网服务提供商和运输提供商将主动意识到正在发生的事情并发布一个 黑洞路线 为您的服务器。这意味着他们通过尽可能少的成本向您的服务器发布路由 0.0.0.0:它们使您的服务器的流量不再可在Internet上路由。这些路由通常为/ 32s,最终将被删除。这根本没有帮助你;目的是保护ISP的网络不受大洪水的影响。在此期间,您的服务器将失去Internet访问权限。

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

简而言之, 你能做的很少 关于这个问题。最好的长期解决方案是在互联网上的许多不同位置托管您的服务,这些服务必须单独和同时进行DDoS,这使得DDoS更加昂贵。这方面的策略取决于您需要保护的服务;可以使用多个权威名称服务器,具有备份MX记录和邮件交换器的SMTP以及使用循环DNS或多宿主的HTTP来保护DNS(但是在某段时间内,某些时候可能会出现一些降级)。

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

如果您能够这样做,请考虑使用 内容分发网络 (CDN),如Akamai,Limelight和CDN77,或使用像CloudFlare或Prolexic这样的DDoS清理服务。这些服务采取积极措施来缓解这些类型的攻击,并且在许多不同的地方拥有如此多的可用带宽,因此泛滥它们通常是不可行的。

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

此外,一些VPS和托管服务提供商在减轻这些攻击方面比其他提供商更好。一般来说,它们越大,它们就会越好;一个拥有良好对等且拥有大量带宽的提供商自然会更具弹性,而拥有一个活跃且人员充足的网络运营团队的提供商将能够更快地做出反应。

基于负载

当您遇到基于负载的DDoS时,您会注意到 负载平均值异常高 (或CPU,RAM或磁盘使用情况,具体取决于您的平台和具体情况)。虽然服务器似乎没有做任何有用的事情,但它非常繁忙。通常,日志中会有大量条目表明异常情况。这通常来自很多不同的地方,并且是DDoS,但情况不一定如此。 甚至不需要很多不同的主机

这种攻击的基础是让你的服务做很多昂贵的事情。这可能就像打开庞大数量的TCP连接并强迫您维护它们的状态,或者将过多或大量的文件上传到您的服务,或者可能进行非常昂贵的搜索,或者真正做任何昂贵的处理。流量在您计划和可以承担的范围内,但是 正在提出的请求类型太昂贵,无法处理这么多

首先,这种类型的攻击是可能的,通常表示a 配置问题或错误 在你的服务中。例如,您可能打开了过于冗长的日志记录,并且可能将日志存储在写入速度非常慢的内容上。如果有人意识到这一点,并做了很多导致你将大量日志写入磁盘的东西,那么你的服务器就会慢慢爬行。对于某些输入案例,您的软件可能也会执行极其低效的操作;原因和程序一样多,但是有两个例子会导致你的服务没有关闭一个完成的会话,以及导致它生成子进程并离开它的情况。如果你最终拥有数以万计的状态跟踪或数以万计的子进程的开放连接,你将遇到麻烦。

你可以做的第一件事是 使用防火墙来丢弃流量。这并不总是可行,但如果有一个特性,你可以在传入的流量中找到(如果流量很小,tcpdump对此很好),你可以将它放在防火墙上,它将不再造成麻烦。另一件事是修复服务中的错误(与供应商联系并为长期支持体验做好准备)。

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

毫无疑问,配置得越好,服务器配置越好,这类攻击就越难。特别是避免使用RAM和CPU吝啬。确保您与后端数据库和磁盘存储等连接快速可靠。

利用基于

如果你的服务神秘 崩溃非常快 在提出之后,特别是如果您可以在崩溃之前建立请求模式并且请求是非典型的或与预期使用模式不匹配,您可能正在经历基于漏洞的DoS。这可以来自只有一个主机(几乎任何类型的互联网连接)或许多主机。

这是 类似于基于负载的DoS 在许多方面,并有基本相同的原因和缓解措施。不同之处仅在于,在这种情况下,错误不会导致您的服务器浪费,而是会死亡。攻击者通常利用远程崩溃漏洞,例如导致无法解除引用或服务中出现错误的乱码输入。

处理此类似于未经授权的远程访问攻击。 火墙 如果它们可以被固定,则对抗原始主机和流量类型。 使用验证反向代理 如果适用的话 收集法医证据 (尝试捕获一些流量),向供应商提交错误机票,并考虑针对来源提交滥用投诉(或法律投诉)。

这些攻击安装相当便宜,如果可以找到攻击,它们可能非常有效,但也相对容易追踪和停止。但是,对基于流量的DDoS有用的技术通常对基于漏洞的DoS无用。


183
2017-08-19 09:14



关于你的最后一段,如果你得到基于漏洞利用的话 d DoS攻击?你怎么能追踪并阻止它? - Pacerier


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

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

CDN

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

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

私有云

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

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

当您的TCP端口被攻击并且所有其他方法都失败时

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

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


6
2017-12-05 18:04





更改您的域名,以便在短时间内转到0.0.0.0这样的黑洞。

与您的服务器提供服务,看看他们是否可以向您发送另一个IP地址,作为访问服务器的临时方式,或者查看服务器是否具有远程控制台访问权限(就像您坐在它前面一样)。从这里,您可以看到它是否是单个IP​​地址并阻止它从站点或分布式攻击。


3
2018-02-26 07:44



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


当您受到DDoS攻击时,它可以帮助您最大程度地帮助您,但如果他们没有DDoS保护,那么在攻击停止之前您很可能会停止服务。通常,他们会看到受攻击的IP地址,并在其上游路由器上将网络置空。如果您没有大量流量,则有许多DDoS保护在线服务,您的流量将被重新路由,过滤并发送回您的服务器。


0
2017-11-18 11:42