Qué es realmente un servicio onion
Un servicio onion de Tor es un servidor accesible únicamente a través de la red Tor, en una dirección que termina en .onion y que se deriva de una clave criptográfica en lugar de ser asignada por un registrador. No hay resolución DNS, ninguna IP pública figura en ningún registro, y no hay certificado TLS que comprar: la dirección de 56 caracteres es la clave pública del servicio, de modo que la conexión queda autenticada y cifrada de extremo a extremo por construcción. Un visitante que use Tor Browser escribe la dirección; la red organiza un punto de encuentro cifrado; ambas partes se comunican sin que ninguna llegue a conocer la ubicación de la otra. Nadie en medio —ni un repetidor, ni un ISP, ni el proveedor de hosting— ve ambos extremos de la conversación a la vez.
La consecuencia que importa para el alojamiento es estructural, no cosmética. Un servidor web normal tiene que escuchar en un puerto público, lo que significa que su dirección es descubrible, escaneable y, en última instancia, vinculable a quien paga la factura. Un servicio onion no escucha en nada que internet pueda alcanzar. El Tor de la máquina solo hace conexiones salientes, construye circuitos hacia un puñado de puntos de introducción, y espera. El servicio está en línea y sirviendo tráfico mientras ss -tlnp no muestra nada vinculado a una dirección enrutable. Esa inversión es la razón de ser de todo esto.
Cuándo es la herramienta adecuada, y cuándo no lo es
Recurre a un servicio onion cuando la ubicación de la máquina forma parte de lo que estás protegiendo: un sitio que debe seguir siendo accesible aunque su dominio en la clearnet sea incautado, un buzón de envíos para fuentes o investigadores, un panel de administración que prefieres no exponer en absoluto al escaneo de internet, o un servicio cuya audiencia ya usa Tor y valora que no puedas registrar una IP que nunca llegas a recibir. Es también la respuesta honesta cuando «ocultar el origen» es el requisito real: un proxy inverso delante de un servidor en la clearnet solo desplaza el objetivo, mientras que un servicio onion lo elimina.
Es la herramienta equivocada cuando tus visitantes no van a usar Tor o no pueden hacerlo, cuando necesitas el rendimiento bruto y la latencia por debajo de 100 milisegundos de un servidor directamente accesible, o cuando la visibilidad es precisamente el objetivo: una dirección onion no es algo con lo que la gente se tropieza desde un buscador. Muchos operadores adoptan un término medio y llevan los dos a la vez: un sitio normal para llegar a más público y un servicio onion para quienes lo quieren, servidos desde la misma aplicación. Cubrimos ese patrón más abajo. Nada de esto sustituye el endurecimiento de la propia máquina; si la máquina está comprometida, su ubicación y su contenido se filtran sin importar cómo se publique, así que trata la lista de comprobación de la primera hora como un requisito previo, no como algo secundario.
SP·03Qué revela esta configuración, y a quién
Merece la pena ser precisos sobre el modelo de anonimato, porque se suele asumir que «servicio onion» significa «imposible de rastrear», y la realidad es más concreta. Los clientes nunca llegan a conocer la dirección IP del servidor —esa propiedad es sólida y es todo el sentido de la técnica. Tu proveedor de hosting, sin embargo, sigue viendo una máquina en su red que mantiene un flujo constante de conexiones salientes cifradas hacia la red Tor; no puede ver la dirección onion, ni el contenido, ni los visitantes, pero sí puede ver que la máquina habla Tor. En un proveedor convencional vinculado a tu identidad, eso es un hilo del que merece la pena tirar. En un VPS offshore pagado de forma anónima y sin ningún nombre registrado, no lleva a ninguna parte —que es exactamente la razón por la que las dos técnicas funcionan mejor juntas.
Los modos de fallo que realmente desanonimizan un servicio onion casi nunca son el propio Tor. Son la aplicación filtrando una IP real en una página de error, en una cabecera, en un correo que envía, o en una petición saliente hacia un servicio de analítica o de actualizaciones en la clearnet; un servidor mal configurado que revela su hostname o su zona horaria; o la correlación que surge cuando el operador reutiliza la misma máquina, la misma clave o el mismo estilo de escritura en una identidad de la clearnet. La criptografía aguanta; es en la fontanería de alrededor donde se producen los descuidos. Cada paso de esta guía está escrito para mantener esa fontanería cerrada: vincula a localhost, no envíes nada en claro hacia fuera, y mantén la identidad real de la máquina fuera de ella, según lo explicado en mantener tu nombre fuera de un servidor.
SP·04Instala un Tor actualizado, no el que trae tu distribución
Las distribuciones congelan Tor en la versión que traía el lanzamiento, y las defensas de los servicios onion avanzan deprisa: la protección contra denegación de servicio en los puntos de introducción, la autorización de clientes v3 y varias correcciones de estabilidad llegaron todas en versiones más recientes que las que trae por defecto un Debian o un Ubuntu estables. Instálalo desde el propio repositorio firmado del Tor Project para seguir las versiones actuales y recibir las actualizaciones de seguridad según su calendario, no el de la distribución. El fragmento de abajo detecta automáticamente el nombre en clave de tu versión y fija el repositorio a la clave de firma del proyecto, de modo que un atacante que manipule el espejo no pueda colarte un paquete desactualizado.
Tor se ejecuta sin privilegios como el usuario debian-tor en Debian y Ubuntu, entra en un sandbox, y no necesita ningún privilegio de red especial: se conecta hacia fuera como cualquier cliente. No hay nada que abrir en el firewall para el propio servicio onion, que es la primera sorpresa agradable de todo el ejercicio: tu firewall de denegación por defecto puede seguir siendo exactamente tan estricto como era.
Vincula la aplicación a localhost y a nada más
Un servicio onion es una puerta de entrada hacia un servicio local corriente: un servidor web, una aplicación, un demonio SSH, cualquier cosa que hable TCP. La regla que mantiene todo esto a salvo es que ese servicio local debe escuchar únicamente en la interfaz de loopback, 127.0.0.1. Si también escucha en la IP pública, has recreado sin darte cuenta el mismo problema que el servicio onion pretendía resolver: el contenido pasa a ser accesible y reconocible directamente, y un escaneo que empareje tu servidor de la clearnet con tu contenido onion deshace el anonimato en una sola petición. Vincula a loopback, confírmalo con ss -tlnp, y deja que Tor sea lo único que se conecte jamás a ese puerto.
Como el tráfico entre Tor y tu aplicación se queda en 127.0.0.1, nunca toca la red y no necesita TLS propio: el circuito de Tor ya lo cifra todo de extremo a extremo. No pongas un certificado autofirmado en el servicio que escucha en loopback; añade una superficie reconocible y no aporta nada. Mantén la aplicación aburrida: sin redirecciones a la clearnet, sin enlaces absolutos del tipo https://your-domain incrustados en las plantillas, sin fuentes o analítica de terceros que hagan que el navegador del visitante salga del onion hacia la web abierta.
Declara el servicio y luego lee tu dirección
El servicio onion son tres líneas de torrc: un directorio donde Tor guarda el material de la clave, y una correspondencia entre un puerto virtual de la dirección onion y el puerto local en el que escucha tu aplicación. En el primer reinicio, Tor genera un par de claves Ed25519 en ese directorio y escribe el archivo hostname: la dirección .onion de 56 caracteres que vas a repartir. Esa dirección es permanente mientras conserves la clave. Si pierdes la clave, la dirección desaparece para siempre; si la filtras, cualquier otro puede suplantar tu servicio. Trata el HiddenServiceDir como las joyas de la corona: 0700, propiedad del usuario de Tor, con copia de seguridad cifrada y fuera de la máquina.
Dos ajustes se ganan su sitio junto a la correspondencia de puertos. HiddenServiceEnableIntroDoSDefense 1 permite que tus puntos de introducción limiten la tasa de las inundaciones de conexiones antes de que lleguen a tu máquina, que es lo más parecido a una protección DDoS que tiene un servicio onion. Fijar HiddenServiceVersion 3 deja la versión explícita y a prueba de futuro. Si el servicio debe ser privado en lugar de público, la autorización de clientes v3 lo restringe a quienes posean una clave que distribuyes fuera de banda: una forma limpia de llevar un panel de administración que sencillamente no responde a nadie sin esa credencial.
Anúncialo, ejecuta los dos, y elige una dirección memorable
Si también llevas un sitio en la clearnet, avisa a Tor Browser de la versión onion con la cabecera de respuesta Onion-Location (o la etiqueta meta HTML equivalente). Los navegadores con soporte para onion ofrecen entonces la .onion a los visitantes automáticamente: es la forma estándar en que sitios como los grandes periódicos y los buscadores muestran la suya. Servir la misma aplicación tanto en un dominio como en una dirección onion es la norma, no un caso exótico: una sola base de código, una sola base de datos, dos puertas de entrada, con el lado de la clearnet detrás del habitual proxy inverso que oculta el origen y el lado onion sin exponer nada en absoluto.
La dirección por defecto es una cadena aleatoria de 56 caracteres, segura pero difícil de recordar. Una dirección vanity te permite obtener por fuerza bruta una clave cuya codificación base32 empiece por el prefijo que elijas: unos pocos caracteres legibles se consiguen rápido, pero cada carácter adicional multiplica el trabajo por 32, así que a partir de siete u ocho letras se convierte en un trabajo de cómputo serio. Genera las claves vanity en una máquina local de confianza, nunca en el servidor, y coloca la clave resultante en el HiddenServiceDir exactamente igual que si restauraras una copia de seguridad. Un prefijo reconocible también frena un ataque real: los clones de phishing que cuentan con que nadie se ponga a leer un muro de caracteres aleatorios.
Mantenlo en marcha: rendimiento, monitorización e higiene de claves
Una conexión onion atraviesa seis repetidores en lugar de los habituales cero, así que la latencia es mayor y el rendimiento menor que en un servidor directamente accesible: eso es física, no una mala configuración, y ningún ajuste lo elimina. Resiste la tentación de los modos de un solo salto o no anónimos para recuperar velocidad; a cambio pierdes exactamente la propiedad para la que construiste todo esto. Lo que sí puedes hacer es mantener Tor actualizado, dejar activada la defensa DoS de los puntos de introducción, poner caché delante de un servicio con mucho tráfico para que cada petición cueste menos trabajo, y dimensionar la máquina con margen de CPU, porque la criptografía de Tor no es gratis. Un VPS offshore modesto desde $8.00/mes gestiona sin problemas un sitio onion típico.
A nivel operativo, tres hábitos mantienen sano un servicio onion. Vigila journalctl -u tor@default por si hay errores de alcanzabilidad o de publicación de descriptores, en lugar de asumir que el silencio significa que todo va bien. Haz copia de seguridad del HiddenServiceDir el mismo día que lo creas y después de cualquier cambio, cifrada y fuera de la máquina, porque esa clave es lo único que no puedes regenerar. Y mantén limpia la identidad operativa de la máquina: una clave nueva en un VPS anónimo recién creado vale poco si los mismos hábitos del operador la conectan de vuelta con una identidad en la clearnet. El servicio funcionará felizmente durante años sin que lo toques; la disciplina está en la fontanería de alrededor, no en el servicio en sí.
Paso a paso
-
01
Parte de una máquina endurecida y anónima
Despliega un VPS offshore —en línea en unos 15 min— y haz primero el trabajo aburrido pero esencial: un usuario con nombre y sudo, SSH solo por clave, un firewall de denegación por defecto, y actualizaciones de seguridad automáticas. El servicio onion no añade nada que tengas que abrir en ese firewall, así que una máquina blindada se queda blindada. No te saltes esto; una dirección onion delante de un servidor comprometido no oculta nada.
ssh admin@203.0.113.10 sudo apt update && sudo apt full-upgrade -y # firewall stays default-deny; the onion service needs no inbound port sudo ufw status verbose
-
02
Instala Tor desde el repositorio del Tor Project
Añade el repositorio firmado del proyecto para ejecutar un Tor actualizado con las últimas defensas de los servicios onion, y luego instálalo. El nombre en clave se detecta a partir de
/etc/os-release, y el repositorio queda fijado a la clave de firma de Tor, de modo que un espejo manipulado no pueda hacerte instalar una versión anterior.sudo apt install -y apt-transport-https wget gpg . /etc/os-release wget -qO- https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc \ | gpg --dearmor | sudo tee /usr/share/keyrings/tor.gpg >/dev/null echo "deb [signed-by=/usr/share/keyrings/tor.gpg] https://deb.torproject.org/torproject.org $VERSION_CODENAME main" \ | sudo tee /etc/apt/sources.list.d/tor.list sudo apt update && sudo apt install -y tor deb.torproject.org-keyring
-
03
Vincula tu servicio solo a localhost
Apunta lo que sea que estés publicando a la interfaz de loopback y a ningún otro sitio. Aquí nginx sirve un sitio estático en
127.0.0.1:8080; el mismo principio se aplica a cualquier aplicación: vincula a127.0.0.1, no a0.0.0.0. Recarga, y luego demuestra conssque nada está escuchando en una dirección enrutable.# /etc/nginx/sites-available/onion.conf server { listen 127.0.0.1:8080; server_name _; root /var/www/onion; index index.html; }Actívalo, recarga, y confirma que la vinculación es solo a loopback:
sudo ln -s /etc/nginx/sites-available/onion.conf /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx ss -tlnp | grep 8080 # must show 127.0.0.1:8080, never 0.0.0.0:8080
-
04
Declara el servicio onion en torrc
Añade el servicio a
/etc/tor/torrc: un directorio para la clave y una correspondencia de puertos entre el puerto virtual 80 de la dirección onion y tu puerto local 8080. Activa la defensa DoS de los puntos de introducción y fija la versión de la dirección. Después reinicia Tor: en Debian y Ubuntu la instancia en ejecución estor@default.# /etc/tor/torrc HiddenServiceDir /var/lib/tor/onion-www/ HiddenServicePort 80 127.0.0.1:8080 HiddenServiceVersion 3 HiddenServiceEnableIntroDoSDefense 1 sudo systemctl restart tor@default
-
05
Lee la dirección y blinda la clave
Tor ya ha creado el material de la clave y ha escrito tu dirección. Léela, repártela, y asegúrate de que el directorio es
0700y pertenece al usuario de Tor, algo que Tor impone pero que una restauración descuidada puede romper. El archivohs_ed25519_secret_keyde ese directorio es tu identidad; nada más lo es.sudo cat /var/lib/tor/onion-www/hostname # example: 2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion sudo ls -l /var/lib/tor/onion-www/ # hostname hs_ed25519_public_key hs_ed25519_secret_key sudo chown -R debian-tor:debian-tor /var/lib/tor/onion-www sudo chmod 700 /var/lib/tor/onion-www
-
06
Pruébalo a través de Tor, y luego anúncialo
Verifica el servicio desde una máquina que tenga Tor en ejecución, usando
torsockspara que la petición pase por la red en lugar de por la clearnet. Una vez que responda, opcionalmente dirige a los visitantes de la clearnet hacia la versión onion con una cabeceraOnion-Locationen tu sitio normal.# from any box running tor: torsocks curl -sSI http://2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion/ | head # advertise the onion from your clearnet nginx (inside the https server block): add_header Onion-Location "http://2gzyxa5ihm7nsggfxnu52rck2vv4rvmdlkiu3zzui5du4xyclen53wid.onion$request_uri";
-
07
Haz copia de seguridad de la clave y escribe el manual
La dirección vive y muere con el directorio de la clave. Archívalo en el momento en que exista, mueve el archivo fuera de la máquina a un almacenamiento cifrado, y ten en cuenta que restaurarlo en cualquier sitio reproduce exactamente la misma dirección
.onion. Después anota los dos comandos que realmente vas a necesitar dentro de seis meses —dónde está la clave y cómo comprobar que todo funciona— porque el servicio va a seguir corriendo sin que lo toques el tiempo suficiente para que se te olvide.sudo tar czf onion-www-key.tar.gz -C /var/lib/tor onion-www # copy onion-www-key.tar.gz to encrypted off-box storage, then delete the local copy # health check any time: sudo systemctl status tor@default sudo journalctl -u tor@default --since "1 hour ago" | grep -i "onion\|error"


