Proteger un servidor de ataques DDoS con Iptables (Parte 2/2)

Proteger un servidor de ataques DDoS con Iptables (Parte 2 de 2).

Segunda parte del manual anti DDos con Iptables. Puedes ver el primero «aquí».

 

…… Continuamos con nuestro manual.

Establecemos opciones diversas muy útiles a la hora de frenar ataques DDos.

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

SYN y FIN.
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

SYN y RST.
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

FIN y RST.
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP

Establecemos FIN sin ACK.
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP

Establecemos PSH sin el ACK.
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP

URG sin el ACK.
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP

Bien, llegado este punto hacemos un inciso.

Ya deberías de saber que cuando iptables recopila muchas disecciones IP, ralentiza el sistema (depende de tu maquina, pero normalmente a partir de 100 direcciones empieza a disminuir progresivamente).

Para evitar este problema usaremos IPSet

Proteger un servidor de ataques DDoS con Iptables (Parte 2/2) 1

 

Lo instalamos en nuestra distribución Linux.

Redhat, CentOS y derivados:

yum install ipset

Debian, Ubuntu y derivados:
apt-get install ipset

Una vez instalado agregaremos la regla de bloqueo en iptables (dos, es la tabla de IPset).
iptables -I INPUT 1 -m set --set dos src -j DROP

Creamos un «hash» para la tabla dos.
ipset -N dos iphash

Nota: si en vez de bloquear una ip, quieres bloquear la subred completa, cambia iphash por nethash.

Guardamos las reglas de Iptables.

/sbin/service iptables save

Ya lo tenemos, tan solo nos falta un script para detener automáticamente los ataques «syn flood»

Proteger un servidor de ataques DDoS con Iptables (Parte 2/2) 2

 

Creamos el script *.sh.

nano anti-ddos.sh

Copia y pega lo siguiente:
#!/bin/bash
IFCONFIG=/sbin/ifconfig
GREP=/bin/grep
AWK=/bin/awk
CUT=/bin/cut
NETSTAT=/bin/netstat
IPSET=/usr/sbin/ipset
IPTABLES=/sbin/iptables
SORT=/bin/sort
UNIQ=/usr/bin/uniq
srvIP=`$IFCONFIG eth0 | $GREP 'inet addr' | $AWK '{print $2}' | $CUT -f2 -d ":"`
for i in `$NETSTAT -ntu | $GREP SYN_RECV | $AWK '{print $5}' | $CUT -f1 -d ":" | $SORT | $UNIQ | $GREP -v ${srvIP}`
do
$IPSET -A dos $i
done
$IPSET -S > /etc/sysconfig/ipset

Guarda el archivo y cierra el editor.

Lo puedes ejecutar en el momento que notes un ataque, con:

bash anti-ddos.sh

Pero mi consejo es que crees una tarea cron que ejecute el sh (se recomienda su ejecución entre 1 y 5 minutos).

 

Puedes ver las direcciones que están bloqueadas, con:

ipset -L | head

ejemplo de salida….
ipset -L | head
Name: dos
Type: hash:ip
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 20104
References: 1
Members:
200.170.151.14
196.21.39.13
180.250.209.2
203.89.27.150

Otros detalles de un ataque, con:
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

 

Espero te resulte de util este tutorial.

 

5 Comentarios

  1. andres
    07/04/2020
  2. Collavino luis
    03/06/2020
    • Sergio G.B.
      04/06/2020
      • Edgar
        16/07/2020

Agregar comentario