Cómo comprobar si un puerto está abierto
Para comprobar si un puerto está abierto desde fuera, tienes que probarlo desde fuera: un intento de conexión desde otra red es el único resultado que significa algo. Un puerto que responde desde tu propia máquina puede seguir bloqueado por un firewall, un grupo de seguridad o tu proveedor de hosting antes de que llegue ningún visitante externo.
La vía rápida: probar desde fuera de tu red
Introduce el nombre de host o la dirección IP y el número de puerto en una herramienta de comprobación de puertos y deja que abra una conexión desde una máquina en algún otro punto de internet. Si el servicio está funcionando es una pregunta distinta. Lo que necesitas saber es si alguien ahí fuera puede llegar hasta él, y probar desde el mismo servidor, o desde la misma red de oficina, se salta precisamente las capas que suelen causar el problema.
La vía manual: nc, nmap y telnet
Desde cualquier otra máquina en una red distinta, tres herramientas hacen el trabajo:
nc -zv example.com 443 # un solo puerto, escaneo sin envío de datos, detallado
nmap -Pn -p 22,80,443 example.com # varios puertos, informa open/closed/filtered
telnet example.com 25 # antiguo pero universal; Ctrl+] y luego "quit" para salir
nc (netcat) es la más simple: -z significa conectar y desconectar de inmediato sin enviar datos, -v imprime el resultado. Responde "succeeded" o "refused / timed out" y nada más. Recurre a nmap cuando la distinción importa, porque es la única de las tres que separa de forma fiable una conexión rechazada de una descartada, y -Pn le dice que se salte su sondeo de ping y compruebe el puerto aunque el host no responda a los pings. telnet está instalado en casi todas partes, y para protocolos de texto como SMTP o HTTP también te muestra el mensaje de bienvenida que envía el servicio.
Para ver qué está escuchando en la propia máquina, que es una pregunta distinta, usa ss -tulpn en Linux o netstat -ano en Windows. Si un puerto está escuchando ahí pero cerrado desde fuera, el bloqueo está en medio: un firewall del host, un grupo de seguridad en la nube o el proveedor.
Abierto, cerrado y filtrado son tres respuestas distintas
- Abierto. Algo completó el saludo TCP (handshake). Un servicio está escuchando y aceptó la conexión.
- Cerrado. El host respondió, pero con un rechazo (un reset TCP). La máquina es accesible y nada está escuchando en ese puerto. Es una respuesta rápida y definitiva.
- Filtrado. No volvió nada en absoluto. Un firewall descartó el paquete sin responder, así que la sonda agota el tiempo de espera. Esta es la respuesta lenta, y significa que hay un firewall de por medio, no que el servicio esté caído.
Cerrado te señala la configuración del servicio. Filtrado te señala una regla de firewall, un grupo de seguridad o un proveedor de internet bloqueando el puerto. Muchos proveedores bloquean el puerto 25 de salida por defecto, y algunos bloquean el 445 y otros puertos habitualmente abusados, lo que produce un resultado filtrado que ninguna configuración del lado del servidor va a cambiar.
UDP es un caso especial. UDP no tiene saludo inicial, así que un escáner muchas veces no puede distinguir un puerto abierto de uno filtrado, y el silencio es una respuesta válida de un servicio UDP sano. Trata los resultados de UDP como una prueba mucho más débil que los de TCP.
Por qué un puerto abierto no es un servicio en funcionamiento
Un puerto abierto demuestra que se puede establecer una conexión TCP. No dice nada sobre lo que pasa después. Todos estos son puertos abiertos con servicios rotos:
- Un servidor web que acepta conexiones en el 443 mientras sirve un 502 porque la aplicación detrás se ha caído.
- Una base de datos escuchando en su puerto pero rechazando todos los inicios de sesión.
- Un servidor de correo que completa el saludo y luego cierra la sesión antes de aceptar un mensaje.
- Un servicio cuyo certificado TLS caducó anoche. El puerto se abre, y todos los clientes rechazan la conexión.
- Un puerto redirigido a la máquina interna equivocada, que acepta conexiones y no responde nada útil.
Así que una comprobación de puerto es el primer paso de un diagnóstico, no todo el diagnóstico. Una vez que el puerto responde, comprueba el protocolo: pide una página y lee el código de estado, haz un inicio de sesión real o envía un mensaje de prueba. El orden importa, porque una comprobación de puerto descarta rápidamente toda la capa de red y te permite dejar de buscar ahí.
Una lista corta de comprobaciones cuando un puerto no se abre
- Confirma que el servicio está escuchando en la máquina, y en la interfaz correcta. Un servicio vinculado a
127.0.0.1no es accesible desde ningún otro sitio, y esa es una causa muy habitual. - Revisa el firewall del host (
ufw,firewalldo el firewall de Windows). - Revisa el grupo de seguridad en la nube o la ACL de red, que es una capa distinta del firewall del host y se olvida con frecuencia.
- Revisa cualquier reenvío de puertos del router o NAT si la máquina no está directamente en una dirección pública.
- Confirma que el proveedor no bloquea ese puerto, sobre todo en el caso de los puertos de correo.
- Vuelve a probar desde una tercera red para descartar tu propio filtrado de salida.
Volver a comprobar de forma periódica
Una comprobación de puerto te dice el estado en este momento, desde donde se haya ejecutado la sonda. Los puertos no suelen cerrarse solos. Las reglas de firewall se editan, los grupos de seguridad se endurecen, los certificados caducan y los servicios dejan de reiniciarse tras un reinicio del sistema, y nada de eso se anuncia. La monitorización periódica de puertos se vuelve a conectar en un intervalo desde varias ubicaciones y avisa en cuanto la conexión deja de tener éxito, lo que también detecta el caso en el que el puerto es accesible desde una región y está filtrado desde otra. Prueba un puerto ahora con la herramienta de comprobación de puertos. Cuando el puerto se abre pero falla el TLS, lo siguiente que conviene leer es cómo comprobar la caducidad de un certificado.