Django信道的负载尖峰保护

2024-06-16 10:52:07 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有什么特别的方法可以帮助Django Channels服务器不那么容易受到来自websocket/HTTP客户端的轻微或意外的DDoS攻击或一般负载增加的影响?由于频道并不是真正的异步的(仍然是幕后工作者),我觉得即使使用相当简单的硬件,也很容易关闭一个基于频道的网站。我目前正在Django频道上构建一个应用程序,稍后将运行一些测试,以了解它的运行情况。在

达芙妮有没有某种形式的节流装置?我应该实现一些应用程序级别的限制吗?这仍然很慢,因为工作线程仍然处理被限制的请求,但是请求可以快得多。我还能做些什么来阻止这些袭击吗?在

我的一个想法是始终确保有为特定通道指定的工作线程—这样,如果websocket通道过载,HTTP仍然会响应。在

编辑:我很清楚低级别的DDoS保护是一个理想的解决方案,我了解DDoS攻击是如何工作的。我要找的是一个内置在通道中的解决方案,可以帮助处理这样增加的负载。也许是Daphne扩展一个通道并缩小另一个通道以进行补偿的能力,或者是一种节流方法,可以在某一点之后减少每个请求的权重。在

我在寻找daphne/channels特定的答案-关于DDoS或一般负载处理的一般答案不是我要找的-关于这方面还有很多其他问题。在

我还可以根据谁已登录和谁没有登录来控制流量限制-对于未登录的用户,一个节流阀可能会有所帮助。在

再次编辑:请阅读整个问题!我不是在寻找一般的DDoS缓解建议或对低级方法的解释。我想知道Daphne是否支持以下内容:

  • 节流
  • 基于队列大小的动态工作人员分配
  • 为经过身份验证的请求提供优先级的中间件

或者类似的东西。我也将直接联系频道社区,因为这可能不是这个问题的最佳地点。在


Tags: django方法答案服务器应用程序http编辑解决方案
3条回答

我只回答第一个问题。因此,基本上不可能100%地受到ddos攻击的保护,因为这总是归结为一场资源之战。如果服务器端资源大于攻击者端资源,则服务器不会停机(尽管性能可能会降低),但如果不是,则服务器会停机[无需引用]。你可能会问,为什么不可能做到100%的保护。所以基本上你的服务器“崩溃”如果人们不能连接到它[https://en.wikipedia.org/wiki/Crash_(computing)#Web_server_crashes---Web服务器崩溃句子1]。因此,如果您试图通过每秒钟关闭10000个连接来保护服务器5分钟,ddos就成功了。它“崩溃”了你的服务器。据我所知,只有Cloudfare(https://www.cloudflare.com/lp/ddos-b/?_bt=207028074666&_bk=%2Bddos%20%2Bprotection&_bm=b&_bn=g&gclid=EAIaIQobChMIu5qv4e-Z1QIVlyW9Ch2YGQdiEAAYASAAEgJbQ_D_BwE)才应该起作用。它利用其10Tbps的网络主干吸收ddos攻击的影响。但即使是它也不能提供100%的ddos保护,因为一旦它的10Tbps宕机,你的服务器也会宕机。所以,我希望这有帮助。在

我收到了来自Andrew Godwinanswer。他不使用StackOverflow,所以我代表他把它贴在这里。在

Hi Jamie,

At the moment Channels has quite limited support for throttling - it pretty much consists of an adjustable channel size for incoming connections which, when full, will cause the server to return a 503 error. Workers are load-balanced based on availability due to the channels design, so there's no risk of a worker gaining a larger queue than others.

Providing more advanced DoS or DDoS protection is probably not something we can do within the scope of Channels itself, but I'd like to make sure we provide the appropriate hooks. Were there particular things you think we could implement that would help you write some of the things you need?

(It's also worth bearing in mind that right now we're changing the worker/consumer layout substantially as part of a major rewrite, which is going to mean different considerations when scaling, so I don't want to give too precise advice just yet)

Andrew

他还在他的blog中写了关于2.0迁移的文章。在

分布式拒绝服务

“分布式”部分是关键:你不知道自己受到了“某人”的攻击,因为请求来自各地。在

您的服务器只接受一定数量的连接。如果攻击者成功地创建了这么多其他人都无法连接的连接,那么您将被DDoS攻击

因此,本质上你需要能够检测到一个连接不合法,或者你需要能够快速扩展以补偿连接数量的限制。在

祝你好运!在

DDoS保护应该是云提供商在负载平衡器级别提供的服务。在

像OVH这样的公司使用复杂的机器学习技术来检测非法流量,并禁止IPs以准实时的方式运行。 对你来说,建立这样一个检测机器是一项巨大的投资,可能不值得你花时间(除非你的网站是如此关键,如果它关闭一段时间就会损失数百万美元)

相关问题 更多 >