Cómo verificar los puertos abiertos en Linux: guía completa 2026

Terminal Linux mostrando puertos abiertos con los comandos ss y netstat

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 ss es la forma más moderna y rápida de listar puertos abiertos en Linux.
  • nmap te permite escanear puertos desde una perspectiva externa, lo que revela lo que un atacante realmente vería.
  • Usa lsof para identificar de inmediato qué proceso está usando un puerto específico.
  • Cerrar puertos innecesarios con ufw o iptables es la forma más directa de reducir tu superficie de ataque.

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 -tulnp

Descripció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/RHEL

Para listar los puertos abiertos en Linux usando netstat:

sudo netstat -tulnp

Las 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/RHEL

Escanea un servidor desde otra máquina en la misma red:

nmap -sT -p 1-1024 192.168.1.10

Para escanear los 1000 puertos más comunes con detección de versión de servicio:

nmap -sV 192.168.1.10

La 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 -i

Encuentra el proceso que usa un puerto específico (por ejemplo, el puerto 3000):

sudo lsof -i :3000

Esto 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 -tlnp

Mostrar solo puertos UDP (ss):

sudo ss -ulnp

Verificar si un puerto específico está abierto (grep con ss):

sudo ss -tulnp | grep :443

Filtrar por puerto con nmap:

nmap -p 80,443,8080 192.168.1.10

Estos 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/tcp

Permitir 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 enable

Verificar el estado actual del firewall:

sudo ufw status verbose

Usando iptables - Para control avanzado

Descartar todo el tráfico entrante en el puerto 3306 (MySQL):

sudo iptables -A INPUT -p tcp --dport 3306 -j DROP

Guardar las reglas para que persistan tras el reinicio:

sudo iptables-save | sudo tee /etc/iptables/rules.v4

Para 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.

Herramienta gratuita de verificación de puertos - comprueba si un puerto está abierto en tu servidor Linux al instante

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.