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.