上周我的networking遭到了一次DDoS攻击 ,这个攻击使我们的100Mbps链路完全饱和,几乎closures了我们托pipe的所有站点和服务。
我理解(从这个经验以及其他答案 ),我不能处理我这样的DDoS攻击,因为即使我们丢弃了仍然通过我们的链路发送的数据包,并且正在使我们的连接饱和。
然而,当发生这种情况时,我的ISP(奇怪的是)无法告诉我攻击来自哪里。 他们说,如果我能确定来源(EG通过tcpdump ),我可以给他们的IP地址来阻止。 但事情是如此重载,运行tcpdump是不可能的。 我只是无法查看输出。
几乎所有的服务器都在pfSense路由器后面。 我如何检测使用pfSense的DDoS攻击,以便我可以告诉我的ISP谁阻止? 我不想自己阻止攻击,我只想获得警报/能够查看正在使用更多带宽的IP地址列表。
pfSense路由器正在运行Snort,如果可以以任何方式协助。
有几种不同types的DDoS,因此有关它们的一般信息可能只适用于某种特定的types。 例如,DDoS总是耗尽您的带宽的想法是不正确的。 你需要做的是分析(一些)的stream量,确定为什么它打破你的网站,find一种方法来识别它,然后决定一个行动,可以阻止stream量。
DDoSstream量可能看起来不像真正的stream量,但是它的不同并不一定是数量。 在最近的DDoS中,我们的托pipe服务提供商决定阻止连接IP地址前十名。 当然,这些都与DDoS无关,其中一个实际上就是Google bot。 他们会阻止我们的办公室,除非他们承认IP地址。 使用netstat , sort和uniq寻找最高连接的标准build议不一定是好的build议。
我们的DDoS是一个SYN洪水,这意味着有几件事要检测:
您可能只会看到每个IP地址,这会阻止您已经看到的毫无意义的IP地址。 在实践中,我们在10分钟内看到了10万个唯一的源IP地址,每秒14万个数据包,这意味着每个IP地址每秒平均返回约一次。 阻止IP地址在我们的情况下是有效的。 总的带宽只有70Mb / s,而且由于源地址被欺骗,整个DDoS很容易被某个单一的服务器推出。
由于每个IP地址每秒只能发送大约一个数据包,与其他任何合法的IP地址相比,这个数量要低得多。 我们的许多网站主页的大小都达到了MB,这意味着成千上万个用户看到的单个请求的数据包。
大多数源端口是随机的,但几个小时后它改变了,源端口始终是1234.这使得识别stream量非常容易。
在我们的情况下, 问题是每秒的数据包数量大于防火墙可以处理的数据包数量。 在我们的防火墙阻止这些IP地址不会工作,因为防火墙是问题,但如果stream量正在通过防火墙和networking盒是问题,在防火墙阻塞可以帮助。 当源端口切换到1234时,我们的托pipe服务提供商能够阻止来自防火墙上游的stream量。
还有其他types的DDoS,其中一些填充您的带宽。 无论如何,我们的防火墙还是被淘汰了,这意味着我们无法访问我们的基础架构的任何部分。 对于你的具体问题,你将需要某种带外的方式来与你的防火墙和/或盒子进行通信,这样如果你的互联网pipe道被填满,你仍然可以进入诊断问题。 无论如何,这通常是一个好主意,因为有很多其他的方式可以让你的pipe道停下来。 当我走到数据中心时,我倾向于在其他人的机架上看到很多ADSL调制解调器,如果其中一些是用于带外通信的话,我不会感到惊讶。
我见过的其他两种DDoStypes都反映了DNS请求和昂贵的HTTP请求。 如果您运行DNSparsing程序,反映的DNS请求特别麻烦,因为您不想阻止这些IP地址,以防您希望从其中一个IP地址收到真正的答案。 我会改变我的主机使用一个新的DNSparsing器(也许是一个免费的公共),并阻止所有其他的DNSstream量。
昂贵的HTTP请求往往是针对你的CPU /内存/ IOPS。 他们还带有许多标识信息,如HTTP标头,源地址不能被伪造。 像mod_security这样的工具可以做一些惊人的事情来识别和阻止这些types的请求。 它甚至可以删除tcp连接,而不是发回一个HTTP响应。
简而言之: