Si está buscando un tutorial sobre el comando nmap en Linux, me encantaría darle la bienvenida al mundo de la seguridad de la red. La utilidad Nmap, que significa Network Map, se usa para encontrar puertos abiertos en un dispositivo conectado a la red. Los usos potenciales y las opciones para explorar con el comando nmap son casi infinitos debido a la flexibilidad que ofrece esta utilidad.
Pero repasemos algunas de las opciones más comunes, que lo ayudarán a comenzar a escanear sus primeras redes y aprender más sobre los puertos que están abiertos para su dispositivo personal o servidores.
Uso predeterminado del comando nmap en Linux:
nmap [options] <target IP or hostname>
Tabla de contenido
- 1. Métodos básicos de escaneo de Nmap
- 2. Método de escaneo avanzado de Nmap
- 3. Escanear sigilosamente
1. Métodos básicos de escaneo de Nmap
Los tipos más básicos de escaneos son el escaneo TCP y UDP, el escaneo SYN y el escaneo Ping. Lo que estos métodos de escaneo hacen esencialmente es crear y enviar un tipo específico de paquete a la IP de destino y esperar una respuesta. Según la respuesta, el comando nmap en Linux determinó si un puerto está abierto o cerrado y el estado de la máquina de destino.
Escaneo TCP Connect () usando el comando Nmap en Linux
El nombre de la exploración denota la llamada al sistema connect() que realizan todos los sistemas UNIX cuando realiza la programación de sockets. Este escaneo usa la misma llamada al sistema para determinar los puertos abiertos o cerrados. ¿Como funciona? Es simple. La utilidad nmap envía una solicitud de conexión a cada puerto y espera a que se complete la conexión TCP. Si se completa, el puerto está abierto. Si no se completa, el puerto está cerrado.
nmap -sT <IP or hostname>
Como puede ver en la captura de pantalla anterior, escaneamos el host local y obtenemos los puertos que están abiertos en el sistema. En este caso, solo el puerto SSH 22 está abierto para nuestro servidor.
Escaneo UDP usando el comando nmap de Linux
Pasando del escaneo de conexión TCP, sigamos adelante con el escaneo UDP. La diferencia entre las conexiones TCP y UDP es que el paquete TCP espera que el servidor confirme con un paquete de respuesta, mientras que un paquete UDP simplemente verifica si el paquete llegó al servidor. Con el escaneo UDP, puede ver todos los puertos UDP que están abiertos.
Si puede ver en la captura de pantalla anterior, dice 22/tcp, lo que significa que el servidor responderá a un paquete TCP y rechazará un paquete UDP (a menos que haya una configuración de firewall defectuosa).
nmap -sU <hostname or IP>
Observe cómo el escaneo UDP regresa sin mostrar ningún puerto abierto. Esto se debe a que no tenemos ningún puerto UDP abierto en nuestro servidor.
Escaneo SYN usando nmap
Analizamos los métodos de escaneo TCP y UDP. Repasemos el método SYN de escaneo de puertos. ¿Recuerdas que mencionamos que una vez que se envía un paquete, el paquete TCP espera una respuesta del servidor? Estos dos paquetes se denominan SYN y ACK.
- SYN: este paquete lo envía un cliente comopecadosolicitud de cronización
- ACK: una vez que el servidor recibe el paquete SYN y tiene los puertos necesarios abiertos para las solicitudes, responde con unreconocerreconocimiento
¿Qué sucede si solo enviamos paquetes SYN y realmente no esperamos el reconocimiento de la conexión? Obtenemos un escaneo de puertos realmente rápido pero sigiloso. Esto se debe a que simplemente enviamos una solicitud de sincronización y luego seguimos adelante. El servidor puede responder o no con un ACK y, según la respuesta, el escaneo SYN interpreta si el puerto está abierto/cerrado/filtrado.
nmap -sS <target host or IP>

Si el paquete SYN recibe un:
- paquete ACK? El puerto está abierto
- Paquete RST? El puerto está cerrado (RST = Reset)
- Sin respuesta o error inalcanzable? Se filtra el puerto
- ICMP inalcanzable? Puerto filtrado
Escaneo de ping usando el comando nmap en Linux
De acuerdo, hemos visto las técnicas básicas de escaneo de puertos anteriores, pero el escaneo de Ping es otro escaneo que nos permite confirmar si una máquina está conectada a una red o no. Muy simple: envía un paquete ICMP y espera la confirmación del destino. Este escaneo es equivalente al comando ping, pero se puede realizar en cientos de direcciones de destino en un solo comando.
nmap -sP <target IP or hostname>

2. Método de escaneo avanzado de Nmap
Las técnicas que mencionamos anteriormente pueden filtrarse y bloquearse fácilmente mediante firewalls. Pero hay algunos métodos más que podemos usar, enviar paquetes diseñados de manera diferente para encontrar si un puerto que se detecta como cerrado, realmente está cerrado.
Escaneo ACK usando el comando nmap en Linux
Mencioné cómo un paquete TCP espera que el paquete ACK confirme la conexión. Pero, ¿y si enviamos directamente el paquete ACK en lugar del paquete SYN? Entendamos esto.
De todos modos, la mayoría de los cortafuegos bloquearán este tipo de truco, pero algunos cortafuegos basados ??en reglas básicas podrían permitirnos saber qué puertos están abiertos. Esto se debe a que un paquete ACK indica que la conexión ya se estableció desde el servidor y nuestro sistema solo está confirmando la conexión.
¿Truco barato? Si. ¿Obras? A veces. ¿Vale la pena intentarlo? Por supuesto.
nmap -sA <target IP or hostname>

Bueno, como puede ver, responde con 0 puertos abiertos, lo que significa que nuestro firewall y nuestros sistemas funcionan bien y no responden a paquetes innecesarios.
Escaneo del tamaño de la ventana TCP usando el comando nmap
Esto es similar al escaneo TCP connect() pero funciona en las anomalías de los informes de tamaño de ventana. Este comando a veces es útil cuando fallan otros métodos. Pero como con cualquier otra herramienta de prueba de seguridad de red, no hay una forma específica de hacer las cosas. Cada sistema está configurado de manera diferente y también necesita trabajar con esos sistemas de manera diferente.
nmap -sW <target IP or hostname>

En este caso, he usado Google como un example en esta demostración de escaneo de puertos porque nuestro localhost tiene solo un puerto abierto. Echa un vistazo a lo anterior example, y verá que los puertos HTTP y HTTPS están “CERRADOS”, ¡pero sabemos que ambos puertos están abiertos cuando nos conectamos a ellos! ¿Como es eso posible?
Esto se debe a que los servidores de Google están bloqueando CUALQUIER tráfico que no provenga de un navegador. En nuestro caso, probamos un escaneo del tamaño de la ventana y no es un tráfico HTTP o HTTPS. Si logramos enviar un paquete HTTP al servidor de Google en el puerto 80 o 443, obtendremos el código fuente HTML completo de la página como salida.
Escaneo RPC usando el comando Nmap en Linux
Se usaría una llamada de procedimiento remoto o un escaneo RPC con algunos otros tipos de escaneos mencionados anteriormente que le permiten determinar si un puerto tiene una aplicación compatible con RPC ejecutándose en segundo plano. Una llamada de procedimiento remoto nos permite determinar la aplicación y el número de versión en el que se encuentra la aplicación, lo que facilita que los piratas informáticos determinen errores y los exploten.
nmap -sR <target IP or Hostname> OR nmap -sV <target IP or Hostname>

-sRes un alias para el-sVy ambos ayudan a encontrar la aplicación y la versión que se ejecuta detrás de los puertos específicos.
3. Escanear sigilosamente
Todos los escaneos que hemos discutido anteriormente son más o menos detectables por los firewalls cuando se usan de forma independiente. Así que necesitamos aplicar algunas tácticas encubiertas para ocultar nuestros intentos de encontrar puertos. Uno de los métodos más fáciles es ralentizar tanto el escaneo que los cortafuegos no puedan diferenciar los paquetes de escaneo de puertos del tráfico normal.
Ralentizar el escaneo de puertos usando el comando nmap en Linux
En los escaneos anteriores, vio lo rápido que se escaneaban todos los puertos. Si un firewall está activo, muy rápidamente activará una alarma y detectará y luego bloqueará nuestro intento de escaneo de puertos. En cortafuegos mal configurados, esto también es fácilmente detectable, por lo que es mejor reducir la velocidad de nuestro análisis si sabemos que un sitio web específico no ve mucho tráfico en general.
Para examplesi escaneo Google muy rápido, no hay nada de qué preocuparse porque:
- Los servidores de Google son muy seguros.
- Google recibe miles de millones de solicitudes de búsqueda al día: nuestros paquetes de escaneo de puertos son minúsculos
- Google ha configurado muy bien sus firewalls ya que no tienen otra opción. Por lo tanto, es poco probable que termines encontrando puertos vulnerables en sus servidores.
Pero si escaneo un sitio web desconocido en busca de puertos abiertos y envío miles de paquetes en un corto período de tiempo, el aumento en el tráfico de solicitudes será muy visible. Aprendamos cómo ralentizar el escaneo mientras usamos el comando nmap en Linux.
nmap -T<0-5> <IP or Hostname>
La explicación de 0 a 5 en el comando nmap en Linux es la siguiente:
- paranoico (0) ? Más lento, espera 5 minutos antes de enviar cada paquete
- astuto (1)
- educado (2)
- normal (3): velocidad de escaneo predeterminada si no se especifica nada
- agresivo (4)
- loco (5) ? Más rápido, envía paquetes lo más rápido posible

Estoy usando solo el T4 y el T5 para la demostración. Como estoy trabajando con localhost, no tengo ninguna razón para ralentizar mis escaneos aquí. Cuando se encuentra en una situación del mundo real, puede ajustar el tiempo de exploración en consecuencia.
Fragmentación de paquetes usando el comando nmap en Linux
Algunos cortafuegos tienen mecanismos incorporados para desfragmentar paquetes y combinarlos. Pero no todos lo tienen. Entonces, ¿qué pasaría si pudiéramos enviar todos los paquetes en piezas más pequeñas?
Los cortafuegos que no pueden manejar datos fragmentados simplemente los pasarán al puerto solicitado y esperarán que el sistema operativo realice la desfragmentación. ¡Eso es un éxito para nosotros ya que sabemos si el puerto está abierto o no!
nmap -f -sT <IP or hostname>
Esta opción de comando, junto con un tipo de escaneo específico, fragmentará los paquetes que se envían a la IP de destino.
Uso de direcciones IP de señuelo con el comando nmap en Linux
Este es uno de los mejores métodos para ocultar sus intentos de escaneo de puertos de los firewalls si conoce algunas IP que ya están escaneando la misma IP. En lugar de ocultar su IP, solo hace que sus intentos parezcan una gran cantidad de otras IP que están haciendo lo mismo.
Para este método, necesita conocer algunas direcciones IP que son señuelos para la red que está tratando de escanear.
nmap -D<comma separated IP addresses> <remote IP>

Ahora, la demostración realmente no le mostrará mucho aparte de las direcciones IP adicionales que he agregado, pero puede echar un vistazo a los paquetes en Wireshark para analizar los paquetes que se envían y las direcciones IP que se envían. Enviado desde.
Conclusión
Este es un tutorial muy completo sobre el comando nmap en Linux, pero de ninguna manera es extenso debido a las toneladas de variaciones disponibles y que se pueden realizar con las opciones del comando nmap. Si está buscando un tutorial completo, lea elmanual de nmap.