Cómo proteger el servidor de un simple ataque DoS

Cómo proteger el servidor de un simple ataque DoS

Por favor tenga en cuenta que soyNOpreguntando cómo proteger el servidor deDDoS. Lo que quiero decir es que si alguien ejecuta siege -c 1000 www.example.comsu VPS. Eso hará que mi servidor atienda miles de solicitudes y se ralentice. Si ejecuto un asedio dirigido a, por ejemplo, alojamiento compartido, no veo la caída extrema en la capacidad de respuesta (de 60 ms a 2000 ms/solicitud) que veo en mi máquina. No espero poder mitigar grandes DDoS, pero me gustaría estar a salvo del primer asedio de descubrimiento de scripts para niños :) Por otro lado, estoy de acuerdo con el hecho de que cuando grandes cantidades de tráfico provienen de fuentes legítimas, la respuesta puede ser más lenta.

Respuesta1

Puede utilizar un firewall para limitar el número de conexiones simultáneas y la tasa de nuevas conexiones provenientes de una red (por ejemplo, un /32 para IPv4 y un /64 para IPv6). Ejemplo de cómo se vería usando iptables:

# Limit number of concurrent connections
-A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 50 -j DROP
# Limit rate of new connections
-A INPUT -i eth0 -p tcp --syn -m hashlimit --hashlimit-name tcp --hashlimit-mode srcip --hashlimit-above 3/sec --hashlimit-burst 7 --hashlimit-srcmask 32 -j DROP

(Lo mismo ip6tablesexcepto agregar --connlimit-mask 64al primero y cambiar --hashlimit-srcmaskal 64segundo).

También puede limitar la tasa de solicitudes HTTP, por ejemplo con elmódulo limit_req de nginx.

Respuesta2

Aparte de algunos firewalls básicos, confiamos en haproxy para realizar el trabajo pesado de TCP. Hemos descubierto que funciona en círculos alrededor de una instancia Apache HTTPd lista para usar en lo que respecta a cualquier tipo de ataque lento.

-A INPUT -p tcp -m tcp -m state --state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j SYNFLOOD

-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -j HTTPDGUARD
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW -j HTTPDGUARD

-A HTTPDGUARD -m connlimit --connlimit-above 25 --connlimit-mask 32 -j HTTPDENY
-A HTTPDENY -j LOG --log-prefix "HTTP Flood: "
-A HTTPDENY -p tcp -m tcp -j REJECT --reject-with tcp-reset

-A SYNFLOOD -m state --state NEW -m recent --set --name SYNRATE --rsource
-A SYNFLOOD ! -s 150.156.24.0/24 -m state --state NEW -m recent --update \
   --seconds 5 --hitcount 200 --name SYNRATE --rsource -j DROP

-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT

Pero básicamente, necesitas bloquear el ataque, arreglar el exploit o hacer ambas cosas.

Respuesta3

falla2banes una de las muchas herramientas que están diseñadas para manejar tal situación. fail2ban funcionó para mí para detener un par de ataques de fuerza bruta en ssh. Supongo que su servidor es Linux.

información relacionada