Este guia ajudará você a configurar uma ponte WebTunnel para ajudar usuários censurados a se conectarem à rede Tor.
WebTunnel é um transporte plugável que tenta imitar atividades de navegação na web com base em HTTPT.
Os requisitos para implantar uma ponte WebTunnel são:
- Um IPv4 estático (de preferência);
- Capacidade de expor portas TCP à Internet (certifique-se de que o NAT não atrapalhe);
- Um site auto-hospedado, incluindo um servidor web configurável (como NGINX ou Apache) e um domínio sob seu controle;
- Um certificado TLS válido;
- Pelo menos 1 GB de memória RAM (4 GB recomendados) para suportar o processo Tor e o transporte do WebTunnel.
Para mais detalhes sobre os requisitos do sistema, recomendamos a leitura da página Requisitos do relé Tor.
A implantação de uma ponte WebTunnel envolve a configuração de um servidor web e de uma ponte Tor com esse transporte conectável.
A primeira parte deste guia fornece instruções detalhadas para configurar seu servidor web para oferecer suporte ao WebTunnel.
Na segunda parte, você escolherá entre dois métodos para executar a ponte WebTunnel: usando o Docker ou compilando a partir do código-fonte.
Observe que se você não atender aos requisitos para executar um WebTunnel ou uma ponte obfs4, executar um proxy Snowflake é uma ótima maneira de doar sua largura de banda para ajudar os usuários a contornar a censura.
Configuração do servidor web
Etapa 1. Configure seu domínio
Se você já tem um domínio de site, você pode usar o domínio principal ou criar um subdomínio.
Neste guia, a ponte WebTunnel é hospedada no mesmo servidor que seu site, mas é possível hospedá-la em um servidor diferente.
Etapa 2. Obtenha um certificado válido
Se o seu site não tiver um certificado TLS, você pode obter um usando acme.sh, que é um cliente de protocolo ACME escrito em linguagem Shell.
2.1. Instalar o ACME
Substitua my@example.com pelo seu endereço de e-mail:
$ curl https://get.acme.sh | sh -s email=my@example.com
Ou
$ wget -O - https://get.acme.sh | sh -s email=my@example.com
2.2. Emitir um certificado
Substitua example.com pelo domínio do seu site.
$ ~/.acme.sh/acme.sh --issue --standalone --domain example.com
Etapa 3. Instalar o NGINX
Para coexistir com outro conteúdo em uma única porta, você deve instalar um proxy reverso, como o NGINX.
Instalar o NGINX:
$ sudo apt install nginx
Etapa 4. Configurar o NGINX
4.1. Gerar uma string aleatória
Quando os clientes se conectam ao seu servidor web, eles serão redirecionados para o seu proxy WebTunnel quando usarem um caminho secreto.
Você pode gerar uma string aleatória executando este comando:
$ echo $(cat /dev/urandom | tr -cd "qwertyuiopasdfghjklzxcvbnmMNBVCXZLKJHGFDSAQWERTUIOP0987654321"|head -c 24)
4.2. Criar ou editar um vhost NGINX
Crie um novo arquivo vhost, como /etc/nginx/sites-available/webtunnel-vhost, que encaminha o tráfego para a ponte WebTunnel.
Aqui está um exemplo completo de NGINX vhost com WebTunnel.
Ou se você quiser usar um vhost existente, basta editá-lo e adicionar o bloco location {} a ele.
Substitua $PATH pela string aleatória.
# Exemplo de bloco NGINX vhost
location = /$PATH {
proxy_pass http://127.0.0.1:15000;
proxy_http_version 1.1;
### Definir cabeçalhos WebSocket ###
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
### Definir cabeçalhos de proxy ###
proxy_set_header Accept-Encoding "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
add_header Front-End-Https on;
proxy_redirect off;
access_log off;
error_log /dev/null;
}
4.3. Teste a configuração do vhost e reinicie o NGINX
sudo ln -s /etc/nginx/sites-available/webtunnel-vhost /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Etapa 5. Configure sua ponte Tor WebTunnel
Parabéns! Você configurou com sucesso seu servidor web para enviar solicitações de proxy para sua ponte Tor.
Agora, você deve instalar e configurar sua ponte para receber essas solicitações do servidor web.
Siga a segunda parte deste guia.
Você tem duas opções disponíveis: compilar um binário Go a partir do source ou usar Docker.