GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo comprobar los puertos de escucha en Linux (Puertos en uso)

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

Este artículo explica cómo usar el netstat , ss y lsof comandos para averiguar qué servicios están escuchando en qué puertos. Las instrucciones se aplican a todos los sistemas operativos basados ​​en Linux y Unix, como macOS.

¿Qué es el puerto de escucha #

?

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 un proceso, que actúa como punto final de comunicación.

Cada puerto de escucha puede estar abierto o cerrado (filtrado) 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 que escucha en los puertos 80 y 443 e intenta instalar Nginx, este último no podrá iniciarse 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 que se escuchan, 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 - Mostrar puertos TCP.
  • -u - Mostrar puertos UDP.
  • -n - Mostrar direcciones numéricas en lugar de resolver hosts.
  • -l - Mostrar solo puertos de escucha.
  • -p - Mostrar el PID y el nombre del proceso del oyente. Esta información solo se muestra si ejecuta el comando como root o sudouser.

La salida se verá así:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      445/sshd            
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      929/master          
tcp6       0      0 :::3306                 :::*                    LISTEN      534/mysqld          
tcp6       0      0 :::80                   :::*                    LISTEN      515/apache2         
tcp6       0      0 :::22                   :::*                    LISTEN      445/sshd            
tcp6       0      0 :::25                   :::*                    LISTEN      929/master          
tcp6       0      0 :::33060                :::*                    LISTEN      534/mysqld          
udp        0      0 0.0.0.0:68              0.0.0.0:*                           966/dhclient  

Las columnas importantes en nuestro caso son:

  • Proto - El protocolo utilizado por el socket.
  • Local Address - La dirección IP y el número de puerto en el que escucha el proceso.
  • PID/Program name - El PID y el nombre del proceso.

Si desea filtrar los resultados, use grep dominio. Por ejemplo, para encontrar qué proceso escucha en el puerto TCP 22, escribiría:

sudo netstat -tnlp | grep :22

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

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

Si la salida está vacía, significa que no hay nada escuchando en el puerto.

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

netstat está obsoleto y se reemplaza con ss y ip , pero sigue siendo de los comandos más utilizados para comprobar las conexiones de red.

Verifique los puertos de escucha con ss #

ss es el nuevo netstat . Carece de algo de netstat características, pero expone más estados TCP y es un poco más rápido. Las opciones de comando son casi las mismas, por lo que la transición de netstat a ss no es difícil.

Para obtener una lista de todos los puertos de escucha con ss escribirías:

sudo ss -tunlp

El resultado es casi el mismo que el informado por netstat :

State    Recv-Q   Send-Q     Local Address:Port      Peer Address:Port                                                                                        
LISTEN   0        128              0.0.0.0:22             0.0.0.0:*      users:(("sshd",pid=445,fd=3))                                                        
LISTEN   0        100              0.0.0.0:25             0.0.0.0:*      users:(("master",pid=929,fd=13))                                                     
LISTEN   0        128                    *:3306                 *:*      users:(("mysqld",pid=534,fd=30))                                                     
LISTEN   0        128                    *:80                   *:*      users:(("apache2",pid=765,fd=4),("apache2",pid=764,fd=4),("apache2",pid=515,fd=4))   
LISTEN   0        128                 [::]:22                [::]:*      users:(("sshd",pid=445,fd=4))                                                        
LISTEN   0        100                 [::]:25                [::]:*      users:(("master",pid=929,fd=14))                                                     
LISTEN   0        70                     *:33060                *:*      users:(("mysqld",pid=534,fd=33))

Verifique los puertos de escucha con lsof #

lsof es una potente 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 de escucha con lsof tipo:

sudo lsof -nP -iTCP -sTCP:LISTEN

Las opciones utilizadas son las siguientes:

  • -n - No convierta los números de puerto en nombres de puerto.
  • -p - No resuelva nombres de host, muestre direcciones numéricas.
  • -iTCP -sTCP:LISTEN - Mostrar solo archivos de red con estado TCP LISTEN.
COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd      445     root    3u  IPv4  16434      0t0  TCP *:22 (LISTEN)
sshd      445     root    4u  IPv6  16445      0t0  TCP *:22 (LISTEN)
apache2   515     root    4u  IPv6  16590      0t0  TCP *:80 (LISTEN)
mysqld    534    mysql   30u  IPv6  17636      0t0  TCP *:3306 (LISTEN)
mysqld    534    mysql   33u  IPv6  19973      0t0  TCP *:33060 (LISTEN)
apache2   764 www-data    4u  IPv6  16590      0t0  TCP *:80 (LISTEN)
apache2   765 www-data    4u  IPv6  16590      0t0  TCP *:80 (LISTEN)
master    929     root   13u  IPv4  19637      0t0  TCP *:25 (LISTEN)
master    929     root   14u  IPv6  19638      0t0  TCP *:25 (LISTEN)

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

  • COMMAND , PID , USER - El nombre, el pid y el usuario que ejecuta el programa asociado al puerto.
  • NAME - El número de puerto.

Para encontrar qué proceso está escuchando en un puerto en particular, por ejemplo, puerto 3306 usarías:

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  534 mysql   30u  IPv6  17636      0t0  TCP *:3306 (LISTEN)

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

Conclusión #

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

Si tiene alguna pregunta o comentario, deje un comentario a continuación.


Linux
  1. Cómo usar rsync avanzado para grandes copias de seguridad de Linux

  2. Cómo usar systemd-nspawn para la recuperación del sistema Linux

  3. Cómo usar el comando Su en Linux

  4. Cómo buscar puertos abiertos en Linux con netstat, lsof y nmap

  5. Comprobar el uso del puerto en Linux

Cómo hacer un escaneo de puertos en Linux

Cómo comprobar los puertos abiertos en Linux

Cómo comprobar que un puerto está abierto en un sistema Linux remoto

Cómo encontrar y cerrar puertos abiertos en Linux

Cómo usar Netcat para escanear puertos abiertos en Linux

¿Cómo comprobar los puertos abiertos en Linux?