Cómo saber el número de conexiones y su estado con el comando netstat

Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero

Cuando administramos un servidor, especialmente uno que aloja servicios web (como Apache o Nginx), es fundamental monitorizar las conexiones de red para asegurarnos de que el sistema funcione correctamente y detectar posibles problemas, como sobrecargas o intentos de ataque.

En este artículo, explicaremos cómo usar el siguiente comando para contar las conexiones activas en los puertos 80 (HTTP) y 443 (HTTPS) y clasificar su estado:

netstat -tpn | awk '/:80/||/:443/{print $6}' | sort | uniq -c

Explicación del comando

Desglosemos paso a paso qué hace este comando:

  1. netstat -tpn:
    • netstat: Muestra las conexiones de red activas.
    • -t: Filtra únicamente conexiones TCP.
    • -p: Muestra el PID y el nombre del proceso que está utilizando la conexión.
    • -n: Muestra direcciones y puertos en formato numérico (sin resolver nombres de host o servicios).
  2. awk '/:80/||/:443/{print $6}':
    • Este filtro con awk busca líneas que contengan conexiones en los puertos 80 o 443.
    • {print $6} imprime la sexta columna de la salida de netstat, que corresponde al estado de la conexión (como ESTABLISHED, TIME_WAIT, etc.).
  3. sort:
    • Ordena los estados de conexión alfabéticamente para facilitar la agrupación.
  4. uniq -c:
    • Agrupa las líneas únicas (estados) y cuenta cuántas veces aparecen, mostrando el número total de conexiones en cada estado.

Ejemplo de salida

Al ejecutar el comando, podrías obtener algo como esto:

  15 ESTABLISHED
8 TIME_WAIT
2 CLOSE_WAIT

Aquí vemos:

  • 15 conexiones están activas y establecidas.
  • 8 conexiones están en espera de tiempo (TIME_WAIT), lo que indica que se cerraron recientemente y están esperando liberar recursos.
  • 2 conexiones están en el estado CLOSE_WAIT, lo que significa que la aplicación local aún no ha cerrado completamente la conexión tras recibir un cierre remoto.

Interpretación de los estados

Algunos de los estados más comunes son:

  • ESTABLISHED: Conexión activa y en uso.
  • TIME_WAIT: La conexión está cerrada, pero el sistema espera un tiempo antes de liberarla completamente.
  • CLOSE_WAIT: El servidor ha recibido un cierre desde el cliente, pero el socket local aún no se ha cerrado.
  • SYN_SENT: Una solicitud de conexión está en proceso.
  • SYN_RECV: El sistema ha recibido una solicitud de conexión y está esperando confirmación.
  • FIN_WAIT1 / FIN_WAIT2: Estados asociados con el cierre de la conexión.

Casos de uso del comando

  1. Monitorización del tráfico web: Si tu servidor aloja un sitio web o una API, puedes usar este comando para identificar cuántos usuarios están conectados activamente y el estado de las conexiones.
  2. Diagnóstico de problemas: Si notas un rendimiento lento o interrupciones, este comando puede ayudarte a identificar conexiones sospechosas o un número elevado de conexiones en estados no deseados (como TIME_WAIT o CLOSE_WAIT).
  3. Detección de ataques DDoS: Un número inusualmente alto de conexiones en estado SYN_RECV podría indicar un intento de ataque de tipo SYN Flood, que es un componente común de los ataques DDoS.

Conclusión

El comando netstat combinado con herramientas como awk, sort, y uniq es una poderosa forma de analizar las conexiones de red en un servidor. Permite identificar el número y estado de las conexiones en los puertos clave (80 y 443 para servicios HTTP y HTTPS), ayudándote a mantener un control efectivo sobre el tráfico y detectar posibles problemas.