GNU/Linux >> Tutoriales Linux >  >> Linux

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

Este artículo explica cómo buscar puertos abiertos mediante los comandos netstat, lsof y nmap para averiguar qué servicios están escuchando en qué puertos.

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.

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. Por encima de todo, un puerto abierto es un puerto de red en el que escucha una aplicación o un proceso, actuando 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.

Comprobar puertos abiertos con netstat

netstat (estadísticas de red ) es una herramienta de línea de comandos para monitorear conexiones de red tanto entrantes como salientes, así como para ver tablas de enrutamiento, estadísticas de interfaz, etc. -problemas relacionados y determinar el rendimiento del tráfico 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 -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:10024         0.0.0.0:*               LISTEN      24919/amavisd    
tcp        0      0 0.0.0.0:587             0.0.0.0:*               LISTEN      967/master   
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      800/tinyproxy       
tcp        0      0 0.0.0.0:465             0.0.0.0:*               LISTEN      967/master          
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      844/pure-ftpd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      768/sshd            
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      967/master          
tcp        0      0 0.0.0.0:993             0.0.0.0:*               LISTEN      1001/dovecot  
tcp6       0      0 :::3306                 :::*                    LISTEN      823/mysqld       
tcp6       0      0 ::1:783                 :::*                    LISTEN      24911/spamd.pid -d  
tcp6       0      0 :::80                   :::*                    LISTEN      781/httpd         
tcp6       0      0 :::21                   :::*                    LISTEN      844/pure-ftpd 
tcp6       0      0 :::22                   :::*                    LISTEN      768/sshd            
tcp6       0      0 :::25                   :::*                    LISTEN      967/master        
tcp6       0      0 :::993                  :::*                    LISTEN      1001/dovecot        
tcp6       0      0 :::995                  :::*                    LISTEN      1001/dovecot        
udp        0      0 0.0.0.0:47967           0.0.0.0:*                           460/avahi-daemon: r 
udp        0      0 127.0.0.1:123           0.0.0.0:*                           472/ntpd            
udp        0      0 0.0.0.0:123             0.0.0.0:*                           472/ntpd     
udp6       0      0 :::123                  :::*                                472/ntpd 

Las opciones utilizadas en este comando tienen el siguiente significado:

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

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 que escucha el proceso.
  • PID/Nombre del programa:el PID y el nombre del proceso.

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

$ sudo netstat -tulnp | grep :22
tcp     0      0 0.0.0.0:22        0.0.0.0:*         LISTEN      768/sshd            
tcp6    0      0 :::22             :::*              LISTEN      768/sshd

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

Para obtener más información sobre netstat comando en Linux, consulte su página de manual.

Comprobar puertos abiertos con lsof

lsof que significa 'LiSt Open Files' se utiliza para averiguar qué archivos están abiertos por qué proceso. 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 escriba:

$ sudo lsof -nP -iTCP -sTCP:LISTEN
COMMAND     PID      USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
sshd        768      root    3u  IPv4    16112      0t0  TCP *:22 (LISTEN)
sshd        768      root    4u  IPv6    16114      0t0  TCP *:22 (LISTEN)
httpd       781      root    4u  IPv6    16328      0t0  TCP *:80 (LISTEN)
httpd       781      root    6u  IPv6    16336      0t0  TCP *:443 (LISTEN)
tinyproxy   800 tinyproxy    0u  IPv4    16750      0t0  TCP *:8080 (LISTEN)
tinyproxy   805 tinyproxy    0u  IPv4    16750      0t0  TCP *:8080 (LISTEN)
mysqld      823     mysql   20u  IPv6    17479      0t0  TCP *:3306 (LISTEN)
pure-ftpd   844      root    4u  IPv4    16289      0t0  TCP *:21 (LISTEN)
pure-ftpd   844      root    5u  IPv6    16290      0t0  TCP *:21 (LISTEN)
master      967      root   13u  IPv4    17225      0t0  TCP *:25 (LISTEN)
master      967      root  103u  IPv4    17319      0t0  TCP 127.0.0.1:10025 (LISTEN)
dovecot    1001      root   24u  IPv4    18600      0t0  TCP *:995 (LISTEN)
dovecot    1001      root   37u  IPv6    18623      0t0  TCP *:993 (LISTEN)
httpd     24344    apache    4u  IPv6    16328      0t0  TCP *:80 (LISTEN)
httpd     24344    apache    6u  IPv6    16336      0t0  TCP *:443 (LISTEN)
/usr/bin/ 24911      root    5u  IPv4 25208447      0t0  TCP 127.0.0.1:783 (LISTEN)
/usr/bin/ 24911      root    6u  IPv6 25208449      0t0  TCP [::1]:783 (LISTEN)
spamd     24913      root    5u  IPv4 25208447      0t0  TCP 127.0.0.1:783 (LISTEN)
spamd     24913      root    6u  IPv6 25208449      0t0  TCP [::1]:783 (LISTEN)
/usr/sbin 24919    amavis    5u  IPv4 25208583      0t0  TCP 127.0.0.1:10024 (LISTEN)
/usr/sbin 24919    amavis    6u  IPv6 25208584      0t0  TCP [::1]:10024 (LISTEN)
smtpd     28403   postfix    6u  IPv4    17225      0t0  TCP *:25 (LISTEN)
smtpd     28403   postfix    7u  IPv6    17226      0t0  TCP *:25 (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.

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

$ sudo lsof -nP -iTCP:3306 -sTCP:LISTEN
COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  823 mysql   20u  IPv6  17479      0t0  TCP *:3306 (LISTEN)

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

Para obtener más información sobre lsof comando en Linux, consulte su página de manual.

Buscar puertos abiertos con nmap

nmap o Mapeador de red , es una herramienta de línea de comandos de Linux de código abierto para la exploración de redes y la auditoría de seguridad. Con nmap, los administradores de servidores pueden revelar rápidamente hosts y servicios, buscar problemas de seguridad y buscar puertos abiertos.

nmap los comandos se pueden usar para verificar que un solo puerto o una serie de puertos estén abiertos.

Aquí se explica cómo escanear el puerto 80 en el sistema de destino:

$ sudo nmap -p 80 192.168.0.1
Nmap scan report for 192.168.0.1
Host is up (0.000073s latency).
PORT   STATE SERVICE
80/tcp open  http

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

Escanee los puertos del 1 al 200 en el sistema de destino:

$ sudo nmap -p 1-200 192.168.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2020-08-21 16:42 EEST
Nmap scan report for 192.168.0.1
Host is up (0.0000080s latency).
Not shown: 196 closed ports
PORT   STATE SERVICE
21/tcp open  ftp
22/tcp open  ssh
25/tcp open  smtp
80/tcp open  http

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

Escanea (Rápido) los puertos más comunes:

$ sudo nmap -F 192.168.0.1
Starting Nmap 6.40 ( http://nmap.org ) at 2020-08-21 16:44 EEST
Nmap scan report for 192.168.0.1
Host is up (0.000014s latency).
Not shown: 89 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
25/tcp   open  smtp
80/tcp   open  http
443/tcp  open  https
465/tcp  open  smtps
587/tcp  open  submission
993/tcp  open  imaps
995/tcp  open  pop3s
3306/tcp open  mysql
8080/tcp open  http-proxy

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

Línea de fondo

En conclusión, verificar qué puertos están abiertos y qué información se puede obtener de los servicios que aceptan conexiones en esos puertos le brinda la información que necesita para bloquear su servidor.

Por ejemplo, cualquier información extraña que se filtre fuera de su máquina puede ser utilizada por un usuario malintencionado para intentar explotar vulnerabilidades conocidas o desarrollar otras nuevas. Cuanto menos puedan averiguar, mejor.


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

  2. Cómo verificar la versión del sistema operativo y Linux

  3. Cómo comprobar los puertos de escucha/abiertos con Netstat en Linux

  4. Compruebe los puertos de escucha con netstat

  5. ¿Cómo comprobar la contraseña con Linux?

Cómo buscar puertos abiertos en Debian 10

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

Cómo encontrar y cerrar puertos abiertos en Linux

Cómo comprobar la versión del sistema operativo con la línea de comandos de Linux

Cómo verificar todos los puertos abiertos en su sistema Linux

¿Cómo comprobar los puertos abiertos en Linux?