Ir al contenido

Escaneo TCP y UDP con Nmap

Por

Madurezreviewed
Última revisión
Publicado
Última actualización

Un puerto no llega a Nmap con una etiqueta incorporada. La herramienta envía un probe, observa una respuesta o su ausencia y clasifica esa observación según la técnica elegida. El estado resultante pertenece a esa combinación de origen, protocolo, paquete, instante y política de red. Cambiar cualquiera de esas variables puede cambiar la clasificación sin que el servicio haya sido modificado.

Esta distinción es especialmente importante en UDP. TCP ofrece flags y una máquina de estados que permiten reconocer aceptación o rechazo con bastante precisión. UDP carece de handshake. En muchos casos, el silencio conserva dos explicaciones igualmente compatibles: el servicio recibió un datagrama que decidió ignorar o un filtro descartó el tráfico.

Estado Conclusión disponible
open una aplicación aceptó la interacción del escaneo
closed el host respondió, pero no había listener para ese probe
filtered un filtro o problema de red impidió decidir entre abierto y cerrado
unfiltered el puerto es alcanzable, pero la técnica no distingue abierto y cerrado
open | filtered el silencio encaja con un listener que no responde o con filtrado
closed | filtered el idle scan no separa ambos estados

Usa --reason para conservar la respuesta que sustentó la clasificación y --packet-trace sobre un caso pequeño para confirmar el flujo. La etiqueta orienta el trabajo. La razón permite auditarla.

Sin -p, Nmap escanea los mil puertos más frecuentes de cada protocolo solicitado según nmap-services. No significa 1–1000.

Selección Efecto
-F cien puertos frecuentes
--top-ports 1000 mil puertos frecuentes
-p 22,80,443 lista explícita
-p 1-1024 rango explícito
-p- 1–65535
-p T:80,443,U:53,161 selección separada en un escaneo mixto

Conserva primero una vista rápida y después amplía cobertura. La primera pasada abre líneas de trabajo mientras la segunda comprueba puertos menos frecuentes. Aplicar detección intensiva y categorías NSE a 65.535 puertos mezcla descubrimiento, identificación y ejecución de scripts en una sola operación difícil de interpretar y de repetir.

-sS construye un SYN mediante raw packets. Un SYN/ACK indica open y Nmap envía RST en vez de completar el ACK final. Un RST indica closed. Silencio o determinados errores ICMP producen filtered.

SYN scan inicial
sudo nmap -sS -n -Pn --top-ports 1000 --reason \
-oA scans/03-tcp-top TARGET_IP

sudo aporta el privilegio para raw packets en Unix. -Pn se usa aquí solo si el host ya fue confirmado. El servicio puede no registrar una sesión completa, pero firewalls, telemetría de flujos, IDS/IPS y el stack del host observan los SYN. El RST que envía Nmap también forma parte de la interacción. Un SYN scan reduce el estado de aplicación frente a una conexión completa. No elimina su huella de red.

-sT usa connect() del sistema operativo. Si el puerto está abierto, completa el three-way handshake y crea una conexión normal antes de cerrarla:

Connect scan sin raw packets
nmap -sT -n -Pn -p 22,80,443 --reason \
-oA scans/04-tcp-connect TARGET_IP

Es el comportamiento habitual sin privilegios raw. También sirve para comparar una conexión completa con un SYN scan, pero deja más estado en el servicio y puede activar lógica de aplicación.

-sA envía un ACK fuera de una conexión. Un stack alcanzable suele responder RST, que Nmap clasifica unfiltered. No distingue un listener abierto de un puerto cerrado:

Estudiar reachability con ACK
sudo nmap -sA -n -Pn -p PORT_LIST --reason TARGET_IP

Un firewall stateful puede descartar correctamente el ACK porque no pertenece a una sesión. La comparación con SYN ayuda a formular una hipótesis sobre filtrado, no a demostrar la regla exacta.

UDP no tiene handshake. El mapa básico es:

respuesta UDP -> open
ICMP port unreachable, type 3/3 -> closed
otro error ICMP -> filtered
sin respuesta -> open|filtered

Un servicio UDP puede ignorar un datagrama vacío porque espera una cabecera, un identificador de transacción o una comunidad válida. El host también puede limitar la tasa de errores ICMP. En ese caso, los primeros puertos cerrados pueden producir port unreachable y los siguientes quedar como open|filtered aunque compartan el mismo estado real. Empieza por puertos plausibles:

UDP frecuente
sudo nmap -sU -n -Pn --top-ports 100 --reason \
-oA scans/05-udp-top TARGET_IP

Después aplica detección de versiones a candidatos. -sV envía payloads de protocolo que pueden obtener una respuesta:

Validar candidatos UDP
sudo nmap -sU -sV -n -Pn -p UDP_PORT_LIST --reason \
-oA scans/06-udp-services TARGET_IP

open|filtered no confirma el servicio. Usa una petición válida del protocolo, una captura y, si es posible, una observación desde otra posición. Una respuesta de aplicación confirma más que la desaparición del silencio. Un error de parsing también puede ser útil si demuestra que el proceso reconoció parte del protocolo.

-p- cubre los 65.535 puertos TCP:

Cobertura TCP completa
sudo nmap -sS -n -Pn -p- --reason --stats-every 30s \
-oA scans/07-tcp-all TARGET_IP

--stats-every 30s solo informa progreso. La precisión depende de pérdida, RTT, rate limiting, timeouts, retransmisiones y cambios del objetivo. Si una ejecución rápida encuentra menos puertos, no concluyas que desaparecieron. Repite los candidatos con timing conservador y una sola variable modificada.

Cuando dos pasadas discrepan, compara primero si ambas enviaron el mismo tipo y número de probes. Después revisa retransmisiones, razones, ruta y captura. Un puerto que aparece closed en una ejecución y filtered en otra puede señalar una ACL dinámica, pero también que el segundo RST se perdió. La discrepancia es una hipótesis que se investiga, no un resultado que se promedia.

Pasa los puertos confirmados a detección de servicios. Abre después el protocolo o servicio canónico. Usa timing, rutas, filtros y evasión cuando dos posiciones o técnicas discrepen.