Todos los sistemas operativos Ámsterdam · París · Reikiavik +5 Paga con Criptomoneda
Redes y autoalojamientoIntermedio34 min de lecturaActualizado: 2026-09-14

Aloja un sitio .onion en un VPS sin delatar el servidor

Una dirección .onion no es un dominio con una terminación extraña. No hay registrador que pueda suspenderla, no hay DNS que envenenar, no hay autoridad de certificación en la que confiar y no hay puerto entrante que atacar — la dirección es una clave pública, y tu servidor marca hacia fuera para encontrarse con sus visitantes. Esa parte lleva diez minutos. La parte que exige cuidado es todo lo demás en la máquina que todavía sabe dónde vive.

Aloja un sitio .onion en un VPS sin delatar el servidor
En esta página
  1. Lo que un servicio onion elimina de la pila
  2. Relay, bridge, exit, servicio onion: cuatro trabajos distintos
  3. Casi nunca es Tor lo que filtra
  4. Decide primero: ¿es un secreto la ubicación del servidor?
  5. Paso a paso
  6. Ejecutar el mismo sitio en la clearweb y como onion
  7. Autorización de cliente: cuando la dirección es la credencial
  8. Mantenerlo vivo: DoS, relojes y disponibilidad
  9. Los límites honestos
  10. Preguntas frecuentes

Todos los sitios web que has construido alguna vez descansan sobre una pila de permisos ajenos. Un registro te alquila el nombre. Un registrador puede desconectarlo. Una autoridad de certificación responde por ti. Un resolutor tiene que contestar con honestidad, y un puerto tiene que quedar abierto en una dirección pública donde cualquiera pueda encontrarlo, identificarlo y golpearlo. Cada uno de ellos es una parte a la que se puede presionar, y una superficie que se puede atacar.

Un servicio onion los elimina a todos. No hay registrador, porque la dirección se deriva de una clave que tú generaste. No hay DNS, porque nada resuelve el nombre. No hay autoridad de certificación, porque la dirección es la clave pública y la conexión se autentica a sí misma contra ella. Y no hay ningún puerto entrante en absoluto — tu servidor marca hacia fuera para encontrarse con sus visitantes, así que puede estar detrás de un firewall que descarte todo y aun así ser alcanzable desde cualquier punto de la tierra.

La configuración lleva unos diez minutos y tres líneas. Lo que exige cuidado es el resto de la máquina, porque el servidor web detrás de Tor no tiene ni idea de que se supone que debe estar oculto, y anunciará alegremente su propio nombre de host, su propia IP y su propio gemelo en la clearweb a quien haga la pregunta correcta. Esta guía hace los diez minutos, y luego hace la parte que de verdad decide si funcionó.

Lo que un servicio onion elimina de la pila

Empecemos por lo que realmente es distinto, porque es más que un nombre de host de aspecto extraño. Un sitio normal depende de una cadena de terceros externos, y un servicio onion sencillamente no tiene esa cadena.

  • Sin registrador y sin registro. Una dirección onion v3 es la codificación base32 de una clave pública ed25519, más una suma de comprobación y un byte de versión — cincuenta y seis caracteres, generados en tu propia máquina en una fracción de segundo. Nadie te la vendió, así que nadie puede quitártela, y no hay fecha de renovación. Eso es exactamente lo contrario del modelo de riesgo de nuestra guía para registrar un dominio en privado.
  • Sin DNS. Nada resuelve un nombre .onion. El cliente le pide a la red Tor un descriptor firmado publicado bajo esa clave, así que no hay resolutor que envenenar, ni zona que filtrar, ni servidor de nombres que tumbar.
  • Sin autoridad de certificación. La dirección es la clave pública, así que el cliente verifica el servicio contra el nombre que escribió. Esto es lo que significa “autoautenticado”: no hay un tercero que responda por la identidad, porque identidad y dirección son el mismo objeto.
  • Sin puerto entrante. El servicio abre circuitos salientes hacia un puñado de puntos de introducción y espera ahí. Tu firewall puede descartar todos los paquetes entrantes y el sitio sigue funcionando. Nada está escuchando en una dirección pública, así que no hay nada que escanear, nada que identificar y nada que inundar directamente.

Una nota histórica que todavía causa confusión: las antiguas direcciones de dieciséis caracteres ya no existen. El soporte para los servicios onion de versión 2 se eliminó de Tor en octubre de 2021, esas direcciones ya no funcionan en ningún sitio, y cualquier cosa que encuentres describiéndolas está desactualizada. Todo lo que sigue es v3, que es el único tipo que existe.

Y que quede claro lo que nada de esto elimina. Sigue habiendo una máquina física en un centro de datos, un proveedor que sabe que existe, una factura que alguien pagó, y una aplicación en la que se puede entrar. Los servicios onion sacan de alcance la capa de la dirección. No mueven el servidor.

Relay, bridge, exit, servicio onion: cuatro trabajos distintos

La gente llega a Tor queriendo hacer una de cuatro cosas bastante distintas, y los perfiles de riesgo no son ni remotamente comparables. Merece la pena saber a cuál de ellas te estás apuntando.

  • Un relay intermedio pasa tráfico cifrado entre otros relays. Transporta datos de otras personas, pero nunca toca el internet abierto en su nombre, así que no atrae denuncias.
  • Un bridge es un punto de entrada no listado para personas cuyo acceso a Tor está bloqueado. El mismo perfil de tráfico que un relay intermedio, con la dirección mantenida fuera del directorio público.
  • Un relay de salida (exit) es por donde el tráfico de otras personas sale de Tor y llega al internet ordinario, bajo tu dirección IP. Este es el que genera correo de abuso y correspondencia legal, y necesita un manejo deliberado — nuestra guía de relay de Tor lo cubre como corresponde.
  • Un servicio onion publica. No transporta más tráfico que el suyo propio, nunca contacta con la clearweb en nombre de nadie, y por lo tanto no produce ningún informe de abuso contra tu IP. No hay salida, así que no hay nada que salga.

Ese último punto merece la pena asimilarlo, porque se malinterpreta habitualmente. Ejecutar un servicio onion es, operativamente, lo más silencioso que puedes hacer en la red Tor. Tu servidor hace conexiones salientes que parecen tráfico de cliente Tor corriente; nunca aparece como el origen de una conexión hacia el servidor de otra persona; y lo que a la mayoría le preocupa — que el comportamiento de otro aterrice en tu IP — es estructuralmente imposible.

Tampoco necesitas ejecutar un relay para ejecutar un servicio onion, y es mejor mantener las dos cosas separadas. Un relay quiere ancho de banda, un ORPort público y un ContactInfo publicado. Un servicio no quiere nada de eso. Si quieres hacer las dos cosas, hazlas en dos servidores.

Casi nunca es Tor lo que filtra

Aquí está la parte de la que la documentación oficial habla poco, y la parte que en realidad determina si el ejercicio mereció la pena. Es extremadamente improbable que Tor, configurado como se indica más abajo, sea lo que delate tu servidor. El software que hay detrás sí lo es, porque ese software se escribió asumiendo que un servidor web quiere que lo encuentren.

Estos son los canales, aproximadamente en el orden en que suelen atrapar a la gente:

  • El mismo contenido en la IP pública. Si tu servidor web también escucha en 0.0.0.0, cualquiera que escanee internet ve la página idéntica tanto en una dirección IP como en una dirección onion. Los escáneres de internet entero indexan continuamente cada puerto abierto y sus resultados se pueden buscar por hash del cuerpo y por hash del favicon. Una sola consulta enlaza las dos. Esta es, con diferencia, la forma más habitual en que se desenmascara un servicio onion, y es un error de configuración de una sola línea.
  • Banners de servidor y páginas por defecto. Una instalación de fábrica de nginx o apache2 responde a nombres de host desconocidos con una página por defecto, imprime su versión en la cabecera Server, y a menudo revela el nombre de host real de la máquina en la salida de error. Cada una de esas cosas es un asidero de correlación.
  • URL absolutas. Las redirecciones, las etiquetas canónicas, los sitemaps, los feeds RSS, las etiquetas Open Graph y los correos de restablecimiento de contraseña adoran emitir una URL de clearweb totalmente cualificada. Basta con que haya una dentro de la versión onion de una página.
  • Solicitudes salientes que hace la aplicación. Analítica, tipografías web, recursos de CDN, servicios de avatar, teselas de mapas, webhooks y comprobaciones de actualizaciones se originan todos desde la IP real del servidor, y varios de ellos le dicen a un tercero qué página se estaba renderizando en ese momento. Un sitio autoalojado con una tipografía cargada desde el dominio de otro tiene un rastro de auditoría que no pretendía tener.
  • Correo. Cualquier cosa que envíe la máquina estampa su IP real en las cabeceras Received. Si el servicio necesita enviar correo, eso es un problema de diseño que hay que resolver deliberadamente — empieza por nuestra guía de servidor de correo, y da por hecho, por defecto, que no debería enviar nada en absoluto.
  • Claves y huellas reutilizadas. La misma clave de host SSH respondiendo tanto en la IP pública como en una dirección onion las enlaza de forma permanente. Lo mismo ocurre con el mismo certificado TLS, el mismo favicon, el mismo identificador de analítica, o la misma página de error característica en dos proyectos.
  • Certificate Transparency. Si esa misma máquina llega a servir alguna vez un dominio de clearweb por HTTPS, el certificado de ese dominio queda escrito para siempre en registros públicos de solo apéndice. Eso nombra a la máquina, no al onion, pero nombra a la máquina.

La forma común de todo esto es siempre la misma: Tor ocultó la dirección, y otra cosa en el servidor la publicó. El paso ocho, más abajo, es una lista de comprobación para encontrarlas antes de que lo haga otra persona.

Decide primero: ¿es un secreto la ubicación del servidor?

Antes de instalar nada, responde a una pregunta, porque todo lo que viene después depende de ella: ¿es la ubicación física de este servidor un secreto que estás intentando guardar?

Hay tres respuestas honestas y llevan a configuraciones genuinamente distintas.

  • Sí, la ubicación es el objetivo. Entonces esta máquina hace exactamente un trabajo. Ningún sitio en la clearweb, ningún registro DNS público que apunte a su IP, nada de correo, ningún otro servicio escuchando en ningún sitio. Págalo de una forma que no ate tu nombre — nuestro tutorial de Monero cubre la mecánica, y las cuentas no-KYC significan que no hay nada que entregar más allá de una dirección de envío. Mantén la configuración completa de tres saltos. Cualquier atajo de los que siguen que cambie anonimato por velocidad queda cerrado para ti, y está bien, porque no estás optimizando para la velocidad.
  • No, el servidor ya es público. Ejecutas un sitio normal y también quieres una dirección onion — para lectores tras la censura, para gente que preferiría no resolver tu dominio, o porque te gustaría ofrecerla. Nadie está ocultando nada, así que puedes usar un servicio onion de salto único, recortar el circuito de seis saltos a tres, y anunciar la dirección desde el sitio en la clearweb con una cabecera Onion-Location. Esto es una función de alcanzabilidad, y es una razón completamente legítima para estar aquí.
  • En algún punto intermedio. Aquí es donde está de verdad la mayoría de la gente, y es la opción peligrosa, porque “algo oculto” no es una propiedad que un servidor pueda tener. Elige un bando. Si la ubicación importa de verdad, constrúyelo como si importara. Si no importa, deja de pagar el coste de latencia por una propiedad de anonimato que no estás manteniendo.

Anota la respuesta antes de continuar. Casi todos los errores en la materia de esta guía vienen de construir para el primer caso y operar como si fuera el segundo.

Paso a paso

  1. Elige el servidor, y decide qué más vive en él

    Un servicio onion es barato de ejecutar. El propio Tor usa muy poca CPU cuando no está haciendo de relay, y la carga de trabajo es la que tu sitio te habría costado de todas formas, así que dimensiona para la aplicación y no para Tor. Un sitio estático o una pequeña aplicación autoalojada va cómodo con 1 vCPU y 2 GB; dale 2 vCPU y 4 GB si hay una base de datos o un runtime de lenguaje de por medio. En nuestra escalera eso es Cub (1 vCPU, 2 GB RAM, 40 GB) a $5/mes o Scout (2 vCPU, 4 GB, 70 GB) a $9/mes, ambos all-NVMe con tráfico ilimitado a 1 Gbps.

    La decisión que importa no es el nivel. Es la de la sección anterior: si se supone que la ubicación de esta máquina es privada, hace un trabajo y solo uno. Ningún otro sitio en ella, ningún registro DNS en ningún sitio que apunte a su dirección, nada de correo, nada más escuchando. La tentación de poner “una cosa más” en una máquina que ya estás pagando es exactamente cómo ocurre la correlación.

    Págalo de una forma acorde. Las cuentas aquí solo necesitan una dirección de correo para la entrega y nada más, y el pago se liquida on-chain — el tutorial de Monero y comprar sin tarjeta lo cubren desde cero. Empieza desde una imagen mínima de Debian o Ubuntu; todos los comandos de más abajo asumen Debian 12 o más reciente, como root.

  2. Instala Tor desde el repositorio del Tor Project

    Usa el repositorio propio del Tor Project en lugar del paquete de la distribución. La build de la distro va con retraso, y dos de los ajustes de esta guía — el limitador de tasa de puntos de introducción y la defensa de prueba de trabajo — solo existen en las versiones recientes.

    apt update && apt install -y apt-transport-https curl gpg lsb-release
    
    curl -s https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc \
      | gpg --dearmor | tee /usr/share/keyrings/deb.torproject.org-keyring.gpg >/dev/null
    
    echo "deb [signed-by=/usr/share/keyrings/deb.torproject.org-keyring.gpg] \
    https://deb.torproject.org/torproject.org $(lsb_release -cs) main" \
      > /etc/apt/sources.list.d/tor.list
    
    apt update && apt install -y tor deb.torproject.org-keyring
    tor --version

    El paquete deb.torproject.org-keyring mantiene la clave de firma actualizada, así que esto es un trabajo de una sola vez en lugar de algo que se rompe al cabo de un año. Cualquier versión desde la 0.4.8 en adelante tiene todas las opciones usadas más abajo.

    No configures nada todavía. En este punto Tor se está ejecutando como cliente, que es todo lo que necesitas para el paso de verificación más adelante.

  3. Pon el servidor web en loopback y en ningún otro sitio

    Este es el paso que más a menudo se salta la gente y el que más a menudo arruina el ejercicio. El servidor web debe ser alcanzable desde la propia máquina y desde ningún otro sitio. Instala nginx, y luego escribe un host virtual que se vincule solo a loopback:

    # /etc/nginx/sites-available/onion
    server {
        listen 127.0.0.1:8080;
        server_name _;
        server_tokens off;
        root /var/www/onion;
        index index.html;
        access_log off;
    }

    server_tokens off quita la versión de la cabecera Server y de las páginas de error. Desactivar el log de acceso es una elección deliberada y no pereza: cada solicitud a través de Tor llega desde 127.0.0.1, así que el log no registra nada útil sobre los visitantes y sí bastante que merece la pena no conservar.

    Después añade un catch-all que responda en la dirección pública y se niegue a decir absolutamente nada. El 444 de nginx cierra la conexión sin respuesta, que es la respuesta más silenciosa posible a un escáner:

    # /etc/nginx/sites-available/deny-direct
    server {
        listen 80 default_server;
        listen [::]:80 default_server;
        return 444;
    }

    Activa las dos, elimina el sitio por defecto de fábrica, y confirma qué está escuchando en realidad:

    rm -f /etc/nginx/sites-enabled/default
    ln -s /etc/nginx/sites-available/onion /etc/nginx/sites-enabled/
    ln -s /etc/nginx/sites-available/deny-direct /etc/nginx/sites-enabled/
    mkdir -p /var/www/onion && echo 'it works' > /var/www/onion/index.html
    nginx -t && systemctl reload nginx
    ss -ltnp

    Lee con atención la salida de ss. La única entrada vinculada a 0.0.0.0 o :: debería ser la que decidiste conservar — SSH, y el catch-all 444 si decidiste ejecutarlo. Todo lo demás pertenece a 127.0.0.1. Si la aplicación que estás alojando trae su propio listener, compruébalo también; muchos frameworks escuchan por defecto en todas las interfaces y no dicen nada al respecto.

  4. Declara el servicio onion en torrc

    Tres líneas crean el servicio. Añádelas a /etc/tor/torrc, junto con las dos defensas que es mucho más fácil activar ahora que durante un incidente:

    # /etc/tor/torrc
    HiddenServiceDir /var/lib/tor/onion-site/
    HiddenServicePort 80 127.0.0.1:8080
    
    # rate-limit floods at the introduction points
    HiddenServiceEnableIntroDoSDefense 1
    
    # make each connection attempt cost the client a little work
    HiddenServicePoWDefensesEnabled 1

    Lee con atención la línea del puerto, porque los dos números hacen trabajos distintos. El primero es el puerto que usarán los visitantes en la URL onion — mantenlo en 80 para que nadie tenga que escribir uno. El segundo es a dónde reenvía Tor la solicitud localmente, que es el listener de loopback del paso anterior. No tienen por qué coincidir, y a menudo es más claro cuando no lo hacen.

    Si quieres eliminar incluso el socket TCP de loopback, Tor puede hablar con un socket unix en su lugar, lo que significa que no hay absolutamente nada escuchando en un puerto. Apunta el servicio a un socket y configura nginx para que escuche en él:

    HiddenServicePort 80 unix:/run/onion-site.sock

    No crees el directorio tú mismo ni crees los archivos de claves. Tor los genera en el primer arranque con la propiedad y los permisos que espera, y un directorio que hayas creado a mano con el modo equivocado es una razón habitual para que el servicio falle en silencio al levantarse.

  5. Arranca Tor y lee tu dirección

    Reinicia Tor, observa cómo arranca, y recoge tu dirección:

    systemctl restart tor@default
    journalctl -u tor@default -n 20 --no-pager
    cat /var/lib/tor/onion-site/hostname

    Ese archivo contiene cincuenta y seis caracteres base32 seguidos de .onion, y esa es tu dirección — activa desde el momento en que Tor registra en el log que ha publicado su descriptor, normalmente en menos de un minuto. No hay nada que registrar, nada que propagar y nada que esperar.

    Mira qué más ha creado Tor, porque dos de estos archivos importan más que cualquier otra cosa en la máquina:

    ls -l /var/lib/tor/onion-site/

    Deberías ver hostname, hs_ed25519_public_key y hs_ed25519_secret_key, en un directorio propiedad de debian-tor con modo 0700. La clave secreta no es una credencial para la dirección; es la dirección. Cópiala a otra máquina y esa máquina es tu servicio. Bórrala sin una copia de seguridad y nadie, ni siquiera tú, podrá volver a crear jamás esa dirección. El paso nueve se ocupa de esto como corresponde — no te lo saltes.

    Si el archivo hostname no aparece, la respuesta casi siempre está en el log: un directorio que Tor no puede poseer, un modo de permisos que se niega a aceptar, o una errata en la línea del puerto.

  6. Alcánzalo, y demuestra que es tu máquina

    La prueba obvia es abrir la dirección en Tor Browser, y deberías hacerlo. La prueba útil es desde la línea de comandos, donde puedes ver las cabeceras:

    apt install -y torsocks
    torsocks curl -sI http://<your-address>.onion/
    torsocks curl -s  http://<your-address>.onion/ | head

    Demuestra que es de verdad tu servidor. Una dirección que escribes a mano son cincuenta y seis caracteres de base32, y un solo carácter trastocado puede llevarte al servicio de otra persona. Escribe un token aleatorio en el servidor, y luego obtén exactamente esa ruta a través de Tor y compara:

    head -c 16 /dev/urandom | base32 | tr -d '=' > /var/www/onion/token.txt
    cat /var/www/onion/token.txt
    torsocks curl -s http://<your-address>.onion/token.txt

    Dos cadenas idénticas significan que has llegado a tu propia máquina. Elimina el archivo después.

    Ten claro qué muestra esta prueba y qué no. Ejecutarla desde el propio servidor demuestra que el servicio está publicado y es alcanzable, que es exactamente lo que querías saber. No demuestra nada sobre el anonimato, ya que los dos extremos son la misma máquina. Para eso, pruébalo desde una red completamente distinta — y si Tor mismo está bloqueado donde estás, un bridge es la respuesta, algo que cubre nuestra guía para superar el bloqueo por DPI.

  7. Cierra los puertos que el servicio no necesita

    Ahora recoge la recompensa. Un servicio onion necesita cero puertos entrantes, así que el firewall puede ser todo lo contundente que se pueda: descarta todo lo entrante, permite las conexiones ya establecidas y lo que necesites para administrar la máquina. Nuestra guía de endurecimiento de Debian tiene un conjunto completo de reglas de nftables; aplícalo, y luego verifica que la única excepción entrante que queda es SSH.

    Después plantéate eliminar también esa excepción. SSH es el último puerto público en una máquina por lo demás invisible, y no tiene por qué serlo. Dale su propia dirección onion:

    # /etc/tor/torrc
    HiddenServiceDir /var/lib/tor/onion-ssh/
    HiddenServicePort 22 127.0.0.1:22

    Reinicia Tor, lee el nuevo hostname, y conéctate a través de tu puerto SOCKS local de Tor. Esto va en ~/.ssh/config en tu portátil:

    Host onionbox
        HostName <ssh-address>.onion
        User root
        ProxyCommand nc -X 5 -x 127.0.0.1:9050 %h %p

    Una vez que eso funcione, pon ListenAddress 127.0.0.1 en sshd_config y elimina la regla entrante. La máquina ahora no tiene absolutamente nada escuchando en una dirección pública.

    Dos precauciones. Prueba la ruta onion a fondo antes de cerrar la puerta detrás de ti, y mantén disponible el acceso a la consola de tu proveedor para que un error te cueste un reinicio y no el servidor — la nuestra está en el panel de control. Y no dejes que la misma clave de host SSH responda a la vez en la IP pública y en la dirección onion en ningún momento, porque la huella es idéntica en los dos sitios y ese es precisamente el enlace que estás intentando no crear.

  8. Caza las fugas antes de publicar la dirección

    Repasa esto antes de decirle la dirección a nadie. Lleva cinco minutos y es la diferencia entre un servicio oculto y un servicio que simplemente resulta incómodo de encontrar.

    Nada inesperado está escuchando. Cada línea debería ser loopback, o un puerto que decidiste conscientemente dejar abierto:

    ss -ltnp

    La IP pública no sirve nada. Pregúntaselo directamente, de las dos formas, desde otro sitio. Lo que quieres son respuestas vacías o conexiones rechazadas; lo que no quieres es tu contenido:

    curl -sI --max-time 5 http://203.0.113.10/
    curl -skI --max-time 5 https://203.0.113.10/

    Ninguna URL de la clearweb está dentro de lo que sirves. Descarga la página a través de Tor y lista todos los enlaces absolutos que contiene. Cualquiera que apunte a un dominio que controlas, a una CDN, a un host de tipografías o a un endpoint de analítica es una fuga o un asidero de correlación:

    torsocks curl -s http://<your-address>.onion/ \
      | grep -Eo 'https?://[^ "]+' | sort -u

    Las cabeceras y las páginas de error no dicen nada. Comprueba una página real y una que falte deliberadamente, y busca cadenas de versión, nombres de host, rutas de archivos y trazas de pila:

    torsocks curl -sI http://<your-address>.onion/
    torsocks curl -s  http://<your-address>.onion/nothing-here | head -20

    La aplicación no está llamando a casa. Este no es un comando, es una lectura atenta. Desactiva la analítica. Autoaloja tipografías, iconos y scripts. Desactiva la obtención de avatares y previsualizaciones. Elimina las comprobaciones de actualizaciones que llaman a un servidor según un horario. Apunta cualquier ajuste de URL absoluta — URL del sitio, host canónico, dominio del remitente de correo — a la dirección onion en lugar de a una de la clearweb.

    Tareas de mantenimiento. Pon la máquina en UTC con timedatectl set-timezone UTC para que las marcas de tiempo no revelen nada sobre dónde podéis estar ella o tú. Asegúrate de que /server-status, /.git, los archivos de copia de seguridad y los archivos swap del editor no son alcanzables. Y si esta máquina también sirve un sitio en la clearweb, vuelve a leer la tercera sección otra vez, porque la lista de comprobación de arriba no puede salvar una configuración cuya postura nunca se decidió.

  9. Haz copia de seguridad de la clave, porque la clave es la dirección

    Dilo una vez más, porque es el fallo del que la gente no se recupera: la clave secreta es la dirección. No hay registrador al que apelar, ni correo de recuperación, ni ticket de soporte. Pierde esos bytes y el nombre desaparece de internet para siempre.

    Detén Tor para que los archivos queden consistentes, archiva todo el directorio del servicio, y cífralo antes de que salga de la máquina:

    systemctl stop tor@default
    tar -C /var/lib/tor -czf - onion-site \
      | gpg -c --cipher-algo AES256 -o onion-site-$(date +%F).tar.gz.gpg
    systemctl start tor@default

    Mueve el archivo cifrado a algún sitio que no sea este servidor — el objetivo entero es que sobreviva a la máquina. Nuestra guía de copias de seguridad cifradas cubre cómo hacer esto según un calendario hacia un destino de solo apéndice en otro país, que es el lugar adecuado para guardarlo.

    Restaurar es lo mismo al revés, y los permisos no son opcionales: Tor se niega a arrancar si el modo está mal, lo cual es irritante en el momento y exactamente el comportamiento que quieres.

    gpg -d onion-site-2026-09-14.tar.gz.gpg | tar -C /var/lib/tor -xzf -
    chown -R debian-tor:debian-tor /var/lib/tor/onion-site
    chmod 700 /var/lib/tor/onion-site
    chmod 600 /var/lib/tor/onion-site/hs_ed25519_secret_key
    systemctl restart tor@default
    cat /var/lib/tor/onion-site/hostname

    Esa última línea es la prueba. La misma dirección en una máquina distinta significa que la copia de seguridad es real. Ensáyalo una vez, ahora, en un servidor desechable — una copia de seguridad sin probar de una clave irreemplazable es una historia sobre una clave que solías tener. Aquí se aplica la misma disciplina que en nuestra guía de migración: lo que de verdad estás comprando es la restauración.

  10. Publica la dirección para que la gente pueda confiar en ella

    Ahora tienes cincuenta y seis caracteres que nadie puede leer, recordar, ni verificar a simple vista. Eso es un problema real de usabilidad y también uno de seguridad, porque un visitante no puede distinguir tu dirección de una falsificación casi idéntica. La distribución es parte de la construcción, no una ocurrencia tardía.

    Publícala donde el lector ya confía en ti. Si tienes un sitio en la clearweb, pon la dirección en el pie de página y sirve la cabecera Onion-Location de la sección anterior. Si no, usa el canal que tu público ya asocie contigo — una cuenta existente, un mensaje firmado, una tarjeta impresa. La dirección hereda exactamente tanta credibilidad como el sitio donde la publicaste.

    Fírmala si lo que está en juego lo justifica. Una firma sobre la dirección, verificable contra una clave que la gente ya tiene, es la única forma de que alguien pueda confirmar que tiene la correcta sin fiarse del canal que la transportó.

    No dependas de directorios ni de buscadores. Existen índices de onion, son incompletos, y varios tienen un historial de listar copias de phishing de direcciones populares junto a las reales. Ser encontrable ahí es un extra; no es un plan de distribución.

    Un prefijo personalizado ayuda un poco. La herramienta mkp224o genera claves hasta que una produce una dirección que empieza con una cadena que elijas, lo que la hace reconocible de un vistazo:

    apt install -y gcc libc6-dev libsodium-dev make autoconf
    git clone https://github.com/cathugger/mkp224o && cd mkp224o
    ./autogen.sh && ./configure && make
    ./mkp224o -d ./keys -n 1 wolf

    El coste crece exponencialmente con la longitud: unos pocos caracteres tardan segundos, siete u ocho tardan tiempo real en hardware real, y cualquier cosa más allá de eso no va a suceder. Sé honesto sobre lo que compra esto — un atacante puede generar el mismo prefijo, y fiarse de que coincidan los primeros caracteres es exactamente el hábito que hace que la gente pulse el enlace equivocado. Trátalo como marca, no como autenticación. El directorio generado encaja directamente como HiddenServiceDir: arregla la propiedad y los modos como en el paso anterior, y genéralo en un sitio en el que confíes, porque quien ejecute la herramienta tiene la clave.

Ejecutar el mismo sitio en la clearweb y como onion

Si la ubicación del servidor no es un secreto, ejecutar las dos cosas es sencillo y genuinamente útil — es como grandes organizaciones de noticias, Debian y varios motores de búsqueda ofrecen sus sitios. Hay dos mecanismos y una concesión que entender.

Anúnciala con Onion-Location. Una sola cabecera en el sitio de la clearweb hace que Tor Browser muestre un botón de “.onion disponible” en la barra de direcciones, y que ofrezca cambiar. La cabecera solo se respeta en páginas servidas por HTTPS, y el valor tiene que ser una URL onion válida:

add_header Onion-Location "http://<your-address>.onion$request_uri" always;

Hay un equivalente en HTML para hosts donde no puedes fijar cabeceras, que tiene el mismo requisito de HTTPS:

<meta http-equiv="onion-location" content="http://<your-address>.onion">

Pon también la dirección en algún sitio donde una persona pueda leerla, en el pie de página o en una página de about. La cabecera solo llega a quien ya usa Tor Browser; el pie de página llega a todos los demás.

Plantéate un servicio onion de salto único. Una conexión onion normal tiene seis saltos — tres del cliente, tres del servicio — y los tres del servicio existen únicamente para ocultar dónde está. Si eso no es un secreto, puedes eliminarlos. La mejora de latencia es grande e inmediatamente perceptible. La configuración es contundente a propósito:

# /etc/tor/torrc — these are INSTANCE-WIDE, not per service
HiddenServiceNonAnonymousMode 1
HiddenServiceSingleHopMode 1
SOCKSPort 0

Las dos opciones son necesarias juntas, el puerto SOCKS debe estar desactivado, y se aplican a todos los servicios onion de esa instancia de Tor — no hay forma de excluir a uno solo. Tor se negará a arrancar si fijas una sin las otras, que es el software haciéndote un favor. Si una sola instancia aloja un servicio cuya ubicación es pública y otro cuya ubicación no lo es, ejecuta dos instancias, o mejor, dos servidores.

Y acepta la concesión. Publicar las dos direcciones declara que el mismo operador ejecuta ambas, y servir contenido idéntico desde las dos las hace trivialmente enlazables de todos modos. Ese es el trato, y para un sitio público no cuesta nada. Mantén de todas formas la higiene: ninguna URL absoluta de la clearweb dentro de la versión onion, cookies delimitadas por host para que una sesión no viaje entre ellas, y una política de seguridad de contenido que no traiga recursos de fuera.

Autorización de cliente: cuando la dirección es la credencial

Por defecto, cualquiera que conozca tu dirección puede alcanzar el servicio. La autorización de cliente cambia eso en la capa de red en lugar de en la capa de aplicación, y la diferencia importa más de lo que parece.

Con la autorización activada, el descriptor que publica tu servicio está cifrado para un conjunto de claves de cliente. Un visitante sin una de esas claves no puede descifrarlo, no puede conocer los puntos de introducción, y por lo tanto no puede conectar en absoluto — no llega a una página de inicio de sesión, no recibe un rechazo, no recibe nada. El servicio no está simplemente no listado; es invisible.

Genera un par de claves x25519 por cliente. Todas las herramientas ya están en una máquina Debian:

openssl genpkey -algorithm x25519 -out alice.prv.pem

# private key — goes to the client, never to the server
grep -v 'PRIVATE KEY' alice.prv.pem | base64 -d | tail -c 32 | base32 | tr -d '='

# public key — goes on the server
openssl pkey -in alice.prv.pem -pubout | grep -v 'PUBLIC KEY' \
  | base64 -d | tail -c 32 | base32 | tr -d '='

En el servidor, coloca la clave pública dentro de un directorio authorized_clients dentro del directorio del servicio. El nombre de archivo es arbitrario mientras acabe en .auth, lo que convierte la revocación en cuestión de borrar un archivo:

mkdir -p /var/lib/tor/onion-site/authorized_clients
echo "descriptor:x25519:<ALICE-PUBLIC-KEY>" \
  > /var/lib/tor/onion-site/authorized_clients/alice.auth
chown -R debian-tor:debian-tor /var/lib/tor/onion-site
systemctl reload tor@default

En el cliente, la clave privada va en el directorio indicado por ClientOnionAuthDir, en un archivo que termina en .auth_private, con la dirección repetida dentro. Tor Browser tiene su propio directorio para esto bajo su carpeta de datos, y pedirá una clave si se encuentra con un servicio que necesita una:

# /var/lib/tor/onion-auth/mysite.auth_private
<address-without-the-.onion>:descriptor:x25519:<ALICE-PRIVATE-KEY>

Esta es la herramienta adecuada para un sitio de staging, un panel de administración, un depósito de archivos privado, o un Nextcloud autoalojado que solo uses tú — cualquier cosa donde la respuesta honesta a “¿quién debería poder ver que esto existe?” sea “nadie más que nosotros”. El coste es real y es administrativo: tienes que hacer llegar las claves a la gente por un canal en el que confíes, y tienes que acordarte de retirarlas después.

Mantenerlo vivo: DoS, relojes y disponibilidad

Los servicios onion fallan de formas particulares propias, y ninguna de ellas se parece a una caída normal. Hay cuatro cosas que merece la pena configurar antes de necesitarlas.

La denegación de servicio es el verdadero problema operativo. Como no hay una dirección IP que filtrar, las defensas habituales no se aplican, y una inundación decidida de solicitudes de introducción es barata de enviar. Tor tiene dos respuestas, ambas configuradas por servicio en torrc: HiddenServiceEnableIntroDoSDefense 1 limita la tasa de solicitudes en los puntos de introducción, y HiddenServicePoWDefensesEnabled 1 hace que los clientes resuelvan un pequeño rompecabezas de prueba de trabajo que se vuelve más difícil bajo carga, de modo que los visitantes legítimos esperan un momento mientras una inundación se vuelve cara. Activa las dos desde el principio; el coste cuando nada te está atacando es insignificante.

Mantén el reloj en hora. Los descriptores se publican y se consultan contra periodos de tiempo derivados de un valor compartido de la red. Un servidor cuyo reloj se ha desviado considerablemente publica en el sitio equivocado y se vuelve inalcanzable mientras parece perfectamente sano en sus propios registros. Asegúrate de que hay un cliente NTP en marcha, mantén la máquina en UTC, y compruébalo cuando un servicio deja de resolver misteriosamente.

La monitorización tiene que pasar por Tor. Ningún servicio comercial de monitorización de disponibilidad puede sondear una dirección .onion, lo que significa que la respuesta habitual no está disponible para ti. Ejecuta tú mismo la comprobación desde una segunda máquina que no sea la que aloja el servicio — una tarea de cron que haga torsocks curl -s --max-time 60 contra una URL conocida, comparando la salida con una cadena conocida, basta y no cuesta nada.

Planea más de una instancia si la disponibilidad importa. OnionBalance permite que varios servidores de backend compartan una única dirección onion: una instancia de front-end guarda la clave que posee la dirección y publica un descriptor que apunta a los puntos de introducción de los backends, así que obtienes distribución de carga y conmutación por error sin que la dirección cambie nunca. Son más piezas móviles de las que necesita la mayoría de los sitios, pero es la respuesta soportada oficialmente, y merece la pena saber que existe antes de que te hayas quedado encerrado en una sola máquina.

Un último hábito operativo: reiniciar Tor deja el servicio fuera de línea unos segundos mientras vuelve a publicar, y una reinstalación que borre /var/lib/tor lo deja fuera de línea para siempre. Trata ese directorio como tratarías una clave privada, porque lo es.

Los límites honestos

Una dirección onion elimina el registrador, el resolutor, la autoridad de certificación y el puerto abierto. No elimina nada más, y ser preciso sobre lo que queda es lo que separa una herramienta útil de una falsa sensación de seguridad.

No arregla la aplicación. Una aplicación web vulnerable detrás de un servicio onion es una aplicación web vulnerable; lo primero que hacen muchos atacantes después de conseguir ejecución de código es hacer una solicitud saliente que revela la dirección real del servidor. Dale a la máquina el repaso de diez minutos de nuestra guía de endurecimiento de Debian, mantenla parcheada, y trátala como expuesta aunque no haya nada escuchando.

No oculta el servidor de quienes lo operan. Nosotros sabemos que un servidor existe, cuándo se desplegó, y cuál es su dirección IP, porque somos quienes la asignamos. Eso es cierto en todos los hosts, en todas partes, y cualquiera que te diga lo contrario te está vendiendo algo. Lo que sí podemos decir con precisión es qué hacemos con ello, que está expuesto en nuestro relato honesto de lo que oculta un VPS pagado en cripto.

No derrota por sí sola a un adversario paciente y con buenos recursos. El volumen y el momento del tráfico son visibles en los bordes de la red, y un servicio que se queda callado siempre que una persona concreta está dormida te está diciendo algo. Tampoco ayuda si es el contenido el que te identifica: el mismo estilo de escritura, la misma clave PGP, el mismo avatar o el mismo alias de foro que una identidad pública cierra el círculo por muy bueno que sea el transporte.

Por nuestra parte, para que puedas calibrar: los servicios onion son bienvenidos en todos los niveles y no necesitan nada especial de nosotros, porque no abren puertos ni generan tráfico de abuso. Operamos cuentas no-KYC que solo necesitan una dirección a la que entregar las credenciales. Tratamos la correspondencia rutinaria de derechos de autor como un asunto operativo y no como una retirada automática, actuamos ante órdenes judiciales válidas en la jurisdicción en la que está el servidor, y el suelo firme es absoluto y se aplica aquí exactamente igual que en cualquier otro sitio: nada de CSAM, nada de contenido terrorista, sin excepciones. Lee la política de uso aceptable y cómo gestionamos los informes de abuso antes de construir algo que lamentarías tener que mudar. Nuestra página de VPS compatible con Tor tiene la orientación de niveles.

Preguntas frecuentes

¿Necesito un nombre de dominio para ejecutar un sitio .onion?

No, y eso es la mayor parte de la gracia. La dirección se genera a partir de una clave en tu propio servidor en una fracción de segundo, así que no hay registrador al que comprarla, ninguna renovación que se te pueda pasar, ningún registro WHOIS y nadie con el poder de suspenderla. Lo que renuncias es a la legibilidad: una dirección .onion son cincuenta y seis caracteres que nadie puede memorizar ni escribir, solo se abre en Tor Browser o en un cliente compatible con Tor, y los buscadores mayormente no la van a indexar. Mucha gente ejecuta las dos cosas por esa razón — un dominio para el alcance y una dirección onion para la continuidad. Nuestra guía para registrar un dominio en privado cubre la otra mitad de ese par.

¿Tengo que abrir un puerto o configurar el reenvío de puertos?

Ninguna de las dos cosas. Esta es la diferencia estructural entre un servicio onion y el hosting ordinario: el servicio hace conexiones salientes hacia puntos de introducción dentro de la red Tor y espera ahí a los clientes, así que ninguna conexión entrante llega jamás a tu servidor. Un firewall que descarte todos los paquetes entrantes no tiene ningún efecto sobre él. En la práctica eso significa que puedes acabar con una máquina que no tiene absolutamente nada escuchando en una dirección pública — incluido SSH, si le das su propia dirección onion como en el paso siete — lo cual es una superficie de ataque mucho más pequeña de la que puede lograr cualquier sitio alojado de forma convencional.

¿Necesito un certificado HTTPS para una dirección .onion?

Casi seguro que no. La propia dirección onion es la clave pública del servicio, así que la conexión ya está cifrada y autenticada de extremo a extremo contra el nombre que escribió el visitante — no hay nada que una autoridad de certificación pudiera añadir a eso, y Tor Browser trata los orígenes .onion como contextos seguros, así que las funciones que requieren HTTPS funcionan sin uno. Un número reducido de CA emitirán un certificado para un nombre .onion, lo cual es ocasionalmente útil si necesitas que se muestre un nombre de organización en la barra de direcciones o estás mezclando recursos onion y de la clearweb. Para un sitio normal, el HTTP simple en un listener de loopback es la configuración correcta y normal.

¿Por qué mi servicio onion va lento, y puedo hacer que vaya más rápido?

Una conexión onion estándar pasa por seis relays, tres elegidos por el cliente y tres por tu servicio, y ese viaje de ida y vuelta es la mayor parte de lo que se nota. Tres cosas ayudan. Si la ubicación de tu servidor no es un secreto, un servicio onion de salto único reduce tus tres saltos propios a cero y reduce la latencia aproximadamente a la mitad — mira la sección sobre ejecutar las dos cosas más arriba, y ten en cuenta que el ajuste es para toda la instancia y renuncia explícitamente a la privacidad de la ubicación del servidor. Segundo, haz que el sitio en sí sea ligero: sin recursos externos, sin tipografías ni scripts obtenidos de otros hosts, con caché agresiva, porque cada solicitud adicional vuelve a pagar el coste completo del circuito. Tercero, comprueba que no te estén inundando; activar HiddenServicePoWDefensesEnabled mantiene un servicio usable bajo un abuso de los puntos de introducción que de otro modo parecería exactamente un mal rendimiento.

¿Puedo ejecutar el mismo sitio en la clearweb y como servicio onion?

Sí, y para un proyecto público es una buena idea — les da a los lectores tras la censura una vía de entrada y no les exige resolver tu dominio. Eso sí, ten claro qué es: servir contenido idéntico desde las dos hace que sean trivialmente enlazables, así que esto es una función de alcanzabilidad y no de ocultación. Anuncia la dirección con una cabecera Onion-Location en el sitio HTTPS y ponla en el pie de página para todos los demás. Si se supone genuinamente que la ubicación del servidor debe ser privada, no hagas esto en absoluto; ejecuta el servicio onion en una máquina que no haga nada más, no tenga ningún registro DNS que apunte a ella y no envíe correo.

¿Qué pasa si pierdo la clave onion?

La dirección desaparece, permanentemente, para todo el mundo. No hay proceso de recuperación porque no hay ninguna autoridad — el nombre se deriva matemáticamente de la clave en /var/lib/tor/<service>/hs_ed25519_secret_key, y sin esos bytes nadie podrá jamás volver a publicar bajo ese nombre. Este es el precio de no tener un registrador que pueda quitártelo. Haz una copia de seguridad cifrada del directorio y fuera del servidor, restáurala una vez en una máquina desechable para confirmar que la dirección vuelve, y recuerda que quien obtenga ese archivo se convierte en tu servicio, así que merece el mismo trato que cualquier otra clave privada.

¿Puedo alojar un servicio onion en VPSCrypto?

Sí, en todos los niveles, y no necesita nada especial por nuestra parte: un servicio onion no abre puertos entrantes ni genera tráfico de abuso contra tu IP, lo que lo convierte en una de las cosas más silenciosas que puedes ejecutar. Las cuentas son no-KYC y solo necesitan una dirección a la que entregar las credenciales, el pago se liquida on-chain con Monero como opción de primera clase, y un servidor está listo en cosa de un minuto. El suelo frente al abuso se aplica exactamente igual que en cualquier otro sitio — nada de CSAM, nada de contenido terrorista, sin excepciones — y actuamos ante órdenes judiciales válidas en la jurisdicción del servidor. Consulta nuestra página de VPS compatible con Tor para la orientación de niveles y la política de uso aceptable para el resto.

Despliega un VPS offshore en un minuto

Sin KYC, pago en cripto, todo NVMe. Elige un plan, paga con Monero o cualquier moneda principal y obtén root en unos 60 segundos.

Fenrir en guardia