Introducción
En este laboratorio, aprenderás los fundamentos de la comunicación en red utilizando Netcat, una herramienta de red versátil a menudo denominada la "navaja suiza" de las redes. Descubrirás cómo esta potente utilidad permite leer y escribir datos a través de conexiones de red utilizando los protocolos TCP o UDP.
A través de la práctica, explorarás los conceptos básicos de la comunicación cliente-servidor, crearás un sistema de chat sencillo y comprenderás conceptos esenciales de redes, como los puertos. El laboratorio también introducirá técnicas básicas de cifrado para la transmisión segura de datos.
Instalación de Netcat
Antes de comenzar nuestra comunicación de agentes secretos, necesitamos equiparnos con la herramienta adecuada. A Netcat se le suele llamar la "navaja suiza" de las herramientas de red porque puede manejar muchas tareas diferentes. Instalemos Netcat en nuestro sistema paso a paso.
- Primero, abramos la terminal. En tu escritorio, localiza y abre la Terminal Xfce. La terminal es donde escribiremos todos nuestros comandos para trabajar con Netcat.

Nota: Los usuarios gratuitos no pueden conectarse a Internet, por lo que Netcat ya está preinstalado en el entorno del laboratorio. Puedes saltar al punto 4 de la lista (verificar si Netcat está instalado). Actualízate a usuario pro para practicar la instalación de Netcat por tu cuenta.
Solo para usuarios Pro
- Una vez abierta la terminal, debemos actualizar las listas de paquetes. Esto garantiza que obtengamos la versión más reciente de Netcat. Escribe el siguiente comando y presiona Enter:
sudo apt update
El sistema podría pedirte tu contraseña. Escríbela (no verás los caracteres mientras escribes) y presiona Enter. La parte sudo significa que estamos ejecutando este comando con privilegios de administrador.
- Ahora que nuestras listas de paquetes están actualizadas, instalemos Netcat. El gestor de paquetes manejará todas las dependencias automáticamente. Introduce el siguiente comando:
sudo apt install netcat -y
El indicador -y responde automáticamente "sí" a cualquier solicitud, haciendo que la instalación sea más fluida. Esto es útil cuando estás seguro de que deseas instalar el paquete.
nc -h
Deberías ver una salida que comienza con "OpenBSD netcat" seguida de una lista de opciones. Esto significa que Netcat está instalado y listo para usarse. El indicador -h muestra la información de ayuda, lo cual es una buena forma de probar si un programa funciona.
- ¡Felicidades! Acabas de instalar una potente herramienta de red. Netcat tiene muchas funciones, desde la transferencia simple de archivos hasta la creación de conexiones de red. En este laboratorio, nos centraremos en su uso básico para ayudarte a comprender sus capacidades. Piensa en Netcat como una forma sencilla de conectar computadoras y enviar información entre ellas.
Comprensión de los puertos y creación de un oyente (listener)
Ahora que tenemos nuestra herramienta de comunicación lista, aprendamos sobre los puertos y configuremos un oyente. En redes, los puertos son como diferentes canales en una radio: permiten que ocurran múltiples comunicaciones simultáneamente en el mismo dispositivo. Piénsalos como puertas numeradas donde cada puerta conduce a un servicio o aplicación diferente en tu computadora.
Creemos un oyente. Usaremos el puerto 12345 para nuestra comunicación. Los números de puerto van del 0 al 65535, y elegimos el 12345 porque es fácil de recordar y normalmente no lo utilizan los servicios del sistema. En la terminal, escribe:
nc -l 12345Este comando le dice a Netcat que escuche (
-l) en el puerto 12345. La-lsignifica modo "listen" (escucha), lo que significa que tu computadora esperará conexiones entrantes en este puerto.La terminal parecerá haberse bloqueado. ¡No te preocupes! Este es el comportamiento esperado porque Netcat ahora está escuchando activamente y esperando a que alguien se conecte al puerto 12345. El cursor parpadeante significa que el programa se está ejecutando correctamente en modo de escucha.
Para probar nuestro oyente, necesitamos abrir otra ventana de terminal. Puedes hacerlo haciendo clic derecho en el icono de la terminal y seleccionando "New Terminal" o usando el atajo Ctrl+Shift+N. Esta segunda terminal actuará como nuestro "cliente" que se conecta al oyente.
En esta nueva terminal, nos conectaremos a nuestro oyente. Escribe:
nc localhost 12345Este comando le dice a Netcat que se conecte a
localhost(que significa tu propia computadora) en el puerto 12345.localhostes un nombre de host especial que siempre hace referencia a tu máquina actual.Ahora, escribe un mensaje sencillo como "Hello" en esta segunda terminal y presiona Enter. Deberías ver el mensaje aparecer en la primera terminal donde se está ejecutando el oyente. Esto demuestra cómo los datos viajan desde la terminal que se conecta a la terminal que escucha a través del puerto de red.

Puedes seguir escribiendo mensajes en cualquiera de las terminales y aparecerán en la otra. Esto muestra la capacidad full-duplex de Netcat, lo que significa que la comunicación puede fluir en ambos sentidos simultáneamente. Intenta enviar algunos mensajes de ida y vuelta para ver cómo funciona.
Para finalizar la conexión, presiona Ctrl+C en ambas terminales. Este atajo de teclado envía una señal de interrupción que cierra las sesiones de Netcat de forma limpia. Es importante cerrar las conexiones correctamente cuando termines de probar.
Transferencia de archivos con Netcat
Ahora que hemos aprendido a establecer una comunicación de red básica con Netcat, exploremos una de sus aplicaciones más prácticas: transferir archivos entre sistemas. Esta capacidad, sencilla pero potente, convierte a Netcat en una herramienta valiosa para administradores de sistemas e ingenieros de redes.
Primero, crearemos un archivo de muestra para transferir. En tu terminal, escribe:
cd ~/project echo "Top Secret: The cake recipe is actually a lie" > secret.txtEste comando hace dos cosas: cambia a tu directorio de proyecto y crea un nuevo archivo llamado
secret.txtque contiene nuestro mensaje de ejemplo. El símbolo>redirige la salida del comandoechoa un archivo.Ahora configuraremos el extremo receptor de nuestra transferencia de archivos. Abre una ventana de terminal y ejecuta:
cd ~/project nc -l 12345 > received_secret.txtAquí,
nc -l 12345inicia Netcat en modo escucha en el puerto 12345. El símbolo>redirige cualquier dato entrante a un nuevo archivo llamadoreceived_secret.txt. Esta terminal esperará silenciosamente conexiones entrantes.En una ventana de terminal separada (manteniendo la primera en ejecución), enviaremos nuestro archivo:
cd ~/project nc localhost 12345 < secret.txtEste comando utiliza Netcat para conectarse a nuestro oyente (
localhostsignifica "esta misma computadora") en el puerto 12345. El símbolo<le dice a Netcat que usesecret.txtcomo entrada, enviando efectivamente el contenido del archivo a través de la conexión de red.La transferencia ocurre instantáneamente porque ambos extremos están en la misma máquina. Para verificar la transferencia exitosa, comprueba el contenido del archivo recibido:
cat received_secret.txtEl comando
catmuestra el contenido del archivo, que debería coincidir exactamente con nuestro mensaje secreto original.

- ¡Felicidades! Has transferido un archivo con éxito usando Netcat. Aunque usamos
localhostpara esta demostración, el mismo proceso funciona entre diferentes computadoras en una red; solo reemplazalocalhostcon la dirección IP de la computadora receptora. Este método sencillo puede ser increíblemente útil para transferencias rápidas de archivos cuando no hay protocolos más complejos disponibles.
Implementación de comunicación cifrada
En nuestro paso final, añadamos una capa de seguridad a nuestra comunicación implementando cifrado mediante OpenSSL e integrándolo con Netcat. El cifrado es esencial para proteger la información confidencial de ser interceptada y leída por partes no autorizadas durante la transmisión en red.
Ya hemos aprendido a usar OpenSSL en laboratorios anteriores. OpenSSL proporciona funciones criptográficas robustas que aprovecharemos para asegurar nuestros mensajes. Específicamente, usaremos el comando openssl enc para cifrar y descifrar mensajes utilizando el cifrado AES-256-CBC, que es un algoritmo de cifrado simétrico fuerte. También usaremos una frase de contraseña para derivar la clave de cifrado; piensa en esto como un secreto compartido entre el remitente y el receptor.
Primero, creemos el script del remitente. Este script se encargará de cifrar y enviar mensajes. Abre un nuevo archivo llamado
secure_sender.sh:nano secure_sender.shAñade el siguiente contenido al archivo (puedes copiar y pegar el contenido):
#!/bin/bash echo "Secure Sender - Enter messages to send. Press Ctrl+C to exit." while true; do echo "Enter message:" read message encrypted=$(echo "$message" | openssl enc -aes-256-cbc -salt -base64 -pbkdf2 -iter 10000 -pass pass:secretpassword 2> /dev/null) echo "$encrypted" | nc -N localhost 12345 doneEste script funciona de la siguiente manera:
- Te solicita mensajes continuamente en un bucle.
- Toma tu entrada y la envía a través de OpenSSL para su cifrado.
- Utiliza Netcat (
nc) para enviar los datos cifrados al puerto 12345 en localhost. - Los parámetros de cifrado incluyen salt para mayor seguridad, codificación base64 para una transmisión segura y derivación de clave PBKDF2 con 10,000 iteraciones.

Presiona
Ctrl+X, luegoYyEnterpara guardar y salir del archivo. Haz que el script sea ejecutable:chmod +x secure_sender.shAhora, creemos el script del receptor. Este script escuchará y descifrará los mensajes entrantes. Abre un nuevo archivo llamado
secure_receiver.sh:nano secure_receiver.shAñade el siguiente contenido:
#!/bin/bash echo "Secure Receiver - Waiting for messages. Press Ctrl+C to exit." while true; do encrypted=$(nc -l 12345) if [ ! -z "$encrypted" ]; then decrypted=$(echo "$encrypted" | openssl enc -aes-256-cbc -d -salt -base64 -pbkdf2 -iter 10000 -pass pass:secretpassword 2> /dev/null) echo "Received message: $decrypted" fi doneEn el entorno Ubuntu 22.04 utilizado en este laboratorio, la sintaxis predeterminada del oyente OpenBSD Netcat es
nc -l 12345. No añadas-pcuando uses-laquí.Este script:
- Escucha continuamente en el puerto 12345 los datos entrantes.
- Cuando se reciben datos, los envía a través de OpenSSL para su descifrado.
- Utiliza los mismos parámetros de cifrado que el remitente para descifrar correctamente el mensaje.
- Muestra el mensaje original en texto plano.
Presiona
Ctrl+X, luegoYyEnterpara guardar y salir del archivo. Haz que el script sea ejecutable:chmod +x secure_receiver.shAhora, probemos nuestro sistema de comunicación cifrada. Necesitarás dos ventanas de terminal abiertas simultáneamente: una para el receptor y otra para el remitente.
En la primera terminal, inicia el receptor:
./secure_receiver.shVerás un mensaje indicando que el receptor está esperando mensajes. El receptor ahora está escuchando activamente en el puerto 12345.
En la segunda terminal, inicia el remitente:
./secure_sender.shSe te pedirá que introduzcas mensajes. Todo lo que escribas aquí se cifrará antes de enviarse a través de la red.
En la terminal del remitente, escribe un mensaje y presiona Enter. Deberías ver cómo se envía el mensaje cifrado (aunque solo verás la versión cifrada brevemente mientras se transmite).

En la terminal del receptor, deberías ver aparecer el mensaje descifrado exactamente como lo escribiste en la terminal del remitente.
Puedes seguir enviando mensajes desde la terminal del remitente, y se cifrarán, enviarán, recibirán y descifrarán automáticamente en la terminal del receptor. Esto demuestra un ciclo completo de comunicación segura.
Para finalizar la comunicación, presiona Ctrl+C en ambas terminales. Esto termina de forma segura ambos scripts.
Esta configuración demuestra un sistema de comunicación cifrada sencillo pero eficaz. Aunque usamos localhost para las pruebas, este mismo enfoque funciona a través de redes. Los mensajes se cifran automáticamente antes de la transmisión y se descifran al recibirlos, proporcionando un canal seguro para la comunicación. Recuerda que en aplicaciones del mundo real, querrías utilizar métodos más seguros para el intercambio de claves que una contraseña codificada de forma rígida.
Resumen
En este laboratorio, has aprendido los fundamentos de la comunicación en red utilizando Netcat y has explorado técnicas básicas de cifrado para la transferencia segura de datos. Has practicado la instalación de Netcat, el establecimiento de conexiones a través de puertos específicos y la transferencia de archivos entre sistemas.
Esta experiencia práctica demostró la importancia del cifrado en las comunicaciones de red mediante una implementación práctica con OpenSSL. Estas habilidades fundamentales proporcionan un punto de partida sólido para comprender conceptos de ciberseguridad más complejos y protocolos de comunicación segura.



