Ahorre 15% en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código: Skills Comenzar
Secciones
Linux Seguridad

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

RangoCategoríaDescripción
0–1023Puertos Bien ConocidosReservados para servicios de sistema estándar (HTTP, SSH, FTP, etc.)
1024–49151Puertos RegistradosUtilizados por aplicaciones y middleware (MySQL, PostgreSQL, etc.)
49152–65535Puertos Dinámicos/EfímerosAsignados 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 -y

CentOS / RHEL / AlmaLinux / Rocky Linux:

sudo yum install net-tools -y
# or on newer versions:
sudo dnf install net-tools -y

Arch Linux:

sudo pacman -S net-tools

Sintaxis Principal de netstat

sudo netstat [options]

Verificación de Todos los Puertos TCP y UDP en Escucha

sudo netstat -tuln

Desglose de banderas:

BanderaSignificado
-tMostrar conexiones TCP y puertos
-uMostrar conexiones UDP y puertos
-lMostrar solo sockets en escucha (puertos esperando conexiones)
-nMostrar 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.0 significa que el servicio escucha en todas las interfaces disponibles; 127.0.0.1 significa 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 -tulnp

Ejemplo 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 -tunp

Visualización de la Tabla de Enrutamiento

sudo netstat -r

Visualización de Estadísticas de Interfaz de Red

sudo netstat -i

3. 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 -tuln

Las banderas tienen el mismo significado que en netstat:

BanderaSignificado
-tMostrar sockets TCP
-uMostrar sockets UDP
-lMostrar solo sockets en escucha
-nMostrar 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 -tulnp

Ejemplo 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 -tl

Mostrar solo puertos UDP en escucha:

ss -ul

Mostrar todas las conexiones TCP (incluyendo establecidas):

ss -t

Filtrado 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 = :22

Filtrar por puerto de destino:

ss -tuln dport = :3306

Mostrar todos los sockets en estado ESTABLISHED:

ss -t state established

Mostrar todos los sockets en estado LISTEN:

ss -t state listening

Filtrar por dirección IP de origen:

ss -tuln src 192.168.1.100

Mostrar conexiones a un host remoto específico:

ss -t dst 203.0.113.50

Combinar 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 -tm

Visualización de Información de Temporizadores

ss -to

Esto 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ísticanetstatss
Paquetenet-tools (a menudo no preinstalado)iproute2 (preinstalado en distribuciones modernas)
VelocidadMás lento (lee desde /proc/net/)Más rápido (utiliza interfaz kernel Netlink)
Rendimiento a escalaSe degrada con miles de conexionesManeja eficientemente grandes cantidades de conexiones
Filtrado avanzadoRequiere piping a grepFiltrado basado en expresiones integrado
Detalle de salidaBuenoMás detallado (memoria, temporizadores, etc.)
Soporte IPv6AdecuadoExcelente
Estado de mantenimientoDeprecadoMantenido activamente
Curva de aprendizajeFamiliar para administradores experimentadosSintaxis ligeramente diferente pero bien documentada

Cuándo usar netstat

  • Al administrar sistemas Linux antiguos (CentOS 6, Debian 7, etc.) donde ss podrí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 -y

Verificar qué proceso está usando el puerto 80:

sudo lsof -i :80

Verificar qué proceso está usando el puerto 443:

sudo lsof -i :443

Listar todas las conexiones de red:

sudo lsof -i

Listar todos los sockets TCP en escucha:

sudo lsof -i TCP -s TCP:LISTEN

Ejemplo 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 -y

Escanear todos los puertos TCP en localhost:

sudo nmap -sT localhost

Escanear puertos abiertos con detección de SO:

sudo nmap -sT -O localhost

Escanear un rango de puertos específico:

sudo nmap -p 1-1024 localhost

Escanear puertos UDP (requiere root):

sudo nmap -sU localhost

Escanear 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/udp

Ten 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.1

Usa 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 22

Audita 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).txt

Asegura 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

TareaComando netstatComando ss
Todos los puertos TCP/UDP escuchandosudo netstat -tulnsudo ss -tuln
Todos los puertos escuchando con PIDssudo netstat -tulnpsudo ss -tulnp
Solo puertos TCP escuchandosudo netstat -tlnsudo ss -tl
Solo puertos UDP escuchandosudo netstat -ulnsudo ss -ul
Filtrar por puerto 80`sudo netstat -tulngrep ":80"`sudo ss -tuln sport = :80
Todas las conexiones establecidassudo netstat -tunpsudo ss -t state established
Mostrar tabla de enrutamientosudo netstat -rip 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 ss como 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 netstat cuando trabajes en sistemas heredados o cuando scripts y flujos de trabajo existentes dependan de ella.
  • Complementa con lsof y nmap para 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.