如何拦截TCP和UDP数据包(洪水攻击)

3
我有一个程序可以告诉你的电脑是否在线。我是通过一个服务器向客户端发送UDP数据包来实现的。客户端回复后,服务器就知道它们在线了。如果一个客户端在接下来的5秒内没有回应,那么我就将其标记为离线。
无论如何,我正在测试这个服务,从另一台计算机上发送了成千上万个UDP数据包到服务器上。发送了这么多数据包后,服务器没有按照预期工作。
所以我知道如果有人向我发送了大量数据包。问题在于,如何阻止这些数据包,使我的服务器仍然能够正常工作?
编辑可能的解决方案
我认为我将实现以下解决方案,你们觉得怎么样?
我现在需要2个或更多服务器。如果一个客户端发现服务器没有响应,那么它将会与第二个服务器通信。因此,攻击者也必须知道有第二个服务器。根据你想要多安全,你甚至可以有5个服务器。我猜如果攻击者知道有5个服务器,那我浪费了时间和金钱?哈哈

2
我认为如果我们知道这个问题的解决方案,就不会有DoS攻击了。 - SamV
有一些解决方案,如IDS和自适应防火墙,可以检测突发事件并暂时阻止来自IP的请求,但如果您的软件用于测量正常运行时间,则这更具有反效果。@Fruity是正确的,这是Web的固有弱点之一,就像隐私和SMTP一样。 - ShellNinja
哦,我明白了。我不知道它被称为DoS攻击。这可能就是为什么我在互联网上找不到解决方案的原因。 - Tono Nam
根据您的更新:您将如何保守额外服务器的事实?如果客户知道,攻击者也会知道。我不会重新发明轮子,只需使用正常的负载平衡技术即可(这可能是一个复杂的主题,我建议雇用曾经做过这项工作的顾问,并支付他/她来设置它)。 - Scott Chamberlain
是的,确实总有漏洞!所以我想现在的问题是如何防止黑客知道第二个服务器的地址?你说得没错,没有办法。我必须采用你的解决方案。 - Tono Nam
1个回答

2
这个问题的一般解决方法是购买额外的硬件,放置在计算机前面,用于检查传入的数据包。
这个额外的硬件的作用取决于你想要使用的解决方案,你可以让这个硬件将请求分发到许多运行相同软件的服务器上(这会使你添加的硬件成为负载均衡器)。你也可以让硬件检测到来自单个地址的数据包数量异常高,然后硬件可以开始丢弃来自该地址的数据包,而不是将它们转发到服务器上(这会使你添加的硬件成为有状态防火墙)。
除了这两种方法之外,还有更多的选择,但所有的解决方案都围绕着减少服务器负载(通常是将负载转移到专门用于承载负载的其他硬件上)。你可能可以升级你的软件,使其更能抵御数据包洪水,但除非你当前的软件编写非常糟糕,否则它不会给你带来太多的容量。

+1 谢谢!这可能是额外的硬件,也可能是像代理一样的计算机? - Tono Nam
充当代理的计算机是额外的硬件。它不需要成为计算机设备,它可以是运行任何你需要解决问题的软件的完整计算机。 - Scott Chamberlain
谢谢。你认为将额外的硬件作为同一服务并在主要硬件无响应时使用它怎么样? - Tono Nam
那种技术被称为“故障转移”,但我怀疑如果负载均衡器和故障转移服务器是同一台计算机,你会有多大的成功。(除非你没有负载均衡器,并且可以修改客户端以尝试故障转移计算机,如果主计算机不工作,这对于像Web服务器这样的东西是行不通的,但如果你有一个自定义的客户端,你可以修改它,这是完全可能的) - Scott Chamberlain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接