Linux: evitar inundaciones TCP salientes

9

Ejecuto varios cientos de servidores web detrás de cargadores de carga, alojando muchos sitios diferentes con una gran cantidad de aplicaciones (de las cuales no tengo control). Aproximadamente una vez al mes, uno de los sitios es pirateado y se carga un script de inundación para atacar a algún banco o institución política. En el pasado, siempre se trataba de inundaciones UDP que se resolvieron efectivamente bloqueando el tráfico UDP saliente en el servidor web individual. Ayer comenzaron a inundar un gran banco de EE. UU. Desde nuestros servidores utilizando muchas conexiones TCP al puerto 80. Como este tipo de conexiones son perfectamente válidas para nuestras aplicaciones, simplemente bloquearlas no es una solución aceptable.

Estoy considerando las siguientes alternativas. ¿Cuál recomendarías? ¿Has implementado estos y cómo?

  • ¡Límite en los paquetes TCP salientes del servidor web (iptables) con puerto de origen! = 80
  • Lo mismo pero con colas (tc)
  • Límite de velocidad del tráfico saliente por usuario por servidor. Toda una carga administrativa, ya que hay potencialmente miles de usuarios diferentes por servidor de aplicaciones. Tal vez esto: ¿cómo puedo limitar el ancho de banda por usuario?
  • ¿Algo más?

Naturalmente, también estoy buscando formas de minimizar la posibilidad de que los piratas informáticos accedan a uno de nuestros sitios alojados, pero como ese mecanismo nunca será 100% resistente al agua, quiero limitar severamente el impacto de una intrusión.

Actualización: Actualmente estoy probando con estas reglas, eso habría evitado este ataque específico. ¿Cómo propondrías hacerlos más genéricos? ¿Me estoy perdiendo un ataque TCP DoS conocido cuando solo califico el límite en los paquetes SYN?

iptables -A OUTPUT -p tcp --syn -m limit --limit 100/min -j ACCEPT
iptables -A OUTPUT -p tcp --syn -m limit --limit 1000/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A OUTPUT -p tcp --syn -j REJECT --reject-with tcp-reset

¡Salud!

Willem
fuente

Respuestas:

3

Las mejores soluciones posibles para mi opinión y la que me ha funcionado muy bien es limitar el número de conexiones / paquetes para la ip de destino. Establecer el límite a una velocidad razonable evitará que el atacante envíe una gran cantidad de conexiones al objetivo. Establecer el puerto y el protocolo no es una buena idea porque si el atacante está enviando inundaciones http hoy, mañana usará diferentes tipos de ataque. por lo tanto, limitar las conexiones por ip como general sería una solución para su problema.

Espero que ayude :)

Maleficio
fuente
-3

La postura que siempre he tomado es que un servidor web no debe hacer conexiones TCP salientes, solo envía tráfico como un servidor que responde a las solicitudes entrantes. (También permito TCP entrante solo para el servidor web y SSH). (En relación con esto, también creo que un servidor web nunca es el host adecuado para enviar correo). Esto no solo evitará ataques salientes, sino que también agrega un poco de dificultad. a los ataques realizados en sus sistemas (los piratas informáticos no pueden obtener una ventana xterm o poner su kit de herramientas en su host).

Peter
fuente
Bien, entonces, ¿cómo funciona un sitio web y obtiene una fuente RSS de otro sitio web?
Michael Hampton