Twaalf builds

Een Tor-relay draaien dat binnen het acceptabele gebruiksbeleid blijft

Een non-exit relay met IPv6, bandbreedte-accounting, een geharde systemd-unit en een verificatieslag die bevestigt dat je fingerprint de consensus heeft bereikt.

Wat dit bouwt

Een middenrelay: het accepteert verbindingen van clients en andere relays, stuurt verkeer binnen het netwerk door, en opent nooit een verbinding naar een bestemming op het normale internet. Niemand ontvangt een misbruikklacht over een middenrelay, want van buitenaf wisselt het versleuteld verkeer uit met een gepubliceerde lijst van andere relays en niets anders.

Dat onderscheid is de enige reden waarom deze gids bestaat. Exit-relays zijn een apart gesprek: klachten daarover komen bij onze misbruikafdeling terecht in plaats van bij jou, dus lees het acceptabel gebruikersbeleid en open een ticket voordat je er een configureert. Hieronder wordt expres het verlaten tweemaal uitgeschakeld.

Voordat je begint

  • Een R-4. Tor is single-threaded per verbinding en netwerkgebonden; vier dedicated cores verzadigen een link ruim voordat de CPU het merkt.
  • Een site met bandbreedte die je graag doneert. BUH-01 en HEL-01 zijn de goedkoopste terabytes die we verkopen, en beide hebben de transit om het te ondersteunen.
  • Een werkende klok. Relays met afwijkende tijd worden uit de consensus verwijderd, en dit is de meest voorkomende oorzaak van een relay die perfect start en nooit ergens verschijnt.

1. Basissysteem

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

chronyc tracking zou een systeemtijdafwijking in de microseconden moeten rapporteren. Als het seconden rapporteert, stop dan en los dat eerst op; niets stroomafwaarts zal werken.

2. De relayconfiguratie

Vervang /etc/tor/torrc door het volgende. Lees elke regel, want twee ervan zijn de regels die je binnen het beleid houden:

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 en ExitPolicy reject *:* zijn veiligheid voor de zekerheid. Elk zou op zichzelf voldoende zijn; beide samen betekenen dat geen toekomstige pakketstandaard, en geen half onthouden bewerking om middernacht, je stilletjes in een exit verandert.

Vervang het echte IPv6-adres van je instance in de tweede ORPort regel. Elke instance wordt geleverd met een gerouteerd /64, dus er is geen reden om een v4-only relay te draaien, en v6-capabele relays zijn nog steeds in kortere voorraad dan v4.

Bandbreedteboekhouding verdient een gedachte in plaats van een copy-paste. Verkeer op ons netwerk is onbeperkt onder fair use, maar een relay zonder limiet zal precies zoveel gebruiken als het netwerk ervoor kan vinden, voor altijd. Veertig megabyte per seconde met een maandelijkse limiet van veertig terabyte is een royaal, welgemanierd relay. Wanneer de boekhouding is bereikt, gaat het relay in winterslaap tot de periode voorbij is in plaats van halverwege een circuit te worden afgesneden.

Als je meer dan één relay ergens draait, voeg dan een MyFamily regel toe met elke vingerafdruk inclusief deze, door komma's gescheiden. Clients gebruiken het om te voorkomen dat ze een circuit bouwen dat door twee machines onder dezelfde controle gaat, en het weglaten ervan is de meest voorkomende configuratieklacht gericht op operators.

3. De unit versterken

De verpakte unit is fatsoenlijk; deze regels maken het aanzienlijk minder interessant voor iedereen die een bug erin vindt.

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

De bestandsdescriptorlimiet is belangrijker dan het lijkt. Een druk relay heeft duizenden gelijktijdige sockets, en de standaardlimiet produceert een relay dat een week werkt en dan verbindingen begint te weigeren zonder iets duidelijks in het logboek.

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

Merk op dat de statistiekenpoort is gebonden aan het loopback-adres en dus geen regel nodig heeft. Bereik het via een SSH-tunnel wanneer je het wilt, en stel het nooit bloot; relaystatistieken zijn voor meer mensen interessant dan jij.

Verifieer het

Dit is het deel dat uren in plaats van minuten duurt, dus start het en ga weg.

Ten eerste, binnen ongeveer twintig minuten na het starten, zou het logboek moeten zeggen dat het relay zijn eigen poort van buitenaf heeft getest en erdoorheen is gekomen:

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

Je wilt de regel die leest dat je ORPort van buitenaf bereikbaar is. Als het nooit verschijnt, blokkeert de firewall inkomend poort 9001 of je v6-adres in de torrc komt niet overeen met de instance.

Ten tweede, neem je vingerafdruk en bewaar hem:

cat /var/lib/tor/fingerprint

Ten derde, bevestig dat het relay werk doet in plaats van alleen te draaien:

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

De verkeerstellers zouden binnen een uur na het slagen van de zelftest moeten stijgen. Directory-autoriteiten hebben ongeveer drie uur nodig om je vingerafdruk in de consensus te stemmen, en clients beginnen pas daarna betekenisvol volume te sturen. De Guard-vlag arriveert rond de achtste dag als je uptime standhoudt, en dat is wanneer de verkeersgrafiek van een druppel naar de limiet die je hebt ingesteld gaat.

Ten vierde, en het belangrijkste voor deze specifieke build, bewijs dat je niet aan het exiteren bent. Vanaf een tweede machine, controleer dat er niets anders dan relayverkeer vertrekt:

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

Bijna elke gevestigde verbinding zou de ORPort moeten betreffen. Een groot aantal uitgaande verbindingen naar willekeurige poorten zou een exitbeleid betekenen dat je niet bedoelde, op dat punt stop de daemon en lees opnieuw stap twee.

Het operationeel houden

DingAntwoord
HerstartenKost je een paar uur reputatie. Batched je wijzigingen.
Upgradesapt upgrade en dan herstarten. Relays die oude versies draaien worden gemarkeerd en uiteindelijk verwijderd.
Sites verplaatsenKopieer /var/lib/tor/keys en de vingerafdruk volgt het relay. Consensusgewicht wordt niet gereset.
KlachtenEen middenrelay genereert er geen. Als je er een ontvangt, is er iets aan het exiteren en moet je dat controleren.
UitschakelenStel AccountingMax eerst in op een kleine waarde zodat circuits leeglopen, of stop het gewoon en accepteer het reputatieverlies.

Maak een back-up van /var/lib/tor/keys ergens buiten de instance op de dag dat je het bouwt. De identiteitssleutel is wat dit relay dat relay maakt; verlies het en je begint opnieuw met nul consensusgewicht, wat acht dagen is waarop niemand je gebruikt. Ons standpunt over wat we loggen terwijl je relay draait staat op de logboekpagina, en het is kort.

Klaar wanneer jij dat bent

Kies een stad. Kies een formaat. Betaal in munt.

Geen formulieren over wie je bent, geen wachten op een mens die je goedkeurt, geen telefoontje om iets te verifiëren. De factuur wordt betaald en de inloggegevens belanden in je inbox.