Comando nmap en Linux: Escaneo de Puertos, Servicios y Redes
El Comando nmap en Linux es una herramienta poderosa para descubrir los puertos abiertos en hosts locales o remotos.
Puede ser instalado con cualquier gestor de paquetes. A diferencia de las herramientas netstat, ss y lsof que verifican los sockets o archivos abiertos, nmap realiza una búsqueda de puertos abiertos por el método de "prueba y error", intentando conectarse en los puertos conocidos, y si encuentra uno abierto, verifica qué tipo de servicio ofrece el puerto.
Usando NMAP para Encontrar Puertos Abiertos en una Red
Para verificar los puertos abiertos del 1 al 1000:
$ nmap localhostStarting Nmap 7.70 ( https://nmap.org ) at 2019-10-23 06:01 -03Nmap scan report for localhost (127.0.0.1)Host is up (0.000098s latency).Not shown: 999 closed portsPORT STATE SERVICE22/tcp open sshNmap done: 1 IP address (1 host up) scanned in 0.05 seconds
Un pequeño script puede ser escrito para comparar los puertos abiertos en relación con un archivo previo:
Primero se debe crear el archivo previo para servir de comparación en el futuro:
$ nmap localhost | grep open > original
El script a continuación ejecuta nmap y compara el resultado con el archivo "original". Si hay diferencia, se envía un correo electrónico:
#!/bin/bashnmap localhost | grep open > atualdiff original atualif [ $? -eq 0 ]; then echo “nada mudou”else mail [email protected] < atualfi
Verificar puertos reservados con nmap
La opción "-v" verifica todos los puertos TCP reservados en la máquina scanme.nmap.org en modo detallado:
$ nmap -v scanme.nmap.org
Starting Nmap 6.40 ( http://nmap.org ) at 2021-12-08 22:01 -03
Initiating Ping Scan at 22:01
Scanning scanme.nmap.org (45.33.32.156) [2 ports]
Completed Ping Scan at 22:01, 0.07s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 22:01
Completed Parallel DNS resolution of 1 host. at 22:01, 0.02s elapsed
Initiating Connect Scan at 22:01
Scanning scanme.nmap.org (45.33.32.156) [1000 ports]
Discovered open port 80/tcp on 45.33.32.156
Discovered open port 22/tcp on 45.33.32.156
Discovered open port 9929/tcp on 45.33.32.156
Discovered open port 31337/tcp on 45.33.32.156
Completed Connect Scan at 22:01, 1.07s elapsed (1000 total ports)
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.075s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
9929/tcp open nping-echo
31337/tcp open Elite
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 1.26 seconds
Escaneo SYN con nmap
La opción "-sS" inicia un escaneo SYN sigiloso en cada máquina en la red de tamaño /24 donde reside la dirección scanme.nmap.org.
La opción "-O" determinará qué sistema operativo se está ejecutando en cada host que está funcionando. Esto requiere privilegios de root debido al escaneo SYN y a la detección del sistema operativo:
$ sudo nmap -sS -O scanme.nmap.org/24
Starting Nmap 6.40 ( http://nmap.org ) at 2021-12-08 22:04 -03
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.070s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
9929/tcp open nping-echo
31337/tcp open Elite
Device type: general purpose|WAP|webcam|firewall|storage-misc
Running (JUST GUESSING): Linux 2.6.X|3.X|2.4.X (91%), Tandberg embedded (86%), Fortinet Linux 2.6.X (86%), IPFire Linux 2.6.X (85%), Check Point Linux 2.6.X (85%), Axcient embedded (85%)
OS CPE: cpe:/o:linux:linux_kernel:2.6.32 cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:2.4 cpe:/h:tandberg:vcs cpe:/o:fortinet:linux_kernel:2.6 cpe:/o:ipfire:linux:2.6.32 cpe:/o:linux:linux_kernel:2.6.18
Aggressive OS guesses: Linux 2.6.32 - 2.6.35 (91%), Linux 2.6.32 - 2.6.39 (91%), Linux 2.6.32 - 3.0 (90%), Linux 2.6.18 (89%), Linux 3.2 - 3.6 (89%), Linux 2.6.32 (88%), Linux 3.1.9 (88%), Linux 2.6.39 (88%), Linux 2.6.32 - 2.6.33 (88%), Linux 2.6.9 - 2.6.27 (88%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 14 hops
(...)
Verificar puertos específicos con nmap
La opción "-sV" realiza la enumeración del host y un escaneo TCP en la primera mitad de la subred 198.116.0.0/16. Esto prueba si los sistemas ejecutan SSH (22), DNS (53), POP3 (110) o IMAP (143) en sus puertos estándar o cualquier cosa en el puerto 4564. Para cualquiera de estos puertos encontrados abiertos, se usa la detección de versión para determinar qué aplicación se está ejecutando:
$ nmap -sV -p 22,53,110,143,4564 198.116.0-255.1-127
Starting Nmap 6.40 ( http://nmap.org ) at 2021-12-08 22:08 -03
Nmap scan report for ip-172-30-0-191.ec2.internal (172.30.0.191)
Host is up (0.00016s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
53/tcp closed domain
110/tcp closed pop3
143/tcp closed imap
4564/tcp closed unknown
(...)
Escaneo de hosts aleatorios con nmap
En este ejemplo nmap selecciona 100 hosts aleatoriamente y verifica si hay servidores web (puerto 80). La enumeración del host se desactiva con -Pn:
$ nmap -v -iR 100 -Pn -p 80
Starting Nmap 6.40 ( http://nmap.org ) at 2021-12-08 22:11 -03
Initiating Parallel DNS resolution of 10 hosts. at 22:11
Completed Parallel DNS resolution of 10 hosts. at 22:11, 1.20s elapsed
(...)
Guardar datos de nmap en XML
En este ejemplo nmap verifica 4096 IPs para cualquier servidor web (puerto 80 - sin hacer ping) y guarda la salida en formato XML:
$ nmap -Pn -p80 -oX pb-port80scan.xml 216.163.128.20/20
Descubre si el objetivo usa algún firewall
La opción "-sA" realiza el escaneo para verificar si el host usa algún firewall linux para filtrar paquetes:
$ sudo nmap -sA facebook.comStarting Nmap 6.40 ( http://nmap.org ) at 2021-12-08 22:29 -03Nmap scan report for facebook.com (157.240.229.35)Host is up (0.00055s latency).rDNS record for 157.240.229.35: edge-star-mini-shv-02-iad3.facebook.comAll 1000 scanned ports on facebook.com (157.240.229.35) are filtered
Descubre hosts activos con escaneo de ping
La opción "-sP" realiza un escaneo de tipo ping en una red:
$ nmap -sP 172.30.0.0/24Starting Nmap 6.40 ( http://nmap.org ) at 2021-12-08 22:31 -03Nmap scan report for go.universobh.com.br (172.30.0.30)Host is up (0.00037s latency).Nmap scan report for ip-172-30-0-191.ec2.internal (172.30.0.191)Host is up (0.00035s latency).Nmap done: 256 IP addresses (2 hosts up) scanned in 5.04 seconds
Esta categoría de escaneo no siempre es eficaz, ya que la mayoría de las redes protege sus hosts de ping.
Escanea los posibles puertos abiertos
La opción "--open" de nmap muestra los posibles puertos abiertos de un host:
$ nmap --open google.ptStarting Nmap 6.40 ( http://nmap.org ) at 2021-12-08 22:33 -03Nmap scan report for google.pt (172.217.15.99)Host is up (0.015s latency).rDNS record for 172.217.15.99: iad30s21-in-f3.1e100.netNot shown: 998 filtered portsPORT STATE SERVICE80/tcp open http443/tcp open https
Prueba rápida de puertos abiertos con nmap
La opción "-T5" realiza un escaneo rápido de posibles puertos abiertos:
$ nmap -T5 facebook.comStarting Nmap 6.40 ( http://nmap.org ) at 2021-12-08 22:35 -03Nmap scan report for facebook.com (157.240.229.35)Host is up (0.00068s latency).rDNS record for 157.240.229.35: edge-star-mini-shv-02-iad3.facebook.comNot shown: 996 filtered portsPORT STATE SERVICE80/tcp open http443/tcp open https843/tcp closed unknown5222/tcp closed xmpp-client
Precaución al usar nmap
Precaución al ejecutar nmap en hosts hospedados en Amazon AWS, Google Cloud o Microsoft Azure, ya que verifican los logs en sus firewalls de borde para confirmar que no hay actividad sospechosa de "PenTest" en sus redes.
Nmap Guía Rápida
Seleccionar objetivos con NMAP
| Escaneo de IP único | nmap 192.168.1.1 |
| Escaneo de un host | nmap www.testhostname.com |
| Escaneo de un rango de IPs | nmap 192.168.1.1-20 |
| Escaneo de una subred | nmap 192.168.1.0/24 |
| Escaneo desde un archivo de texto | nmap -iL list-of-ips.txt |
Seleccionar puertos con NMAP
| Escaneo de un puerto | nmap -p 22 192.168.1.1 |
| Escaneo de un rango de puertos | nmap -p 1-100 192.168.1.1 |
| Escaneo de los 100 puertos comunes (rápido) | nmap -F 192.168.1.1 |
| Escaneo de todos los 65535 puertos | nmap -p- 192.168.1.1 |
Seleccionar tipos de escaneo con NMAP
| Escaneo usando TCP connect | nmap -sT 192.168.1.1 |
| Escaneo usando TCP SYN (predeterminado) | nmap -sS 192.168.1.1 |
| Escaneo de puertos UDP | nmap -sU -p 123,161,162 192.168.1.1 |
| Escaneo de puertos - ignora descubrimiento | nmap -Pn -F 192.168.1.1 |
Detección de SO (sistema operativo) con NMAP
| Detecta SO y Servicios | nmap -A 192.168.1.1 |
| Detecta servicios | nmap -sV 192.168.1.1 |
| Detecta servicios de forma agresiva | nmap -sV --version-intensity 5 192.168.1.1 |
| Detecta servicios por el banner | nmap -sV --version-intensity 0 192.168.1.1 |
Formatos de salida de NMAP
| Guardar en archivo | nmap -oN outputfile.txt 192.168.1.1 |
| Guardar en XML | nmap -oX outputfile.xml 192.168.1.1 |
| Guardar en TXT para grep | nmap -oG outputfile.txt 192.168.1.1 |
| Guardar en todos los formatos | nmap -oA outputfile 192.168.1.1 |
Escaneo HTTP con NMAP
| Obtener los títulos de las páginas HTML | nmap --script=http-title 192.168.1.0/24 |
| Obtener las cabeceras HTTP | nmap --script=http-headers 192.168.1.0/24 |
| Encontrar aplicaciones web | nmap --script=http-enum 192.168.1.0/24 |
Aprende mucho más sobre Linux en nuestro curso en línea. Puedes realizar la inscripción aquí. Si ya tienes una cuenta, o quieres crear una, simplemente ingresa o crea tu usuario aquí.
¿Te gustó? Comparte
Eso fue solo una pieza. El curso enseña el camino completo — desde tu primer comando hasta el día del examen.