Onion-Location es una manera fácil de publicitar un sitio onion a los usuarios. Podés configurar un servidor web para mostrar un Encabezado Onion-Location o bien agregar un meta atributo HTML en el sitio web.

Para que el encabezado sea válido, las siguientes condiciones necesitan ser reunidas:

  • El valor Onion-Location debe ser un URL válido con los protocolos http: o https: y un nombre de equipo .onion.
  • La página web definiendo el encabezado Onion-Location debe ser servida sobre HTTPS.
  • La página web definiendo el encabezado Onion-Location no debe ser un sitio onion.

En esta página, los comandos para gestionar el servidor web están basados en sistemas operativos similares a Debian, y pudieran diferir de otros sistemas. Comprobá la documentación de tu servidor web y tu sistema operativo.

Apache

Para configurar este encabezado en Apache 2.2 o superior, vas a necesitar habilitar los módulos headers y rewrite, y editar el archivo Virtual Host del sitio web.

Paso 1. Habilitá los módulos headers y rewrite y recargá Apache2

 $ sudo a2enmod headers rewrite

 $ sudo systemctl reload apache2

Si obtenés un mensaje de error, algo ha salido mal, y no podés continuar hasta que te hayas dado cuenta de por qué esto no funcionó.

Paso 2. Agregá el encabezado Onion-Location a tu archivo de configuración Virtual Host

Header set Onion-Location "http://tu-dirección-onion.onion%{REQUEST_URI}s"

Donde tu-dirección-onion.onion es la dirección del servicio onion que querés redirigir, y {REQUEST_URI} es el componente de ruta del URI solicitado, tal como "/index.html".

Ejemplo de Virtual Host:

     <VirtualHost *:443>
       ServerName <tu-sitio-web.tld>
       DocumentRoot /ruta/a/htdocs

       Header set Onion-Location "http://tu-dirección-onion.onion%{REQUEST_URI}s"

       SSLEngine on
       SSLCertificateFile "/ruta/a/www.ejemplo.com.cert"
       SSLCertificateKeyFile "/ruta/a/www.ejemplo.com.key"
     </VirtualHost>

Paso 3. Recargá Apache

Recargá el servicio apache2, con el fin de que los cambios de configuración tengan efecto:

 $ sudo systemctl reload apache2 

Si obtenés un mensaje de error, algo ha salido mal, y no podés continuar hasta que te hayas dado cuenta de por qué esto no funcionó.

Paso 4. Probando tu Onion-Location

Para probar si Onion-Location está funcionando, descargá los encabezados HTTP del sitio web, por ejemplo:

 $ wget --server-response --spider tu-sitio-web.tld

Buscá la entrada onion-location y la dirección del servicio onion. O abrí el sitio web en el Navegador Tor, y una etiqueta púrpura va a aparecer en la barra de direcciones.

Nginx

Para configurar un encabezado Onion-Location, el operador del servicio primero debería configurar un servicio Onion.

Paso 1. Creá un servicio Onion estableciendo lo siguiente en torrc:

HiddenServiceDir /var/lib/tor/mi-sitio-web-so/
HiddenServiceVersion 3
HiddenServicePort 80 unix:/var/run/mi-sitio-web-so-tor.sock

Paso 2. Editá el archivo de configuración del sitio web

En /etc/nginx/conf.d/<your-website>.conf agregá el encabezado Onion-Location y la dirección del servicio onion. Por ejemplo:

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

El archivo de configuración con el Onion-Location debería parecerse a esto:

server {
    listen 80;
    listen [::]:80;

    server_name <tu-sitio-web.tld>;

    location / {
       return 301 https://$host$request_uri;
    }

}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name <tu-sitio-web.tld>;

    # managed by Certbot - https://certbot.eff.org/
    ssl_certificate /etc/letsencrypt/live/<hostname>/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/<hostname>/privkey.pem;

    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header Onion-Location http://<your-onion-address>.onion$request_uri;

    # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    access_log /var/log/nginx/<hostname>-access.log;

    index index.html;
    root /ruta/a/htdocs;

    location / {
            try_files $uri $uri/ =404;
    }
}

server {
        listen unix:/var/run/mi-sitio-web-so-tor.sock;

        server_name <your-onion-address>.onion;

        access_log /var/log/nginx/mi-sitio-web-so.log;

        index index.html;
        root /ruta/a/htdocs;
}

Paso 3. Probá la configuración del sitio web

 $ sudo nginx -t

El servidor web debería confirmar que la nueva sintaxis está funcionando:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Paso 4. Reiniciá nginx

 $ sudo nginx -s reload

Si obtenés un mensaje de error, algo ha salido mal, y no podés continuar hasta que te hayas dado cuenta de por qué esto no funcionó.

Paso 5. Probando tu Onion-Location

Para probar si Onion-Location está funcionando, descargá los encabezados HTTP del sitio web, por ejemplo:

 $ wget --server-response --spider tu-sitio-web.tld

Buscá la entrada onion-location y la dirección del servicio onion. O abrí el sitio web en el Navegador Tor, y una etiqueta púrpura va a aparecer en la barra de direcciones.

Caddy

Caddy incluye HTTPS automático por defecto, por lo que provee tu certificado TLS y se hace cargo de la redirección HTTP-a-HTTPS por vos. Si estás usando Caddy 2, para incluir un encabezado Onion-Location, agregá la siguiente declaración en tu Caddyfile:

header Onion-Location http://<your-onion-address>.onion{ruta}

Si estás corriendo un sitio estático y tenés la dirección onion en una variable de entorno $TOR_HOSTNAME, tu Caddyfile va a parecerse a esto:

tu-sitio-web.tld

header Onion-Location http://{$TOR_HOSTNAME}{ruta}
root * /var/www
file_server

Probándolo: Probalo con:

 $ wget --server-response --spider tu-sitio-web.tld

Buscá la entrada onion-location y la dirección del servicio onion. O abrí el sitio web en el Navegador Tor, y una etiqueta púrpura va a aparecer en la barra de direcciones.

Usando un <meta> atributo HTML

El comportamiento idéntico de Onion-Location incluye la opción de definirlo como un <meta> atributo HTML http-equiv. Esto podría ser usado por sitios web que prefieren (o necesitan) definir un Onion-Location modificando el contenido HTML servido en vez de agregar un nuevo encabezado HTTP. El encabezado Onion-Location sería equivalente a un <meta http-equiv="onion-location" content="http://<your-onion-service-address>.onion" /> agregado en el elemento HTML head de la página web. Reemplazá <your-onion-service-address.onion> con el servicio onion que querés redirigir.

Más información

Leé la especificación Onion-Location.