好的,对于我的应用程序,我尝试选择一个尽可能抵抗DDoS攻击的架构。显然,它永远不会是完美的,但我希望保护它免受简单的攻击。
到目前为止,我已经想到了几个:
1)每个连接单线程。
这种方法似乎有令人难以置信的可伸缩性问题,而且对于大量的连接,拥有太多的线程对操作系统来说似乎是一个调度噩梦。
2) 2个线程。第一个线程将接受连接并将它们附加到一个列表中,第二个线程循环遍历列表(在这里使用正确的同步),并检查InputStream中是否有任何内容。找到东西后,读一行。任何实际的工作都将在一个新的事件线程中完成,包括回复。新线程只是被传递给被读取的行。
这种方法似乎有更大的问题。看起来似乎一个简单的cat /dev/urandom | telnet server port就可以锁定它。
3)这类似于#2,但在每次迭代时只从每个连接读取一个字节,并在到达换行字节时将其作为字符串处理。
到目前为止,这似乎是我最好的选择,但这意味着,如果攻击发起了大量连接并在所有连接上发送输入,则可能会显著降低循环速度。
有没有其他可能更适合这项工作的潜在架构?
发布于 2015-04-25 20:34:46
大公司有整个团队,他们每天都在工作,以对抗各种DOS攻击。在这里讨论太多了。在使用简单的缓解技术(如SYN-cookies等)之后,您最好的选择就是拥有足够的容量来“吃掉它”。
为了提高效率,我建议编写代码,然后在Google或Amazon这样的托管服务上运行它,让它们来处理DOS攻击的防御,并扩展您的服务来处理此类峰值。
https://stackoverflow.com/questions/21995978
复制相似问题