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 críticas para mantener la seguridad del servidor, diagnosticar problemas de red y gestionar tu infraestructura de manera efectiva. Al auditar regularmente qué puertos están abiertos y qué servicios están vinculados a ellos, puedes identificar proactivamente intentos de acceso no autorizados, detectar configuraciones incorrectas y eliminar superficies de ataque innecesarias antes de que se conviertan en vulnerabilidades graves.
Ya sea que estés ejecutando una aplicación de alto tráfico en un plan de VPS Hosting o gestionando una flota de máquinas bare-metal, entender la exposición de red de tu servidor Linux es innegociable. Esta guía proporciona un recorrido técnicamente preciso y completo sobre cómo usar tanto netstat como ss — las dos herramientas de línea de comandos más utilizadas para inspección de puertos en Linux — junto con herramientas complementarias y mejores prácticas del mundo real.
1. Entendiendo Puertos y Sus Tipos
Antes de profundizar en las herramientas en sí, es importante establecer una comprensión clara de qué son los puertos, cómo se categorizan y por qué es importante monitorearlos.
¿Qué es un Puerto de Red?
Un puerto de red es un punto final de comunicación lógico asociado con un proceso o servicio específico en un host. Los puertos permiten que un único servidor con una dirección IP ejecute múltiples servicios de red simultáneamente — por ejemplo, un servidor web en el puerto 80, un daemon SSH en el puerto 22 y una base de datos en el puerto 3306.
Categorías de Puertos
| Rango | Categoría | Descripción |
|---|---|---|
| 0–1023 | Puertos Bien Conocidos | Reservados para servicios de sistema estándar (HTTP, SSH, FTP, etc.) |
| 1024–49151 | Puertos Registrados | Utilizados por aplicaciones y middleware (MySQL, PostgreSQL, etc.) |
| 49152–65535 | Puertos Dinámicos/Efímeros | Asignados temporalmente para conexiones de cliente salientes |
Estados de Puerto que Encontrarás
- LISTEN — El puerto está abierto y un servicio está esperando activamente conexiones entrantes.
- ESTABLISHED — Existe una conexión activa entre dos puntos finales.
- TIME_WAIT — La conexión se está cerrando; el sistema está esperando para asegurar que el extremo remoto recibió el reconocimiento final.
- CLOSE_WAIT — El extremo remoto ha cerrado la conexión; la aplicación local aún no ha cerrado su lado.
Protocolos de Transporte
- TCP (Protocolo de Control de Transmisión): Orientado a la conexión, confiable, con verificación de errores y entrega garantizada. Utilizado por HTTP, HTTPS, SSH, FTP y la mayoría de protocolos de capa de aplicación.
- UDP (Protocolo de Datagramas de Usuario): Sin conexión, más rápido, pero sin garantías de entrega. Utilizado por DNS, NTP, DHCP y servicios de transmisión.
2. Verificación de Puertos con netstat
¿Qué es netstat?
netstat (estadísticas de red) es una utilidad clásica de línea de comandos que muestra conexiones de red activas, tablas de enrutamiento, estadísticas de interfaz y puertos en escucha. Aunque ha sido oficialmente descontinuada en favor de ss en distribuciones Linux modernas, netstat sigue siendo ampliamente utilizada — especialmente en sistemas heredados y en entornos donde los administradores están profundamente familiarizados con su sintaxis.
Instalación de netstat
netstat es parte del paquete net-tools, que ya no se instala por defecto en muchas distribuciones modernas. Instálalo de la siguiente manera:
Debian / Ubuntu:
sudo apt update && sudo apt install net-tools -yCentOS / RHEL / AlmaLinux / Rocky Linux:
sudo yum install net-tools -y
# or on newer versions:
sudo dnf install net-tools -yArch Linux:
sudo pacman -S net-toolsSintaxis Principal de netstat
sudo netstat [options]Verificación de Todos los Puertos TCP y UDP en Escucha
sudo netstat -tulnDesglose de banderas:
| Bandera | Significado |
|---|---|
-t | Mostrar conexiones TCP y puertos |
-u | Mostrar conexiones UDP y puertos |
-l | Mostrar solo sockets en escucha (puertos esperando conexiones) |
-n | Mostrar direcciones IP y números de puerto numéricos (omitir resolución DNS para mayor velocidad) |
Ejemplo de salida:
Active Internet connections (only servers)
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
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp6 0 0 :::443 :::* LISTEN
udp 0 0 0.0.0.0:68 0.0.0.0:*Lectura de la salida:
- Proto — El protocolo en uso (tcp, udp, tcp6, udp6).
- Local Address — La dirección IP y número de puerto en el que el servicio está en escucha.
0.0.0.0significa que el servicio escucha en todas las interfaces disponibles;127.0.0.1significa que solo es accesible localmente. - Foreign Address — La dirección del cliente remoto (mostrada como
0.0.0.0:*para puertos en escucha sin conexión activa). - State — El estado de la conexión (
LISTEN,ESTABLISHED,TIME_WAIT, etc.).
Incluyendo Información de Procesos
Para ver qué proceso es propietario de cada puerto en escucha, añade la bandera -p:
sudo netstat -tulnpEjemplo de salida con información de procesos:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1023/sshd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2847/nginx
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 3102/mysqld> Nota: Debes ejecutar este comando con sudo para ver nombres de procesos de todos los usuarios, no solo los tuyos.
Filtrado de Salida para Puertos o Servicios Específicos
Usa grep para limitar los resultados a un puerto o servicio específico:
# Check if anything is listening on port 80
sudo netstat -tuln | grep ":80"
# Check for SSH (port 22)
sudo netstat -tuln | grep ":22"
# Check for MySQL (port 3306)
sudo netstat -tuln | grep ":3306"
# Check for HTTPS (port 443)
sudo netstat -tuln | grep ":443"Visualización de Todas las Conexiones Activas (No Solo las en Escucha)
Para ver todas las conexiones activas, incluyendo las establecidas, elimina la bandera -l:
sudo netstat -tunpVisualización de la Tabla de Enrutamiento
sudo netstat -rVisualización de Estadísticas de Interfaz de Red
sudo netstat -i3. Verificación de Puertos con ss
¿Qué es ss?
ss (estadísticas de socket) es el reemplazo moderno para netstat, desarrollado como parte del paquete iproute2. Se comunica directamente con el kernel de Linux a través de sockets Netlink, lo que lo hace significativamente más rápido y eficiente que netstat — particularmente en sistemas con miles de conexiones concurrentes.
ss viene instalado por defecto en prácticamente todas las distribuciones modernas de Linux, incluyendo Ubuntu 18.04+, CentOS 7+, Debian 9+, y sus derivados.
Sintaxis Principal de ss
ss [options] [filter]Verificación de Todos los Puertos TCP y UDP en Escucha
ss -tulnLas banderas tienen el mismo significado que en netstat:
| Bandera | Significado |
|---|---|
-t | Mostrar sockets TCP |
-u | Mostrar sockets UDP |
-l | Mostrar solo sockets en escucha |
-n | Mostrar direcciones numéricas (sin resolución DNS) |
Ejemplo de salida:
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 128 127.0.0.1:3306 0.0.0.0:*
tcp LISTEN 0 511 [::]:443 [::]:*
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:*Incluyendo Información del Proceso
sudo ss -tulnpEjemplo de salida:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1023,fd=3))
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=2847,fd=6))
tcp LISTEN 0 128 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=3102,fd=21))Filtrado por Protocolo
Mostrar solo puertos TCP en escucha:
ss -tlMostrar solo puertos UDP en escucha:
ss -ulMostrar todas las conexiones TCP (incluyendo establecidas):
ss -tFiltrado Avanzado con ss
Una de las características más poderosas de ss es su filtrado basado en expresiones integrado, que te permite filtrar por puerto, dirección, estado y más — sin depender de grep.
Filtrar por número de puerto específico:
ss -tuln sport = :80
ss -tuln sport = :443
ss -tuln sport = :22Filtrar por puerto de destino:
ss -tuln dport = :3306Mostrar todos los sockets en estado ESTABLISHED:
ss -t state establishedMostrar todos los sockets en estado LISTEN:
ss -t state listeningFiltrar por dirección IP de origen:
ss -tuln src 192.168.1.100Mostrar conexiones a un host remoto específico:
ss -t dst 203.0.113.50Combinar múltiples filtros:
ss -t state established '( dport = :443 or sport = :443 )'Visualización del Uso de Memoria de Socket
ss también puede mostrar el uso detallado de memoria por socket, lo cual es útil para diagnosticar problemas de rendimiento:
ss -tmVisualización de Información de Temporizadores
ss -toEsto muestra temporizadores de retransmisión y temporizadores de keepalive para conexiones TCP, lo cual es invaluable para diagnosticar problemas de estabilidad de conexión.
4. Comparación de netstat vs. ss
Ambas herramientas logran el mismo objetivo fundamental, pero hay diferencias significativas que deben guiar tu elección:
| Característica | netstat | ss |
|---|---|---|
| Paquete | net-tools (a menudo no preinstalado) | iproute2 (preinstalado en distribuciones modernas) |
| Velocidad | Más lento (lee desde /proc/net/) | Más rápido (utiliza interfaz kernel Netlink) |
| Rendimiento a escala | Se degrada con miles de conexiones | Maneja eficientemente grandes cantidades de conexiones |
| Filtrado avanzado | Requiere piping a grep | Filtrado basado en expresiones integrado |
| Detalle de salida | Bueno | Más detallado (memoria, temporizadores, etc.) |
| Soporte IPv6 | Adecuado | Excelente |
| Estado de mantenimiento | Deprecado | Mantenido activamente |
| Curva de aprendizaje | Familiar para administradores experimentados | Sintaxis ligeramente diferente pero bien documentada |
Cuándo usar netstat
- Al administrar sistemas Linux antiguos (CentOS 6, Debian 7, etc.) donde
sspodría no estar disponible. - Al trabajar con scripts o documentación que ya utilizan sintaxis
netstat. - Cuando te sientes más cómodo con su formato de salida y no necesitas filtrado avanzado.
Cuándo usar ss
- En cualquier distribución Linux moderna (Ubuntu 18.04+, CentOS 7+, Debian 9+, y más nuevas).
- Al administrar servidores con un alto volumen de conexiones concurrentes, como aquellos que se ejecutan en Servidores Dedicados bajo carga pesada.
- Cuando necesitas filtrado avanzado, información de temporizadores o estadísticas de memoria de socket.
- Para automatización y scripting donde el rendimiento es importante.
5. Otras herramientas para verificar puertos abiertos
Más allá de netstat y ss, hay varias otras utilidades útiles para inspección de puertos y análisis de red en Linux.
lsof — List Open Files (Incluidos sockets)
lsof (List Open Files) trata los sockets de red como archivos (consistente con la filosofía de Linux de “todo es un archivo”) y puede mostrar qué proceso tiene un puerto específico abierto.
Instalar lsof:
# Debian/Ubuntu
sudo apt install lsof -y
# CentOS/RHEL
sudo yum install lsof -yVerificar qué proceso está usando el puerto 80:
sudo lsof -i :80Verificar qué proceso está usando el puerto 443:
sudo lsof -i :443Listar todas las conexiones de red:
sudo lsof -iListar todos los sockets TCP en escucha:
sudo lsof -i TCP -s TCP:LISTENEjemplo de salida:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 2847 root 6u IPv4 23456 0t0 TCP *:http (LISTEN)
nginx 2848 www-data 6u IPv4 23456 0t0 TCP *:http (LISTEN)nmap — Network Mapper
nmap es una poderosa herramienta de escaneo de red utilizada para auditoría de seguridad, descubrimiento de red y escaneo de puertos. A diferencia de ss y netstat (que inspeccionan el sistema local), nmap puede escanear hosts locales y remotos.
Instalar nmap:
# Debian/Ubuntu
sudo apt install nmap -y
# CentOS/RHEL
sudo yum install nmap -yEscanear todos los puertos TCP en localhost:
sudo nmap -sT localhostEscanear puertos abiertos con detección de SO:
sudo nmap -sT -O localhostEscanear un rango de puertos específico:
sudo nmap -p 1-1024 localhostEscanear puertos UDP (requiere root):
sudo nmap -sU localhostEscanear un servidor remoto:
sudo nmap -sT 203.0.113.50> Importante: Solo escanea sistemas que poseas o para los que tengas permiso explícito. El escaneo de puertos no autorizado puede violar leyes y términos de servicio.
fuser — Identificar procesos que usan archivos o sockets
# Find which process is using port 80 (TCP)
sudo fuser 80/tcp
# Find which process is using port 53 (UDP)
sudo fuser 53/udp/proc/net/ — Interfaz directa del kernel
Para propósitos de scripting, puedes leer información de puertos directamente desde el sistema de archivos virtual del kernel de Linux:
# View raw TCP socket table
cat /proc/net/tcp
# View raw UDP socket table
cat /proc/net/udpTen en cuenta que las direcciones y puertos en /proc/net/tcp se muestran en hexadecimal y requieren conversión para ser legibles por humanos. Herramientas como ss y netstat analizan estos datos automáticamente.
6. Mejores prácticas de seguridad para la gestión de puertos abiertos
Saber cómo verificar puertos abiertos es solo la mitad de la batalla. Actuar sobre esa información es lo que mantiene tu servidor seguro. Aquí hay mejores prácticas prácticas que todo administrador de Linux debe seguir:
Principio de menor exposición
Solo expone puertos que son absolutamente necesarios para que tu aplicación funcione. Cada puerto abierto es un vector de ataque potencial. Audita regularmente tus puertos de escucha y cierra o coloca un firewall en cualquier cosa que no necesite ser accesible públicamente.
Vincula servicios a interfaces específicas
Evita vincular servicios a 0.0.0.0 (todas las interfaces) a menos que sea necesario. Por ejemplo, un servidor de base de datos MySQL solo debe escuchar en 127.0.0.1 si solo se accede localmente:
# In /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 127.0.0.1Usa un firewall
Usa ufw (Ubuntu) o firewalld / iptables (CentOS/RHEL) para restringir el acceso a puertos abiertos por dirección IP, subred o interfaz de red:
# Allow SSH only from a specific IP (ufw)
sudo ufw allow from 203.0.113.10 to any port 22
# Deny all other access to port 22
sudo ufw deny 22Audita regularmente los puertos de escucha
Programa auditorías de puertos regulares usando trabajos cron o herramientas de monitoreo. Un nuevo puerto de escucha repentino puede indicar un servicio comprometido, una configuración incorrecta o, en el peor de los casos, malware:
# Quick audit command — save output and compare over time
sudo ss -tulnp > /var/log/port_audit_$(date +%F).txtAsegura servicios con SSL/TLS
Cualquier servicio expuesto a internet — servidores web, servidores de correo, paneles de control — debe usar conexiones encriptadas. Empareja tus puertos abiertos con Certificados SSL válidos para proteger los datos en tránsito y prevenir ataques de intermediario.
Monitorea cambios inesperados
Usa herramientas de detección de intrusiones como AIDE, Tripwire o auditd para alertarte cuando nuevos procesos comiencen a escuchar en puertos. Integra con registro centralizado (por ejemplo, ELK Stack, Graylog) para una visibilidad integral.
Desactiva servicios no utilizados
Si un servicio no es necesario, detenlo y desactívalo para que no se inicie al arrancar:
# Stop and disable a service (systemd)
sudo systemctl stop <service-name>
sudo systemctl disable <service-name>Referencia Rápida: Comandos Más Útiles
| Tarea | Comando netstat | Comando ss | |
|---|---|---|---|
| Todos los puertos TCP/UDP escuchando | sudo netstat -tuln | sudo ss -tuln | |
| Todos los puertos escuchando con PIDs | sudo netstat -tulnp | sudo ss -tulnp | |
| Solo puertos TCP escuchando | sudo netstat -tln | sudo ss -tl | |
| Solo puertos UDP escuchando | sudo netstat -uln | sudo ss -ul | |
| Filtrar por puerto 80 | `sudo netstat -tuln | grep ":80"` | sudo ss -tuln sport = :80 |
| Todas las conexiones establecidas | sudo netstat -tunp | sudo ss -t state established | |
| Mostrar tabla de enrutamiento | sudo netstat -r | ip route show |
Conclusión
Monitorear puertos abiertos y en escucha es una habilidad fundamental para cualquier administrador de sistemas Linux o ingeniero DevOps. Ya sea que estés asegurando un servidor web de producción, solucionando un problema de conectividad o realizando una auditoría de seguridad rutinaria, netstat y ss te dan visibilidad inmediata y accionable sobre la exposición de red de tu sistema.
Para resumir los puntos clave:
- Usa
sscomo tu herramienta principal en cualquier distribución Linux moderna — es más rápida, más rica en características y se mantiene activamente. - Usa
netstatcuando trabajes en sistemas heredados o cuando scripts y flujos de trabajo existentes dependan de ella. - Complementa con
lsofynmappara inspección más profunda a nivel de proceso y escaneo de puertos externos. - Siempre actúa según tus hallazgos — cierra puertos innecesarios, vincula servicios a las interfaces correctas e implementa reglas de firewall.
- Asegura servicios expuestos con Certificados SSL adecuados y controles de acceso.
Si buscas un entorno de hosting que te proporcione acceso root completo para implementar estas prácticas de seguridad, los planes de VPS Hosting de AlexHost ofrecen control total sobre la configuración de tu servidor Linux — incluyendo gestión de firewall, endurecimiento de servicios y monitoreo de red. Para equipos que necesitan máximo rendimiento y recursos dedicados, nuestros Servidores Dedicados entregan la potencia bruta y el aislamiento requeridos para operaciones de seguridad de nivel empresarial. Y si prefieres un entorno administrado con una interfaz familiar, explora nuestras opciones de VPS con cPanel para gestión de servidor simplificada sin sacrificar el control.
Las auditorías de puertos regulares, combinadas con una configuración de servidor endurecida, son una de las defensas más efectivas contra el acceso no autorizado y las brechas de datos. Conviértelo en una parte rutinaria de tu práctica de administración de sistemas.
en todos los servicios de hosting