为Django频道加载尖峰保护

时间:2017-07-15 21:05:24

标签: python django websocket django-channels

是否有任何具体可以帮助使Django Channels服务器不易受到轻微或意外 DDoS攻击或来自websocket / HTTP客户端的一般负载增加的影响?由于频道不是真正的异步(仍然是幕后工作人员),我觉得要取消基于频道的网站是很容易的 - 即使使用相当简单的硬件。我目前正在Django频道上构建一个应用程序,稍后会运行一些测试来看看它是如何运行的。

达芙妮内置了某种形式的节流吗?我应该实现一些应用程序级别的限制吗?由于工作人员仍然处理受限制的请求,但这仍然很慢,但请求可以更快。我还能做些什么来试图阻止这些攻击吗?

我有一个想法是始终确保为特定频道指定了工作人员 - 这样,如果websocket频道过载,HTTP仍会响应。

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

我正在寻找达芙妮/频道特定的答案 - 关于DDoS或一般负载处理的一般答案并不是我所寻求的 - 关于这一点还有很多其他问题。

我还可以根据谁登录以及谁不登录来控制限制 - 未登录用户的限制可以提供帮助。

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

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

或者那种性质的东西。我也将直接与频道社区联系,因为这可能不是这个问题的最佳位置。

5 个答案:

答案 0 :(得分:3)

我已收到answerAndrew Godwin。他没有使用StackOverflow,所以我代表他在这里发帖。

  

嗨杰米,

     

目前,Channels对限制的支持非常有限 - 它几乎包含一个可调整的传入连接通道大小,当它满了时,将导致服务器返回503错误。由于渠道设计,工作人员根据可用性进行负载平衡,因此工作人员没有比其他工作人员获得更大队列的风险。

     

提供更高级的DoS或DDoS保护可能不是我们在渠道本身范围内可以做的事情,但我想确保我们提供适当的钩子。您认为我们可以实施哪些特定的东西可以帮助您编写一些您需要的东西吗?

     

(同样值得注意的是,现在我们正在大幅改变工人/消费者布局作为重大改写的一部分,这在缩放时意味着不同的考虑因素,所以我不要&# 39;我想提出过于精确的建议)

     

安德鲁

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

答案 1 :(得分:0)

我只回答第一个问题。所以基本上不可能100%保护免受ddos攻击,因为它总是归结为资源之争。如果服务器端资源大于攻击者端资源,则服务器不会关闭(但性能可能会降低)但如果不是,则服务器关闭[无需引用]。你可能会问,为什么不可能100%保护。所以基本上你的服务器“崩溃”,如果人们无法连接到它[https://en.wikipedia.org/wiki/Crash_(computing)#Web_server_crashes --- Web服务器崩溃句子1]。因此,如果您尝试通过在每秒进行10000次连接时将其关闭5分钟来保护您的服务器,则ddos会成功。它“崩溃”了你的服务器。我所知道的唯一有效的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下降,你的服务器也会下降。所以,我希望有所帮助。

答案 2 :(得分:0)

DDoS =分布式拒绝服务

'分布式'部分是关键:你不能知道你被某人攻击了吗?特别是因为请求来自各地。

您的服务器只接受一定数量的连接。如果攻击者设法创建了许多其他人无法连​​接的连接,那么您就是DDoS&#39。

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

祝你好运!

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

像OVH这样的公司使用先进的机器学习技术来检测非法流量,并禁止在准实时内执行IP。 对于你来说,构建这样一个检测机器是一笔巨大的投资,可能不值得你花时间(除非你的网站如此关键,如果它有点下降会损失数百万的$$$)

答案 3 :(得分:0)

你有很多关于DDOS无法做到的事情......但是有一些巧妙的诀窍'取决于您拥有多少资源,以及有多少人想让您离线。

您是否提供需要直接连接到您要保护的资源的完整公共服务?

如果是这样,你只需要吸收' DDOS拥有您拥有的资源,通过扩展和扩展......甚至是弹性......无论哪种方式都会花费您的钱!

或者让攻击者更难以消耗你的资源。有很多方法可以做到这一点。

如果您的服务需要某种身份验证,请将您的身份验证服务与您尝试保护的资源分开。

许多应用程序,身份验证和服务'在相同的硬件上运行。这就是DOS等待发生。

只允许完全通过身份验证的用户使用动态防火墙过滤规则访问您尝试保护的资源。如果您的身份验证然后打开资源门户(限制QOS到位)!如果您是一位知名的,长期信任的用户,那么请全心全意地访问该资源。

有一种审核用户资源行为(网络,内存,CPU)的方法,如果您看到使用奇怪数量的特定帐户,禁止它们或施加限制,最终导致其流量的防火墙丢弃策略。

与可能拥有系统的ISP合作,这些系统可以在ISP边界丢弃您的规范流量...... OVH是您最好的选择。一个ISP公开过滤器和流量作为API,我希望它们存在...基本上将防火墙过滤规则移动到AS边界... niiiiice! (幻想)

它不会停止DDOS,但会为您提供一些工具,以便将资源浪费成为攻击者消耗的可管理级别。 DDOS必须转向您的身份验证服务器...(可能),或危及许多用户帐户....在已经过身份验证的用户仍然可以访问: - )

如果您的DDOS占用了所有ISP带宽,这是一个更难的问题,请转移到更大的ISP!或移动ISP的...... :-)。隐藏你的主要资源,让它动态移动,继续前进! :-)。

将问题分解成碎片......在较小的碎片上应用DDOS控件。 : - )

我已经尝试了一个最普遍的答案,但有很多依赖,每个DDOS缓解需要一点皮肤,而不是锡方法。真的你需要一个反ddos忍者你的团队。 ; - )

看看分布式协议...... DP可能是DDOS的答案。

玩得开心。

答案 4 :(得分:0)

让我们对您的问题进行一些分析。 DDoS就像DoS,但与朋友在一起。如果您想避免DDoS explotation,您需要最小化DoS可能性。非常感谢capitan。

首先要做的是列出系统中发生的事情并且资源会受到影响:

  • 执行tcp握手(SYN_COOKIES受影响)
  • 稍后进行ssl握手(entropy,cpu)
  • 与频道图层建立连接...

然后监控每个资源并尝试实施对策:

  • 保护SYN_FLOOD配置内核参数和防火墙
  • 使用熵生成器
  • 配置防火墙以在短时间内限制打开/关闭连接(轻松实现最小化ssl握手)
  • ...

将您的大问题(DDoS)分成许多简单易行的正确任务。困难的部分是获得详细的步骤和资源列表。

请原谅我可怜的英语。