Onion-Location é uma maneira fácil de anunciar um site onion para os usuários. Você pode configurar um servidor web para mostrar um cabeçalho Onion-Location ou adicionar um atributo HTML <meta> no site.

Para que o cabeçalho seja válido, as seguintes condições precisam ser atendidas:

  • O valor Onion-Location deve ser uma URL válida com protocolo http: ou https: e um nome de host .onion.
  • A página da web que define o cabeçalho Onion-Location deve ser veiculada via HTTPS.
  • A página da web que define o cabeçalho Onion-Location não deve ser um site onion.

Nesta página, os comandos para gerenciar o servidor web são baseados em sistemas operacionais do tipo Debian e podem ser diferentes de outros sistemas. Verifique o seu servidor web e a documentação do sistema operacional.

Apache

Para configurar este cabeçalho no Apache 2.2 ou superior, você precisará habilitar os módulos headers e rewrite e editar o arquivo Virtual Host do site.

Etapa 1. Habilite os cabeçalhos, reescreva os módulos e recarregue o Apache2

 $ sudo a2enmod headers rewrite

 $ sudo systemctl reload apache2

Se você receber uma mensagem de erro, algo deu errado e você não poderá continuar até descobrir por que isso não funcionou.

Etapa 2. Adicione o cabeçalho Onion-Location ao seu arquivo de configuração do Host Virtual

Header set Onion-Location "http://your-onion-address.onion%{REQUEST_URI}s"

Onde your-onion-address.onion é o endereço do Onion Service que você deseja redirecionar e {REQUEST_URI} é o componente do caminho do URI solicitado, como "/index.html".

Exemplo de host virtual:

     <VirtualHost *:443>
       ServerName <your-website.tld>
       DocumentRoot /path/to/htdocs

       Header set Onion-Location "http://your-onion-address.onion%{REQUEST_URI}s"

       SSLEngine on
       SSLCertificateFile "/path/to/www.example.com.cert"
       SSLCertificateKeyFile "/path/to/www.example.com.key"
     </VirtualHost>

Etapa 3. Recarregue o Apache

Recarregue o serviço apache2 para que as alterações na configuração tenham efeito:

 $ sudo systemctl reload apache2 

Se você receber uma mensagem de erro, algo deu errado e você não poderá continuar até descobrir por que isso não funcionou.

Etapa 4. Testando sua localização de cebola

Para testar se Onion-Location está funcionando, busque os cabeçalhos HTTP do site, por exemplo:

 $ wget --server-response --spider your-website.tld

Procure pela entrada onion-location e pelo endereço do Onion Service. Ou abra o site no navegador Tor e uma pílula roxa aparecerá na barra de endereço.

Nginx

Para configurar um cabeçalho Onion-Location, o operador do serviço deve primeiro configurar um serviço Onion.

Etapa 1. Crie um serviço Onion definindo o seguinte em torrc:

HiddenServiceDir /var/lib/tor/hs-my-website/
HiddenServiceVersion 3
HiddenServicePort 80 unix:/var/run/tor-hs-my-website.sock

Etapa 2. Editar arquivo de configuração do site

Em /etc/nginx/conf.d/<your-website>.conf adicione o cabeçalho Onion-Location e o endereço do Onion Service. Por exemplo:

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

O arquivo de configuração com o Onion-Location deve ficar assim:

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

    server_name <your-website.tld>;

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

}

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

    server_name <your-website.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 /path/to/htdocs;

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

server {
        listen unix:/var/run/tor-hs-my-website.sock;

        server_name <your-onion-address>.onion;

        access_log /var/log/nginx/hs-my-website.log;

        index index.html;
        root /path/to/htdocs;
}

Etapa 3. Testar a configuração do site

 $ sudo nginx -t

O servidor web deve confirmar se a nova sintaxe está funcionando:

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

Etapa 4. Reinicie o nginx

 $ sudo nginx -s reload

Se você receber uma mensagem de erro, algo deu errado e você não poderá continuar até descobrir por que isso não funcionou.

Etapa 5. Testando sua localização de cebola

Para testar se Onion-Location está funcionando, busque os cabeçalhos HTTP do site, por exemplo:

 $ wget --server-response --spider your-website.tld

Procure pela entrada onion-location e pelo endereço do Onion Service. Ou abra o site no navegador Tor e uma pílula roxa aparecerá na barra de endereço.

Caddy

O Caddy possui HTTPS automático por padrão, então ele provisiona seu certificado TLS e cuida do redirecionamento de HTTP para HTTPS para você. Se você estiver usando o Caddy 2, para incluir um cabeçalho Onion-Location, adicione a seguinte declaração no seu Caddyfile:

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

Se você estiver executando um site estático e tiver o endereço onion em uma variável de ambiente $TOR_HOSTNAME, seu Caddyfile ficará assim:

your-website.tld

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

Testando: Teste com:

 $ wget --server-response --spider your-website.tld

Procure pela entrada onion-location e pelo endereço do Onion Service. Ou abra o site no navegador Tor e uma pílula roxa aparecerá na barra de endereço.

Usando um atributo HTML <meta>

O comportamento idêntico de Onion-Location inclui a opção de defini-lo como um atributo HTML <meta> http-equiv. Isso pode ser usado por sites que preferem (ou precisam) definir um Onion-Location modificando o conteúdo HTML servido em vez de adicionar um novo cabeçalho HTTP. O cabeçalho Onion-Location seria equivalente a <meta http-equiv="onion-location" content="http://<your-onion-service-address>.onion" /> adicionado ao elemento HTML head da página web. Substitua <your-onion-service-address.onion> pelo Serviço Onion que você deseja redirecionar.

Limitações

O HTML não pode ler a URL solicitada e inseri-la dinamicamente na tag http-equiv <meta>. Por esse motivo, os visitantes são sempre redirecionados para o URL .onion especificado na parte de conteúdo da meta tag, independentemente da subpágina em que estejam.

Portanto, se possível, recomendamos usar um dos métodos acima.

Mais informações

Leia a especificação Onion-Location.