www.fabiankeil.de/blog-surrogat/2021/03/19/v3-onion-services-mit-client-autorisierung.html

v3-Onion-Services mit Client-Autorisierung eingerichtet

Ich betreibe mehrere private Tor-Onion-Services, zum Beispiel um bequem auf Munin-Graphen für diverse ElectroBSD-Server zugreifen zu können.

Die Munin-Graphen sind nicht übermäßig sicherheitskritisch und ich leake sie manchmal hier im Blog, aber aus Prinzip und auch zum Testen habe ich die Onion-Services trotzdem mit Client-Autorisierung eingerichtet.

Bei v2-Onion-Services ging das bequem über die Tor-Konfigurations-Datei aber in Tor 0.4.6.1-alpha wurde die Unterstützung von v2-Onion-Services vorzeitig entfernt.

v2-Onion-Adressen werden nun vom Tor-Client als ungültig abgelehnt, auch wenn keine Client-Autorisierung erforderlich ist:

Mar 19 11:33:39.764 [warn] {APP} Invalid hostname jvauzb4sb3bwlsnc.onion; rejecting

Eigentlich wollte ich mit der Migration auf v3-Onion-Services mit Client-Autorisierung noch warten, bis das Schlüsselmaterial von Tor selbst erzeugt werden kann, habe die Migration jetzt aber vorgezogen, damit ich auf meinem Laptop weiterhin Tor-Alpha-Versionen einsetzen kann.

Zur Schlüsselgenerierung habe ich das kleine Python-Skript tor-auth-x25519-gen.py vom Anarcho-Tech Collective NYC verwendet.

Die Abhängigkeit PyNaCL konnte über den security/py-pynacl-Port installiert werden.

tor-auth-x25519-gen.py erzeugt eine auth-Datei für den Server und eine auth_private-Datei für den Client:

fk@t520 ~/git/ansible-role-tor $./molecule/default/scripts/tor-auth-x25519-gen.py -d wkis7nxroconu7ko22kv2weanlc7gi2b4wqtqecnnvkhuxl2cg6wxiid.onion -f ~/git/salt/files/elektrobier1/usr/jails/nginx-hs/var/db/tor/hidden-services/munin-hsv3/authorized_clients/elektrobier1-munin-t520
fk@t520 ~/git/ansible-role-tor $ls -l ~/git/salt/files/elektrobier1/usr/jails/nginx-hs/var/db/tor/hidden-services/munin-hsv3/authorized_clients
total 1
-rw-r-----  1 fk  fk   70 2021-03-19 14:44:29 elektrobier1-munin-t520.auth
-rw-r-----  1 fk  fk  127 2021-03-19 14:44:29 elektrobier1-munin-t520.auth_private

Auf dem Server muss die auth-Datei in das authorized_clients-Verzeichnis im HiddenServiceDir-Verzeichnis kopiert werden. Nach dem Neuladen der Konfiguration können Clients ohne passenden Schlüssel nicht mehr auf den Onion-Service zugreifen:

Mar 19 14:47:09.083 [notice] {REND} Fail to decrypt descriptor for requested onion address. It is likely requiring client authorization.

Um einen Client zu berechtigen muss die auth_private-Datei in ein mit der Direktive ClientOnionAuthDir spezifiziertes Verzeichnis kopiert werden:

fk@t520 ~/git/salt $sudo cp files/elektrobier1/usr/jails/nginx-hs/var/db/tor/hidden-services/munin-hsv3/authorized_clients/elektrobier1-munin-t520.auth_private /usr/jails/tor-jail/usr/local/etc/tor/v3-onion-auth/
fk@t520 ~/git/salt $sudo chown _tor:_tor /usr/jails/tor-jail/usr/local/etc/tor/v3-onion-auth/elektrobier1-munin-t520.auth_private
fk@t520 ~/git/salt $sudo killall -SIGHUP tor

Die Umstellung der ersten Onion-Services hat ohne Probleme funktioniert.