Aprende a Escanear Puertos de Red con Nmap

NmapNmapBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá los fundamentos del escaneo de puertos de red utilizando Nmap, una poderosa herramienta de escaneo de red de código abierto que es muy apreciada por los profesionales de ciberseguridad. El escaneo de puertos es una técnica crucial para los administradores de red y los analistas de seguridad para descubrir los puertos abiertos y los servicios en un sistema objetivo.

Aprenderá a realizar un escaneo TCP Connect básico, un método de escaneo común y confiable. Este enfoque establece una conexión TCP completa con el puerto objetivo para verificar su estado. Al final de este laboratorio, podrá identificar los servicios abiertos en una red, un primer paso clave en la evaluación de la seguridad de la red y el endurecimiento del sistema.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/installation("Installation and Setup") nmap/NmapGroup -.-> nmap/basic_syntax("Basic Command Syntax") nmap/NmapGroup -.-> nmap/tcp_connect_scan("Basic TCP Connect Scan") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") subgraph Lab Skills nmap/installation -.-> lab-415936{{"Aprende a Escanear Puertos de Red con Nmap"}} nmap/basic_syntax -.-> lab-415936{{"Aprende a Escanear Puertos de Red con Nmap"}} nmap/tcp_connect_scan -.-> lab-415936{{"Aprende a Escanear Puertos de Red con Nmap"}} nmap/save_output -.-> lab-415936{{"Aprende a Escanear Puertos de Red con Nmap"}} nmap/target_specification -.-> lab-415936{{"Aprende a Escanear Puertos de Red con Nmap"}} end

Comprender los puertos y servicios de red

Antes de comenzar a aprender sobre el escaneo, es fundamental entender qué son los puertos de red y por qué son importantes en el campo de la ciberseguridad. Los puertos de red juegan un papel vital al permitir que diferentes servicios se comuniquen a través de una red. Son como puertas por las cuales los datos pueden entrar y salir de una computadora.

¿Qué son los puertos de red?

Los puertos de red son puntos finales virtuales para la comunicación en una red de computadoras. Piénsalos como direcciones específicas dentro de una computadora donde diferentes servicios pueden recibir y enviar datos. Cada puerto se identifica por un número que va desde 0 hasta 65535. Diferentes servicios suelen utilizar puertos específicos. Por ejemplo, los servidores web a menudo utilizan el puerto 80 para HTTP (Protocolo de Transferencia de Hipertexto) y el puerto 443 para HTTPS (HTTP Seguro), que es una versión más segura de HTTP. Los servicios SSH (Secure Shell), que se utilizan para acceder de forma segura a una computadora de forma remota, utilizan el puerto 22.

Cuando un servicio se ejecuta en una computadora, "escucha" en uno o más puertos para recibir conexiones entrantes. Esto significa que espera a que los datos lleguen a un puerto en particular para poder procesarlos. El escaneo de puertos es el proceso de comprobar qué puertos en una computadora están "abiertos" (tienen un servicio escuchando en ellos) o "cerrados" (no aceptan conexiones). Al escanear puertos, podemos identificar qué servicios se están ejecutando en una computadora y, potencialmente, encontrar vulnerabilidades de seguridad.

Configurar un servicio para escanear

Ahora, configuremos un servicio simple en su máquina local que podamos escanear. Utilizaremos el servidor HTTP incorporado de Python, que es una forma conveniente de crear un servidor web básico. Este servidor escuchará en el puerto 8080.

Primero, asegúrese de estar en el directorio del proyecto. El directorio del proyecto es donde se almacenarán todos los archivos relacionados con este experimento. Puede navegar a él utilizando el siguiente comando:

cd /home/labex/project

Ahora, creemos un archivo HTML simple que nuestro servidor alojará. HTML (Lenguaje de Marcado de Hipertexto) es el lenguaje estándar para crear páginas web. El siguiente comando creará un archivo index.html con un simple mensaje de bienvenida:

echo "<html><body><h1>Welcome to Port Scanning Lab</h1></body></html>" > index.html

A continuación, iniciaremos un servidor HTTP de Python en el puerto 8080. Lo ejecutaremos en segundo plano para que pueda continuar con el laboratorio mientras el servidor está en funcionamiento. El símbolo & al final del comando le dice al sistema que ejecute el comando en segundo plano.

python3 -m http.server 8080 &

Debería ver una salida similar a:

Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...

Esto significa que un servidor web ahora está en funcionamiento en su máquina y escuchando en el puerto 8080. Para verificar que el servidor está funcionando correctamente, puede abrir una nueva terminal y utilizar el comando curl. curl es una herramienta utilizada para transferir datos desde o hacia un servidor. El siguiente comando enviará una solicitud al servidor que se está ejecutando en su máquina local en el puerto 8080:

curl http://localhost:8080

Debería ver el contenido HTML que creamos anteriormente. Esto confirma que nuestro servicio está en funcionamiento y listo para ser escaneado.

Introducción a Nmap y el escaneo TCP Connect

Ahora que tenemos un servicio funcionando, es hora de explorar Nmap y entender cómo usarlo para el escaneo de puertos. El escaneo de puertos es una técnica crucial en la seguridad de redes, ya que nos ayuda a identificar los puertos abiertos en un sistema objetivo. Los puertos abiertos pueden ser puntos de entrada potenciales para los atacantes, por lo que saber qué puertos están abiertos y qué servicios se ejecutan en ellos es esencial para proteger una red.

¿Qué es Nmap?

Nmap, de Network Mapper, es una de las herramientas más conocidas y poderosas en el campo del descubrimiento de redes y la auditoría de seguridad. Ofrece una amplia gama de capacidades que son extremadamente útiles para administradores de red y profesionales de seguridad.

  • Descubrir hosts y servicios en una red: Nmap puede ayudarte a averiguar qué dispositivos están conectados a una red y qué servicios ofrecen. Por ejemplo, puede detectar si hay servidores web, servidores de archivos o servidores de correo en una red local.
  • Identificar puertos abiertos en sistemas objetivos: Al enviar paquetes a diferentes puertos en un sistema objetivo, Nmap puede determinar qué puertos están abiertos y listos para aceptar conexiones.
  • Determinar qué servicios se ejecutan en esos puertos: Una vez que se identifica un puerto abierto, Nmap puede intentar averiguar qué servicio se ejecuta en ese puerto. Por ejemplo, si el puerto 80 está abierto, es probable que esté funcionando un servidor web.
  • Detectar sistemas operativos y versiones de servicios: Nmap puede analizar las respuestas de un sistema objetivo para adivinar el sistema operativo que está ejecutando y las versiones de los servicios. Esta información se puede utilizar para identificar posibles vulnerabilidades.
  • Realizar varios tipos de escaneos para diferentes escenarios: Dependiendo de tus necesidades, Nmap puede realizar diferentes tipos de escaneos, como escaneos TCP Connect, escaneos SYN, escaneos UDP, etc.

Comprender el escaneo TCP Connect

El escaneo TCP Connect es la forma más fundamental de escaneo TCP. Para entender cómo funciona, primero necesitamos saber sobre el handshake TCP de tres vías. El handshake TCP de tres vías es un proceso que dos dispositivos utilizan para establecer una conexión confiable. Involucra tres pasos: el cliente envía un paquete SYN (sincronizar) al servidor, el servidor responde con un paquete SYN - ACK (sincronizar - confirmación), y luego el cliente envía un paquete ACK (confirmación) para completar la conexión.

Así es cómo funciona el escaneo TCP Connect:

  1. Nmap intenta establecer un handshake TCP de tres vías completo con el puerto objetivo. Actúa como un cliente normal que intenta conectarse a un servicio en el sistema objetivo.
  2. Si la conexión es exitosa, es decir, si se completan los tres pasos del handshake, el puerto se marca como "abierto". Esto indica que hay un servicio escuchando en ese puerto y listo para aceptar conexiones.
  3. Si la conexión es rechazada, por ejemplo, si el sistema objetivo envía un paquete RST (restablecer), el puerto se marca como "cerrado". Esto significa que no hay ningún servicio escuchando en ese puerto.
  4. Si no hay respuesta del sistema objetivo, el puerto se marca como "filtrado". Esto generalmente significa que el puerto podría estar bloqueado por un firewall o algún otro mecanismo de seguridad.

Es importante tener en cuenta que el escaneo TCP Connect es confiable porque establece completamente una conexión. Sin embargo, no es muy sigiloso. Dado que crea una conexión real, deja registros de conexión en el sistema objetivo, lo que podría alertar al administrador del sistema.

Realizar tu primer escaneo TCP Connect con Nmap

Echemos un vistazo al servicio que configuramos en el paso anterior. Para hacer esto, abriremos una nueva terminal. La terminal es una interfaz de línea de comandos donde podemos ingresar comandos para interactuar con el sistema operativo.

Una vez abierta la terminal, ejecuta el siguiente comando:

nmap -sT localhost -p 8080

Desglosemos este comando para entender qué hace cada parte:

  • nmap: Este es el nombre de la herramienta que estamos utilizando. Le dice al sistema que queremos ejecutar el programa Nmap.
  • -sT: Esta es una bandera que especifica un escaneo TCP Connect. Cuando Nmap ve esta bandera, realizará un escaneo TCP Connect en el objetivo.
  • localhost: Este es el objetivo que estamos escaneando. En este caso, localhost se refiere a nuestra propia máquina. Es una forma de probar el proceso de escaneo en el sistema local.
  • -p 8080: Esta opción especifica el puerto que queremos escanear. Aquí, estamos escaneando el puerto 8080.

Después de ejecutar el comando, deberías ver una salida similar a esta:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-20 12:34 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).

PORT     STATE SERVICE
8080/tcp open  http-proxy

Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds

La salida muestra los detalles del escaneo. Nos dice que Nmap ha comenzado, el objetivo que ha escaneado, si el host está activo y el estado del puerto que hemos escaneado. En este caso, el puerto 8080 se marca como "abierto" y el servicio que se ejecuta en él se identifica como "http - proxy".

Ahora, guardemos esta salida en un archivo para futuras referencias. Guardar la salida es útil porque podemos revisarla más tarde o compartirla con otros. Para hacer esto, ejecuta el siguiente comando:

nmap -sT localhost -p 8080 > /home/labex/project/nmap_scan_output.txt

Este comando realiza el mismo escaneo TCP Connect que antes. El símbolo > se utiliza para redirigir la salida del comando. En lugar de mostrar la salida en la pantalla de la terminal, se escribirá en un archivo llamado nmap_scan_output.txt ubicado en el directorio /home/labex/project.

Veamos el contenido del archivo para confirmar que la salida se ha guardado correctamente. Ejecuta el siguiente comando:

cat /home/labex/project/nmap_scan_output.txt

El comando cat se utiliza para mostrar el contenido de un archivo. Después de ejecutar este comando, deberías ver la misma salida de Nmap que antes, ahora guardada en el archivo.

Analizar los resultados del escaneo y comprender los estados de los puertos

Ahora que hemos realizado con éxito nuestro primer escaneo, es hora de profundizar en los resultados y entender lo que significa cada parte de la información. Este paso es crucial, ya que nos ayuda a dar sentido a los datos que hemos recopilado y a sacar conclusiones significativas sobre el sistema objetivo.

Comprender los estados de los puertos en Nmap

Nmap, una poderosa herramienta de escaneo de redes, clasifica los puertos en seis estados diferentes. Cada estado proporciona información valiosa sobre el estado de un puerto en el sistema objetivo.

  1. abierto (open) - Cuando un puerto se informa como "abierto", significa que una aplicación está escuchando activamente conexiones entrantes en ese puerto. Esto indica que hay un servicio en funcionamiento y listo para aceptar solicitudes.
  2. cerrado (closed) - Un puerto "cerrado" significa que actualmente no hay ninguna aplicación escuchando en él. Sin embargo, el puerto sigue siendo accesible, lo que significa que podría ser utilizado por un servicio en el futuro.
  3. filtrado (filtered) - Si Nmap informa un puerto como "filtrado", significa que no puede determinar si el puerto está abierto o no. Esto suele deberse a que un firewall o alguna otra medida de seguridad está bloqueando el acceso al puerto.
  4. no filtrado (unfiltered) - Un puerto "no filtrado" significa que Nmap puede acceder al puerto, pero no puede determinar si está abierto o cerrado. Esto puede deberse a varios factores, como la configuración del sistema objetivo o las condiciones de la red.
  5. abierto|filtrado (open|filtered) - Cuando Nmap informa un puerto como "abierto|filtrado", significa que no puede determinar si el puerto está abierto o filtrado. Este es un resultado común cuando se realiza un escaneo a través de un firewall u otro dispositivo de seguridad.
  6. cerrado|filtrado (closed|filtered) - Un puerto "cerrado|filtrado" significa que Nmap no puede determinar si el puerto está cerrado o filtrado. Al igual que en el estado "abierto|filtrado", esto suele deberse a medidas de seguridad que bloquean el acceso al puerto.

En nuestros resultados de escaneo, el puerto 8080 se informó como "abierto". Esto nos dice que nuestro servidor HTTP de Python está escuchando correctamente en ese puerto y listo para aceptar conexiones entrantes.

Comprender la detección de servicios

Es posible que hayas notado que Nmap identificó el servicio en el puerto 8080 como "http - proxy". Nmap utiliza una base de datos de asignaciones de puertos comunes para hacer una suposición informada sobre qué servicio podría estar en funcionamiento en un puerto. El puerto 8080 se utiliza comúnmente para servicios de proxy HTTP, por lo que Nmap hizo esa suposición en base a su base de datos.

Sin embargo, esta suposición no siempre es precisa. Para obtener información más precisa sobre el servicio que se ejecuta en un puerto, puedes utilizar la bandera de detección de servicios (-sV). Esta bandera le dice a Nmap que realice comprobaciones adicionales para determinar el servicio exacto y su versión.

Intentemos utilizar la bandera de detección de servicios:

nmap -sT -sV localhost -p 8080 > /home/labex/project/nmap_service_output.txt

En este comando, -sT especifica un escaneo de conexión TCP, -sV habilita la detección de servicios, localhost es el objetivo que estamos escaneando, -p 8080 especifica que solo estamos escaneando el puerto 8080 y > /home/labex/project/nmap_service_output.txt redirige la salida a un archivo.

Ahora, veamos la salida:

cat /home/labex/project/nmap_service_output.txt

Después de ejecutar este comando, deberías ver información adicional sobre el servicio que se ejecuta en el puerto 8080. Podría identificar el servicio como "Python http.server" o algo similar, lo que te dará una comprensión más precisa de lo que se está ejecutando en ese puerto.

Explorar más información con el modo detallado

Si quieres una comprensión más detallada de lo que está haciendo Nmap durante el escaneo, puedes utilizar el modo detallado con la bandera -v. El modo detallado proporciona información adicional sobre el proceso de escaneo, incluyendo detalles sobre los paquetes enviados y recibidos, información de tiempo y los pasos exactos que Nmap dio para determinar el estado del puerto.

Intentemos utilizar el modo detallado:

nmap -sT -v localhost -p 8080 > /home/labex/project/nmap_verbose_output.txt

En este comando, -sT es para el escaneo de conexión TCP, -v habilita el modo detallado, localhost es el objetivo, -p 8080 especifica el puerto a escanear y > /home/labex/project/nmap_verbose_output.txt redirige la salida a un archivo.

Veamos la salida:

cat /home/labex/project/nmap_verbose_output.txt

La salida detallada te dará una visión más profunda del proceso de escaneo, ayudándote a entender cómo Nmap llega a sus conclusiones sobre el estado del puerto y los servicios que se ejecutan en el sistema objetivo.

Ampliar tus conocimientos de escaneo

Ahora que has comprendido los conceptos básicos del escaneo TCP Connect, es hora de llevar tus conocimientos al siguiente nivel. En esta sección, aprenderemos cómo escanear múltiples puertos y cómo interpretar los resultados. Esto te ayudará a obtener una visión más completa de los servicios de red que se ejecutan en un sistema objetivo.

Escanear puertos comunes

Comencemos escaneando los puertos más comunes en tu máquina local, también conocida como localhost. Estos puertos comunes suelen ser utilizados por servicios de red bien conocidos.

nmap -sT localhost --top-ports 10 > /home/labex/project/common_ports_scan.txt

En este comando, la opción -sT le dice a Nmap que realice un escaneo TCP Connect. localhost especifica el objetivo, que es tu propia máquina. La opción --top-ports 10 instruye a Nmap a escanear los 10 puertos más utilizados. El símbolo > redirige la salida del escaneo a un archivo llamado common_ports_scan.txt en el directorio /home/labex/project.

Ahora, veamos los resultados de este escaneo:

cat /home/labex/project/common_ports_scan.txt

El comando cat se utiliza para mostrar el contenido de un archivo. Cuando ejecutes este comando, verás una lista de puertos. Por ejemplo, el puerto 21 se utiliza para FTP (Protocolo de Transferencia de Archivos), el puerto 22 para SSH (Secure Shell), el puerto 23 para Telnet, el puerto 25 para SMTP (Protocolo Simple de Transferencia de Correo) y el puerto 80 para HTTP (Protocolo de Transferencia de Hipertexto). En tu sistema, es probable que la mayoría de estos puertos estén cerrados, a menos que tengas servicios específicos en funcionamiento. Por ejemplo, si nuestro servidor HTTP en el puerto 8080 está entre los 10 puertos principales, se mostrará como abierto.

Escanear un rango de puertos

Además de escanear puertos comunes, también puedes escanear un rango específico de puertos. Vamos a escanear los puertos del 8000 al 8100 en tu localhost.

nmap -sT localhost -p 8000-8100 > /home/labex/project/port_range_scan.txt

Aquí, la opción -p 8000 - 8100 le dice a Nmap que escanee los puertos en el rango del 8000 al 8100. La salida de este escaneo se redirige a un archivo llamado port_range_scan.txt en el directorio /home/labex/project.

Para ver los resultados de este escaneo:

cat /home/labex/project/port_range_scan.txt

En la salida, deberías ver que el puerto 8080 (si está dentro del rango escaneado) está abierto, mientras que los otros puertos del rango probablemente estén cerrados.

Combinar técnicas

Vamos a combinar las técnicas que hemos aprendido hasta ahora. Realizaremos un escaneo TCP Connect y también intentaremos detectar los servicios que se ejecutan en los puertos en el rango del 8000 al 8100.

nmap -sT -sV localhost -p 8000-8100 > /home/labex/project/combined_scan.txt

La opción -sV se utiliza para habilitar la detección de servicios. Esto significa que Nmap no solo te dirá si un puerto está abierto o cerrado, sino que también intentará identificar el servicio que se ejecuta en los puertos abiertos. La salida de este escaneo combinado se guarda en el archivo combined_scan.txt en el directorio /home/labex/project.

Para comprobar los resultados:

cat /home/labex/project/combined_scan.txt

Este escaneo proporciona la información más detallada hasta ahora. Muestra el estado de cada puerto en el rango especificado e intenta identificar los servicios que se ejecutan en los puertos abiertos.

Limpieza

Antes de terminar este laboratorio, necesitamos limpiar deteniendo el servidor HTTP de Python que hemos estado utilizando. Primero, necesitamos encontrar el ID de proceso (PID) del servidor.

ps aux | grep "python3 -m http.server 8080"

El comando ps aux lista todos los procesos en ejecución en tu sistema. El símbolo | es una tubería que toma la salida del comando ps aux y la pasa al comando grep. El comando grep luego busca la línea que contiene el texto "python3 -m http.server 8080", que es el comando utilizado para iniciar el servidor HTTP de Python.

Busca la línea que muestra el proceso del servidor HTTP de Python. La segunda columna de esta línea contiene el ID de proceso (PID). Una vez que hayas anotado el PID, puedes usar el comando kill para detener el proceso.

kill <PID>

Reemplaza <PID> con el ID de proceso real que encontraste. Por ejemplo, si el PID es 1234, ejecutarías:

kill 1234

Resumen

En este laboratorio, has aprendido los fundamentos del escaneo de puertos de red utilizando Nmap. Has practicado la configuración de un servicio para el escaneo, la realización de escaneos TCP Connect básicos y el análisis de los resultados del escaneo.

Las habilidades clave adquiridas incluyen la comprensión de los puertos de red y la importancia de escanearlos, la configuración de un servidor HTTP simple, el uso de Nmap para escaneos TCP Connect, la interpretación de los estados de los puertos, el uso de opciones de Nmap para obtener información detallada, el escaneo de múltiples puertos y rangos, y la identificación de servicios en puertos abiertos. Estas habilidades son la base del reconocimiento de redes, esencial para la administración de redes y la evaluación de seguridad. A medida que avances en ciberseguridad, puedes basarte en estos conceptos básicos para explorar técnicas avanzadas y prácticas de seguridad.