Doze construções

Executando um relay Tor que permanece dentro da política de uso aceitável

Um relay sem saída com IPv6, medição de banda, uma unit systemd endurecida e uma verificação que confirma que sua impressão digital alcançou o consenso.

O que isto constrói

Um relay intermediário: ele aceita conexões de clientes e de outros relays, encaminha tráfego dentro da rede e nunca abre uma conexão para um destino na internet comum. Ninguém recebe uma reclamação de abuso sobre um relay intermediário, porque do lado de fora ele troca tráfego criptografado com uma lista publicada de outros relays e nada mais.

Essa distinção é a razão de existir deste guia. Relays de saída são uma conversa separada: reclamações sobre eles chegam à nossa mesa de abuso, não à sua, então leia a política de uso aceitável e abra um ticket antes de configurar um. Tudo abaixo deliberadamente desativa a saída, duas vezes.

Antes de começar

  • Um R-4. O Tor é single-threaded por conexão e limitado pela rede; quatro núcleos dedicados saturarão um link muito antes de a CPU perceber.
  • Um site com largura de banda que você está disposto a doar. BUH-01 e HEL-01 são os terabytes mais baratos que vendemos, e ambos têm o trânsito para sustentar isso.
  • Um relógio funcionando. Relays com tempo distorcido são removidos do consenso, e esta é a causa mais comum de um relay que inicia perfeitamente e nunca aparece em lugar nenhum.

1. Sistema base

apt update && apt full-upgrade -y
apt install -y tor nyx chrony nftables
timedatectl set-timezone UTC
chronyc tracking

chronyc tracking deve relatar uma diferença de tempo do sistema na casa dos microssegundos. Se relatar segundos, pare e corrija isso primeiro; nada a jusante funcionará.

2. A configuração do relay

Substitua /etc/tor/torrc pelo seguinte. Leia cada linha, porque duas delas são as que o mantêm dentro da política:

Nickname exampleRelay
ContactInfo [email protected]

ORPort 9001
ORPort [2001:db8:1a2b::2]:9001
SocksPort 0
ControlPort 0

ExitRelay 0
ExitPolicy reject *:*
IPv6Exit 0

RelayBandwidthRate 40 MBytes
RelayBandwidthBurst 60 MBytes
AccountingMax 40 TBytes
AccountingStart month 1 00:00

MetricsPort 127.0.0.1:9035
MetricsPortPolicy accept 127.0.0.1

User debian-tor
DataDirectory /var/lib/tor
Log notice syslog

ExitRelay 0 e ExitPolicy reject *:* são cinto e suspensórios. Qualquer um deles bastaria sozinho; ambos juntos significam que nenhum padrão futuro do pacote, e nenhuma edição meio lembrada à meia-noite, silenciosamente o transforma em um nó de saída.

Substitua o endereço IPv6 real da sua instância na segunda linha ORPort. Toda instância vem com um /64 roteado, então não há razão para rodar um relay apenas com IPv4, e relays com suporte a v6 ainda são mais escassos que os de v4.

A contabilidade de largura de banda merece uma reflexão, não um copiar e colar. O tráfego na nossa rede é sem medição sob uso justo, mas um relay sem limite usará exatamente o quanto a rede puder encontrar para ele, para sempre. Quarenta megabytes por segundo com um teto mensal de quarenta terabytes é um relay generoso e bem-comportado. Quando a contabilidade é atingida, o relay hiberna até o período virar, em vez de ser cortado no meio de um circuito.

Se você operar mais de um relay em qualquer lugar, adicione uma linha MyFamily listando cada impressão digital, incluindo esta, separadas por vírgula. Clientes a usam para evitar construir um circuito que passe por duas máquinas sob o mesmo controle, e omiti-la é a reclamação de configuração mais comum direcionada a operadores.

3. Reforçando a unidade

A unidade empacotada é decente; estas linhas a tornam consideravelmente menos interessante para quem encontrar um bug nela.

systemctl edit tor@default
[Service]
NoNewPrivileges=yes
PrivateTmp=yes
PrivateDevices=yes
ProtectSystem=strict
ProtectHome=yes
ProtectKernelTunables=yes
ProtectKernelModules=yes
ProtectControlGroups=yes
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
RestrictNamespaces=yes
MemoryDenyWriteExecute=yes
ReadWritePaths=/var/lib/tor /var/log/tor /run/tor
LimitNOFILE=65535

O limite de descritores de arquivo importa mais do que parece. Um relay ocupado mantém milhares de sockets simultâneos, e o limite padrão produz um relay que funciona por uma semana e então começa a recusar conexões sem nada óbvio no log.

4. Firewall

flush ruleset

table inet filter {
  chain input {
    type filter hook input priority filter; policy drop;
    ct state established,related accept
    ct state invalid drop
    iif lo accept
    ip protocol icmp accept
    ip6 nexthdr icmpv6 accept
    tcp dport 22 accept
    tcp dport 9001 accept
  }
  chain forward {
    type filter hook forward priority filter; policy drop;
  }
}
systemctl enable --now nftables
systemctl restart tor@default

Note que a porta de métricas está vinculada ao endereço loopback e, portanto, não precisa de regra. Alcance-a através de um túnel SSH quando quiser, e nunca a exponha; as métricas de relay interessam a mais pessoas do que você.

Verifique

Esta é a parte que leva horas, não minutos, então inicie e vá embora.

Primeiro, em cerca de vinte minutos após iniciar, o log deve dizer que o relay testou sua própria porta de fora e passou:

journalctl -u tor@default --since "20 min ago" | grep -i "self-testing"

Você quer a linha dizendo que sua ORPort está acessível de fora. Se ela nunca aparecer, o firewall está bloqueando a entrada 9001 ou seu endereço v6 no torrc não corresponde à instância.

Segundo, pegue sua impressão digital e guarde-a:

cat /var/lib/tor/fingerprint

Terceiro, confirme que o relay está fazendo trabalho, não apenas rodando:

nyx
curl -s http://127.0.0.1:9035/metrics | grep -E "tor_relay_traffic|tor_relay_connections"

Os contadores de tráfego devem estar subindo dentro de uma hora após o auto-teste passar. As autoridades de diretório precisam de cerca de três horas para votar sua impressão digital no consenso, e os clientes só começam a enviar volume significativo depois disso. A flag Guard chega por volta do oitavo dia se seu uptime se mantiver, e é quando o gráfico de tráfego passa de um fio d'água para o teto que você definiu.

Quarto, e o mais importante para esta construção específica, prove que você não está saindo. De uma segunda máquina, verifique se nada além de tráfego de relay sai:

ss -tn state established | wc -l
ss -tn state established sport = :9001 | wc -l

Quase toda conexão estabelecida deve envolver a ORPort. Um grande número de conexões de saída para portas arbitrárias significaria uma política de saída que você não pretendia; nesse ponto, pare o daemon e releia o passo dois.

Operando-o

CoisaResposta
ReiniciarCusta algumas horas de reputação. Agrupe suas mudanças.
Atualizaçõesapt upgrade e depois reinicie. Relays rodando versões antigas são sinalizados e eventualmente descartados.
Mudar de siteCopie /var/lib/tor/keys e a impressão digital segue o relay. O peso de consenso não redefine.
ReclamaçõesUm relay intermediário não gera nenhuma. Se você receber uma, algo está saindo e você deve verificar.
DesligamentoDefina AccountingMax para um valor pequeno primeiro para que os circuitos drenem, ou apenas pare e aceite a perda de reputação.

Faça backup de /var/lib/tor/keys em algum lugar fora da instância no dia em que a construir. A chave de identidade é o que faz deste relay aquele relay; perca-a e você recomeça com peso de consenso zero, o que significa oito dias de ninguém usando você. Nossa posição sobre o que registramos enquanto seu relay roda está na página de logging, e é curta.

Pronto quando você estiver

Escolha uma cidade. Escolha um tamanho. Pague em cripto.

Sem formulários sobre quem você é, sem esperar aprovação de um humano, sem ligação para verificar nada. O pagamento é confirmado e as credenciais chegam na sua caixa de entrada.