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.

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.

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.

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.

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.

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!

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/.

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:

# 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.

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.

Dominion

Dominion

Linux Systemadministrator

Das könnte Dich auch interessieren …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.