Cómo comprobar los puertos en uso (abiertos) en Linux

27 feb 2021 4 min di lettura
Cómo comprobar los puertos en uso (abiertos) en Linux
Indice dei contenuti

Introducción

Al intentar solucionar problemas de conectividad de red o problemas específicos de la aplicación, una de las primeras cosas que debe verificar (verificar) debe ser qué puertos están realmente en uso en el sistema y qué aplicaciones están escuchando en un puerto específico.

Este artículo explica cómo averiguar y controlar qué servicios están escuchando en los puertos utilizando los comandos netstat, sse y lsof. Las instrucciones son aplicables a todos los sistemas operativos basados en Linux y Unix, como macOS.

Los puertos en uso

El puerto de red se identifica por su número, la dirección IP asociada y el tipo de protocolo de comunicación como TCP o UDP.

El puerto de escucha es un puerto de red en el que escucha una aplicación o proceso, que actúa como un punto final de comunicación.

Cada puerto de escucha se puede abrir o cerrar (filtrar) usando un firewall. En términos generales, un puerto abierto es un puerto de red que acepta paquetes entrantes desde ubicaciones remotas.

No puede tener dos servicios escuchando el mismo puerto en la misma dirección IP.

Por ejemplo, si está ejecutando un servidor web Apache escuchando en los puertos 80 y 443 e intentando instalar Nginx, el próximo arranque fallará porque los puertos HTTP y HTTPS ya están en uso.

Verifique los puertos de escucha con netstat

netstat es una herramienta de línea de comandos que puede proporcionar información sobre las conexiones de red.

Para enumerar todos los puertos TCP o UDP de escucha, incluidos los servicios que usan los puertos y el estado del socket, use el siguiente comando:

sudo netstat -tunlp

Las opciones utilizadas en este comando tienen el siguiente significado:

  • -t: muestra los puertos TCP.
  • -u: muestra los puertos UDP.
  • -n: muestra direcciones numéricas en lugar de resolver hosts.
  • -l: muestra solo los puertos de escucha.
  • -p: muestra el PID y el nombre del proceso. Esta información se muestra solo si ejecuta el comando como usuario root o sudo.

La salida se verá así:

Active Internet connections (only servers)
 Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
 tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 5469/systemd-resolv
 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1304/sshd
 tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 21662/mysqld
 tcp6 0 0:::22:::* LISTEN 1304/sshd
 udp 0 0 127.0.0.53:53 0.0.0.0:* 5469/systemd-resolv
 udp 0 0 0.0.0.0:68 0.0.0.0:* 811/dhclient

Las columnas importantes en nuestro caso son:

  • Proto: el protocolo utilizado por el socket.
  • Dirección local: la dirección IP y el número de puerto en el que escucha el proceso.
  • PID /Nombre del programa: el PID y el nombre del proceso.

Si desea filtrar los resultados, use el comando grep. Por ejemplo, para encontrar qué proceso está escuchando en el puerto TCP 22, escriba:

sudo netstat -tnlp | grep:22

El resultado muestra que en esta máquina el servidor SSH usa el puerto 22:

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1304/sshd
 tcp6 0 0:::22:::* LISTEN 1304/sshd

Si la salida está vacía, nada está escuchando en el puerto.

También puede filtrar la lista según criterios como PID, protocolo, estado, etc.

netstat es obsoleto y reemplazado por ss e ip, pero sigue siendo uno de los comandos más utilizados para verificar las conexiones de red.

Compruebe los puertos de escucha con ss

ss es el nuevo netstat. Carece de algunas de las características de netstat pero expone más estados de TCP y es un poco más rápido. Las opciones de comando son prácticamente las mismas, por lo que cambiar de netstat a ss no es difícil.

Para obtener una lista de todos los puertos de escucha con tipo ss:

sudo ss -tunlp

El resultado es similar al informado por netstat:

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:* users:(("systemd-resolve",pid=5469,fd=12))
 udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:* users:(("dhclient",pid=811,fd=6))
 tcp LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=5469,fd=13))
 tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1304,fd=3))
 tcp LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=21662,fd=28))
 tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1304,fd=4))

Compruebe los puertos de escucha con lsof

lsof es una poderosa utilidad de línea de comandos que proporciona información sobre archivos abiertos por procesos.

En Linux, todo es un archivo. Puede pensar en un socket como un archivo que escribe en la red.

Para obtener una lista de todos los puertos TCP que escuchan con el comando lsof:

sudo lsof -nP -iTCP -sTCP:LISTEN

Las opciones utilizadas son las siguientes:

  • -n: no convierte números de puerto en nombres de puerto.
  • -p: no resuelve nombres de host, muestra direcciones numéricas.

-iTCP -sTCP: LISTEN: muestra solo archivos de red con estado TCP LISTEN.

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
 sshd 1304 root 3u IPv4 19961 0t0 TCP *:22 (LISTEN)
 sshd 1304 root 4u IPv6 19976 0t0 TCP *:22 (LISTEN)
 systemd-r 5469 systemd-resolve 13u IPv4 3618073 0t0 TCP 127.0.0.53:53 (LISTEN)
 mysqld 21662 mysql 28u IPv4 46021 0t0 TCP 127.0.0.1:3306 (LISTEN)

La mayoría de los nombres de las columnas de salida se explican por sí mismos:

  • COMMAND, PID, USER: el nombre, PID y usuario que ejecuta el programa asociado con el puerto.
  • NAME: el número de puerto.

Para encontrar qué proceso está escuchando en un puerto en particular, por ejemplo, en el puerto 3306, use el siguiente comando:

sudo lsof -nP -iTCP:3306 -sTCP:LISTEN

El resultado muestra que el servidor MySQL usa el puerto 3306:

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
 mysqld 21662 mysql 28u IPv4 46021 0t0 TCP 127.0.0.1:3306 (LISTEN)

Para obtener más información, visite la página de manual de lsof y lea todas las otras opciones poderosas de esta herramienta.

Conclusión

Hemos visto varios comandos que puede usar para verificar qué puertos están en uso en su sistema y cómo encontrar qué proceso está escuchando en un puerto específico.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.