Pregunta

Esto podría ser algo más adecuado para Serverfault, pero muchos desarrolladores web que solo vienen aquí probablemente se beneficiarán de posibles respuestas a esta pregunta.

La pregunta es: ¿cómo se protege eficazmente contra los ataques de denegación de servicio contra su servidor web?

Me pregunté esto después de leer este artículo

Para aquellos que no están familiarizados, esto es lo que recuerdo: un ataque DoS intentará ocupar todas sus conexiones enviando repetidamente encabezados falsos a sus servidores.

Al hacerlo, su servidor alcanzará el límite de posibles conexiones simultáneas y, como resultado, los usuarios normales ya no podrán acceder a su sitio.

Wikipedia proporciona más información: http://en.wikipedia.org/wiki/Denial_of_service

¿Fue útil?

Solución

No hay panacea, pero puede hacer que los ataques DoS sean más difíciles haciendo lo siguiente:

  • No (o limite su disposición a) realizar operaciones costosas en nombre de clientes no autenticados
  • Intentos de autenticación del acelerador
  • Acelerar las operaciones realizadas en nombre de cada cliente autenticado, y colocar su cuenta en un bloqueo temporal si hacen demasiadas cosas en muy poco tiempo
  • Tenga un acelerador global similar para todos los clientes no autenticados, y esté preparado para reducir esta configuración si detecta un ataque en curso
  • Tenga una bandera que pueda usar durante un ataque para deshabilitar todo acceso no autenticado
  • No almacene cosas en nombre de clientes no autenticados, y use una cuota para limitar el almacenamiento de cada cliente autenticado
  • En general, rechace todas las solicitudes malformadas, irrazonablemente complicadas o irrazonablemente grandes lo antes posible (y regístrelas para ayudar en la detección de un ataque)
  • No use un caché LRU puro si las solicitudes de clientes no autenticados pueden provocar el desalojo de ese caché, ya que estará sujeto a ataques de envenenamiento del caché (donde un cliente malintencionado solicita muchas cosas diferentes que se usan con poca frecuencia, lo que le causa para desalojar todas las cosas útiles de su caché y necesita hacer mucho más trabajo para servir a sus clientes legítimos)

Recuerde, es importante rechazar por completo las solicitudes aceleradas (por ejemplo, con un HTTP 503: Servicio no disponible o una respuesta similar apropiada para cualquier protocolo que esté usando) en lugar de poner en cola las solicitudes limitadas. Si los coloca en la cola, la cola solo consumirá toda su memoria y el ataque DoS será al menos tan efectivo como hubiera sido sin la aceleración.

Algunos consejos más específicos para los servidores HTTP:

  • Asegúrese de que su servidor web esté configurado para rechazar mensajes POST sin un encabezado Content-Length que lo acompañe, y para rechazar solicitudes (y limitar el cliente infractor) que excedan el declaró Content-Length , y rechazar solicitudes con un Content-Length que es irrazonablemente largo para el servicio que POST (o PUT ) está dirigido a

Otros consejos

Para este ataque específico (siempre que la solicitud sea GET), se basó un equilibrador de carga o un WAF que solo basa las solicitudes completas al servidor web.

Los problemas comienzan cuando se utiliza GET POST (lo cual es fácil) porque no puede saber si se trata de una POST maliciosa o simplemente una carga realmente lenta de un usuario.

Desde DoS per se, realmente no puede proteger su aplicación web por un simple hecho. Sus recursos son limitados mientras que el atacante potencialmente tiene tiempo y recursos ilimitados para realizar el DoS. Y la mayoría de las veces es barato para el atacante realizar los pasos requeridos. p.ej. este ataque mencionó anteriormente unas 100 conexiones de ejecución lenta - > no hay problema

Los servidores asíncronos, por ejemplo, son más o menos inmunes a esta forma particular de ataque. Por ejemplo, sirvo mis aplicaciones Django usando un proxy inverso Nginx, y el ataque no pareció afectar su funcionamiento en absoluto. Otro servidor asíncrono popular es lighttpd.

Eso sí, este ataque es peligroso porque puede ser realizado incluso por una sola máquina con una conexión lenta. Sin embargo, los ataques DDoS comunes enfrentan a su servidor contra un ejército de máquinas, y hay poco que pueda hacer para protegerse de ellos.

Respuesta corta:

No puede protegerse contra un DoS.

Y no estoy de acuerdo con que pertenezca al servidor por defecto ya que DoS está categorizado como un problema de seguridad y está definitivamente relacionado con la programación

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top