Cómo detectar un ataque de Denial of Service en Linux
Los ataques del tipo Denial of Service son difíciles de mitigar, ya que generalmente se hacen pasar por conexiones normales y tráfico normal, pero de forma abundante, hasta que el servidor ya no tenga más recursos para resolver las solicitudes y el servicio quede indisponible.
Una de las maneras de verificar si hay demasiadas conexiones y de dónde vienen es con el comando netstat.
La manera más simple es listar las conexiones con el comando netstat -an
$ netstat -an
Conexiones Internet activas (servidores y establecidas)
Proto Recv-Q Send-Q Dirección local Dirección remota Estado
cp 0 0 0.0.0.0:11211 0.0.0.0:* ESCUCHA
tcp 0 0 0.0.0.0:80 0.0.0.0:* ESCUCHA
tcp 0 0 0.0.0.0:22 0.0.0.0:* ESCUCHA
tcp 0 0 0.0.0.0:443 0.0.0.0:* ESCUCHA
tcp 0 0 127.0.0.1:11211 127.0.0.1:51898 ESTABLECIDA
tcp 0 0 127.0.0.1:11211 127.0.0.1:51570 ESTABLECIDA
tcp 0 0 127.0.0.1:11211 127.0.0.1:53800 ESTABLECIDA
tcp 0 0 127.0.0.1:53800 127.0.0.1:11211 ESTABLECIDA
tcp 0 0 127.0.0.1:11211 127.0.0.1:52002 ESTABLECIDA
Pero eso es difícil de contar, ya que las conexiones de ataque de denegación de servicio son rápidas.
La opción viable, aún con el comando netstat es:
$ netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
34 127.0.0.1
1 50.31.164.148
1 50.31.164.147
1 50.31.164.146
1 35.155.143.94
1 10.8.0.6
De esta forma, este comando contará las conexiones establecidas por dirección IP de origen.
También puedes hacer una alteración en el comando anterior, para listar, por ejemplo, solamente las conexiones en el puerto 80:
$ netstat -lan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
1 0.0.0.0
1 169.254.169.254
2 127.0.0.1
64 149.56.180.254
En este ejemplo, este servidor está siendo víctima de un ataque SYN_SENT, proveniente de la IP 149.56.180.254 con 64 conexiones, lo cual puede ser confirmado a través del netstat:
netstat -an|grep 149.56.180.254
tcp 0 0 172.30.1.187:80 149.56.180.254:38165 SYN_RECV
tcp 0 0 172.30.1.187:80 149.56.180.254:5557 SYN_RECV
tcp 0 0 172.30.1.187:80 149.56.180.254:3605 SYN_RECV
tcp 0 0 172.30.1.187:80 149.56.180.254:18728 SYN_RECV
tcp 0 0 172.30.1.187:80 149.56.180.254:35138 SYN_RECV
tcp 0 0 172.30.1.187:80 149.56.180.254:23965 SYN_RECV
tcp 0 0 172.30.1.187:80 149.56.180.254:41358 SYN_RECV
tcp 0 0 172.30.1.187:80 149.56.180.254:44263 SYN_RECV
tcp 0 0 172.30.1.187:80 149.56.180.254:52759 SYN_RECV
En este caso, podemos crear una regla de IPTABLES para hacer un DROP de todas las conexiones provenientes de esta dirección:
# iptables -I INPUT -s 149.56.180.254 -j DROP
Al ejecutar netstat nuevamente podemos observar que las solicitudes de conexiones SYN desaparecieron:
# netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
1 0.0.0.0
1 169.254.169.254
2 127.0.0.1
¿Te gustó esta publicación? Conoce el curso de Firewall Iptables y el Entrenamiento en línea de Pfsense, de Certificación Linux
Aprende mucho más sobre Linux en nuestro curso en línea. Puedes realizar la inscripción aquí con trial de 7 días gratis. Si ya tienes una cuenta, puedes acceder aquí.
¿Te gustó? ¡Comparte :-)
Eso fue solo una pieza. El curso enseña el camino completo — desde tu primer comando hasta el día del examen.