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.
Unterstütze unsere Arbeit mit einer Spende. |