Cómo comprobar si un puerto está abierto en Linux

LinuxLinuxBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá técnicas esenciales para verificar el estado de los puertos de red en un sistema Linux. Comprender qué puertos están abiertos es fundamental para la administración de redes, la resolución de problemas y el análisis de seguridad.

Comenzará utilizando el comando netstat con opciones específicas para enumerar todos los puertos TCP y UDP abiertos que se encuentran en estado de escucha. A continuación, confirmará el estado del puerto utilizando el comando ss, más moderno, que proporciona estadísticas de red similares. Finalmente, utilizará el comando nc (netcat) para probar activamente la conectividad a un puerto específico, verificando si es alcanzable y abierto desde la perspectiva de un cliente. Al completar estos pasos, adquirirá habilidades prácticas para identificar y verificar los puertos abiertos en su entorno Linux.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux/RemoteAccessandNetworkingGroup -.-> linux/nc("Networking Utility") linux/RemoteAccessandNetworkingGroup -.-> linux/netstat("Network Monitoring") subgraph Lab Skills linux/nc -.-> lab-558746{{"Cómo comprobar si un puerto está abierto en Linux"}} linux/netstat -.-> lab-558746{{"Cómo comprobar si un puerto está abierto en Linux"}} end

Listar puertos abiertos con netstat -tuln

En este paso, aprenderá cómo listar los puertos abiertos en su sistema Linux utilizando el comando netstat. Comprender qué puertos están abiertos es crucial para la resolución de problemas de red y la seguridad.

El comando netstat (estadísticas de red) es una herramienta de línea de comandos que muestra conexiones de red, tablas de enrutamiento, estadísticas de interfaz, conexiones de enmascaramiento y pertenencias a grupos multicast.

Utilizaremos las siguientes opciones con netstat:

  • -t: Muestra conexiones TCP.
  • -u: Muestra conexiones UDP.
  • -l: Muestra sockets en escucha (puertos abiertos).
  • -n: Muestra direcciones numéricas en lugar de resolver nombres de host y nombres de servicios.

Abra su terminal si no está abierta. Puede encontrar el icono de Xfce Terminal en el lado izquierdo de su escritorio.

Ahora, escriba el siguiente comando y presione Enter:

netstat -tuln

Verá una salida similar a esta:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
udp        0      0 127.0.0.53:53           0.0.0.0:*
udp        0      0 0.0.0.0:68              0.0.0.0:*

Desglosemos la salida:

  • Proto: El protocolo del socket (por ejemplo, tcp, udp).
  • Local Address: La dirección IP local y el número de puerto. El formato es IP_Address:Port. 0.0.0.0 significa que el servicio está escuchando en todas las interfaces IPv4 disponibles, y ::: significa que está escuchando en todas las interfaces IPv6 disponibles.
  • Foreign Address: La dirección IP remota y el número de puerto. 0.0.0.0:* o :::* indica que el socket no está conectado a una dirección remota específica (está en escucha).
  • State: El estado del socket. LISTEN significa que el puerto está abierto y esperando conexiones entrantes.

En la salida de ejemplo, puede ver que el puerto 53 (DNS) y el puerto 22 (SSH) están en estado LISTEN tanto para IPv4 como para IPv6.

Este comando es muy útil para comprobar rápidamente qué servicios están en ejecución y son accesibles en su sistema.

Haga clic en Continuar para pasar al siguiente paso.

Confirmar el estado de los puertos utilizando ss -tuln

En el paso anterior, utilizó netstat para listar los puertos abiertos. Ahora, usemos una herramienta más moderna y a menudo más rápida llamada ss (estadísticas de sockets) para lograr el mismo objetivo. ss está diseñado para reemplazar a netstat y proporciona información más detallada sobre los sockets.

Utilizaremos opciones similares con ss a las que usamos con netstat:

  • -t: Muestra sockets TCP.
  • -u: Muestra sockets UDP.
  • -l: Muestra sockets en escucha (puertos abiertos).
  • -n: Muestra direcciones numéricas en lugar de resolver nombres de host y nombres de servicios.

Abra su terminal si no está abierta.

Escriba el siguiente comando y presione Enter:

ss -tuln

Verá una salida similar a esta:

Netid  State      Recv-Q Send-Q Local Address:Port               Peer Address:Port
udp    UNCONN     0      0      127.0.0.53%lo:53                 0.0.0.0:*
udp    UNCONN     0      0      0.0.0.0:68                       0.0.0.0:*
tcp    LISTEN     0      128    127.0.0.53%lo:53                 0.0.0.0:*
tcp    LISTEN     0      128    0.0.0.0:22                       0.0.0.0:*
tcp    LISTEN     0      128    [::]:22                          [::]:*

La salida es similar a la de netstat, mostrando el protocolo (Netid), el estado (State), la dirección y el puerto locales (Local Address:Port) y la dirección y el puerto del peer (Peer Address:Port).

Puede ver los mismos puertos (53 y 22) listados como LISTEN, lo que confirma los resultados de netstat.

Si bien el formato de salida es ligeramente diferente, ss proporciona información similar sobre los puertos en escucha y generalmente se prefiere en los sistemas Linux modernos debido a su rendimiento y características adicionales (que no cubriremos en este laboratorio introductorio).

Utilizar tanto netstat como ss puede ser útil para cruzar información y familiarizarse con diferentes herramientas disponibles en Linux.

Haga clic en Continuar para pasar al siguiente paso.

Probar la conectividad de puertos con nc -zv

En los pasos anteriores, aprendiste cómo listar los puertos abiertos utilizando netstat y ss. Ahora, usemos el comando nc (netcat) para probar si realmente puedes conectarte a un puerto específico. nc es una utilidad de red versátil que puede leer y escribir en conexiones de red utilizando TCP o UDP.

Utilizaremos nc con las siguientes opciones:

  • -z: Especifica que nc solo debe escanear los demonios en escucha, sin enviar ningún dato a ellos. Esto es útil para comprobar si un puerto está abierto.
  • -v: Habilita la salida detallada, mostrando más detalles sobre el intento de conexión.

Probaremos la conectividad al puerto 22 (SSH), que vimos estaba en escucha en los pasos anteriores. Probaremos la conexión a la máquina local, que se puede referir por la dirección IP 127.0.0.1 o el nombre de host localhost.

Abre tu terminal si no está abierta.

Escribe el siguiente comando y presiona Enter:

nc -zv 127.0.0.1 22

Deberías ver una salida similar a esta:

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

Esta salida confirma que nc pudo conectarse exitosamente al puerto 22 en tu máquina local.

Ahora, intentemos probar un puerto que probablemente no esté abierto, por ejemplo, el puerto 80 (HTTP), ya que no hay un servidor web en ejecución por defecto en este entorno.

Escribe el siguiente comando y presiona Enter:

nc -zv 127.0.0.1 80

Probablemente verás una salida que indique que la conexión fue rechazada o que hubo un tiempo de espera, similar a esta:

nc: connect to 127.0.0.1 port 80 (tcp) failed: Connection refused

Esta salida muestra que nc no pudo conectarse al puerto 80, lo cual es esperado ya que ningún servicio está escuchando en ese puerto.

Usar nc -zv es una forma rápida y fácil de verificar si un puerto específico es alcanzable y está abierto desde tu ubicación actual.

Haz clic en Continuar para completar este laboratorio.

Resumen

En este laboratorio, aprendiste cómo comprobar si un puerto está abierto en Linux utilizando herramientas de línea de comandos. Comenzaste utilizando el comando netstat -tuln para listar todos los puertos TCP y UDP abiertos que se encuentran en estado de escucha, comprendiendo el formato de salida, incluyendo el protocolo, la dirección local, la dirección externa y el estado.

A continuación, confirmaste el estado de los puertos utilizando el comando ss -tuln, que proporciona información similar a netstat, pero a menudo se considera una alternativa más moderna y rápida. Finalmente, aprendiste cómo probar la conectividad a un puerto específico utilizando el comando nc -zv, que intenta establecer una conexión y reporta si el puerto está abierto y es alcanzable. Estos pasos proporcionan habilidades esenciales para la resolución de problemas de red y el análisis de seguridad en sistemas Linux.