Einen Tor hidden service auf uberspace einrichten

Ich habe hier bereits erwähnt, dass ich meinen Blog als hidden service mit einer .onion-Domain verfügbar gemacht habe und möchte nun erläutern, wie ich dabei vorgegangen bin.

Disclaimer: Ich habe meinen Blog nur zusätzlich als hidden service verfügbar gemacht. Wenn jemand eine Seite ausschließlich als hidden service veröffentlichen will ist uberspace vermutlich der falsche Platz dafür. Soweit ich weiß liefert der Webserver dort nur Dateien aus, die unter ~/html/ liegen und diese sind auch öffentlich erreichbar. [Update]
Man könnte zwar die Auslieferung per .htaccess verbieten aber ich weiß nicht ob das so sauber ist. Wenn euer Leben davon abhängt, dass ihr nicht mit der .onion-Seite in Verbindung gebracht werdet, solltet ihr besser wo anders (selbst?) hosten.

Libevent installieren

Um Tor kompilieren zu können wird libevent benötigt. In diesem Beispiel verwende ich release-2.1.8-stable:

$ mkdir ~/build
$ cd ~/build
$ wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz
$ tar xvf libevent-2.1.8-stable.tar.gz
$ cd libevent-2.1.8-stable
$ ./autogen.sh
$ ./configure --prefix=${HOME}
$ make
$ make install
Tor installieren

Nun laden wir Tor von der Download-Seite herunter, in diesem Beispiel tor-0.3.0.7:

$ cd ~/build
$ wget https://www.torproject.org/dist/tor-0.3.0.7.tar.gz
$ tar xvf tor-0.3.0.7.tar.gz
$ cd tor-0.3.0.7

Nun müssen wir in Erfahrung bringen wo sich das aktuelle OpenSSL verbirgt:

$ openssl version -a

In meinem Fall sieht die Ausgabe so aus:

OpenSSL 1.0.2h  3 May 2016
built on: reproducible build, date unspecified
platform: linux-x86_64
options:  bn(64,64) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx) 
compiler: gcc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DOPENSSL_NO_HEARTBEATS -Wa,--noexecstack -m64 -DL_ENDIAN -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
OPENSSLDIR: "/package/host/localhost/openssl-1.0.2h/ssl"

Relevant ist der Pfad in der letzten Zeile, den wir ohne das /ssl am Ende zum Kompilieren mit einem aktuellen OpenSSL benötigen:

Nun kompilieren wir Tor mit einem aktuellen OpenSSL:

$ ./configure --enable-static-openssl --with-openssl-dir=/package/host/localhost/openssl --prefix=${HOME}
$ make
$ make install
Tor hidden service konfigurieren

Nun ist Tor installiert und der hidden service kann in der Datei ~/etc/tor/torrc konfiguriert werden, wobei USER natürlich durch den eigenen Benutzernamen zu ersetzen ist:

SocksPort 0
Log notice file /home/USER/etc/tor/tor.log
DataDirectory /home/USER/lib/tor
HiddenServiceDir /home/USER/lib/tor/blog/
HiddenServicePort 80 127.0.0.1:80
Tor auf Uberspace aktivieren

Damit Tor nicht wieder manuell gestartet werden muss, wenn der Dienst sich beendet oder der Uberspace-Server neu gestartet wird bietet es sich an Tor mit den daemontools verwalten zu lassen:

$ cat <<__EOF__ > ~/etc/tor/run
#!/bin/sh
exec ~/bin/tor -f ~/etc/tor/torrc 2>&1
__EOF__

$ chmod +x ~/etc/tor/run
$ ln -s ~/etc/tor ~/service/tor

Tor kann nun mit svc -u ~/service/tor gestartet, mit svc -d ~/service/tor beendet oder mit svc -du ~/service/tor neu gestartet werden.

Domain konfigurieren

Nach dem ersten Start mit svc -u ~/service/tor wird die Datei ~/lib/tor/blog/hostname angelegt, in der sich unsere .onion-URL, z.B. skt4odto3ycrngsv.onion, befindet:

$ cat ~/lib/tor/blog/hostname 

Bei mir wurde die Adresse skt4odto3ycrngsv.onion ausgegeben.

Nun müssen wir die Domain noch dem Uberspace-Webserver bekannt machen, da Zugriffe sonst unterbunden werden:

$ uberspace-add-domain -d skt4odto3ycrngsv.onion -w

Eine erfolgreiche Rückmeldung sieht z.B. so aus:

The webserver's configuration is adapted; it will get active within at most 5 minutes.
Now you can use the following records for your dns:
  A -> 95.143.172.208
  AAAA -> 2001:1a50:11:0:5f:8f:acd0:f3

Das war es, schon kann eure Website als hidden service aufgerufen werden.

Subdomains

Das Anlegen von Subdomains für den hidden service ist analog zum normalen Anlegen von Subdomains auf uberspace:

$ ln -s /var/www/virtual/${USER}/html/blog /var/www/virtual/${USER}/blog.skt4odto3ycrngsv.onion

Zusätzlich muss die Subdomain aber auch noch dem Webserver bekannt gemacht werden:

$ uberspace-add-domain -d blog.skt4odto3ycrngsv.onion -w

Nun ist die Seite, die unter ~/html/blog abgelegt ist, auch unter blog.skt4odto3ycrngsv.onion aus dem Tor-Netzwerk aufrufbar.

[Update 2017-05-31]

Im Schritt Tor auf Uberspace aktivieren muss es natürlich ~/etc/tor/torrc und nicht ~/etc/torrc heißen.

[Update 2017-06-07]
  • Man kann immer das OpenSSL aus dem Pfad /package/host/localhost/openssl zum kompilieren benutzen, auch wenn openssl version -a etwas anderes ausgiebt, siehe diesen Kommentar.
  • Der Befehl zum Anlegen des daemons war fehlerhaft, siehe diesen Kommentar.

[Update 2017-06-10]

Bei einem Gespräch per Email mit Uberspace wegen eines anderen Themas fiel mir auf, dass diese Aussage nicht ganz richtig ist. Wenn man direkt ein Verzeichnis /var/www/virtual/${USER}/skt4odto3ycrngsv.onion anlegt, statt nach ~/html/ zu linken, ist die Webseite ausschließlich im dark web und nicht im clear web erreichbar. Ich bleibe aber trotzdem bei meiner Empfehlung keinen shared hoster zu nutzen, wenn das eigene Leben von der Anonymität abhängt.

Teilen: FB | G+ | TW | E-Mail

Hinterlasse einen Kommentar oder diskutiere im OSBN-Chat.

In den Kommentaren können folgende Formatierungen genutzt werden.