Saber cómo ver los puertos abiertos en Linux es una habilidad fundamental para cualquier persona que administre servidores, diagnostique problemas de red o quiera reforzar la seguridad de su sistema. Un puerto abierto es básicamente una puerta de entrada a tu máquina - y si no sabes cuáles están abiertas, no puedes protegerlas correctamente. Ya sea que estés ejecutando un servidor web en Ubuntu, gestionando un VPS o investigando un problema de conectividad, listar los puertos abiertos te da una imagen clara de lo que tu sistema está exponiendo a la red. Esta guía recorre cuatro métodos prácticos, explica cómo filtrar resultados y te muestra cómo cerrar los puertos que no necesitas.
Puntos clave:
- El comando
sses la forma más moderna y rápida de listar puertos abiertos en Linux. nmapte permite escanear puertos desde una perspectiva externa, lo que revela lo que un atacante realmente vería.- Usa
lsofpara identificar de inmediato qué proceso está usando un puerto específico. - Cerrar puertos innecesarios con
ufwoiptableses la forma más directa de reducir tu superficie de ataque.
Tabla de contenidos
- Por qué es importante verificar los puertos abiertos en Linux
- Método 1: Comando ss (Moderno, Recomendado)
- Método 2: Comando netstat (Antiguo pero aún común)
- Método 3: Escaneo de puertos con nmap (Perspectiva externa)
- Método 4: Comando lsof (Mapeo de proceso a puerto)
- Cómo filtrar resultados por puerto, TCP o UDP
- Cómo cerrar o bloquear un puerto con ufw o iptables
- Conclusión
- Preguntas frecuentes
Por qué es importante verificar los puertos abiertos en Linux
Cada servicio que se ejecuta en tu máquina Linux escucha en uno o más puertos. SSH escucha en el puerto 22, HTTP en el 80, HTTPS en el 443. Pero después de meses instalando y eliminando software, los servidores suelen terminar con puertos abiertos que nadie configuró intencionalmente. Un daemon de base de datos olvidado escuchando en el puerto 5432 sin una regla de firewall es un riesgo real que ha provocado filtraciones de datos.
Verificar los puertos abiertos en Linux te ayuda a:
- Auditar qué servicios están realmente en ejecución y expuestos.
- Diagnosticar por qué una aplicación no puede conectarse a otro servicio.
- Verificar que las reglas de tu firewall funcionan como se espera.
- Prepararte para una auditoría de seguridad o una prueba de penetración.
Los métodos que se describen a continuación cubren tanto la inspección local (lo que la propia máquina reporta) como el escaneo externo (lo que un host remoto puede ver). Ambas perspectivas son importantes.
Método 1: Comando ss (Moderno, Recomendado)
El comando ss (estadísticas de sockets) reemplazó a netstat en la mayoría de las distribuciones Linux modernas. Es más rápido, más detallado y está incluido en el paquete iproute2, que viene instalado por defecto en Ubuntu, Debian, CentOS y Fedora.
Para listar todos los puertos abiertos con sus nombres de proceso, ejecuta:
sudo ss -tulnpDescripción de las opciones:
-t- mostrar sockets TCP-u- mostrar sockets UDP-l- mostrar solo sockets en escucha-n- mostrar puertos numéricos en lugar de nombres de servicio-p- mostrar el proceso que usa cada socket
Ejemplo concreto: En un servidor Ubuntu recién configurado con Nginx y PostgreSQL, la salida podría verse así:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1234,fd=6))
tcp LISTEN 0 128 127.0.0.1:5432 0.0.0.0:* users:(("postgres",pid=5678,fd=5))
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=910,fd=3))Observa que PostgreSQL está vinculado únicamente a 127.0.0.1, lo que significa que no es accesible desde el exterior. SSH y Nginx están vinculados a 0.0.0.0, lo que indica que aceptan conexiones desde cualquier IP. Esta única salida te dice mucho sobre tu nivel de exposición.
Para una referencia completa de todas las opciones de ss, consulta la página man oficial de ss.
Método 2: Comando netstat (Antiguo pero aún común)
El comando netstat forma parte del paquete net-tools, que es más antiguo. Ya no viene instalado por defecto en muchas distribuciones, pero sigue siendo ampliamente utilizado y vale la pena conocerlo, especialmente cuando trabajas en sistemas más antiguos.
Instálalo si es necesario:
sudo apt install net-tools # Debian/Ubuntu
sudo yum install net-tools # CentOS/RHELPara listar los puertos abiertos en Linux usando netstat:
sudo netstat -tulnpLas opciones tienen el mismo significado que en ss. El formato de salida es ligeramente diferente, pero proporciona la misma información esencial: protocolo, dirección local, puerto y el proceso propietario.
Una limitación práctica: en servidores muy ocupados con miles de conexiones, netstat puede ser notablemente más lento que ss. Para las tareas cotidianas en un servidor típico, la diferencia es insignificante.
Método 3: Escaneo de puertos con nmap (Perspectiva externa)
Las herramientas anteriores te muestran lo que tu máquina reporta internamente. nmap adopta un enfoque diferente: escanea puertos a través de la red, simulando lo que vería un atacante externo o un cliente remoto. Esto es fundamental porque un firewall podría estar bloqueando un puerto que ss aún muestra como activo.
Instala nmap:
sudo apt install nmap # Debian/Ubuntu
sudo yum install nmap # CentOS/RHELEscanea un servidor desde otra máquina en la misma red:
nmap -sT -p 1-1024 192.168.1.10Para escanear los 1000 puertos más comunes con detección de versión de servicio:
nmap -sV 192.168.1.10La opción -sV intenta detectar la versión del software que se ejecuta en cada puerto abierto. Esto es útil para identificar servicios desactualizados que necesitan ser parcheados.
Importante: Ejecuta nmap únicamente contra servidores que sean de tu propiedad o para los que tengas permiso explícito de escanear. Escanear sistemas de terceros sin autorización puede ser ilegal en tu jurisdicción.
Si necesitas verificar si un puerto específico es accesible desde fuera de tu red sin instalar nmap, nuestra herramienta gratuita de verificación de puertos lo hace al instante, sin ninguna configuración.
Método 4: Comando lsof (Mapeo de proceso a puerto)
El comando lsof (listar archivos abiertos) trata los sockets de red como archivos, lo cual es coherente con la filosofía de Linux de "todo es un archivo". Es especialmente útil cuando necesitas responder la pregunta: "¿Qué proceso está usando el puerto 8080?"
Lista todas las conexiones de red:
sudo lsof -iEncuentra el proceso que usa un puerto específico (por ejemplo, el puerto 3000):
sudo lsof -i :3000Esto resulta muy útil cuando la aplicación Node.js de un desarrollador está bloqueando un puerto y necesitas identificar y terminar el proceso antes de reiniciar un servicio.
Cómo filtrar resultados por puerto, TCP o UDP
La salida sin filtrar de cualquiera de estas herramientas puede ser extensa. Aquí están los patrones de filtrado más útiles:
Mostrar solo puertos TCP en escucha (ss):
sudo ss -tlnpMostrar solo puertos UDP (ss):
sudo ss -ulnpVerificar si un puerto específico está abierto (grep con ss):
sudo ss -tulnp | grep :443Filtrar por puerto con nmap:
nmap -p 80,443,8080 192.168.1.10Estos patrones cubren la gran mayoría de las necesidades de filtrado del día a día. Para diagnósticos específicos de HTTP en el puerto 80, consulta nuestra Guía de diagnóstico HTTP para el puerto 80.
Si estás en Windows y necesitas el mismo tipo de guía paso a paso, revisa nuestra Guía completa para verificar puertos abiertos en Windows 2026.
Cómo cerrar o bloquear un puerto con ufw o iptables
Encontrar un puerto abierto que no necesitas es solo la mitad del trabajo. Aquí te explicamos cómo cerrarlo usando las dos herramientas de firewall más comunes en Linux.
Usando ufw (Uncomplicated Firewall) - Recomendado para Ubuntu
Bloquear el tráfico entrante en el puerto 8080:
sudo ufw deny 8080/tcpPermitir solo SSH y HTTPS, y denegar todo lo demás:
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw allow 443/tcp
sudo ufw enableVerificar el estado actual del firewall:
sudo ufw status verboseUsando iptables - Para control avanzado
Descartar todo el tráfico entrante en el puerto 3306 (MySQL):
sudo iptables -A INPUT -p tcp --dport 3306 -j DROPGuardar las reglas para que persistan tras el reinicio:
sudo iptables-save | sudo tee /etc/iptables/rules.v4Para una referencia más completa sobre la sintaxis y el orden de las reglas de iptables, la documentación oficial de Netfilter es la fuente autorizada.
Consejo: Bloquear un puerto con ufw o iptables no detiene el servicio que se ejecuta en él, solo impide que las conexiones externas lleguen hasta él. Si quieres detenerlo por completo, usa sudo systemctl stop servicename. Para desactivarlo de forma permanente, ejecuta también sudo systemctl disable servicename para evitar que se inicie al arrancar el sistema.
Conclusión
Verificar los puertos abiertos en Linux no requiere herramientas complejas ni conocimientos avanzados. El comando ss te ofrece una vista local rápida y confiable. nmap te muestra lo que el mundo exterior puede alcanzar. lsof identifica con precisión qué proceso es dueño de un puerto. Y ufw o iptables te permiten cerrar todo lo que no debería estar expuesto. Ejecutar estas verificaciones con regularidad, especialmente después de instalar nuevo software o modificar la configuración de red, es uno de los hábitos más sencillos que puedes adoptar para mantener tus servidores Linux seguros. Empieza ahora mismo con sudo ss -tulnp y descubre lo que tu servidor está exponiendo realmente.
Verifica cualquier puerto en tu servidor Linux - al instante
¿No estás seguro de si un puerto es realmente accesible desde el exterior? Nuestra herramienta gratuita de verificación de puertos escanea tu servidor desde una perspectiva externa en segundos, sin instalación ni configuración.
Prueba nuestra herramienta gratuita de verificación de puertos →
Preguntas frecuentes
Ejecuta sudo ss -tulnp en tu terminal. Este comando utiliza el moderno ss para mostrar todos los puertos TCP y UDP en escucha junto con el nombre del proceso. Es más rápido que netstat y está disponible por defecto en la mayoría de las distribuciones Linux actuales, incluyendo Ubuntu y Debian.
Ambos comandos muestran puertos abiertos e información de sockets, pero ss es el reemplazo moderno de netstat. Lee los datos directamente del kernel, lo que lo hace más rápido y preciso en sistemas con mucha carga. netstat requiere el paquete net-tools por separado, que ya no viene instalado por defecto en muchas distribuciones.
Usa nmap -p PORT TARGET_IP desde otra máquina en la red. Para una verificación externa rápida sin instalar nada, utiliza una herramienta de verificación de puertos en línea. Este enfoque comprueba si el puerto es accesible desde fuera, teniendo en cuenta las reglas del firewall que herramientas locales como ss no pueden reflejar.
Usa sudo lsof -i :PORT o sudo ss -tulnp | grep :PORT. Ambos comandos muestran el nombre del proceso y el PID asociado a ese puerto. El método con lsof es especialmente claro porque lista el comando, el PID y el usuario en un formato fácil de leer.
No. Bloquear un puerto con ufw o iptables impide que las conexiones externas lleguen al servicio, pero el servicio en sí sigue ejecutándose. Para detenerlo por completo, usa sudo systemctl stop servicename. Para eliminarlo de forma permanente, ejecuta también sudo systemctl disable servicename para evitar que se inicie al arrancar el sistema.