Que tu servidor funcione lento puede deberse a muchas razones, desde malas configuraciones, scripts o hardware poco fiable – pero a veces puede ser debido a que alguien o algo está inunando el servidor con tráfico conocido como ataque DoS (Denial of Service) o DDoS (Distributed Denial of Service)

El ataque por denegación de servicio (ataque DoS) o el ataque distribuido por denegación de servicio (ataque DDos) es un intento de hacer que una máquina o un recurso de red quede inaccesible para sus usuarios potenciales. Este tipo de ataques, por lo general, se realizan contra servidores o servicios alojados en servidores de alto perfil, como bancos, pasarelas de pago o incluso servidores de nombres. Los ataques DoS se implementan bien forzando el reseteo del objetivo, consumiendo sus recursos para que no pueda proveer sus servicios, u obstruye la comunicación entre la victima y los usuarios para que no puedan comunicar adecuadamente.

Es este pequeño artículo os enseñaremos cómo comprobar si tu servidor está bajo ataque desde la Terminal Linux con el comando netstat y cómo mitigar los ataques en el futuro.

De la página man de netstat “netstat – Muestra conexiones de red, tablas de enrutamiento, estadísticas de interfaces, conexiones enmascaradas y mensajes del tipo netlink”

Algunos ejemplos con su explicación:

netstat -na

Esto muestra todas las conexiones de internet activas hacia el servidor, incluyendo sólo las conexiones activas.

netstat -an | grep :80 | sort

Muestra de forma ordenada las conexiones de internet activas en el puerto 80 (puerto http), útil si tienes un servidor web para detectar muchas conexiones procedentes de una IP.

netstat -n -p|grep SYN_REC | wc -l

Este comando es útil para detectar la cantidad de SYNC_REC activas en el servidor. El número debería ser bastante bajo, preferiblemente menos de cinco. En caso de ataque DoS o bombas de correo, el número puede incrementearse mucho. De todas formas, el valor siempre depende del sistema, por lo que un valor alto pudiera ser normal en algunos servidores.

netstat -n -p | grep SYN_REC | sort -u

Lista todas las direcciones IP involucradas en vez de simplemente contarlas.

netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'

Lista todas las direcciones IP únicas del nodo que envía el estado de conexión SYN_REC.

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

Utiilza el comando netstat para calcular y contar el número de conexiones que hace cada dirección IP al servidor.

netstat -anp |grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

Lista el número de conexiones IP conectadas al servidor usando el protocolo TCP o UDP.

netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

Comprueba las conexiones ESTABLISHED en vez de todas las conexiones y muestra el número de conexiones por cada IP.

netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1

Muestra y lista las direcciones IP y la cantidad de conexiones al puerto 80 en el servidor. El puerto 80 se usa sobre todo para peticiones HTTP web..

Cómo mitigar un ataque DOS

Una vez que localizas la IP que ataca tu servidor, puedes usar los siguientes comandos para bloquear sus conexiones al servidor:

iptables -A INPUT 1 -s $IPADRESS -j DROP/REJECT

Ten en cuenta que tienes que reemplazar $IPADRESS con los números de la dirección IP que hayas localizado con netstat.
Tras ejecutar el comando superior, mata todas las conexiones del proceso httpd para limpiar el sistema y reinicia el servicio httpd con mediante los comandos siguientes:

killall -KILL httpd
 
service httpd start           # Para Red Hat
/etc/init/d/apache2 restart   # Para Debian

Para hacer esto de manera automática es muy recomendable instalar fail2ban y activar los filtros adecuados para que fail2ban se encargue de bloquear las ips que intenten este tipo de ataques.