这是有关缓解DoS和DDoS的规范问题。
我今天在一个托管的网站上发现了大量的流量高峰。我每秒获得数千个连接,我发现我正在使用所有100Mbps的可用带宽。因为所有请求都超时,所以没有人可以访问我的站点,而且由于SSH也超时,我什至无法登录服务器!这种情况以前发生过两次,每次持续几个小时并自行消失。
有时,我的网站还有另一个明显但相关的问题:服务器的平均负载(通常是大约.25)的火箭升至20枚或更多,却没有人能像其他情况一样访问我的网站。几个小时后,它也会消失。
重新启动服务器无济于事。我该怎么做才能再次访问我的网站?发生了什么事?
相关地,我发现一两天,每次我开始服务时,它都与特定站点建立了联系。 IP地址,然后崩溃了。一旦我再次启动它,这又发生了,又崩溃了。那有什么相似之处,我该怎么办?
#1 楼
您正在遭受拒绝服务攻击。如果您看到来自多个网络的流量(不同子网中的不同IP),那么您将获得分布式拒绝服务(DDoS);如果全部来自同一地点,则您有一个普通的旧DoS。如果可能的话,进行检查会很有帮助;使用netstat进行检查。但是,这可能很难做到。拒绝服务通常分为两类:基于流量和基于负载。最后一项(带有崩溃服务)是基于漏洞利用的DoS,并且完全不同。
如果您想确定发生的攻击类型,则可能希望捕获一些流量(使用Wireshark,tcpdump ,或libpcap)。您应该,如果可能的话,还应该注意,您可能会捕获很多流量。
它们很少会来自僵尸网络(僵尸网络由某些攻击者的中央控制,受攻击者的竞标)他们会做的)。这是攻击者(非常便宜)获取不同网络上许多不同主机的上游带宽以攻击您的同时掩盖其踪迹的好方法。低轨道离子加农炮是僵尸网络的一个例子(尽管是自愿的,而不是恶意软件衍生的)。宙斯(Zeus)是一种更典型的服务器。完全饱和。从其他位置对服务器执行ping操作时,丢包率很高,并且(取决于所使用的路由方法)有时您还会看到很高的延迟(ping很高)。这种攻击通常是DDoS。减轻)。您将需要ISP的帮助;让他们知道您正在使用DDoS,他们也许可以提供帮助。
但是,大多数ISP和运输提供商都会主动了解正在发生的事情,并为您的服务器发布黑洞路由。这意味着他们通过
0.0.0.0
以尽可能少的成本发布了到您服务器的路由:它们使到您服务器的流量不再可以在Internet上路由。这些路由通常为/ 32,最终将其删除。这根本对您没有帮助;目的是保护ISP的网络免遭洪水泛滥。在这段时间内,您的服务器将有效地失去Internet访问。您的ISP(或者您,如果您拥有自己的自治系统)将能够提供帮助的唯一方法是,如果他们正在使用可以检测到的智能流量整形器和速率限制的DDoS流量。并非每个人都拥有这项技术。但是,如果流量来自一个或两个网络或一个主机,它们也许也可以阻止前面的流量。
简而言之,您几乎无法解决此问题。最好的长期解决方案是将您的服务托管在Internet上的许多不同位置,这些位置必须分别且同时进行DDoSed,这会使DDoS变得更加昂贵。采取的策略取决于您需要保护的服务;可以使用多个权威名称服务器来保护DNS,可以使用具有备用MX记录和邮件交换器的SMTP来保护DNS,并且可以使用循环DNS或多宿主的HTTP来保护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没有用。
评论
关于最后一段,如果获得基于漏洞利用的D DoS,该怎么办?您如何跟踪并阻止它?
–起搏器
2014-12-7 17:21
#2 楼
如果您是一家企业,则有很多选择。如果您是像我这样的小家伙,租用VPS或专用服务器来服务小型网站,成本很快就会变得过高。根据我的经验,我相信大多数专用和VPS提供商都不会设置特殊防火墙仅针对您的服务器的规则。但是如今,您有一些选择。
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。
#3 楼
更改您的域,使其在短时间内进入0.0.0.0之类的黑洞。与您的服务器对话,查看他们是否可以为您提供另一个IP地址作为访问服务器的临时方式,或者查看服务器是否具有远程控制台访问权限(例如您坐在服务器前面) )。从这里可以看到它是否是单个IP地址,并将其阻止来自站点或分布式攻击。
评论
像这样更改DNS可能弊大于利。起初,我将减少A记录的TTL,但保留IP地址不变-直到有一个新IP指向它为止。
–卡巴斯德
16年2月26日在8:14
#4 楼
当您受到DDoS攻击时,您的ISP可以为您提供最大的帮助,但是,如果他们没有DDoS防护,则很有可能您将无法使用,直到攻击停止。通常,他们会看到被攻击的IP地址,并使上游路由器上的网络为空。如果通信量不大,则可以使用许多在线服务来进行DDoS防护,这些通信将被重新路由,过滤并发送回服务器。#5 楼
我们以前也有类似的情况。下面是我们所做的。首先,从服务器上拔下网络电缆。现在,通过查看性能监视器和任务管理器,检查服务器服务是否恢复正常。如果不是,请使用恶意软件软件扫描服务器,以确保服务器已被清理。此步骤通常将确保断开连接的服务器再次恢复正常。
接下来,您有防火墙吗?如果是,您是否续订了?确保在防火墙中启用IPS入侵功能。只需更新防火墙订阅即可解决我们的DDOS攻击。
我们了解到,我们应该续订安全订阅(例如防火墙或防病毒),不要轻视它。 DDOS攻击每天都在发生,小型企业也可能发生。希望这可以帮助。
评论
另请参阅security.stackexchange.com/a/792/2379