Onion

Description

Ft_onion: Hidden Service en Tor con Docker

Este proyecto es una introducción práctica a los hidden services de la red Tor, desarrollado durante el bootcamp de ciberseguridad en 42Madrid. La idea no es solo entender qué es Tor a nivel teórico, sino montar algo real: un servicio web accesible exclusivamente desde la red Tor y acompañado de acceso SSH, todo bien encapsulado en contenedores Docker.


🌐¿De qué va Tor y los hidden services?

A estas alturas, Tor no debería sonar extraño en el mundillo IT. En resumen, Tor enruta el tráfico a través de múltiples nodos distribuidos, haciendo que el origen y el destino sean prácticamente imposibles de rastrear. Resultado: anonimato.

Uno de los usos menos conocidos (y más interesantes desde el punto de vista técnico) son los hidden services, servicios web o de red que:

  • No tienen IP pública

  • No dependen de DNS tradicionales

  • Solo son accesibles desde Tor mediante direcciones .onion

Sí, es el famoso “Dark Web”, que más allá de su mala fama, es un laboratorio interesante para aprender networking, seguridad y servicios distribuidos.


🧩Objetivo del proyecto

El reto era bastante claro:

  • Crear una web estática accesible únicamente a través de una URL .onion

  • Publicarla como hidden service en Tor

  • Servirla con Nginx

  • Permitir acceso SSH fortificado

  • No abrir puertos innecesarios ni usar firewall adicional

  • Todo funcionando sobre HTTP (80) y SSH (4242)

Y como extra, hacerlo bonito y seguro, no una triste página HTML sin alma.


🧩 Requisitos principales del proyecto

  • El sitio web estático debe ser accesible únicamente a través de una URL .onion.

  • El servidor debe correr sobre Nginx (HTTP por puerto 80) y permitir acceso por SSH en el puerto 4242.

  • No se permite la apertura de otros puertos ni el uso de reglas de firewall.

  • Archivos de configuración requeridos: index.html, nginx.conf, sshd_config, torrc.

 


⚙️Stack técnico

Todo el proyecto se apoya en Docker, lo que permite probar configuraciones sin destrozar el sistema anfitrión (algo que se agradece bastante cuando juegas con Tor y SSH).

El proyecto está dividido en dos contenedores principales:

🔧 Server:

  • Ejecuta Nginx, Tor y OpenSSH.

  • Aloja la web estática.

  • Expone los hidden services (HTTP y SSH).

💻 Client:

  • Se usa únicamente para probar conexiones SSH a través de Tor.
  • Incluye Tor y cliente SSH.

Separar cliente y servidor hace que las pruebas sean más limpias y realistas.

 


🐋Contenedor Server: el corazón del proyecto.

El servidor está basado en Debian y configura:

  • Nginx → sirviendo la web estática en el puerto 80.

  • Tor → gestionando los hidden services.

  • OpenSSH → escuchando en el puerto 4242, bajo una configuración segura.

Toda la magia está en copiar correctamente los archivos de configuración:

  • nginx.conf

  • torrc

  • sshd_config

  • index.html

Además, se crea un usuario específico para SSH (sshusr) con permisos limitados, siguiendo buenas prácticas básicas de hardening.

Tor se encarga de generar automáticamente las direcciones .onion, que quedan almacenadas en volúmenes para poder consultarlas fácilmente.

 

🐋Contenedor Client: probando el acceso.

El cliente es más sencillo, pero cumple una función clave: validar que el acceso SSH funciona realmente a través de Tor.

Desde este contenedor se puede ejecutar:

torify ssh sshusr@xxxxxxxx.onion -p 4242

Si esto conecta, sabes que todo el circuito (Tor + SSH + hardening) está bien montado.


⚙️ Automatización con Makefile

Se incluyó un Makefile para facilitar el despliegue de los contenedores:

  • make – Construye ambos contenedores e imágenes.

  • make server – Construye solo la imagen del servidor.

  • make client – Construye la imagen del cliente.

  • make exe – Lanza el contenedor cliente y abre una terminal Bash.

  • make clean – Elimina y detiene los contenedores.


🔐 Cómo probarlo tú mismo

Necesitas:

  • Docker (Docker Desktop va perfecto)

  • Tor Browser para acceder a la web

  • make (opcional, pero recomendable)

Pasos rápidos:

  • Clonas el repositorio
  • Ejecutas make && make exec
  • El servidor genera las direcciones .onion
  • Accedes:
    • Web → usando Tor Browser
    • SSH → usando el contenedor cliente con torify

El contenedor del servidor genera dos URLs .onion dentro del volumen /srv/url/, una para el servicio HTTP y otra para SSH:

  • /srv/url/hidden_service/hostname → URL del servicio web

  • /srv/url/other_hidden_service/hostname → URL del servicio SSH

Para acceder al sitio, simplemente abre el navegador Tor e introduce la URL correspondiente.

Para el servicio SSH, ejecuta dentro del cliente:

torify ssh sshusr@xxxxxxx.onion -p 4242

🧪Conclusión

Este proyecto es una muy buena toma de contacto con Tor desde el lado práctico, combinando:

  • Networking

  • Seguridad

  • Servicios web

  • Docker

Sin humo, sin frameworks innecesarios y tocando cosas reales que rara vez se ven en proyectos “clásicos”. Ideal para entender cómo funcionan los hidden services más allá de la teoría… y para perderle el miedo a Tor.

El código completo está disponible en GitHub para quien quiera trastear, romper cosas y aprender por el camino.
Porque al final, de eso va todo esto 😄

Details