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:
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).
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 denetstat
, que corresponde al estado de la conexión (comoESTABLISHED
,TIME_WAIT
, etc.).
- Este filtro con
sort
:- Ordena los estados de conexión alfabéticamente para facilitar la agrupación.
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
- 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.
- 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
oCLOSE_WAIT
). - 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.