Parar Ataques DDOS con NGINX o Varnish – Peticiones Get y Post
Ataques, ataques y más ataques, algunos viven de los ataques y otros sobreviven a los ataques.
He visto muchos ataques por ahí, muchos tipos de ataques, algunos más fuertes que otros pero todos joden, los ataques por UDP se los dejo a OVH u al proveedor, mientras no sea gigas claro esta que te apaga el servidor hasta que el ataque pase.. pero es completamente normal al no tener una plataforma que soporte un ataque, aunque el problema de gigas es que si te hacen peticiones get y esto llega a generar una salida considerable de tráfico también te apagan el servidor, pero lo dice en sus condiciones de uso ( no quiero ser tan malo )…
En fin, pocos tienen infraestructura como la de OVH para parar un DDOS de 1 gbit, 2 gbit, 10 gbits o más y no digo que no la tenga nadie, si no que es costosa y en cualquier proveedor te puede salir muy caro, en cambio en OVH ya lo tienes integrado aun teniendo un servidor de 60 euros / mes, serás inmune a casi cualquier tipo de ataque por UDP.
Pero bien, el UDP solo te quiere saturar la red como dije a nivel servidor es muy complicado detener este ataque ya que a duras penas y podrás entrar al servidor si tienes la red saturada, pero por TPC es otra cosa….
Supongamos que nos atacan desde muchas IPS, todas los siguientes ejemplos serán muchas ips, por lo que bloquear con firewall no es una opción viable y supongamos que tampoco tenemos el string de IPTABLES y aunque lo tengamos es muy extraño ya que los últimos ataques a los que me he enfrentado no me a sido nada útil, no bloquea todo el ataque, además de que eran bastante fuertes, según el netstat el último tuvo 35 mil peticiones/conexiones al puerto 80.
Pequeña descripción:
– Casi todos los ataques por TPC hacen peticiones get.
-Últimamente muchos vienen desde extensiones instaladas en navegadores que están infectadas, estas son curiosas por que el referer que aparece es la web que esta viendo el que tiene la extensión, así que nos podemos encontrar con que tienes visitas desde wikipedia, youtube, webs xxx, otras muchas webs.
– Otros hacen peticiones POST ( más bien envíos 😛 )
– Hace poco me tope con un ataque desde wordpress, se hacían peticiones get para verificar el pingback…
Un ejemplo de este ataque, un pequeño resumen de peticiones en pocos segundos entre 5 y 10 segundos esto:
Algo así:
+0200] "GET / HTTP/1.0" 200 166 "-" "WordPress/3.9.1; https://desdeeldominio.com; verifying pingback from ip.xx.xx.xx.xx"
Ataque DDOS desde pingbac de wordpress
27791 WordPress/3.9.1; 13166 - 13048 WordPress/3.8.3; 6572 Mozilla/5.0 4949 WordPress/3.7.3; 1758 WordPress/3.9; 994 WordPress/3.8.2; 345 WordPress/3.5.1;
Unas 60 mil peticiones de golpe, muchas peticiones…..
Ataque DDOS desde un SWF
Luego están los ataques que mandan desde un SWF
Básicamente es un código metido en un SWF que recarga la web con un patrón de búsqueda /?=12312 etc, este SWF se sube a un hosting de imágenes, usualmente xoomimage, luego se inserta en el footer de una o varias webs con mucho tráfico y cada visita que carga ese swf manda entre 5 y 10 peticiones a la web atacada, pudiendo generar sin problemas hasta 30 o 40 mil peticiones y puede que muchas más todo depende del tráfico que tengan las webs que inserten el SWF o bien un JS que puede hacer exactamente lo mismo.
Y muchos otros tipos de ataques que hacen bastante daño, aunque no me viene ninguno otro a la cabeza… solo me acuerdo de los últimos ataques de estos últimos dos meses, que me toco intervenir en 5 o 6 si no mal recuerdo.
En fin.. como se para ?
Algunos dicen cloudflare y otros hablan de firewall externos y sistemas algo complicados que son bastante caros, aunque sí, son eficientes, pero el coste es alto y si vamos a tener solo entre 50 y 150 mil peticiones por segundo podemos hacer algo más barato con 1 o 2 servidores y si son menos de 60 mil peticiones se puede hacer perfectamente desde el mismo servidor, con varnish o nginx sin ningún problema. Todo depende del tipo de ataque, cantidad de peticiones… hay muchos tipos de ataques y con eso muchos tipos de soluciones.
En todo caso, un ejemplo con nginx, ya sea como proxy reverso en el mismo servidor, como proxy cache en un servidor externo o como web server principal..
Lo primero es configurar bien nginx para nuestras necesidades y después podemos usar estas 3 opciones:
Para el ataque de pingback de wordpress, puede bastar algo parecido a esto:
Detectamos el user agent y lo bloqueamos:
if ($http_user_agent ~* (WordPress|WordPress/3.9.1) ) { return 405; } Algunas peticiones masivas son enviadas usando el protocolo 1.0 ( solo por que si, supongo que pueden usar el 1.1 pero son programaciones viejas o cualquier cosa.. ) Podemos bloquear las peticiones desde 1.0 temporalmente mientras dura el ataque, esto en caso de no tener otra cosa que bloquear ( user agent, referer etc )
if ($server_protocol ~* "HTTP/1.0") { return 405; }
En caso de referido especifico, por ejemplo que venga de un swf subido a xooimage o js subido a blogspost podemos hacer algo así:
if ($http_referer ~* (blogspost|xooimage.com|etc|blabla) ) { return 405; # En caso de tener un ataque con cientos de ferrerers lo mejor es definir referres validos y bloquear el resto temporalemente.. -> https://kb.skamasle.com/2013/allow-dominios-regionales-de-google-y-redes-sociales/ }
Parece sencillo y en parte lo es, aunque hay que configurar el servidor para que aguante todas esas peticiones, la red, cantidad de paquetes entrantes, configuración de nginx para que pueda soportar todas las peticiones, rechazarlas y también dejar pasar las buenas etc etc..
Varnish es otra alternativa, funciona bastante bien tiene opciones parecidas, algo más complicado pero se puede hacer sin problemas, yo al menos lo uso bastante seguido, aveces para bloquear determinados ataques que mandan peticiones posts, otros con protocolo 1.0 y también algunos user agent da buenos resultados, lo que aún no logro bloquear bien son los referers, para eso me va perfecto nginx, con varnish se me a complicado un poco ese asunto.
La parte de varnish la dejo para otro día que me canse de escribir y tengo que trabajar, por lo demás si tienen problemas o necesitan soporte para algún ataque, no duden en escribirme -> [email protected] o por el formulario de contacto
que bueno verte posteando nuevamente!