Tutoriales

5 mejores formas de comprobar si un puerto está abierto en Linux

Acaba de implementar un servicio, activar reglas de firewall o configurar un proxy inverso y ahora desea confirmar que realmente se puede acceder a un puerto específico. El problema es telnet No hay instalación y parece innecesario instalar paquetes adicionales solo para pruebas de conexión rápidas.

La buena noticia es que no es necesario telnetporque La mayoría de las distribuciones de Linux Ya se incluyen herramientas para probar las conexiones de los puertos y algunas no requieren ninguna instalación adicional.

Ya sea que esté solucionando problemas mysql conectado, verifique si nginx escuchando el puerto 443o para verificar que los cambios en el firewall funcionan según lo esperado, estas herramientas pueden indicarle rápidamente lo que está sucediendo.

Boletín semanal de TechMint

conseguir Aprenda el curso intensivo de 7 días de Linux Únase a más de 34.000 profesionales de Linux que leen gratis todos los jueves.

Revise su correo electrónico para ver el enlace mágico para comenzar.

Algo salió mal. Por favor inténtalo de nuevo.

Por qué Telnet queda obsoleto al probar puertos en Linux

durante muchos años, telnet Es la forma estándar de comprobar si el puerto está abierto y acepta conexiones. Si desea comprobar si se puede acceder a un servidor web, base de datos o servicio de correo, telnet Por lo general, la gente intenta el primer comando.

Pero las cosas han cambiado y la mayoría de las distribuciones Linux modernas ya no se instalan. telnet De forma predeterminada, especialmente en implementaciones mínimas de servidor. Si ejecuta el comando hoy, normalmente verá un simple command not found información.

Incluso si se puede utilizar, telnet No siempre es la herramienta de resolución de problemas más útil. Puede indicarle si la conexión se realizó correctamente, pero aparte de eso, proporciona poca información.

Afortunadamente, Linux ofrece varias opciones mejores. Algunos ya están instalados en la mayoría de los sistemas, mientras que otros se pueden agregar mediante la instalación de un solo paquete. Estas herramientas no solo prueban la conectividad, sino que también brindan mensajes de error más claros, detalles de conexión y una solución de problemas más rápida si algo no funciona como se esperaba.

En las siguientes secciones, cubriremos la forma más práctica de probar puertos en un sistema Linux sin depender de telnet.

Si todavía estás aprendiendo cómo funcionan los puertos SSH entre bastidores, Curso completo SSH en Pro TecMint Cobertura realmente profunda sobre reenvío de puertos, firewalls y depuración de conexiones.

1. Utilice Bash /dev/tcp para probar los puertos abiertos

Si está trabajando con un servidor Linux mínimo y solo necesita una respuesta rápida a «¿Se puede llegar al puerto?«Bash tiene una función incorporada que puede ayudar. Proporciona un pseudodispositivo especial llamado /dev/tcp Le permite abrir conexiones TCP directamente desde el shell sin instalar ninguna herramienta adicional.

Ejecute el siguiente comando:

(echo >/dev/tcp/192.168.1.10/80) &>/dev/null && echo "Port open" || echo "Port closed"

Si la conexión es exitosa, verá:

Port open

Si el puerto está bloqueado, cerrado o inaccesible, verá:

Port closed

En este ejemplo, el comando intenta conectarse al puerto 80 existir 192.168.1.10lo cual es especialmente útil cuando inicias sesión en un servidor remoto que no tiene una herramienta similar telnet, CNCo mapa Instalar.

Por ejemplo, para probar si HTTPS Para acceder a los servicios en un sitio web remoto, ejecute:

(echo >/dev/tcp/example.com/443) &>/dev/null && echo "Port open" || echo "Port closed"

este /dev/tcp Esta función solo está disponible en Bash. Si su script se ejecuta bajo sh, dashu otro shell, el comando fallará incluso si /dev/tcp El camino parece existir.

Si no estás seguro de qué shell estás usando, ejecuta la prueba explícitamente a través de Bash:

bash -c '(echo >/dev/tcp/example.com/443) &>/dev/null && echo "Port open" || echo "Port closed"'

a pesar de /dev/tcp Sin proporcionar información detallada sobre la solución de problemas, es una de las formas más rápidas de verificar que un puerto TCP acepta conexiones y es ideal para una verificación rápida en servidores livianos o recientemente implementados.

Si esto le evita instalar paquetes innecesarios en sus servidores de producción, Quién todavía accede primero a telnet.

2. Utilice Netcat (nc) para comprobar los puertos abiertos

si /dev/tcp Se siente un poco demasiado básico Carolina del Norte (gato de Internet) A menudo, la siguiente herramienta que utiliza un administrador es liviana, fácil de usar y proporciona comentarios más útiles al solucionar problemas de conexiones de red.

gato de internet A menudo se le conoce como «Navaja suiza”red porque puede hacer de todo, desde probar puertos hasta transferir datos entre sistemas.

Para comprobar si el puerto está abierto, utilice -z Opción (E/S cero):

nc -zv 192.168.1.10 22

Ejemplo de salida:

Connection to 192.168.1.10 22 port [tcp/ssh] succeeded!

Este comando utiliza dos indicadores importantes:

  • -z : Realiza una prueba de conexión sin enviar ningún dato.
  • -v : muestra resultados detallados para que puedas ver los resultados.

a diferencia de telnetsimplemente se conecta y te deja mirando una pantalla en blanco, Netcat Le indica inmediatamente si la conexión se realizó correctamente o falló.

Probemos un puerto sin ningún servicio en ejecución:

nc -zv 192.168.1.10 3306

Ejemplo de salida:

nc: connect to 192.168.1.10 port 3306 (tcp) failed: Connection refused

uno Conexión rechazada Los mensajes son en realidad información útil.

  • El servidor de destino es accesible.
  • La ruta de la red está funcionando.
  • Actualmente no hay nada escuchando en este puerto.

Muchas distribuciones de Linux Ya incluido Netcatpero algunas instalaciones mínimas de servidor no lo hacen.

sudo apt install netcat-openbsd -y     [On Debian, Ubuntu and Mint]
sudo dnf install nmap-ncat -y          [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

Después de la instalación, nc Se convierte en una de las herramientas de resolución de problemas más útiles en cualquier servidor Linux.

3. Utilice Nmap para escanear puertos abiertos

Cuando necesitas más que un simple «Abierto» o»cierre» respuesta, nmap es una herramienta que se puede utilizar porque es una de las herramientas de escaneo de red más populares y es ampliamente utilizada por administradores de sistemas, ingenieros de redes y profesionales de seguridad.

a diferencia de nc o carnaval /dev/tcp método, nmap Se pueden identificar servicios, detectar puertos filtrados y proporcionar una imagen más clara de lo que está sucediendo en el sistema remoto.

si nmap Aún no está instalado, puede agregarlo usando el Administrador de paquetes.

sudo apt install nmap -y     [On Debian, Ubuntu and Mint]
sudo dnf install nmap -y          [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

Para comprobar si el puerto 80 está abierto en el servidor, ejecute:

nmap -p 80 192.168.1.10

Ejemplo de salida:

Starting Nmap 7.93 (  )
Nmap scan report for 192.168.1.10
Host is up (0.00023s latency).

PORT   STATE  SERVICE
80/tcp open   http

Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds

La columna más importante aquí es estado:

estadosignificado
AbiertoEl servicio está escuchando y aceptando conexiones.
cierreSe puede acceder al host, pero no hay ningún servicio escuchando en el puerto.
filtradoEl firewall bloquea el análisis, por lo que Nmap no puede determinar el estado del puerto.

También puede escanear una variedad de puertos con un solo comando:

nmap -p 20-25 192.168.1.10

Ejemplo de salida:

PORT   STATE  SERVICE
20/tcp closed ftp-data
21/tcp closed ftp
22/tcp open   ssh
23/tcp closed telnet
24/tcp closed priv-mail
25/tcp closed smtp

Una de las características más útiles de Nmap es la detección de versiones, simplemente agregue -sV opción, Nmap intentará identificar el software que se ejecuta detrás de un puerto abierto.

nmap -p 22 -sV 192.168.1.10

En lugar de simplemente informar el puerto 22 Cuando está activado, Nmap puede reconocer Versión del servidor SSH y otros detalles del servicio.

4. Utilice Curl para probar los puertos HTTP y HTTPS

Cuando estás solucionando problemas en un servidor web, no siempre es suficiente saber que un puerto está abierto. Un puerto puede aceptar conexiones cuando la aplicación web detrás del puerto devuelve un error, proporciona contenido incorrecto o falla por completo.

eso esta ahí curl llegar a ser útil.

a diferencia de nc o /dev/tcp, curl No solo probar conexiones TCP. En realidad, envía una solicitud HTTP y muestra cómo responde el servidor web, lo que la convierte en una de las mejores herramientas para verificar puertos. 80 (HTTP) y 443 (HTTPS).

Para probar un servidor web escuchando en el puerto 80, ejecute:

curl -v --max-time 5 

Ejemplo de salida:

* Trying 192.168.1.10:80...
* Connected to 192.168.1.10 (192.168.1.10) port 80 (#0)
> GET / HTTP/1.1
> Host: 192.168.1.10
> User-Agent: curl/7.88.1
> Accept: */*
>

To check a secure web server on port 443, use:

curl -v --max-time 5 

Si el servicio HTTPS funciona correctamente, verá los detalles de la negociación SSL seguidos de los encabezados de respuesta HTTP.

Si esto elimina "rechazar" y"se acabó el tiempo"Para ti, ¿Quién sigue adivinando sobre las reglas del firewall?

5. Verifique la conectividad del puerto usando Python

Si necesita verificar el puerto desde el script, Pitón Es una buena opción, la mayoría de las distribuciones de Linux ya lo incluyen y su módulo de socket incorporado facilita las pruebas de puertos.

Este método es particularmente útil cuando crea comprobaciones de estado de ejecución, scripts de verificación de implementación o herramientas de monitoreo simples.

Para probar un solo puerto, ejecute:

python3 -c "import socket; s=socket.socket(); s.settimeout(3); result=s.connect_ex(('192.168.1.10', 5432)); print('open' if result == 0 else 'closed'); s.close()"

Ejemplo de salida:

open

En este ejemplo, Python intenta conectarse al puerto 5432que es comúnmente utilizado por PostgreSQL.

Algunas cosas están sucediendo detrás de escena:

  • socket.socket() Establezca un socket TCP.
  • settimeout(3) Limite los intentos de conexión a tres segundos.
  • connect_ex() Intente cablear y devolver un código de estado en lugar de generar una excepción.
  • El valor devuelto es 0 Indica una conexión exitosa.

En un entorno real, a menudo es necesario verificar varios servicios después de la implementación. Por ejemplo, es posible que desees confirmar SSH, protocolo HTTPy mysql Todos son accesibles.

El siguiente script comprueba múltiples combinaciones de host y puerto:

python3  {status}")
    s.close()
EOF

Ejemplo de salida:

192.168.1.10:22 -> open
192.168.1.10:80 -> open
192.168.1.10:3306 -> closed

Esto recorrerá el inventario de pares de host/puerto e imprimirá el estado de cada par de host/puerto, que es exactamente lo que desea en un inventario previo a la implementación o una simple verificación del tiempo de actividad en un trabajo cron.

Si desea obtener más información sobre este script Bash automatizado, Secuencias de comandos Bash para principiantes El curso Pro TecMint proporciona una guía paso a paso para escribir scripts de monitoreo reales.

Cuándo usar qué herramienta

Aquí hay una referencia rápida para elegir la herramienta adecuada:

CondiciónHerramientas recomendadas
No se requiere instalación adicional, solo una respuesta rápida de sí o no/dev/tcp en un fuerte golpe
Comprobaciones TCP rápidas con tiempos de esperanc -zv -w 3
Es necesario distinguir entre puertos abiertos, puertos filtrados y puertos cerrados.nmap
Probando HTTP/HTTPS y quiero ver códigos de respuestacurl
Escribir un guión o un control de salud.Pitón socket módulo

Si esta comparación le ayuda a elegir la herramienta adecuada la primera vez, Quien instala paquetes solo para probar puertos.

en conclusión

Hay algunas formas sencillas de probar la conectividad de puertos en Linux sin utilizar telnet. Para ver estas herramientas en acción, intente probar el servicio ejecutándose en su propio sistema. Por ejemplo, si SSH está habilitado, puede verificar el puerto 22 usando el siguiente comando:

nc -zv -w 3 localhost 22

Deberías ver que la conexión se realiza correctamente casi de inmediato. Luego pruebe un puerto sin un servicio escuchando y compare los resultados. A continuación se muestra una forma sencilla de comprender la diferencia entre puertos abiertos, conexiones denegadas y puertos filtrados.

¿Alguna vez ha estado en una situación en la que una herramienta le dio resultados diferentes a la otra? Esto normalmente indica que el firewall está involucrado de una manera no obvia. Deja lo que ves en los comentarios y arreglémoslo juntos..

Si este artículo fue útil, Con alguien de tu equipo.

Boletín semanal de TechMint

conseguir Aprenda el curso intensivo de 7 días de Linux Únase a más de 34.000 profesionales de Linux que leen gratis todos los jueves.

Revise su correo electrónico para ver el enlace mágico para comenzar.

Algo salió mal. Por favor inténtalo de nuevo.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba