【问题标题】:Blocking connection flood阻塞连接洪水
【发布时间】:2016-06-02 14:21:48
【问题描述】:

问题:

假设我的应用程序被连接尝试淹没(尝试 DDoS 攻击),并且我想从现在开始忽略来自某个端点的任何流量和连接尝试,那么过滤的最佳位置是什么?

用例:

在我的应用程序中,我使用 System.Net.TcpListener 来监听传入连接。 我天真的方法是只接受所有连接,检查端点,然后可能立即关闭连接。

有些事情告诉我,这不是很有效。即使只是在我的应用程序中单独接受时创建 TcpClient 也会消耗资源。

那么,我可以做些什么来可靠地拒绝来自某些端点/IP 的连接,同时在 Windows 上花费最少的资源呢? Linux 系统上的相同情况又如何呢?

在 Linux 上有“iptables”,它的效率是否最高? 在 Windows 上可以使用内置的防火墙系统。

是否有任何其他方法可以更有效地阻止来自软件中某个 ip 的连接?如果是这样,那是什么?

硬件防火墙:

请不要试图提及硬件防火墙和过滤器。我知道它们并且知道它们是为此目的而制造的,但这个问题明确涉及软件方面。

【问题讨论】:

  • 没有比 IPTables 或集成的 windows 防火墙更高效的东西了,它们在操作系统中工作。水平,所以它是你能得到的最有效的。

标签: c# sockets networking tcp network-programming


【解决方案1】:

有些事情告诉我,这不是很有效。即使只是 在我的应用程序中单独接受时创建 TcpClient 将 消耗资源。

你是对的。一旦流量到达您的应用程序,您的机器已经投入了大量资源来打开新形成的会话。至少,您已经用完了网络资源,加​​上操作系统为新套接字分配的缓冲区和各种数据结构。

那么我能做些什么来可靠地拒绝来自某些端点/IP 的连接 同时在 Windows 上花费最少的资源来做到这一点?怎么样 Linux 系统上也有同样的情况?

您在自己的问题中提到了答案 - 使用防火墙。如果不是硬件防火墙,那么软件防火墙。如果您被特定的已知 IP 地址淹没,或者恶意流量具有您可以为其定义防火墙规则的其他属性,请执行此操作。在 Windows 上,您可以使用常规的 Windows 防火墙,在 Linux 上 - 只需使用 Iptables。两者都将比应用程序级过滤更有效。

您可能还想考虑使用Syn Cookies,有时必须明确启用。它们对某些类型的 DDos 攻击有效。

【讨论】:

    【解决方案2】:

    如果您想阻止基于 IP 地址和/或端口的请求,在它们到达您的应用程序之前通过应用程序服务器接收它或作为接受系统调用的返回,您需要在操作系统中停止这些请求等级。正如您提到的,这将是一个类似于 Linux 或 Windows 防火墙中的 iptables 的解决方案。一旦你的应用程序收到一个请求,在从接受系统调用返回之前就发生了三次握手,并读取了整个请求。

    如果您想阻止基于内容的请求,如果您不想拥有第 5 层或第 7 层路由器,则可能必须在应用程序中执行此操作。

    考虑有不同类型的 DDoS 攻击,一些在 TCP 层创建半连接中断 TCP 三向握手,一些发送看起来有效的实际请求,它们只是消耗 CPU、带宽、磁盘、数据库连接的资源,等等。但一般来说,用 IP 地址黑名单来阻止 DDoS 是不可能的,因为攻击者有大量的地址可以欺骗。

    【讨论】:

      【解决方案3】:

      为什么不让第二个程序监控您的网络,并起到过滤器的作用?让它监听你正在使用的端口,让它计算来自 IP 地址的连接之间的时间量,并检查内容请求。如果来自该地址的连接超过阈值,则将该用户列入黑名单。此外,您可以监控一天中的平均请求率并获得平均值。如果请求计数非常高,则几乎可以肯定它是 DDOS,您应该将来自 IP 地址的连接请求之间的时间阈值降低到更严格的限制。注意:这是对传入连接的严格扫描:检查传入连接不会消耗系统资源,就好像您正在启动套接字以接受连接一样。

      只是一个想法。

      【讨论】:

        【解决方案4】:

        我在DDOS攻击中也遇到过这个问题,为了解决这个问题,我实现了一个方法,当TCPlistener崩溃时,系统会重建它,这条蛇大大增加了系统的稳定性。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-18
          • 1970-01-01
          • 2014-06-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多