tutorial real react example español course python django websocket django-channels

python - real - django channels tutorial español



Carga de protección contra picos para canales Django. (5)

¿Se puede hacer algo específico para ayudar a que un servidor de Django Channels sea menos susceptible a ataques DDoS ligeros o accidentales o a un aumento general de la carga desde clientes websocket / HTTP? Dado que los canales no son realmente asíncronos (todavía hay trabajadores detrás de escena), creo que sería bastante fácil eliminar un sitio web basado en los canales, incluso con un hardware bastante simple. Actualmente estoy creando una aplicación en los canales de Django y luego realizaré algunas pruebas para ver cómo se mantiene.

¿Hay alguna forma de regulación incorporada a Daphne? ¿Debo implementar alguna regulación de nivel de aplicación? Esto seguiría siendo lento ya que un trabajador todavía maneja la solicitud acelerada, pero la solicitud puede ser mucho más rápida. ¿Hay algo más que pueda hacer para intentar frustrar estos ataques?

Uno de los pensamientos que tuve fue asegurar que siempre hay trabajadores designados para canales específicos; de esa manera, si el canal websocket se sobrecarga, HTTP seguirá respondiendo.

Edición: soy consciente de que la protección contra DDoS de bajo nivel es una solución ideal y entiendo cómo funcionan los ataques DDoS. Lo que estoy buscando es una solución integrada en canales que pueda ayudar a manejar una carga mayor como esa. Tal vez la capacidad de Daphne para escalar un canal y escalar otro para compensar, o un método de regulación que puede reducir el peso por solicitud después de cierto punto.

Estoy buscando una respuesta específica de daphne / channel - las respuestas generales sobre DDoS o el manejo general de carga no son lo que estoy buscando - hay muchas otras preguntas sobre SO sobre eso.

También podría controlar la regulación en función de quién haya iniciado sesión y quién no. Un acelerador para los usuarios que no han iniciado sesión podría ayudar.

Edita de nuevo: ¡Por favor lee la pregunta completa! No estoy buscando consejos generales de mitigación de DDoS o explicaciones de enfoques de bajo nivel. Me pregunto si Daphne tiene soporte para algo como:

  • Estrangulamiento
  • Asignación dinámica de trabajadores basada en el tamaño de la cola
  • Middleware para dar prioridad a las solicitudes autenticadas.

O algo por el estilo. También me pondré en contacto con la comunidad de los Canales directamente sobre este tema, ya que TAN podría no ser el mejor lugar para esta pregunta.


Apliquemos algunos análisis a tu pregunta. Un DDoS es como un DoS pero con amigos. Si desea evitar la explotación DDoS, debe minimizar las posibilidades de DoS. Gracias capitan obvio.

Lo primero que debe hacer es hacer una lista de lo que sucede en su sistema y qué recursos se ven afectados:

  • Se realiza un protocolo de enlace tcp (SYN_COOKIES se ven afectados)
  • Un apretón de manos ssl llega más tarde (entropía, CPU)
  • Se realiza una conexión a la capa de canal ...

Luego, monitorice cada recurso e intente implementar una medida para contrarrestar:

  • Proteger a SYN_FLOOD configurando sus parámetros de kernel y firewall
  • Utilizar generadores de entropía.
  • Configure su firewall para limitar la conexión abierta / cerrada en poco tiempo (una forma fácil de minimizar los handshakes ssl)
  • ...

Separe su gran problema (DDoS) en muchas tareas simples y fáciles de corregir. La parte difícil es obtener una lista detallada de pasos y recursos.

Disculpa mi pobre ingles


DDoS = Denegación de Servicio Distribuida

La parte ''Distribuida'' es la clave: no puedes saber que estás siendo atacado por ''alguien'' en particular, porque las solicitudes vienen de todas partes.

Su servidor solo aceptará un cierto número de conexiones. Si el atacante logra crear tantas conexiones que nadie más puede conectarse, estás siendo DDoS''ed.

Por lo tanto, en esencia, debe poder detectar que una conexión no es legítima, o necesita poder escalar rápidamente para compensar el límite en el número de conexiones.

¡Buena suerte con eso!

La protección contra DDoS debería ser realmente un servicio de su proveedor de nube, en el nivel del equilibrador de carga.

Empresas como OVH utilizan sofisticadas técnicas de aprendizaje automático para detectar el tráfico ilegítimo y prohibir las IP que actúan en tiempo casi real. Para que usted construya una maquinaria de detección es una gran inversión que probablemente no vale la pena su tiempo (a menos que su sitio web sea tan crítico y pierda millones de $$$ si se demora un poco)


Hay muchas cosas que no puede hacer con respecto a DDOS. Sin embargo, hay algunos "trucos" que dependen de la cantidad de recursos que tiene a su disposición y de lo mucho que alguien quiere desconectarlo.

¿Está ofreciendo un servicio público total que requiere conexión directa con el recurso que está tratando de proteger?

Si es así, solo necesitará ''absorber'' DDOS con los recursos que tiene, ampliando y ampliando ... o incluso elástico ... ¡de cualquier forma le costará dinero!

o dificultar que el atacante consuma sus recursos. Hay varios métodos para hacer esto.

Si su servicio requiere algún tipo de autenticación, entonces separe sus servicios de autenticación del recurso que está tratando de proteger.

Muchas aplicaciones, la autenticación y el ''servicio'' se ejecutan en el mismo hardware. eso es un DOS esperando a suceder.

Solo permita que los usuarios completamente autenticados accedan a los recursos que está tratando de proteger con las reglas dinámicas de filtrado de firewall. ¡Si se autentica, se abre la puerta a los recursos (con una QOS restringida en su lugar)! Si usted es un usuario conocido y de confianza a largo plazo, entonces acceda al recurso al máximo.

Tenga una forma de auditar el comportamiento de los recursos de los usuarios (red, memoria, CPU), si ve cuentas particulares que utilizan cantidades extrañas, prohíbalas o imponga un límite, lo que finalmente conducirá a una política de caída de firewall de su tráfico.

Trabaje con un ISP que pueda tener sistemas implementados que puedan enviar tráfico a su especificación en el límite del ISP ... OVH es su mejor apuesta. un ISP que expone el filtro y la caída del tráfico como una API, me gustaría que existieran ... básicamente moviendo las reglas de filtrado de su firewall al borde AS ... ¡niiiiice! (fantasía)

No detendrá el DDOS, pero le brindará algunas herramientas para mantener los recursos desperdiciados por los atacantes en un nivel manejable. DDOS tiene que recurrir a sus servidores de autenticación ... (posible), o comprometer muchas cuentas de usuario ... en usuarios ya autenticados todavía tendrán acceso :-)

Si su DDOS está consumiendo todo el ancho de banda de su ISP, ese es un problema más difícil, ¡muévase a un ISP más grande! o mover ISP''s ... :-). Oculte su recurso principal, permita que se mueva dinámicamente, ¡manténgase en movimiento! :-).

Rompa el problema en pedazos ... aplique los controles DDOS en los pedazos más pequeños. :-)

He intentado una respuesta muy general, pero hay muchas cosas que dependen, cada mitigación de DDOS requiere un poco de enfoque de Piel, no de estaño. Realmente necesitas un ninja anti-ddos en tu equipo. ;-)

Eche un vistazo a los protocolos distribuidos ... DP es quizás la respuesta para DDOS.

Que te diviertas.


He recibido una answer de Andrew Godwin . Él no usa , así que lo estoy publicando aquí en su nombre.

Hola jamie

En este momento, los canales tienen un soporte bastante limitado para la aceleración; consiste básicamente en un tamaño de canal ajustable para las conexiones entrantes que, cuando está lleno, hará que el servidor devuelva un error 503. Los trabajadores tienen una carga equilibrada según la disponibilidad debido al diseño de los canales, por lo que no hay riesgo de que un trabajador obtenga una cola más grande que otros.

Proporcionar una protección DoS o DDoS más avanzada probablemente no sea algo que podamos hacer dentro del alcance de los propios Canales, pero me gustaría asegurarme de que proporcionamos los ganchos adecuados. ¿Hubo cosas particulares que crees que podríamos implementar que te ayudarían a escribir algunas de las cosas que necesitas?

(También vale la pena tener en cuenta que ahora mismo estamos cambiando sustancialmente el diseño del trabajador / consumidor como parte de una reescritura importante, lo que significará diferentes consideraciones al escalar, por lo que no quiero dar un consejo demasiado preciso todavía. )

Andrés

También ha escrito sobre la migración 2.0 en su blog .


Solo estoy respondiendo la primera pregunta. Entonces, básicamente, es imposible estar 100% protegido de los ataques de ddos, porque siempre se reduce a una batalla de recursos. Si los recursos del lado del servidor son mayores que los recursos del lado del atacante, el servidor no dejará de funcionar (aunque el rendimiento puede disminuir), pero si no, el servidor se desactiva [no se requiere referencia]. Por qué no es posible estar 100% protegido, puede preguntar. Básicamente, su servidor se "bloquea" si la gente no puede conectarse a él [ https://en.wikipedia.org/wiki/Crash_(computing)#Web_server_crashes --- El servidor web bloquea la frase 1]. Entonces, si intenta proteger su servidor apagándolo durante 5 minutos cada vez que se realizan 10000 conexiones en un segundo, las ddos ​​tuvieron éxito. Se "estrelló" su servidor. La única protección de las ddos ​​que conozco que debería funcionar es Cloudfare ( https://www.cloudflare.com/lp/ddos-b/?_bt=207028074666&_bk=%2Bddos%20%2Bprotection&_bm=b&_bn=g&gclid=EAIaIQobChMIu5qv4e-Z1QIVlyW9Ch2YGQdiEAAYASAAEgJbQ_D_BwE ) . Absorbe el impacto del ataque de ddos ​​con su red troncal de 10Tbps. Pero incluso no ofrece una protección del 100% de las ddos, porque una vez que sus 10Tbps están fuera de servicio, su servidor también bajará. Por lo tanto, espero que haya ayudado.