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 trackingchronyc 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 syslogExitRelay 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=65535De 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@defaultMerk 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/fingerprintTen 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 -lBijna 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
| Ding | Antwoord |
|---|---|
| Herstarten | Kost je een paar uur reputatie. Batched je wijzigingen. |
| Upgrades | apt upgrade en dan herstarten. Relays die oude versies draaien worden gemarkeerd en uiteindelijk verwijderd. |
| Sites verplaatsen | Kopieer /var/lib/tor/keys en de vingerafdruk volgt het relay. Consensusgewicht wordt niet gereset. |
| Klachten | Een middenrelay genereert er geen. Als je er een ontvangt, is er iets aan het exiteren en moet je dat controleren. |
| Uitschakelen | Stel 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.