Analizando puertos abiertos con ss en Linux
En el entorno Linux, monitorear puertos y sockets es esencial para mantener la seguridad y diagnosticar problemas de red. Aunque netstat sigue siendo popular, ss (Socket Statistics) se ha convertido en la herramienta preferida por su rapidez y flexibilidad. En este artículo, exploraremos en profundidad cómo usar ss
para analizar puertos abiertos, conexiones activas y procesos asociados.
¿Por qué elegir ss sobre netstat
- Velocidad: ss está escrito en C y aprovecha directamente las llamadas al kernel, mostrando resultados casi en tiempo real.
- Flexibilidad: Ofrece múltiples filtros nativos (estado, protocolo, direcciones, puertos).
- Compatibilidad: Incluido en la mayoría de distribuciones modernas sin necesidad de instalar paquetes adicionales.
Instalación y verificación
En la mayoría de sistemas, ss
forma parte de iproute2
. Para comprobar su disponibilidad:
ss --version
Si no está instalado:
- Debian/Ubuntu:
sudo apt update ampamp sudo apt install iproute2
- CentOS/Fedora/RHEL:
sudo yum install iproute
osudo dnf install iproute
Sintaxis básica de ss
La estructura general es:
ss [opciones] [filtro]
A continuación, una tabla con las opciones más comunes:
Opción | Descripción |
---|---|
-t | Mostrar sockets TCP. |
-u | Mostrar sockets UDP. |
-l | Listar solo sockets en escucha. |
-n | Mostrar direcciones y puertos en formato numérico. |
-p | Mostrar procesos asociados a cada socket. |
Ejemplos prácticos
-
Listar puertos en escucha (TCP)
ss -tln
Resultado:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0: tcp LISTEN 0 10000 127.0.0.1:5432 0.0.0.0:
-
Ver conexiones UDP activas
ss -un
-
Con procesos asociados
ss -tulpn
Esta combinación es clave para identificar qué servicio está ligado a cada puerto.
-
Filtrar por estado
Para conexiones established (establecidas):
ss -tn state established
Filtros avanzados
ss permite especificar criterios muy detallados:
- Puerto local:
ss -tn ( sport = :80 )
muestra sólo conexiones entrantes al puerto 80. - Puerto remoto:
ss -tn ( dport = :443 )
para salidas al puerto 443. - Dirección:
ss -tn dst 192.168.1.10
para filtrar por IP de destino.
IPv6 y unix sockets
- IPv6:
ss -tln6
lista puertos IPv6 en escucha. - Unix sockets: Para comunicaciones entre procesos en el sistema de archivos:
ss -x
.
Integración con scripts y automatización
Puede resultar útil volcar la salida de ss en scripts de shell o Python para análisis periódicos:
#!/bin/bash
DATE=(date %Y-%m-%d_%H:%M)
ss -tulpn > /var/log/ss-status_DATE.log
Luego, empleando grep
o expresiones regulares, puede extraerse información para alertas.
Buenas prácticas y recomendaciones
- Ejecutar
ss
consudo
para obtener los procesos asociados (-p
). - Combinar con
watch -n 5 ss -tulpn
para monitorear en tiempo real cada 5 segundos. - Integrar en herramientas de monitoreo como Grafana o Prometheus mediante scripts personalizados.
- Revisar periódicamente puertos inusuales o servicios expuestos que no sean necesarios para minimizar la superficie de ataque.
Recursos adicionales
Protégete con VPNs recomendadas
Para pruebas de conectividad y seguridad remota, resulta muy útil usar una VPN confiable. Algunas opciones:
Con esta guía exhaustiva, dispone de las claves para dominar ss y fortalecer la seguridad de su sistema Linux mediante un análisis preciso de puertos y conexiones.
Leave a Reply