Todo site que você já construiu se apoia numa pilha de permissões de outras pessoas. Um registro arrenda o nome para você. Um registrador pode desligá-lo. Uma autoridade certificadora responde por você. Um resolvedor precisa responder com honestidade, e uma porta precisa ficar aberta num endereço público onde qualquer um pode encontrá-la, identificá-la e atingi-la. Cada uma dessas é uma parte que pode sofrer pressão, e uma superfície que pode ser atacada.
Um serviço onion remove todas elas. Não há registrador, porque o endereço é derivado de uma chave que você mesmo gerou. Não há DNS, porque nada resolve o nome. Não há autoridade certificadora, porque o endereço é a chave pública, e a conexão se autentica contra ela. E não há porta de entrada alguma — o seu servidor liga para fora ao encontro de quem o visita, então ele pode ficar atrás de um firewall que descarta tudo e ainda assim continuar acessível de qualquer lugar do planeta.
A configuração leva cerca de dez minutos e três linhas. O que exige cuidado é o resto da máquina, porque o servidor web por trás do Tor não faz ideia de que deveria estar escondido, e vai anunciar alegremente o seu próprio hostname, o seu próprio IP e o seu gêmeo na clearweb para quem quer que faça a pergunta certa. Este guia cuida dos dez minutos, e depois cuida da parte que realmente decide se funcionou.
O que um serviço onion tira da pilha
Comece pelo que é realmente diferente, porque é mais do que um hostname de aparência estranha. Um site comum depende de uma cadeia de terceiros externos, e um serviço onion simplesmente não tem essa cadeia.
- Sem registrador e sem registro. Um endereço onion v3 é a codificação base32 de uma chave pública ed25519, mais um checksum e um byte de versão — cinquenta e seis caracteres, gerados na sua própria máquina numa fração de segundo. Ninguém vendeu isso para você, então ninguém pode tomá-lo de volta, e não há data de renovação. Isso é o exato oposto do modelo de risco no nosso guia sobre registrar um domínio em privado.
- Sem DNS. Nada resolve um nome .onion. O cliente pede à rede Tor um descritor assinado publicado sob essa chave, então não há resolvedor para envenenar, não há zona para vazar e não há nameserver para derrubar.
- Sem autoridade certificadora. O endereço é a chave pública, então o cliente verifica o serviço contra o nome que digitou. É isso que “autoautenticável” significa: não há terceiro respondendo pela identidade, porque identidade e endereço são o mesmo objeto.
- Sem porta de entrada. O serviço abre circuitos de saída para um punhado de pontos de introdução e espera ali. O seu firewall pode descartar todo pacote de entrada e o site continua funcionando. Nada está escutando num endereço público, então não há nada para escanear, nada para identificar e nada para inundar diretamente.
Uma observação histórica que ainda causa confusão: os antigos endereços de dezesseis caracteres acabaram. O suporte a serviços onion versão 2 foi removido do Tor em outubro de 2021, os endereços não funcionam mais em lugar nenhum, e qualquer coisa que você encontrar descrevendo-os está desatualizada. Tudo abaixo é v3, que é o único tipo que existe.
E seja claro sobre o que nada disso remove. Ainda existe uma máquina física num datacenter, um host que sabe que ela existe, uma conta que alguém pagou, e uma aplicação que pode ser invadida. Serviços onion tiram a camada de endereço do alcance de terceiros. Eles não tiram o servidor.
Retransmissor, ponte, saída, serviço onion: quatro trabalhos diferentes
As pessoas chegam ao Tor querendo fazer uma de quatro coisas bem diferentes, e os perfis de risco não são nem remotamente comparáveis. Vale a pena saber para qual delas você está se inscrevendo.
- Um retransmissor intermediário repassa tráfego criptografado entre outros retransmissores. Ele carrega dados de outras pessoas, mas nunca toca na internet aberta em nome delas, então não atrai reclamações.
- Uma ponte é um ponto de entrada não listado para pessoas cujo acesso ao Tor está bloqueado. Mesmo perfil de tráfego de um retransmissor intermediário, com o endereço mantido fora do diretório público.
- Um retransmissor de saída é onde o tráfego de outras pessoas deixa o Tor e alcança a internet comum, sob o seu endereço IP. Esse é o que gera e-mails de abuso e correspondência jurídica, e precisa de tratamento deliberado — o nosso guia sobre retransmissores Tor cobre isso direito.
- Um serviço onion publica. Ele não carrega tráfego além do próprio, nunca contata a clearweb em nome de ninguém, e portanto não produz nenhum relatório de abuso contra o seu IP. Não há saída, portanto nada sai.
Esse último ponto vale a pena examinar com calma, porque costuma ser mal compreendido. Rodar um serviço onion é, operacionalmente, a coisa mais silenciosa que você pode fazer na rede Tor. O seu servidor faz conexões de saída que parecem tráfego comum de cliente Tor; ele nunca aparece como a origem de uma conexão para o servidor de outra pessoa; e a coisa com que a maioria das pessoas se preocupa — o comportamento de outra pessoa recaindo sobre o seu IP — é estruturalmente impossível.
Você também não precisa rodar um retransmissor para rodar um serviço onion, e é melhor manter os dois separados. Um retransmissor quer largura de banda, uma ORPort pública e um ContactInfo publicado. Um serviço não quer nada disso. Se você quiser fazer os dois, faça-os em dois servidores.
O Tor quase nunca é o que vaza
Aqui está a parte em que a documentação oficial é rasa, e a parte que realmente determina se o exercício valeu a pena. O Tor, configurado como abaixo, é extremamente improvável de ser a coisa que denuncia o seu servidor. O software por trás dele, sim, porque esse software foi escrito partindo do princípio de que um servidor web quer ser encontrado.
Estes são os canais, mais ou menos na ordem em que costumam pegar as pessoas:
- O mesmo conteúdo no IP público. Se o seu servidor web também escuta em
0.0.0.0, qualquer um que escaneie a internet vê a página idêntica tanto num endereço IP quanto num endereço onion. Scanners de internet inteira indexam continuamente cada porta aberta, e os resultados são pesquisáveis por hash do corpo e por hash do favicon. Uma única consulta liga os dois. Essa é, de longe, a forma mais comum de um serviço onion ser desmascarado, e é um erro de configuração de uma linha só. - Banners de servidor e páginas padrão. Uma instalação padrão de
nginxouapache2responde a hostnames desconhecidos com uma página padrão, imprime a sua versão no cabeçalhoServer, e frequentemente revela o hostname real da máquina na saída de erro. Cada uma dessas coisas é uma alça de correlação. - URLs absolutas. Redirecionamentos, tags canônicas, sitemaps, feeds RSS, tags Open Graph e e-mails de redefinição de senha adoram todos emitir uma URL completa da clearweb. Uma única dessas dentro da versão onion de uma página já basta.
- Requisições de saída que a aplicação faz. Analytics, fontes web, ativos de CDN, serviços de avatar, tiles de mapa, webhooks e verificações de atualização todos se originam do IP real do servidor, e vários deles dizem a um terceiro qual página estava sendo renderizada naquele momento. Um site self-hosted com uma fonte carregada do domínio de outra pessoa tem uma trilha de auditoria que não pretendia ter.
- E-mail. Qualquer coisa que a máquina envie carimba o seu IP real nos cabeçalhos
Received. Se o serviço precisa enviar e-mail, isso é um problema de design a ser resolvido deliberadamente — comece pelo nosso guia de servidor de e-mail, e assuma por padrão que ele não deveria enviar nada. - Chaves e fingerprints reaproveitados. A mesma chave de host SSH respondendo tanto no IP público quanto num endereço onion os liga permanentemente. O mesmo vale para o mesmo certificado TLS, o mesmo favicon, o mesmo identificador de analytics, ou a mesma página de erro característica em dois projetos.
- Certificate Transparency. Se a mesma máquina alguma vez servir um domínio da clearweb por HTTPS, o certificado desse domínio é gravado para sempre em logs públicos e de só-acréscimo. Isso nomeia a máquina, não o onion, mas nomeia a máquina.
O formato comum de todos esses casos é o mesmo: o Tor escondeu o endereço, e outra coisa no servidor o publicou. O passo oito abaixo é uma checklist para encontrá-los antes que outra pessoa o faça.
Decida primeiro: a localização do servidor é um segredo?
Antes de instalar qualquer coisa, responda a uma pergunta, porque tudo o que vem depois depende dela: a localização física deste servidor é um segredo que você está tentando manter?
Existem três respostas honestas, e elas levam a construções genuinamente diferentes.
- Sim, a localização é o ponto principal. Então esta máquina faz exatamente um trabalho. Nenhum site na clearweb, nenhum registro DNS público apontando para o seu IP, nenhum e-mail, nenhum outro serviço escutando em lugar nenhum. Pague por ela de um jeito que não associe o seu nome — o nosso passo a passo de Monero cobre a mecânica, e as contas no-KYC significam que não há nada para entregar além de um endereço de entrega. Você mantém a configuração completa de três saltos. Todo atalho abaixo que troca anonimato por velocidade está fechado para você, e tudo bem, porque você não está otimizando para velocidade.
- Não, o servidor já é público. Você roda um site comum e também quer um endereço onion — para leitores sob censura, para pessoas que preferem não resolver o seu domínio, ou porque você gostaria de oferecê-lo. Ninguém está escondendo nada, então você pode usar um serviço onion de salto único, cortar o circuito de seis saltos para três, e anunciar o endereço a partir do site na clearweb com um cabeçalho
Onion-Location. Isso é um recurso de alcançabilidade, e é um motivo completamente legítimo para estar aqui. - Em algum lugar no meio. É aí que a maioria das pessoas realmente está, e é a posição perigosa, porque “meio escondido” não é uma propriedade que um servidor pode ter. Escolha um lado. Se a localização importa de verdade, construa como se importasse. Se não importa, pare de pagar o custo de latência por uma propriedade de anonimato que você não está mantendo.
Anote a resposta antes de continuar. Quase todo erro no assunto deste guia vem de construir para o primeiro caso e operar como se fosse o segundo.
Passo a passo
- Escolha o servidor, e decida o que mais vive nele
Um serviço onion é barato de rodar. O próprio Tor usa muito pouca CPU quando não está retransmitindo, e a carga de trabalho é a mesma que o seu site já custaria de qualquer forma, então dimensione para a aplicação, não para o Tor. Um site estático ou uma pequena aplicação self-hosted fica confortável com 1 vCPU e 2 GB; dê a ela 2 vCPU e 4 GB se houver um banco de dados ou um runtime de linguagem envolvido. Na nossa escada isso é o Cub (1 vCPU, 2 GB, 40 GB) a $5/mês ou o Scout (2 vCPU, 4 GB, 70 GB) a $9/mês, ambos all-NVMe com tráfego ilimitado a 1 Gbps.
A decisão que importa não é o plano. É a da seção acima: se a localização desta máquina deve ser privada, ela faz um trabalho, e só um. Nenhum outro site nela, nenhum registro DNS em lugar nenhum apontando para o seu endereço, nenhum e-mail, nada mais escutando. A tentação de colocar “só mais uma coisinha” numa máquina pela qual você já está pagando é exatamente como a correlação acontece.
Pague por ela de um jeito compatível. As contas aqui precisam de um endereço de e-mail para entrega e nada mais, e o checkout se resolve on-chain — o passo a passo de Monero e o comprar sem cartão cobrem isso do zero. Comece a partir de uma imagem mínima de Debian ou Ubuntu; todo comando abaixo assume Debian 12 ou mais recente, como root.
- Instale o Tor a partir do repositório do Tor Project
Use o repositório do próprio Tor Project, em vez do pacote da distribuição. O build da distro fica atrasado, e duas das configurações deste guia — o limitador de taxa de pontos de introdução e a defesa por prova de trabalho — só existem em versões recentes.
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 --versionO pacote
deb.torproject.org-keyringmantém a chave de assinatura atualizada, então isso é um trabalho único, e não algo que quebra daqui a um ano. Qualquer versão a partir da 0.4.8 tem todas as opções usadas abaixo.Não configure nada ainda. O Tor está rodando como cliente neste ponto, que é tudo que você precisa para o passo de verificação mais adiante.
- Coloque o servidor web no loopback, e em nenhum outro lugar
Este é o passo que mais costuma ser pulado, e o que mais costuma arruinar o exercício. O servidor web precisa ser alcançável a partir da própria máquina, e de nenhum outro lugar. Instale o nginx, depois escreva um virtual host que se vincule apenas ao 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 offremove a versão do cabeçalhoServere das páginas de erro. Desativar o log de acesso é uma escolha deliberada, não preguiça: toda requisição que passa pelo Tor chega de127.0.0.1, então o log não registra nada útil sobre os visitantes, e bastante coisa que vale a pena não guardar.Depois adicione um catch-all que responde no endereço público e se recusa a dizer qualquer coisa. O
444do nginx fecha a conexão sem resposta, que é a resposta mais silenciosa possível para um scanner:# /etc/nginx/sites-available/deny-direct server { listen 80 default_server; listen [::]:80 default_server; return 444; }Ative os dois, remova o site padrão de fábrica, e confirme o que está realmente escutando:
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 -ltnpLeia a saída do
sscom atenção. A única entrada vinculada a0.0.0.0ou::deveria ser aquela que você pretendia manter — o SSH, e o catch-all444, se você optou por rodá-lo. Tudo o mais pertence ao127.0.0.1. Se a aplicação que você está hospedando vem com o seu próprio listener, verifique-a também; muitos frameworks assumem todas as interfaces por padrão e não dizem nada sobre isso. - Declare o serviço onion no torrc
Três linhas criam o serviço. Adicione-as ao
/etc/tor/torrc, junto com as duas defesas que são muito mais fáceis de ativar agora do que durante um 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 1Leia a linha da porta com atenção, porque os dois números fazem trabalhos diferentes. O primeiro é a porta que os visitantes vão usar na URL onion — mantenha-a em
80para que ninguém precise digitar uma. O segundo é para onde o Tor encaminha a requisição localmente, que é o listener de loopback do passo anterior. Eles não precisam ser iguais, e muitas vezes fica mais claro quando não são.Se você quiser eliminar até o socket TCP de loopback, o Tor pode falar com um socket unix em vez disso, o que significa que absolutamente nada fica escutando numa porta. Aponte o serviço para um socket e configure o nginx para escutar nele:
HiddenServicePort 80 unix:/run/onion-site.sockNão crie o diretório você mesmo, e não crie os arquivos de chave. O Tor os gera na primeira inicialização, com a propriedade e as permissões que ele espera, e um diretório que você criou manualmente com o modo errado é um motivo comum para o serviço falhar silenciosamente ao subir.
- Inicie o Tor e leia o seu endereço
Reinicie o Tor, observe-o subir, e colete o seu endereço:
systemctl restart tor@default journalctl -u tor@default -n 20 --no-pager cat /var/lib/tor/onion-site/hostnameEsse arquivo contém cinquenta e seis caracteres base32 seguidos de
.onion, e esse é o seu endereço — ativo a partir do momento em que o Tor registra no log que publicou o seu descritor, geralmente dentro de um minuto. Não há nada para registrar, nada para propagar e nada para esperar.Veja o que mais o Tor criou, porque dois desses arquivos importam mais do que qualquer outra coisa na máquina:
ls -l /var/lib/tor/onion-site/Você deve ver
hostname,hs_ed25519_public_keyehs_ed25519_secret_key, num diretório pertencente adebian-torcom modo0700. A chave secreta não é uma credencial para o endereço; ela é o endereço. Copie-a para outra máquina, e essa máquina é o seu serviço. Apague-a sem um backup, e o endereço nunca mais poderá ser recriado por ninguém, nem mesmo por você. O passo nove trata disso adequadamente — não o pule.Se o arquivo hostname não aparecer, a resposta quase sempre está no log: um diretório que o Tor não consegue possuir, um modo de permissão que ele se recusa a aceitar, ou um erro de digitação na linha da porta.
- Alcance-o, e prove que é a sua máquina
O teste óbvio é abrir o endereço no Tor Browser, e você deveria fazer isso. O teste útil é pela linha de comando, onde você pode ver os cabeçalhos:
apt install -y torsocks torsocks curl -sI http://<your-address>.onion/ torsocks curl -s http://<your-address>.onion/ | headProve que é realmente o seu servidor. Um endereço que você digitou à mão tem cinquenta e seis caracteres base32, e um único caractere trocado pode cair no serviço de outra pessoa. Escreva um token aleatório no servidor, depois busque esse caminho exato através do Tor e compare:
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.txtDuas strings idênticas significam que você alcançou a sua própria máquina. Remova o arquivo depois.
Saiba o que esse teste mostra e o que não mostra. Rodá-lo a partir do próprio servidor prova que o serviço está publicado e alcançável, que é exatamente o que você queria saber. Não prova nada sobre anonimato, já que as duas pontas são a mesma máquina. Para isso, teste a partir de uma rede completamente diferente — e se o próprio Tor estiver bloqueado onde você está, uma ponte é a resposta, o que o nosso guia sobre como driblar bloqueios de DPI cobre.
- Feche as portas que o serviço não precisa
Agora colha a recompensa. Um serviço onion precisa de zero portas de entrada, então o firewall pode ser o mais grosseiro possível: descarte tudo que entra, permita conexões já estabelecidas e o que você precisar para administrar a máquina. O nosso guia de hardening do Debian tem um conjunto completo de regras nftables; aplique-o, depois verifique que a única exceção de entrada restante é o SSH.
Depois considere remover essa exceção também. O SSH é a última porta pública numa máquina que, fora isso, é invisível, e não precisa continuar sendo. Dê a ele o seu próprio endereço onion:
# /etc/tor/torrc HiddenServiceDir /var/lib/tor/onion-ssh/ HiddenServicePort 22 127.0.0.1:22Reinicie o Tor, leia o novo hostname, e conecte-se através da sua porta SOCKS local do Tor. Isso vai no
~/.ssh/configdo seu laptop:Host onionbox HostName <ssh-address>.onion User root ProxyCommand nc -X 5 -x 127.0.0.1:9050 %h %pAssim que isso funcionar, defina
ListenAddress 127.0.0.1nosshd_confige remova a regra de entrada. A máquina agora não tem absolutamente nada escutando num endereço público.Duas precauções. Teste a rota onion cuidadosamente antes de fechar a porta atrás de você, e mantenha o acesso ao console do seu provedor disponível, para que um erro custe um reboot, e não o servidor — o nosso fica no painel de controle. E não deixe a mesma chave de host SSH responder tanto no IP público quanto no endereço onion em nenhum momento, porque o fingerprint é idêntico nos dois lugares, e esse é exatamente o vínculo que você está tentando não criar.
- Cace os vazamentos antes de publicar o endereço
Trabalhe nisso antes de contar o endereço para alguém. Leva cinco minutos, e é a diferença entre um serviço escondido de verdade e um serviço que é apenas inconveniente de encontrar.
Nada inesperado está escutando. Toda linha deveria ser loopback, ou uma porta que você decidiu conscientemente deixar aberta:
ss -ltnpO IP público não serve nada. Pergunte a ele diretamente, dos dois jeitos, a partir de outro lugar. Respostas vazias ou recusas de conexão são o que você quer; o seu conteúdo é o que você não quer:
curl -sI --max-time 5 http://203.0.113.10/ curl -skI --max-time 5 https://203.0.113.10/Nenhuma URL da clearweb está dentro do que você serve. Puxe a página através do Tor e liste todo link absoluto nela. Qualquer coisa apontando para um domínio que você controla, um CDN, um host de fontes ou um endpoint de analytics é um vazamento ou uma alça de correlação:
torsocks curl -s http://<your-address>.onion/ \ | grep -Eo 'https?://[^ "]+' | sort -uCabeçalhos e páginas de erro não dizem nada. Verifique uma página real e uma deliberadamente inexistente, e procure por strings de versão, hostnames, caminhos de arquivo e stack traces:
torsocks curl -sI http://<your-address>.onion/ torsocks curl -s http://<your-address>.onion/nothing-here | head -20A aplicação não está ligando para casa. Este aqui não é um comando, é uma leitura. Desative o analytics. Hospede as suas próprias fontes, ícones e scripts. Desligue a busca de avatares e previews. Remova verificações de atualização que ligam para fora numa agenda fixa. Aponte qualquer configuração de URL absoluta — URL do site, host canônico, domínio do remetente de e-mail — para o endereço onion, em vez de um da clearweb.
Faxina. Ajuste a máquina para UTC com
timedatectl set-timezone UTC, para que os timestamps não revelem nada sobre onde ela, ou você, possam estar. Garanta que/server-status,/.git, arquivos de backup e arquivos de swap de editor não estejam alcançáveis. E se esta máquina também serve um site na clearweb, volte e leia a terceira seção de novo, porque a checklist acima não consegue salvar uma construção cuja postura nunca foi decidida. - Faça backup da chave, porque a chave é o endereço
Vamos repetir mais uma vez, porque é a falha da qual as pessoas não se recuperam: a chave secreta é o endereço. Não há registrador para recorrer, não há e-mail de recuperação, não há chamado de suporte. Perca esses bytes, e o nome desaparece da internet permanentemente.
Pare o Tor para que os arquivos fiquem consistentes, arquive o diretório inteiro do serviço, e criptografe-o antes que ele saia da 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@defaultMova o arquivo criptografado para algum lugar que não seja este servidor — o ponto todo é que ele sobreviva à máquina. O nosso guia de backups criptografados cobre como fazer isso numa agenda fixa, para um destino só-acréscimo em outro país, que é o lugar certo para ele.
Restaurar é a mesma coisa ao contrário, e as permissões não são opcionais: o Tor se recusa a iniciar se o modo estiver errado, o que é irritante na hora, e exatamente o comportamento que você quer.
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/hostnameEssa última linha é o teste. O mesmo endereço numa máquina diferente significa que o backup é real. Ensaie isso uma vez, agora, num servidor descartável — um backup nunca testado de uma chave insubstituível é uma história sobre uma chave que você costumava ter. A mesma disciplina se aplica aqui e no nosso guia de migração: a restauração é a coisa que você está realmente comprando.
- Publique o endereço para que as pessoas confiem nele
Agora você tem cinquenta e seis caracteres que ninguém consegue ler, lembrar, ou verificar a olho nu. Isso é um problema real de usabilidade, e também de segurança, porque um visitante não consegue distinguir o seu endereço de uma falsificação quase idêntica. Distribuição é parte da construção, não uma reflexão tardia.
Publique-o onde o leitor já confia em você. Se você tem um site na clearweb, coloque o endereço no rodapé e sirva o cabeçalho
Onion-Locationda seção abaixo. Caso contrário, use qualquer canal que o seu público já associe a você — uma conta existente, uma mensagem assinada, um cartão impresso. O endereço herda exatamente tanta credibilidade quanto o lugar onde você o publicou.Assine-o se o risco justificar. Uma assinatura sobre o endereço, verificável contra uma chave que as pessoas já têm, é a única forma de alguém confirmar que tem o endereço certo sem precisar confiar no canal que o carregou.
Não dependa de diretórios ou mecanismos de busca. Índices onion existem, são incompletos, e vários têm um histórico de listar cópias de phishing de endereços populares ao lado dos reais. Ser encontrável ali é um bônus; não é um plano de distribuição.
Um prefixo personalizado ajuda um pouco. A ferramenta
mkp224otesta chaves até que uma produza um endereço começando com uma string que você escolher, o que o torna reconhecível de relance: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 wolfO custo cresce exponencialmente com o comprimento: alguns caracteres levam segundos, sete ou oito levam um tempo de verdade em hardware de verdade, e qualquer coisa além disso não vai acontecer. Seja honesto sobre o que isso compra — um atacante pode gerar o mesmo prefixo, e confiar que os primeiros caracteres batem é exatamente o hábito que faz as pessoas clicarem no link errado. Trate isso como branding, não como autenticação. O diretório gerado entra diretamente como um
HiddenServiceDir: corrija a propriedade e os modos como no passo anterior, e gere-o em algum lugar de confiança, porque quem roda a ferramenta fica com a chave.
Rodando o mesmo site na clearweb e como onion
Se a localização do servidor não é um segredo, rodar os dois é simples e genuinamente útil — é assim que grandes organizações de notícias, o Debian e vários mecanismos de busca oferecem os seus sites. Dois mecanismos e uma troca para entender.
Anuncie-o com Onion-Location. Um único cabeçalho no site da clearweb faz o Tor Browser mostrar um botão “.onion disponível” na barra de endereço, e oferecer a troca. O cabeçalho só é respeitado em páginas servidas por HTTPS, e o valor precisa ser uma URL onion válida:
add_header Onion-Location "http://<your-address>.onion$request_uri" always;Existe um equivalente em HTML para hosts onde você não pode definir cabeçalhos, que tem a mesma exigência de HTTPS:
<meta http-equiv="onion-location" content="http://<your-address>.onion">Também coloque o endereço em algum lugar que um humano possa ler, no rodapé ou numa página sobre. O cabeçalho só alcança quem já usa o Tor Browser; o rodapé alcança todo o resto.
Considere um serviço onion de salto único. Uma conexão onion normal tem seis saltos — três escolhidos pelo cliente, três pelo serviço — e os três do serviço existem puramente para esconder onde ele está. Se isso não é um segredo, você pode eliminá-los. A melhora de latência é grande e perceptível de imediato. A configuração é abrupta de propósito:
# /etc/tor/torrc — these are INSTANCE-WIDE, not per service
HiddenServiceNonAnonymousMode 1
HiddenServiceSingleHopMode 1
SOCKSPort 0As duas opções são exigidas juntas, a porta SOCKS precisa estar desabilitada, e elas se aplicam a todo serviço onion nessa instância do Tor — não há como isentar um serviço individualmente. O Tor vai se recusar a iniciar se você definir uma sem as outras, o que é o software te fazendo um favor. Se uma única instância hospeda um serviço cuja localização é pública e outro cuja localização não é, rode duas instâncias, ou melhor, dois servidores.
E aceite a troca. Publicar os dois endereços declara que o mesmo operador roda ambos, e servir conteúdo idêntico nos dois os torna trivialmente vinculáveis de qualquer forma. Esse é o acordo, e para um site público não custa nada. Mantenha a higiene mesmo assim: nenhuma URL absoluta da clearweb dentro da versão onion, cookies restritos por host para que uma sessão não viaje entre eles, e uma política de segurança de conteúdo que não puxe ativos de fora.
Autorização de cliente: quando o endereço é a credencial
Por padrão, qualquer um que conheça o seu endereço pode alcançar o serviço. A autorização de cliente muda isso na camada de rede, e não na camada de aplicação, e essa diferença importa mais do que parece.
Com a autorização ativada, o descritor que o seu serviço publica é criptografado para um conjunto de chaves de cliente. Um visitante sem uma dessas chaves não consegue descriptografá-lo, não consegue descobrir os pontos de introdução, e portanto não consegue se conectar de forma alguma — ele não chega a uma página de login, não recebe uma recusa, não recebe nada. O serviço não está apenas não listado; ele é invisível.
Gere um par de chaves x25519 por cliente. Toda ferramenta usada aqui já está numa 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 '='No servidor, coloque a chave pública num diretório authorized_clients dentro do diretório do serviço. O nome do arquivo é arbitrário, desde que termine em .auth, o que faz da revogação uma questão de apagar um único arquivo:
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@defaultNo cliente, a chave privada vai no diretório indicado por ClientOnionAuthDir, num arquivo terminado em .auth_private, com o endereço repetido dentro dele. O Tor Browser tem o seu próprio diretório para isso dentro da sua pasta de dados, e vai pedir uma chave se encontrar um serviço que precise de uma:
# /var/lib/tor/onion-auth/mysite.auth_private
<address-without-the-.onion>:descriptor:x25519:<ALICE-PRIVATE-KEY>Essa é a ferramenta certa para um site de staging, um painel administrativo, um repositório privado de arquivos, ou um Nextcloud self-hosted que só você usa — qualquer coisa em que a resposta honesta para “quem deveria conseguir ver que isso existe?” seja “ninguém além de nós”. O custo é real e é administrativo: você precisa levar as chaves até as pessoas por um canal em que confia, e precisa se lembrar de removê-las depois.
Mantendo-o no ar: DoS, relógios e uptime
Serviços onion falham de jeitos bem particulares, e nenhum deles parece uma interrupção comum. Quatro coisas valem a pena configurar antes de você precisar delas.
Negação de serviço é o problema operacional de verdade. Como não há endereço IP para filtrar, as defesas de sempre não se aplicam, e uma inundação deliberada de requisições de introdução é barata de enviar. O Tor tem duas respostas, ambas definidas por serviço no torrc: HiddenServiceEnableIntroDoSDefense 1 limita a taxa de requisições nos pontos de introdução, e HiddenServicePoWDefensesEnabled 1 faz os clientes resolverem um pequeno quebra-cabeça de prova de trabalho que fica mais difícil sob carga, de forma que visitantes legítimos esperam um momento enquanto uma inundação se torna cara. Ative as duas desde o início; o custo, quando nada está te atacando, é insignificante.
Mantenha o relógio certo. Descritores são publicados e consultados contra períodos de tempo derivados de um valor compartilhado da rede. Um servidor cujo relógio desviou muito publica no lugar errado e se torna inalcançável, enquanto parece perfeitamente saudável nos seus próprios logs. Garanta que um cliente NTP esteja rodando, mantenha a máquina em UTC, e verifique isso quando um serviço misteriosamente parar de resolver.
O monitoramento precisa passar pelo Tor. Nenhum serviço comercial de uptime consegue sondar um endereço .onion, o que significa que a resposta de sempre não está disponível para você. Rode a verificação você mesmo, a partir de uma segunda máquina que não seja a que hospeda o serviço — um cron job rodando torsocks curl -s --max-time 60 contra uma URL conhecida, comparando a saída com uma string conhecida, já basta e não custa nada.
Planeje mais de uma instância se o uptime importa. O OnionBalance permite que vários servidores de backend compartilhem um único endereço onion: uma instância front-end guarda a chave dona do endereço e publica um descritor apontando para os pontos de introdução dos backends, então você ganha distribuição de carga e failover sem o endereço jamais mudar. São mais peças móveis do que a maioria dos sites precisa, mas é a resposta suportada oficialmente, e vale saber que ela existe antes de você se encurralar numa única máquina.
Um último hábito operacional: reiniciar o Tor deixa o serviço offline por alguns segundos enquanto ele republica, e uma reinstalação que apaga /var/lib/tor o deixa offline para sempre. Trate esse diretório do jeito que trataria uma chave privada, porque é isso que ele é.
Os limites honestos
Um endereço onion remove o registrador, o resolvedor, a autoridade certificadora e a porta aberta. Ele não remove mais nada, e ser preciso sobre o que resta é o que separa uma ferramenta útil de uma falsa sensação de segurança.
Ele não corrige a aplicação. Uma aplicação web vulnerável por trás de um serviço onion é uma aplicação web vulnerável; a primeira coisa que muitos atacantes fazem depois de conseguir execução de código é fazer uma requisição de saída que revela o endereço real do servidor. Dê à máquina os dez minutos do nosso guia de hardening do Debian, mantenha-a corrigida, e trate-a como exposta mesmo que nada esteja escutando.
Ele não esconde o servidor de quem o administra. Nós sabemos que um servidor existe, quando foi implantado, e qual é o seu endereço IP, porque fomos nós que o alocamos. Isso é verdade para todo host, em qualquer lugar, e quem te disser o contrário está vendendo alguma coisa. O que podemos dizer com precisão é o que fazemos com isso, que está descrito no nosso relato honesto do que um VPS pago em cripto esconde.
Ele não derrota sozinho um adversário paciente e bem financiado. O volume e o timing do tráfego são visíveis nas bordas da rede, e um serviço que fica quieto sempre que uma pessoa específica está dormindo está te dizendo algo. Também não ajuda se o conteúdo te identifica: o mesmo estilo de escrita, a mesma chave PGP, o mesmo avatar ou o mesmo apelido de fórum usado como identidade pública fecha o ciclo, não importa quão bom seja o transporte.
Do nosso próprio lado, para você se calibrar: serviços onion são bem-vindos em todos os planos e não precisam de nada especial da nossa parte, porque não abrem portas nem geram tráfego de abuso. Rodamos contas no-KYC que precisam apenas de um endereço para entregar as credenciais. Tratamos a correspondência de direitos autorais de rotina como uma questão operacional, e não como uma remoção automática, agimos sobre ordens judiciais válidas na jurisdição em que o servidor está, e o piso rígido é absoluto e se aplica aqui exatamente como em qualquer outro lugar: sem CSAM, sem conteúdo de terrorismo, sem exceções. Leia a política de uso aceitável e como tratamos relatórios de abuso antes de construir algo que você lamentaria ter que mudar de lugar. A nossa página de VPS amigável a Tor tem a orientação de planos.
Perguntas frequentes
Preciso de um nome de domínio para rodar um site .onion?
Não, e esse é praticamente o ponto todo. O endereço é gerado a partir de uma chave no seu próprio servidor numa fração de segundo, então não há registrador para comprá-lo, nenhuma renovação para perder, nenhum registro WHOIS, e ninguém com poder para suspendê-lo. O que você abre mão é legibilidade: um endereço .onion tem cinquenta e seis caracteres que ninguém consegue memorizar ou digitar, só abre no Tor Browser ou num cliente compatível com Tor, e mecanismos de busca em geral não o indexam. Muita gente roda os dois por esse motivo — um domínio para alcance, e um endereço onion para continuidade. O nosso guia sobre registrar um domínio em privado cobre a outra metade desse par.
Preciso abrir uma porta ou configurar redirecionamento de porta?
Nenhum dos dois. Essa é a diferença estrutural entre um serviço onion e uma hospedagem comum: o serviço faz conexões de saída para pontos de introdução dentro da rede Tor e espera pelos clientes ali, então nenhuma conexão de entrada jamais chega ao seu servidor. Um firewall que descarta todo pacote de entrada não tem efeito nenhum sobre ele. Na prática, isso significa que você pode acabar com uma máquina que não tem absolutamente nada escutando num endereço público — incluindo o SSH, se você der a ele o seu próprio endereço onion como no passo sete — que é uma superfície de ataque muito menor do que qualquer site hospedado de forma convencional consegue alcançar.
Preciso de um certificado HTTPS para um endereço .onion?
Quase certamente não. O próprio endereço onion é a chave pública do serviço, então a conexão já é criptografada e autenticada de ponta a ponta contra o nome que o visitante digitou — não há nada que uma autoridade certificadora pudesse acrescentar a isso, e o Tor Browser trata origens .onion como contextos seguros, então recursos que exigem HTTPS funcionam sem um certificado. Um pequeno número de CAs emite certificados para nomes .onion, o que é ocasionalmente útil se você precisa que um nome de organização apareça na barra de endereço, ou se está misturando ativos onion e da clearweb. Para um site comum, HTTP simples num listener de loopback é a configuração correta e normal.
Por que o meu serviço onion está lento, e dá para deixá-lo mais rápido?
Uma conexão onion padrão passa por seis retransmissores, três escolhidos pelo cliente e três pelo seu serviço, e essa ida e volta é a maior parte do que você sente. Três coisas ajudam. Se a localização do seu servidor não é um segredo, um serviço onion de salto único reduz a zero os seus três saltos próprios e corta a latência quase pela metade — veja a seção sobre rodar os dois acima, e note que a configuração vale para a instância inteira e abre mão explicitamente da privacidade de localização do servidor. Segundo, deixe o próprio site leve: nenhum ativo externo, nenhuma fonte ou script buscado de outros hosts, cache agressivo, porque cada requisição extra paga o custo total do circuito de novo. Terceiro, verifique se você não está sendo inundado; ativar HiddenServicePoWDefensesEnabled mantém um serviço utilizável sob abuso de pontos de introdução, que de outra forma pareceria exatamente com desempenho ruim.
Posso rodar o mesmo site na clearweb e como serviço onion?
Sim, e para um projeto público é uma boa ideia — dá a leitores sob censura uma rota de entrada e não exige que eles resolvam o seu domínio. Mas seja claro sobre o que isso é: servir conteúdo idêntico dos dois lugares os torna trivialmente vinculáveis, então isso é um recurso de alcançabilidade, não de ocultação. Anuncie o endereço com um cabeçalho Onion-Location no site HTTPS, e coloque-o no rodapé para todo o resto. Se a localização do servidor deve genuinamente ser privada, não faça isso de jeito nenhum; rode o serviço onion numa máquina que não faz mais nada, não tem nenhum registro DNS apontando para ela e não envia e-mail.
O que acontece se eu perder a chave onion?
O endereço se vai, permanentemente, para todo mundo. Não há processo de recuperação, porque não há autoridade nenhuma — o nome é derivado matematicamente da chave em /var/lib/tor/<service>/hs_ed25519_secret_key, e sem esses bytes ninguém jamais poderá republicar sob esse nome. Essa é a troca por não ter um registrador que possa tomá-lo de você. Faça backup do diretório, criptografado e fora do servidor, restaure-o uma vez numa máquina descartável para confirmar que o endereço volta, e lembre-se de que quem obtiver esse arquivo se torna o seu serviço, então ele merece o mesmo tratamento que qualquer outra chave privada.
Posso hospedar um serviço onion na VPSCrypto?
Sim, em qualquer plano, e não precisa de nada especial da nossa parte: um serviço onion não abre portas de entrada e não gera tráfego de abuso contra o seu IP, o que o torna uma das coisas mais silenciosas que você pode rodar. As contas são no-KYC e precisam apenas de um endereço para entregar as credenciais, o checkout se resolve on-chain com Monero em primeira classe, e um servidor fica no ar em cerca de um minuto. O piso de abuso se aplica exatamente como em qualquer outro lugar — sem CSAM, sem conteúdo de terrorismo, sem exceções — e agimos sobre ordens judiciais válidas na jurisdição do servidor. Veja a nossa página de VPS amigável a Tor para orientação de planos, e a política de uso aceitável para o resto.

