Tor Hidden Service mit OnionBalance
Für mein Jabber/XMPP Projekt blabber.im habe ich eine Möglichkeit gesucht, eine .onion-Adresse für mehrere Server nutzen zu können.
In dieser Anleitung möchte ich euch zeigen, wie dies mittels Tor Dienst und OnionBalance möglich ist.
Anhand des folgenden Szenario zeige ich euch meine Umsetzung, diese kann natürlich variieren, vorallem in der Anzahl der Server-Nodes und Server-Ports.
Das blabber.im Szenario kann im Blog-Eintrag nachgelesen werden. Fragen dazu sind gerne gesehen.
Punkt 1: Installation von Tor
Auf jeder Node installieren wir zuerst den Tor Dienst, ich gehe von einem Debian 9 (Stretch) System aus.
1 2 | apt update apt install tor |
Punkt 2: Tor Hidden Service Konfiguration
Ebenfalls auf jeder Node aktivieren wir den Hidden Service Teil in der Konfiguration. Je nach Projekt könnt ihr z.B. den XMPP Port oder auch den Webserver Port wählen. Ich denke das Prinzip sollte somit klar sein.
1 2 3 4 5 6 7 | # Beispiel XMPP: HiddenServiceDir /var/lib/tor/projektname_xmpp/ HiddenServicePort 5222 127.0.0.1:5222 # Beispiel Web: HiddenServiceDir /var/lib/tor/projektname_web/ HiddenServicePort 80 127.0.0.1:80 |
Punkt 3: Tor Hidden Server starten
Den Tor Dienst können wir nun auf jeder Node starten.
1 | systemctl start tor.service |
Beim ersten Start wird im angegeben Ordner (z.B. /var/lib/tor/projektname_xmpp/
) eine hostname
und private_key
Datei erzeugt. In der hostname
Datei liegt die .onion-Adresse die wir später für den OnionBalance Dienst benötigen.
1 2 3 4 5 6 | localhost:~# ls -lah /var/lib/tor/projektname_xmpp/ insgesamt 16K drwx--S--- 2 debian-tor debian-tor 4,0K Jul 11 06:25 . drwx--S--- 3 debian-tor debian-tor 4,0K Jul 11 09:42 .. -rw------- 1 debian-tor debian-tor 12 Jul 11 09:25 hostname -rw------- 1 debian-tor debian-tor 123 Jun 11 10:12 private_key |
Punkt 4: Installation von OnionBalance
Die OnionBalance Software funktioniert im Grunde wie ein gewöhnlicher DNS-Lastverteiler im Round-Robin Verfahren. OnionBalance ist in der Lage die Tor-Nodes im Backend auf Erreichbarkeit zu überprüfen. Das ist ein großer Vorteil gegenüber DNS.
Zusätzlich hält OnionBalance die Verbindung nicht selbst aufrecht, sondern leitet direkt an die Tor-Nodes weiter. Somit fließt kein Traffic direkt über OnionBalance!
Wir installieren OnionBalance wieder auf jeder Node.
1 2 3 | apt install onionbalance mkdir -p /var/run/onionbalance chown onionbalance:onionbalance /var/run/onionbalance |
Punkt 5: OnionBalance Konfiguration erstellen
Mit dem folgenden Befehl erstellen wir eine komplette Konfiguration inklusive Tor Hidden Service, welche wir bereits durchgeführt haben.
Nur auf einer Node ausführen!
1 2 3 4 5 | onionbalance-config -n 3 --service-virtual-port 5222 --service-target 127.0.0.1:5222 --output ~/onionbalance_master_conf [INFO]: Beginning OnionBalance config generation. [INFO]: Entering non-interactive mode. [INFO]: Wrote master service config file '/root/onionbalance_master_conf/master/config.yaml'. [INFO]: Done! Successfully generated an OnionBalance config and 3 instance keys for service ifvjmemqhjwrylze.onion. |
Wir kopieren nur die Master Konfiguration /root/onionbalance_master_conf/master/
.
1 2 3 | cp ~/onionbalance_master_conf/master/*.key /etc/onionbalance/ cp ~/onionbalance_master_conf/master/config.yaml /etc/onionbalance/ chown onionbalance:onionbalance /etc/onionbalance/*.key |
Punkt 6: OnionBalance Konfiguration anpassen
Wir passen die Konfiguration nach unseren Wünschen an. In jeder address:
Zeile muss der .onion-Hostname (ohne .onion) der einzelnen Node stehen. Diesen haben wir bereits in Punkt 3 unter /var/lib/tor/projektname_xmpp/hostname
auf jeder Node erzeugt.
Beispiel Konfiguration:
1 2 3 4 5 6 7 8 9 10 | # OnionBalance Config File services: - instances: - address: bo6rjpqa5ixhrwux name: srv1 - address: f4ujopfdyaviwhis name: srv2 - address: 7gqkebuxelmw4yad name: srv3 key: ifvjmemqhjwrylze.key |
Die config.yaml und den Master Key ifvjmemqhjwrylze.key verteilen wir auf alle 3 Server-Nodes.
OnionBalance kann laut eigener Beschreibung mehrfach mit dem selben Master Key online gehen. Eine Node wird im Tor-Netzwerk automatisch zum Primary auserwählt.
Punkt 7: OnionBalance starten
Wir starten auf allen Nodes unseren Tor-Lastverteiler.
1 | systemctl start onionbalance.service |
Das war es auch schon, euer XMPP oder Web Dienst ist nun unter ifvjmemqhjwrylze.onion erreichbar. Sollte eine Node ausfallen übernimmt automatisch eine andere die Primary-Funktion.
Tipp: Ich empfehle jedem ein wenig CPU oder GPU Zeit in die Erstellung eigener Tor Private Keys zu stecken. Eins der besten Tools dazu ist Scallion. Ergebnis kann dann wie bei blabber.im die .onion-Adresse blabberdrepaujvm.onion sein.
Das Betreiben der Dienste, Webseite und Server machen wir gerne, kostet aber leider auch Geld. Unterstütze unsere Arbeit mit einer Spende. |
Leider komplett falsch!
Du schreibst wie folgt:
Beispiel XMPP:
HiddenServiceDir /var/lib/tor/projektname_xmpp/
HiddenServicePort 5222 127.0.0.1:5222
Beispiel Web:
HiddenServiceDir /var/lib/tor/projektname_web/
HiddenServicePort 80 127.0.0.1:80
Sobald ich diesen Pfad umbenenne etc. geht nichts mehr!
Sprich ich kann auf das Projekt nichjt zugreifen.
Und ja ich habe Tor neu gestartet.
Es geht also um die folgende Einstellung:
HiddenServiceDir /var/lib/tor/projektname_web/
Im Orginal steht da:
HiddenServiceDir /var/lib/tor/hidden_service/
Sobald ich den Pfad anpasse z.B.: HiddenServiceDir /var/lib/tor/new/
Funktioniert nichts mehr, sprich der Webserver erkennt den Pafd und die html Daten in dem Ordner nicht!
Nur den orginalen Pfad nimmt TOR!!!
Daher stimmt die Anleitung nicht und sollte mal überarbeitet werden.
Zur Info, das ganze wurde auf einem vserver mit ubuntu 20.04 LTS getestet!
Ich vermute du hast die Zeilen „Beispiel XMPP:“ und „Beispiel Web:“ auch in die
/etc/tor/torrc
eingefügt. Um das zu vermeiden, kommentiere ich die Zeilen in der Anleitung aus.Gerade unter Ubuntu 20.04 getestet, Ordner wird angelegt:
root@ubuntu-2gb-nbg1-1:~# ls -lah /var/lib/tor/projektname_web/
total 24K
drwx--S--- 3 debian-tor debian-tor 4.0K May 6 17:51 .
drwx--S--- 4 debian-tor debian-tor 4.0K May 6 17:51 ..
drwx--S--- 2 debian-tor debian-tor 4.0K May 6 17:51 authorized_clients
-rw------- 1 debian-tor debian-tor 63 May 6 17:51 hostname
-rw------- 1 debian-tor debian-tor 64 May 6 17:51 hs_ed25519_public_key
-rw------- 1 debian-tor debian-tor 96 May 6 17:51 hs_ed25519_secret_key
Gruß
dominion