2009-06-22 14 views
17

Esto podría ser algo más adecuado para Serverfault, pero muchos desarrolladores web que vienen aquí probablemente se beneficiarán de las posibles respuestas a esta pregunta.Protéjase contra ataques de Dos

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

me pregunté esto después de leer este article

Para aquellos que no están familiarizados, esto es lo que recuerdo de él: un ataque DoS intentará ocupar todas las 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 ofrece algo más de información: http://en.wikipedia.org/wiki/Denial_of_service

Respuesta

43

No hay ninguna panacea, pero puede hacer que los ataques de DoS más difícil de hacer algunas de las siguientes:

  • No (o limitar su disposición a) hacer costosas operaciones por cuenta de clientes no autenticados
  • autentificación del acelerador intenta
  • operaciones del acelerador a cabo en nombre de cada cliente autenticado, y ponen su cuenta en un bloqueo temporal si lo hacen demasiadas cosas en muy poco tiempo
  • Tener una aceleración similar a nivel mundial para todos unauthentica TED clientes, y estar preparados para bajar este ajuste si detecta un ataque en curso
  • tener una bandera que puede utilizar durante un ataque para desactivar todos los accesos no autenticado
  • No almacene cosas en nombre de clientes no autenticados, y el uso una cuota para limitar el almacenamiento de cada cliente autenticado
  • en general, rechazar todas las solicitudes con formato incorrecto, irrazonablemente complicados, o irrazonablemente enormes lo más rápidamente posible (y registrarlos para ayudar en la detección de un ataque)
  • no utilice un caché de LRU puro si las solicitudes de clientes no autenticados pueden provocar el desalojo de ese caché, ya que estará sujeto a ataques de envenenamiento de caché (donde un cliente malintencionado solicita muchos diferentes que se utilizan con poca frecuencia cosas, haciendo que desalojar a todas las cosas útiles a partir de la memoria caché y necesita hacer mucho más trabajo para servir a sus clientes legítimos)

Recuerde, es importante rechazar de plano las solicitudes estrangulados (por ejemplo, con una HTTP 503: Service Unavailable respuesta o una respuesta similar apropiada para cualquier protocolo que esté utilizando) en lugar de poner en cola las solicitudes de aceleración. Si los pone en cola, la cola simplemente consumirá toda su memoria y el ataque DoS será al menos tan eficaz como lo hubiera sido sin la aceleración.

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

  • Asegúrese de que su servidor web está configurado para rechazar POST mensajes sin una cabecera de acompañamiento Content-Length, y rechazar peticiones (y estrangular el cliente infractor) que superen el declarado Content-Length, y rechazar peticiones con una Content-Length que es excesivamente largo para el servicio que el POST (o PUT) está dirigido a
0

Respuesta corta:

Usted no puede protegerse contra una denegación de servicio.

Y yo no estoy de acuerdo que pertenece en serverfault desde DoS se clasifica como un problema de seguridad y está sin duda relacionada con la programación

+0

el hecho de que se trata de un problema de seguridad hacer no significa que no pertenezca a ServerFault. La programación solo aborda una pequeña parte de estos problemas de seguridad. – ProfK

+0

Por supuesto, puede protegerse contra DoS, simplemente use un firewall y limite las conexiones por dirección IP. Sin embargo, es mucho más difícil proteger contra un ataque DDoS. –

1

Para este ataque específico (siempre y cuando la petición es GET) en base de un equilibrador de carga o un WAF que solo basa solicitudes completas al servidor web funcionaría.

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

De DoS per se realmente no se puede proteger su aplicación web por un simple hecho. Sus recursos son limitados mientras que el atacante tiene potencialmente 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ó más arriba unas 100 conexiones de ejecución lenta -> no hay problema

1

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 asincrónico popular es lighttpd.

Tenga en cuenta que este ataque es peligroso porque puede realizarse incluso con una sola máquina con una conexión lenta. Sin embargo, los ataques DDoS comunes enfrentan a tu servidor contra un ejército de máquinas, y hay poco que puedes hacer para protegerte de ellas.

Cuestiones relacionadas