Nmap
Nmap transforma packets y respuestas en hipótesis sobre hosts, puertos, servicios y filtros. La parte importante no es memorizar flags, sino saber qué probe ha enviado, qué respuesta esperaba y qué incertidumbre conserva el estado resultante. Esa lógica permite cambiar el scan cuando la red no se comporta como el ejemplo de un laboratorio.
Qué lugar ocupa Nmap
Sección titulada «Qué lugar ocupa Nmap»Nmap cubre varias tareas relacionadas, pero distintas:
- validar y expandir una especificación de objetivos
- buscar hosts que respondan a probes de discovery
- clasificar puertos TCP, UDP y otros protocolos
- identificar servicios y estimar el sistema operativo
- ejecutar interacciones adicionales mediante Nmap Scripting Engine (NSE)
- guardar resultados que puedan revisarse y compararse
El resultado no es una lista de vulnerabilidades. Una versión, una CPE o el output de un script pueden iniciar una investigación, pero la validación de vulnerabilidades requiere comprobar componente, configuración, reachability, prerrequisitos e impacto.
Nmap tampoco sustituye la enumeración del servicio. Descubrir 445/tcp open microsoft-ds indica dónde continuar. Entender dialectos SMB, signing, shares y permisos exige hablar SMB.
Recorrido incremental
Sección titulada «Recorrido incremental»La página sigue el mismo orden que un scan real. Cada bloque añade una capacidad después de explicar la anterior:
- validar cómo interpreta Nmap los targets
- descubrir qué direcciones responden
- elegir puertos y comprender los estados
- cubrir TCP y UDP
- identificar servicios y estimar el OS
- ejecutar scripts específicos
- guardar y comparar resultados
- ajustar timing, filtros, origen y forma de los packets
El proceso vuelve atrás cuando aparece una discrepancia. Si version detection contradice el port scan, se aísla ese puerto. Si un host deja de responder, se compara origen, ruta, timing y probe antes de ampliar el scan.
Preparar el scan
Sección titulada «Preparar el scan»La sintaxis general es:
nmap [SCAN_TYPE] [OPTIONS] TARGET_SPECTARGET_SPEC puede ser una IP, un hostname, varias direcciones, un rango o una red CIDR. Los ejemplos reutilizan varias convenciones:
sudoaporta los privilegios necesarios para construir raw packets en Unix-ndesactiva reverse DNS y evita consultas que no forman parte de la pregunta--reasonmuestra qué respuesta sustenta un estado-oA BASENAMEguarda los formatos normal, XML y grepable con el mismo basenameTARGET_IP,TARGET_CIDR,PORT_LISTy los nombres de archivo son placeholders
Para cargar targets desde un archivo se usa -iL FILE. -sL muestra cómo los ha interpretado Nmap sin ejecutar host discovery ni port scanning. Antes de enviar probes, comprueba que esa expansión coincide con el scope:
nmap -sL -n -iL scope/targets.txtEl output debe contener exactamente las direcciones esperadas. Esta comprobación no corrige una lista equivocada. Hay que compararla con el scope y las exclusiones.
Usa --exclude TARGET_SPEC o --excludefile FILE cuando el scope contenga excepciones. Si necesitas reverse DNS mediante resolvers concretos, la opción correcta es --dns-servers SERVER_LIST, en plural. Esta opción controla la resolución que hace Nmap. No obliga a una aplicación del objetivo a usar esos servidores.
Las técnicas basadas en raw packets requieren privilegios adecuados. En Unix, un usuario privilegiado puede ejecutar el SYN scan -sS. Sin esos privilegios, Nmap usa normalmente TCP connect -sT. El cambio modifica el tráfico y la posibilidad de que el servicio registre una conexión completa.
Antes del primer scan registra también la interfaz de salida y la ruta. nmap --iflist muestra interfaces y rutas conocidas por Nmap. Si el objetivo se alcanza mediante VPN o pivoting, una dirección correcta enviada por la interfaz equivocada produce conclusiones falsas.
Host discovery
Sección titulada «Host discovery»Host discovery intenta responder si una dirección está en uso antes de dedicarle un port scan. No equivale a “hacer ping”: Nmap puede combinar ARP, ICMP, TCP, UDP y otros probes.
Comportamiento por defecto
Sección titulada «Comportamiento por defecto»En una red Ethernet local, Nmap usa ARP para IPv4 o Neighbor Discovery para IPv6 porque suele ser más fiable que ICMP. Esta preferencia se mantiene incluso si se solicita -PE, la opción de discovery mediante ICMP Echo. --disable-arp-ping permite aislar una prueba IP sin ARP, aunque elimina una señal especialmente útil dentro del mismo segmento.
En una red enrutada y con privilegios, el discovery por defecto combina ICMP Echo, TCP SYN a 443, TCP ACK a 80 e ICMP Timestamp. Sin privilegios, Nmap utiliza llamadas connect() hacia TCP 80 y 443. Un firewall puede permitir unas señales y descartar otras, por lo que “host down” significa que Nmap no obtuvo una prueba de vida con los probes utilizados.
-sn y -Pn no son equivalentes
Sección titulada «-sn y -Pn no son equivalentes»| Opción | Efecto real |
|---|---|
-sn |
Ejecuta host discovery y omite el port scan posterior. |
-Pn |
Omite host discovery y trata cada dirección como activa para el scan pedido. |
-Pn no significa “desactivar ICMP” ni demostrar que el host esté activo. En un /16 obliga a probar las 65.536 direcciones y puede multiplicar el tiempo. En Ethernet local, Nmap todavía puede usar ARP para obtener la MAC necesaria, salvo que se añada --disable-arp-ping o se fuerce el envío IP.
En el primer discovery, -sn omite el port scan, -n conserva la resolución desactivada, --reason explica cada host activo y -oA guarda los tres formatos. sudo permite que Nmap utilice los probes raw disponibles:
sudo nmap -sn -n --reason -oA scans/01-discovery TARGET_CIDRSi faltan hosts que deberían existir, amplía los probes de forma deliberada. -PE solicita ICMP Echo. -PS envía SYN a los puertos indicados, -PA envía ACK y -PU utiliza UDP:
sudo nmap -sn -n -PE -PS22,80,443,445 -PA80,443 -PU53,161 \ --reason -oA scans/02-discovery-expanded TARGET_CIDRLos puertos se eligen porque es razonable que atraviesen los controles del entorno, no porque exista una combinación universal. Una respuesta RST también prueba que el host está activo, aunque el puerto no acepte conexiones.
Para estudiar un caso concreto, --disable-arp-ping impide que ARP sustituya la prueba IP y --packet-trace muestra los packets enviados y recibidos:
sudo nmap -sn -n -PE --disable-arp-ping --packet-trace --reason TARGET_IPNo conviene usar --packet-trace sobre una red grande: el output deja de ser manejable. Aísla una dirección y una pregunta.
Estados de puerto
Sección titulada «Estados de puerto»Los seis estados de Nmap describen lo que el scanner puede concluir desde su punto de observación. No son una propiedad permanente del puerto.
| Estado | Interpretación |
|---|---|
open |
Una aplicación acepta conexiones, datagramas o asociaciones en ese puerto. |
closed |
El host responde, pero no hay una aplicación escuchando para el probe enviado. |
filtered |
Un filtro o problema de red impide decidir entre open y closed. |
unfiltered |
El puerto es alcanzable, pero el scan utilizado no distingue abierto y cerrado. |
| open|filtered | La ausencia de respuesta encaja tanto con un puerto abierto como con un filtro. |
| closed|filtered | El idle scan no puede separar ambos estados. |
Un mismo TARGET_IP:PORT puede cambiar de estado al modificar la red de origen, la técnica, el protocolo, el timing o las reglas del firewall. Guarda esos parámetros con el resultado.
Elegir los puertos
Sección titulada «Elegir los puertos»Sin -p, Nmap escanea los 1.000 puertos más frecuentes de cada protocolo solicitado según su base nmap-services. No escanea simplemente del 1 al 1.000.
| Selección | Significado |
|---|---|
-F |
100 puertos más frecuentes. |
--top-ports 1000 |
Los 1.000 más frecuentes. |
-p 22,80,443 |
Lista explícita. |
-p 1-1024 |
Rango explícito. |
-p- |
Puertos del 1 al 65.535. |
-p T:80,443,U:53,161 |
Selección separada por protocolo en un scan mixto. |
TCP SYN y el three-way handshake
Sección titulada «TCP SYN y el three-way handshake»Una conexión TCP normal se establece con tres pasos:
cliente servidor | -------- SYN ------------> | | <----- SYN/ACK ------------ | | -------- ACK -------------> |El SYN scan -sS envía el primer packet, pero no completa la conexión:
respuesta SYN/ACK → open → la conexión se corta con RST en lugar del ACK finalrespuesta RST → closedsin respuesta o ICMP filtrado → filteredEl siguiente comando combina -sS con --top-ports 1000. -Pn omite un nuevo host discovery porque el host ya se ha confirmado:
sudo nmap -sS -n -Pn --top-ports 1000 --reason \ -oA scans/03-tcp-top TARGET_IP-Pn se usa aquí cuando el host ya se conoce y se quiere evitar que un discovery bloqueado impida el port scan. No hace el scan más sigiloso. -sS tampoco es invisible: un IDS/IPS moderno reconoce el patrón de SYNs aunque no se complete el handshake.
TCP connect
Sección titulada «TCP connect»-sT pide al sistema operativo local que ejecute connect(). Si el puerto está abierto, el kernel completa el handshake y después cierra la conexión. Es la opción habitual sin privilegios raw y puede ser útil cuando se quiere observar el comportamiento de una conexión normal.
nmap -sT -n -Pn -p 22,80,443 --reason -oA scans/04-tcp-connect TARGET_IPEl servicio puede registrar la conexión. Frente a -sS, cambia el mecanismo: completa el handshake mediante connect() y crea estado en el servicio y en los controles intermedios.
ACK scan
Sección titulada «ACK scan»-sA envía un ACK que no pertenece a una conexión existente. Si el packet alcanza el host, un stack TCP normal responde con RST tanto si el puerto está abierto como si está cerrado. Por eso Nmap informa unfiltered, no open:
RST recibido → unfilteredsin respuesta o error ICMP → filteredsudo nmap -sA -n -Pn -p PORT_LIST --reason TARGET_IPEl ACK scan sirve para comparar reglas y detectar filtrado stateless en algunos entornos. Un firewall stateful puede descartar correctamente un ACK fuera de estado. No identifica servicios ni “abre” un puerto filtrado.
Cobertura TCP completa
Sección titulada «Cobertura TCP completa»El scan inicial permite empezar a enumerar mientras se ejecuta la cobertura completa. -p- selecciona los 65.535 puertos y --stats-every 30s imprime el progreso cada treinta segundos sin cambiar el tráfico:
sudo nmap -sS -n -Pn -p- --reason --stats-every 30s \ -oA scans/05-tcp-all TARGET_IPSepara cobertura y profundidad. Primero identifica los puertos. Después aplica -sV, NSE y OS detection donde aporten información, ya que estas fases abren conexiones, envían payloads de protocolo y aumentan el tiempo y el tráfico del scan.
UDP sin handshake
Sección titulada «UDP sin handshake»UDP no establece una sesión antes de enviar datos. La respuesta depende de la aplicación y del payload:
respuesta UDP → openICMP Destination Unreachable 3/3 → closedotro error ICMP → filteredsin respuesta → open|filteredMuchos servicios UDP ignoran datagramas vacíos o solo responden a una petición válida. Además, los hosts pueden limitar la tasa de errores ICMP. Esa combinación hace que un scan UDP completo sea lento y que open|filtered sea frecuente.
-sU selecciona el UDP scan. Empieza por los puertos con mayor probabilidad o por los protocolos que encajen con el entorno:
sudo nmap -sU -n -Pn --top-ports 100 --reason \ -oA scans/06-udp-top TARGET_IPDespués utiliza -sV, que envía probes de aplicación e intenta reconocer el servicio. Esos probes específicos pueden obtener la respuesta que un datagrama genérico no produjo:
sudo nmap -sU -sV -n -Pn -p UDP_PORT_LIST --reason \ -oA scans/07-udp-services TARGET_IPopen|filtered no debe registrarse como servicio confirmado. Conserva la incertidumbre y continúa con una petición válida del protocolo.
Servicios, versiones y sistema operativo
Sección titulada «Servicios, versiones y sistema operativo»En un scan sin -sV, la columna SERVICE suele salir de la asociación entre número de puerto y nmap-services. 80/tcp http puede significar únicamente que HTTP usa habitualmente ese puerto. Un servicio puede escuchar en un puerto no estándar y un banner puede estar oculto o manipulado.
Version detection
Sección titulada «Version detection»-sV abre o sondea los puertos descubiertos, compara las respuestas con nmap-service-probes e intenta obtener protocolo, producto, versión, hostname, tipo de dispositivo, familia de OS y CPE:
sudo nmap -sV -n -Pn -p PORT_LIST --reason \ -oA scans/08-service-detection TARGET_IP--version-light reduce probes y --version-all los amplía. Más intensidad consume más tiempo y tráfico, pero no convierte la identificación en certeza. Contrasta los datos relevantes mediante el protocolo, TLS, documentación del producto y otras señales independientes.
Por defecto, version detection excluye TCP 9100 porque algunas impresoras imprimen literalmente los probes recibidos. --allports elimina esa exclusión y puede provocar que el dispositivo imprima los payloads enviados. Identifica primero qué escucha en ese puerto y usa --version-trace si necesitas estudiar la interacción.
Para ver qué probes envía Nmap a un único puerto, usa --version-trace. Para una confirmación manual sencilla de un servicio que entrega banner al conectar, Ncat ofrece -n para evitar DNS y -v para mostrar el estado de la conexión:
ncat -nv TARGET_IP PORTNo todos los protocolos hablan primero y algunos requieren TLS o una petición válida. La ausencia de banner no implica ausencia de servicio.
OS detection
Sección titulada «OS detection»-O compara respuestas TCP/IP con la base nmap-os-db. El fingerprint mejora cuando Nmap encuentra al menos un puerto TCP abierto y otro cerrado. --osscan-limit evita intentarlo cuando Nmap no dispone de condiciones razonables para producir un resultado útil:
sudo nmap -O --osscan-limit -n -Pn -p OPEN_AND_CLOSED_PORTS TARGET_IPEl resultado es una estimación. NAT, proxies, middleboxes, virtualización y filtros pueden alterar el fingerprint. Una versión de OpenSSH compilada para una distribución tampoco demuestra por sí sola el OS completo.
-A activa OS detection, version detection, scripts default y traceroute. Es un atajo, no una técnica independiente ni una opción obligatoria:
-A = -O + -sV + -sC + --tracerouteAplicarlo a puertos ya seleccionados mantiene el output manejable y permite atribuir cada resultado a una interacción concreta.
Nmap Scripting Engine
Sección titulada «Nmap Scripting Engine»NSE ejecuta scripts Lua para discovery, enumeración, version detection y comprobaciones específicas. -sC equivale a seleccionar la categoría default:
sudo nmap -sV -sC -n -Pn -p PORT_LIST TARGET_IPLa categoría default combina scripts seleccionados por utilidad, fiabilidad, intrusividad, verbosidad y privacidad. Algunos abren sesiones o envían peticiones que el servicio puede registrar.
--script acepta nombres, categorías, directorios y expresiones booleanas. --script-help muestra su documentación sin ejecutarlos. --script-args NAME=VALUE entrega argumentos y debe usar el nombre cualificado del script cuando esté disponible. Conviene revisar primero qué selecciona la expresión y qué argumentos necesita cada script:
nmap --script-help SCRIPT_NAMEsudo nmap -n -Pn -p 25 --script banner,smtp-commands TARGET_IPsudo nmap -sU -Pn -p 161 --script snmp-sysdescr \ --script-args creds.snmp=COMMUNITY TARGET_IPLas catorce categorías describen la finalidad o el comportamiento del script. Un script puede pertenecer a varias:
| Categoría | Qué agrupa |
|---|---|
auth |
Credenciales, métodos de autenticación y bypasses. |
broadcast |
Discovery mediante broadcast en la red local. |
brute |
Intentos repetidos de autenticación. |
default |
Selección ejecutada por -sC y por -A. |
discovery |
Información adicional de servicios, hosts, registros y directorios. |
dos |
Checks que pueden provocar una denegación de servicio. |
exploit |
Explotación activa de una vulnerabilidad. |
external |
Consultas que envían datos a un servicio externo. |
fuzzer |
Campos inesperados o aleatorios para buscar fallos de implementación. |
intrusive |
Interacciones con consumo, cambios o efectos apreciables sobre el target. |
malware |
Señales de malware o backdoors conocidas. |
safe |
Discovery y enumeración sin explotación ni consumo intencional significativo. |
version |
Extensiones que Nmap activa con -sV. No se seleccionan directamente. |
vuln |
Checks de vulnerabilidades concretas. |
Las expresiones booleanas combinan categorías. Esta consulta muestra los scripts que pertenecen a default y también a safe:
nmap --script-help "default and safe"Seleccionar una categoría ejecuta todos los scripts elegibles que coincidan con el host o servicio. Por ejemplo:
sudo nmap -sV -Pn -p PORT_LIST --script vuln TARGET_IPEl output identifica el script que produjo cada resultado. Hay que contrastar su lógica, condiciones y evidencia antes de convertirlo en un hallazgo. --script-trace muestra la comunicación de aplicación de los scripts y resulta útil para entender un resultado inesperado:
sudo nmap -Pn -p 445 --script smb-os-discovery \ --script-trace TARGET_IPLos argumentos comparten un namespace global. Usa nombres cualificados, como SCRIPT_NAME.argument, cuando la documentación los ofrezca para no cambiar accidentalmente otros scripts. --script-args-file FILE permite separar argumentos extensos del comando. --script-updatedb solo hace falta después de añadir, retirar o recategorizar scripts en el directorio de NSE.
Los scripts de terceros se ejecutan localmente sin sandbox. Su código tiene el mismo acceso que el proceso de Nmap, así que hay que revisarlo antes de cargarlo. En el target, categorías como brute, dos, exploit, fuzzer e intrusive cambian el tipo y el impacto de la interacción. Esa propiedad técnica debe formar parte de la selección del scan.
Guardar y comparar resultados
Sección titulada «Guardar y comparar resultados»El output interactivo ayuda durante el scan, pero no debe ser el único registro. Nmap ofrece:
| Opción | Uso principal |
|---|---|
-oN FILE |
Formato normal, legible para revisión manual. |
-oX FILE |
XML estructurado para parsing, importación y comparación. |
-oG FILE |
Formato grepable legado. Pierde extensibilidad frente a XML. |
-oA BASENAME |
Genera .nmap, .xml y .gnmap con el mismo basename. |
-oA no guarda literalmente todos los formatos existentes: agrupa normal, XML y grepable. Nmap continúa mostrando el output interactivo en stdout.
Usa nombres que indiquen orden, alcance y propósito:
scans/├── 01-discovery.nmap├── 01-discovery.xml├── 03-tcp-top.nmap├── 05-tcp-all.nmap├── 06-udp-top.nmap└── 08-service-detection.nmapEl output normal conserva el comando ejecutado en un comentario. El XML es la mejor base para automatización. ndiff compara dos resultados de Nmap y muestra hosts, puertos o servicios que han cambiado:
ndiff baseline.xml retest.xmlEl XML también puede convertirse en un informe HTML mediante la stylesheet que instala Nmap. En xsltproc, -o scan.html selecciona el archivo de salida:
xsltproc scan.xml -o scan.htmlLos navegadores modernos suelen impedir que un XML local cargue directamente una stylesheet desde otra ruta. Generar el HTML evita esa restricción y deja un artefacto autocontenido para revisión. --stylesheet PATH_OR_URL permite elegir otra XSL, mientras que el valor local por defecto evita solicitar recursos externos.
Guarda el output completo como artefacto y copia en la nota solo el fragmento que justifica una decisión. Gestión de evidencias desarrolla integridad, custodia y saneamiento.
Timing y precisión
Sección titulada «Timing y precisión»Nmap adapta paralelismo, timeouts, retransmisiones y ritmo según las respuestas. El default -T3 suele ser un punto de partida más fiable que imponer valores copiados de otro entorno.
Las templates -T0 a -T5 agrupan varios ajustes. -T4 puede reducir el tiempo en una red estable. -T5 usa timeouts y retransmisiones más restrictivos, por lo que puede perder respuestas y concentrar el tráfico. El número no representa únicamente velocidad.
| Opción | Qué controla | Riesgo al forzarla |
|---|---|---|
--min-rate 300 |
Intenta mantener al menos 300 packets por segundo. | Pérdida de respuestas y presión en la red. |
--max-rate 100 |
Limita la tasa media de envío. | Scan más largo, pero impacto acotado. |
--max-retries 2 |
Limita retransmisiones por probe. | Falsos negativos en redes con pérdida. |
--min-parallelism 10 |
Mantiene al menos diez probes pendientes por grupo. | Reduce la adaptación ante congestión. |
--max-parallelism 1 |
Limita los probes pendientes por grupo a uno. | Puede alargar mucho el scan. |
--initial-rtt-timeout |
Fija el timeout inicial. | Un valor bajo falla antes de medir la red. |
--max-rtt-timeout |
Acota cuánto puede crecer el timeout. | Pierde respuestas lentas o rate-limited. |
--stats-every 30s |
Muestra progreso sin cambiar el tráfico del scan. | Ninguno sobre el objetivo. |
-v, -vv |
Aumenta la información mostrada durante la ejecución. | Más ruido local en la terminal. |
--min-rate expresa packets por segundo, no packets simultáneos. --max-rate permite imponer un techo de envío, mientras que --min-rate obliga a Nmap a intentar sostener un suelo incluso cuando la red responde con pérdida o latencia.
Durante un scan interactivo, Enter o cualquier tecla sin función asignada imprime el estado actual. v y V cambian la verbosidad, d y D el nivel de debug, y p y P activan o desactivan packet tracing. ? muestra la ayuda disponible. Estos cambios afectan a la ejecución en curso. Anótalos si el log debe explicar por qué el output final difiere del comando inicial. Para procesos en background, --noninteractive desactiva la captura del teclado y --stats-every TIME mantiene el progreso periódico.
Optimiza después de obtener una baseline. Si un scan acelerado encuentra menos hosts o puertos, no ha demostrado que hayan desaparecido: ha cambiado la sensibilidad de la prueba. Conserva ambos resultados y explica la diferencia.
Firewalls, IDS e IPS
Sección titulada «Firewalls, IDS e IPS»Un firewall decide qué tráfico permite, rechaza o descarta. Un IDS observa y alerta. Un IPS puede además bloquear o modificar el tráfico. Nmap solo ve las consecuencias desde su posición.
Un rechazo explícito puede llegar como RST o error ICMP y suele resolverse rápido. Un drop no responde, obliga a esperar y puede terminar en filtered o open|filtered. La ausencia de respuesta no identifica por sí sola el dispositivo que la causó.
Separar objetivos distintos
Sección titulada «Separar objetivos distintos»No toda evasión persigue lo mismo. Conviene identificar qué control se está estudiando antes de cambiar el scan:
| Objetivo técnico | Variable que suele modificarse | Qué se observa |
|---|---|---|
| Atravesar una regla de filtrado | Protocolo, TCP flags, fragmentación, puerto o dirección de origen | Cambios entre filtered, unfiltered, open y respuestas ICMP |
| Reducir coincidencias por firma | Orden de hosts, cadencia, tamaño y forma de los packets | Alertas, resets, degradación o ausencia de un bloqueo reactivo |
| Distinguir un bloqueo por origen | VPS, egress node, interfaz o dirección de salida | El mismo probe funciona desde un origen y falla desde otro |
| Ocultar el origen entre decoys | Direcciones añadidas con -D |
El objetivo registra varios orígenes para una fase compatible |
Una técnica puede afectar a una capa y dejar intactas las demás. Fragmentar un SYN no oculta las conexiones posteriores de -sV. Reducir el rate puede evitar un umbral corto, pero no una correlación que acumule eventos durante horas. Cambiar el puerto de origen no altera el payload que inspecciona un proxy de aplicación.
Construir una baseline
Sección titulada «Construir una baseline»Compara scans que difieran en una sola variable. Conserva el comando, el origen, la interfaz, la ruta, la hora, la versión de Nmap, el rate y el output completo. Para analizar un puerto filtrado, una secuencia mínima puede ser:
sudo nmap -sS -Pn -n -p PORT --reason --packet-trace TARGET_IPsudo nmap -sA -Pn -n -p PORT --reason --packet-trace TARGET_IPncat -nv TARGET_IP PORTEl SYN scan pregunta si el puerto acepta una conexión. El ACK scan estudia reachability y filtrado, no si existe un listener. Ncat completa una conexión TCP y permite comprobar si el servicio responde a una interacción normal. Si se cambian técnica, origen y timing a la vez, la diferencia deja de tener una causa aislable.
Bloqueos dinámicos y rotación de origen
Sección titulada «Bloqueos dinámicos y rotación de origen»Un IPS reactivo, un firewall con rate limiting o un sistema de reputación puede permitir los primeros probes y bloquear después una IP concreta. El síntoma no siempre es un error explícito: un puerto previamente open puede pasar a filtered, aumentar la latencia o dejar de responder tras superar un umbral.
Para distinguir un bloqueo dinámico de un drop estable:
- ejecuta un probe de control pequeño desde
ORIGIN_Ay anota el timestamp - repítelo sin cambiar flags, puertos ni timing
- si deja de responder, ejecuta exactamente el mismo probe desde
ORIGIN_B - vuelve a probar
ORIGIN_Atras un intervalo conocido - compara también una dirección o servicio de control que no forme parte del scan principal
La interpretación depende del patrón:
| Resultado | Hipótesis que gana peso |
|---|---|
ORIGIN_A falla y ORIGIN_B responde |
Bloqueo, reputación o ACL asociados al origen |
| Ambos fallan al mismo tiempo | Cambio en el target, servicio, ruta o control compartido |
ORIGIN_A vuelve a responder tras un intervalo similar |
Bloqueo temporal o ventana de rate limiting |
| El fallo aparece después de un volumen o patrón repetible | IPS reactivo o threshold basado en frecuencia |
| Solo cambia un puerto mientras los controles siguen respondiendo | Regla o protección específica del servicio |
Un pool de VPS o egress nodes permite repetir la observación desde direcciones y redes distintas. Cada nodo necesita una identidad estable, reloj sincronizado, versión conocida de las herramientas y logs propios. La rotación cambia más que la IP: también puede cambiar el ASN, la reputación, la ruta, el RTT, el MTU y los filtros intermedios. Dos resultados solo son comparables si esas diferencias se registran y el resto del probe se mantiene estable.
En operaciones de Red team, los egress nodes y redirectors separan la infraestructura expuesta de los sistemas de control y permiten sustituir un origen bloqueado sin reconstruir toda la operación. En enumeración también sirven para determinar si un control correlaciona por IP, subred, patrón o comportamiento global. Cambiar de origen reinicia algunos contadores locales, pero no evita una correlación centralizada entre sensores.
-D mezcla la dirección real con direcciones simuladas durante host discovery, port scanning y OS detection compatibles. ME fija la posición de la dirección real. RND:N genera N direcciones IPv4 aleatorias:
sudo nmap -sS -Pn -n -p 80,443 -D RND:5,ME --packet-trace TARGET_IPsudo nmap -sS -Pn -n -p 80,443 \ -D DECOY_1,DECOY_2,ME,DECOY_3 TARGET_IPNmap envía un batch de probes equivalentes: uno con su dirección real y otros con las direcciones de los decoys. El target responde a cada dirección de origen. Solo la respuesta dirigida al origen real vuelve al scanner, salvo que este controle también el routing de los demás nodos.
Los decoys activos presentan señales de reachability y pueden generar tráfico propio. Si las direcciones simuladas no existen, un sensor puede separarlas mediante reachability, comportamiento o concentración de respuestas. Demasiados decoys alargan el scan, aumentan la congestión y pueden reducir su precisión.
La cobertura de -D termina antes de varias fases importantes. No oculta la dirección utilizada por TCP connect -sT, version detection -sV, NSE ni reverse DNS. En un scan -sS -sV -D ..., los SYN pueden aparecer repartidos entre orígenes, pero las conexiones de version detection seguirán saliendo únicamente desde la dirección real.
Fragmentación y MTU
Sección titulada «Fragmentación y MTU»-f divide la cabecera TCP, UDP o ICMP entre fragmentos IP pequeños. Una aparición de -f usa fragmentos de hasta ocho bytes después de la cabecera IP. Repetirla usa 16 bytes. --mtu permite indicar un tamaño, que debe ser múltiplo de ocho:
sudo nmap -sS -Pn -n -p 80,443 -f --packet-trace TARGET_IPsudo nmap -sS -Pn -n -p 80,443 --mtu 24 --packet-trace TARGET_IPLa técnica estudia dispositivos que inspeccionan fragmentos sin reensamblarlos correctamente. Un firewall que normaliza o reensambla el tráfico verá el packet original. Un IDS situado después del punto de reensamblado también puede reconstruirlo.
La fragmentación se aplica a features de raw packets. No fragmenta -sT, version detection ni NSE. Algunos sistemas operativos locales pueden reensamblar los fragments antes de transmitirlos. Verifica el tráfico real con tcpdump o Wireshark y usa --send-eth si necesitas que Nmap envíe directamente en la capa Ethernet.
Dirección de origen y return path
Sección titulada «Dirección de origen y return path»-S fija la dirección IPv4 de origen y -e selecciona la interfaz:
sudo nmap -sS -Pn -n -e tun0 -S SOURCE_IP -p 445 \ --reason --packet-trace TARGET_IPSi SOURCE_IP es una dirección spoofed que el scanner no controla, el target enviará allí las respuestas y Nmap no podrá clasificarlas. El comando resulta útil cuando la dirección pertenece realmente a una interfaz local, a un pivot o a una ruta controlada. También permite comparar ACL basadas en origen cuando existe un return path válido.
Spoofing no convierte al scanner en un proxy. El origen simulado recibe las respuestas y puede recibir resets, errores ICMP o tráfico de aplicación causado por el probe. Si un router aplica ingress filtering, el packet puede descartarse antes de llegar al target.
Puerto de origen y validación con Ncat
Sección titulada «Puerto de origen y validación con Ncat»--source-port PORT o -g PORT fija el puerto de origen en scans que construyen raw packets. Sirve para detectar reglas que confían en un puerto como 53 o 20 sin validar el estado de la conexión:
sudo nmap -sS -Pn -n --source-port 53 -p 50000 \ --reason --packet-trace TARGET_IPEl resultado solo es significativo frente a una baseline idéntica sin --source-port. Si el puerto cambia de filtered a open, la hipótesis es que algún control trata de forma distinta ese origen. Un firewall stateful puede descartar el SYN aunque use 53 porque no pertenece a una sesión DNS establecida.
La opción no se conserva en TCP connect, version detection, NSE ni peticiones DNS, y no se aplica de forma uniforme a todas las probes de OS detection. Cuando un SYN scan detecta una diferencia, Ncat permite validar una conexión completa desde el mismo puerto de origen:
ncat -nv --source-port 53 TARGET_IP 50000Ncat necesita poder enlazar ese puerto local. Si otro proceso lo usa o el sistema exige privilegios para puertos inferiores a 1024, la conexión fallará antes de salir.
Rate, cadencia y orden
Sección titulada «Rate, cadencia y orden»Los controles basados en thresholds pueden contar intentos por origen, destino, puerto o ventana temporal. Reducir picos no modifica el contenido de los probes, pero cambia el patrón que observa el sensor. --randomize-hosts baraja grupos de targets, --scan-delay 200ms impone ese intervalo mínimo entre probes hacia el mismo host y --max-rate 20 limita la tasa media global:
sudo nmap -sS -Pn -n -iL targets.txt -p PORT_LIST \ --randomize-hosts --max-rate 20 --scan-delay 200ms \ -oA scans/09-distributedEstas opciones pueden evitar ráfagas evidentes, aunque alargan la ventana de observación y facilitan que un sistema con retención suficiente correlacione el patrón completo.
Una cadencia baja también cambia la calidad del resultado. Los servicios pueden reiniciarse, las reglas pueden rotar y un scan de horas puede mezclar estados de momentos distintos. Registra cuándo se observó cada resultado y repite probes de control si la red cambia durante la ejecución.
Diagnóstico de resultados dudosos
Sección titulada «Diagnóstico de resultados dudosos»| Síntoma | Comprobación útil |
|---|---|
Host seems down |
Ruta, VPN, interfaz, ARP local, probes alternativos y -Pn sobre un host conocido. |
| Todos los puertos aparecen filtered | Punto de origen, ACL, errores ICMP, --reason y un puerto que deba estar expuesto. |
SERVICE no coincide con la app |
Confirmar si se usó -sV. Después negociar el protocolo manualmente. |
| UDP queda open|filtered | Enviar una petición válida del protocolo o aplicar -sV al puerto concreto. |
| El scan tarda mucho | Revisar drops, rate limiting, DNS, retries y RTT antes de reducir timeouts. |
| Dos scans no coinciden | Comparar origen, hora, versión, targets, flags, timing y archivos XML con ndiff. |
No resuelvas una ambigüedad añadiendo flags al azar. Aísla una dirección, un puerto y una diferencia observable. Usa --reason, --packet-trace o --version-trace sobre ese caso.
Referencia rápida contextualizada
Sección titulada «Referencia rápida contextualizada»| Tarea | Opción o patrón | Interpretación mínima |
|---|---|---|
| Cargar targets | -iL FILE |
Lee una lista. No valida el scope. |
| Ver expansión | -sL -n |
Lista targets sin port scan ni DNS. |
| Solo host discovery | -sn |
No ejecuta port scan. |
| Saltar host discovery | -Pn |
Escanea cada target como si estuviera activo. |
| ICMP Echo | -PE |
Puede quedar sustituido por ARP en Ethernet local. |
| Desactivar ARP implícito | --disable-arp-ping |
Útil para aislar una prueba IP, no como default. |
| SYN scan | -sS |
Half-open. Requiere raw packets. |
| TCP connect | -sT |
Usa connect() y completa conexiones abiertas. |
| ACK scan | -sA |
Distingue filtered de unfiltered, no open. |
| UDP scan | -sU |
La falta de respuesta suele quedar open|filtered. |
| Version detection | -sV |
Envía probes de aplicación y compara firmas. |
| OS detection | -O |
Produce un fingerprint probabilístico. |
| Scripts default | -sC |
Equivale a --script default. |
| Script concreto | --script SCRIPT_NAME |
Leer antes --script-help SCRIPT_NAME. |
| Explicar un estado | --reason |
Muestra la respuesta que sustentó la clasificación. |
| Ver packets | --packet-trace |
Usar sobre un caso pequeño. |
| Guardar tres formatos | -oA BASENAME |
Genera normal, XML y grepable. |
| Ver progreso | --stats-every 30s |
No altera el tráfico. |
| Elegir resolvers | --dns-servers SERVERS |
Afecta al reverse DNS realizado por Nmap. |
| Limitar tasa | --max-rate N |
Acota packets por segundo de media. |
Referencias
Sección titulada «Referencias»- Nmap Network Scanning: Reference Guide
- Nmap: Host Discovery
- Nmap: Port Scanning Basics
- Nmap: Port Scanning Techniques
- Nmap: Service and Version Detection
- Nmap: OS Detection
- Nmap: NSE Usage and Examples
- Nmap: Timing and Performance
- Nmap: Firewall/IDS Evasion and Spoofing
- Nmap: Detecting and Subverting Firewalls and Intrusion Detection Systems
- Nmap: Subverting Intrusion Detection Systems
- Nmap: Output
- Nmap: Runtime Interaction
- RFC 9293: Transmission Control Protocol
- RFC 768: User Datagram Protocol
- RFC 792: Internet Control Message Protocol
- HTB Academy: Network Enumeration with Nmap