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.