Verificación de Puertos Abiertos y en Escucha en Linux Usando Netstat y SS
Monitorear puertos abiertos y en escucha en un sistema Linux es una de las prácticas más fundamentales para mantener la seguridad del servidor, diagnosticar problemas de red y gestionar tu infraestructura de manera efectiva. Ya sea que estés ejecutando un servidor web de producción, un entorno de VPS Hosting, o un Servidor Dedicado, entender exactamente qué puertos están abiertos — y qué servicios están vinculados a ellos — te proporciona la visibilidad necesaria para prevenir acceso no autorizado, detectar configuraciones incorrectas y eliminar superficies de ataque innecesarias.
En esta guía completa, te mostraremos cómo usar los comandos netstat y ss para verificar puertos abiertos y en escucha en cualquier sistema Linux, comparar sus fortalezas e introducir herramientas adicionales como lsof y nmap para análisis de red más profundos.
Por qué es importante monitorear puertos abiertos
Cada puerto abierto en tu servidor representa un posible punto de entrada. Los servicios que están mal configurados, desactualizados o simplemente olvidados pueden exponer tu sistema a explotación. Auditar regularmente tus puertos en escucha te permite:
- Identificar servicios no autorizados ejecutándose en puertos inesperados
- Detectar intentos de intrusión o procesos comprometidos
- Verificar que las reglas del firewall funcionan como se pretende
- Confirmar que las aplicaciones recién implementadas se vinculan a las interfaces correctas
- Cerrar puertos no utilizados para reducir tu superficie de ataque
Esto es especialmente crítico para administradores que gestionan entornos de Alojamiento Web Compartido o servidores multi-tenant donde múltiples servicios se ejecutan simultáneamente.
Entendiendo puertos y sus tipos
Antes de profundizar en las herramientas, es importante entender la terminología que encontrarás en la salida de comandos.
| Término | Descripción |
|---|---|
| Puerto abierto | Un puerto en el que una aplicación está escuchando activamente conexiones entrantes |
| Puerto en escucha | Un puerto vinculado a un servicio que está esperando tráfico de red |
| TCP (Protocolo de Control de Transmisión) | Orientado a conexión, confiable, utilizado por HTTP, SSH, FTP, etc. |
| UDP (Protocolo de Datagramas de Usuario) | Sin conexión, más rápido pero menos confiable, utilizado por DNS, NTP, etc. |
Verificando puertos con netstat
¿Qué es netstat?
netstat (estadísticas de red) es una utilidad clásica de línea de comandos que proporciona información detallada sobre conexiones de red, tablas de enrutamiento, estadísticas de interfaz y puertos en escucha. Aunque ha sido oficialmente deprecada en favor de ss en distribuciones modernas, sigue siendo ampliamente utilizada y se encuentra en muchos sistemas heredados.
Instalando netstat
El comando netstat es parte del paquete net-tools, que puede no estar instalado por defecto en distribuciones Linux modernas.
Debian / Ubuntu:
sudo apt install net-toolsCentOS / RHEL / AlmaLinux / Rocky Linux:
sudo yum install net-toolsUsando netstat para verificar puertos abiertos y en escucha
Para mostrar todos los puertos TCP y UDP en escucha en tu sistema, ejecuta el siguiente comando:
sudo netstat -tulnDesglose de banderas:
| Bandera | Descripción |
|---|---|
-t | Mostrar puertos TCP |
-u | Mostrar puertos UDP |
-l | Mostrar solo puertos en escucha |
-n | Mostrar direcciones numéricas en lugar de resolver nombres de host |
Salida de ejemplo
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp6 0 0 :::443 :::* LISTEN
udp 0 0 0.0.0.0:53 0.0.0.0:*Entendiendo las columnas de salida
- Dirección local — La dirección IP y número de puerto donde el servicio está escuchando.
0.0.0.0significa que el servicio está escuchando en todas las interfaces disponibles. - Dirección remota — La IP remota y puerto para conexiones activas. Un asterisco (
*) significa que no hay conexión establecida aún. - Estado — El estado de la conexión.
LISTENindica que el puerto está abierto y esperando conexiones entrantes.
Filtrando puertos específicos con netstat
Puedes canalizar la salida a través de grep para aislar un puerto o servicio específico. Por ejemplo, para verificar si algo está escuchando en el puerto 80 (HTTP):
sudo netstat -tuln | grep ":80"Para verificar el puerto 443 (HTTPS), que es esencial para servidores con Certificados SSL instalados:
sudo netstat -tuln | grep ":443"Para mostrar también el nombre del proceso y PID responsable de cada conexión, añade la bandera -p:
sudo netstat -tulnpVerificando puertos con ss
¿Qué es ss?
ss (estadísticas de socket) es el reemplazo moderno para netstat. Es más rápido, más eficiente y proporciona una salida más rica — particularmente en sistemas con un alto número de conexiones concurrentes. El comando ss está incluido por defecto en prácticamente todas las distribuciones Linux modernas y no requiere instalación adicional.
Usando ss para verificar puertos abiertos y en escucha
La sintaxis de ss se asemeja estrechamente a la de netstat, haciendo la transición directa:
ss -tulnDesglose de banderas:
| Bandera | Descripción |
|---|---|
-t | Mostrar sockets TCP |
-u | Mostrar sockets UDP |
-l | Mostrar solo sockets en escucha |
-n | Mostrar direcciones numéricas |
Salida de ejemplo
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 511 0.0.0.0:80 0.0.0.0:*
tcp LISTEN 0 511 [::]:443 [::]:*
udp UNCONN 0 0 0.0.0.0:53 0.0.0.0:*Uso avanzado de ss
El comando ss ofrece una variedad de opciones avanzadas de filtrado y visualización que van mucho más allá de lo que netstat puede proporcionar.
Mostrar solo puertos TCP en escucha
ss -tlMostrar solo puertos UDP en escucha
ss -ulMostrar nombres de procesos y PIDs
Para identificar exactamente qué proceso está usando un puerto específico, usa la bandera -p:
ss -tulnpEste es uno de los comandos más útiles para solucionar problemas — muestra el nombre del proceso y PID junto a cada socket en escucha, dejando inmediatamente claro qué aplicación posee qué puerto.
Salida de ejemplo con bandera -p
Netid State Local Address:Port Process
tcp LISTEN 0.0.0.0:80 users:(("nginx",pid=1234,fd=6))
tcp LISTEN 0.0.0.0:22 users:(("sshd",pid=987,fd=3))
tcp LISTEN 0.0.0.0:3306 users:(("mysqld",pid=2345,fd=21))Filtrar por un puerto específico
Para verificar qué proceso está escuchando en el puerto 8080:
ss -tulnp | grep ":8080"Mostrar todas las conexiones TCP establecidas
ss -tn state establishedMostrar estadísticas resumidas
ss -sEsto proporciona un resumen rápido de sockets totales por tipo y estado — útil para detectar volúmenes de conexión inusuales.
netstat vs. ss: Una comparación directa
| Característica | `netstat` | `ss` |
|---|---|---|
| Rendimiento | Más lento en sistemas ocupados | Significativamente más rápido |
| Disponibilidad por defecto | Requiere paquete net-tools | Pre-instalado en distros modernas |
| Opciones de filtrado | Básicas (grep requerido) | Filtros avanzados incorporados |
| Información de proceso | Disponible con -p | Disponible con -p |
| Detalle de salida | Estándar | Información de socket más detallada |
| Recomendado para | Sistemas heredados, familiaridad | Entornos Linux modernos |
Cuándo usar netstat
- En sistemas Linux más antiguos donde
ssno está disponible - Al trabajar con scripts o documentación escrita alrededor de sintaxis
netstat - Para verificaciones rápidas en sistemas donde
net-toolsya está instalado
Cuándo usar ss
- En cualquier distribución Linux moderna (Ubuntu 20.04+, CentOS 8+, Debian 10+, etc.)
- Cuando necesitas salida más rápida en servidores de alto tráfico
- Para filtrado avanzado y análisis detallado de socket
Herramientas adicionales para auditoría de puertos
Más allá de netstat y ss, varias otras utilidades son valiosas para una auditoría de puertos exhaustiva.
Usando lsof
lsof (listar archivos abiertos) trata los sockets de red como archivos, convirtiéndola en otra forma poderosa de identificar qué proceso está usando un puerto dado.
Para verificar qué proceso está vinculado al puerto 80:
sudo lsof -i :80Para verificar todos los puertos en escucha:
sudo lsof -i -P -n | grep LISTENSalida de ejemplo:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 1234 root 6u IPv4 23456 0t0 TCP *:80 (LISTEN)
sshd 987 root 3u IPv4 12345 0t0 TCP *:22 (LISTEN)Usando nmap
nmap es una herramienta poderosa de escaneo de red que puede detectar puertos abiertos tanto localmente como en hosts remotos. Es particularmente útil para verificar tu configuración de firewall desde una perspectiva externa.
Instala nmap si aún no está presente:
sudo apt install nmap # Debian/Ubuntu
sudo yum install nmap # CentOS/RHELEscanea todos los puertos TCP en la máquina local:
sudo nmap -sT localhostEscanea puertos abiertos en una dirección IP específica:
sudo nmap -sV 192.168.1.100La bandera -sV también intenta detectar la versión del servicio ejecutándose en cada puerto abierto, lo cual es invaluable para identificar software desactualizado o vulnerable.
> Nota de seguridad: Solo ejecuta escaneos nmap contra sistemas que posees o para los cuales tienes permiso explícito de escanear.
Flujo de trabajo práctico de seguridad: Auditando puertos de tu servidor
Aquí hay un flujo de trabajo recomendado paso a paso para auditar puertos abiertos en un servidor Linux:
- Lista todos los puertos en escucha con información de proceso:
ss -tulnp- Haz referencias cruzadas de cada puerto contra servicios esperados. Si ves un proceso desconocido en un puerto inesperado, investiga inmediatamente.
- Verifica servicios escuchando en todas las interfaces (
0.0.0.0) que deberían ser accesibles solo localmente. Por ejemplo, un servidor de base de datos (puerto 3306) típicamente debería vincularse a127.0.0.1, no a ###PPT_NOTR_86_
