您正在遭受拒绝服务攻击。如果您看到来自多个网络的流量(不同子网中的不同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没有用。