Raspberry Pi als TOR-Server (Update)

Da wir in unserer WG eine dicke Internetleitung haben, welche die meiste Zeit nicht ansatzweise ausgenutzt wird, habe ich schon seit längerem auf meinem Desktop einen Tor-Server betrieben.

Jedoch hat es einige Nachteile den Tor Server auf einem Desktop zu betreiben. Zunächst verbraucht der Desktop-Rechner einfach zu viel Strom. Zum anderen bastle ich gelegentlich an meiner Netzwerkverbindung herum, was bspw. dazu führen kann dass der Tor Server unnötigerweise durch diverse temporäre VPN Tunnel geleitet wird. Also musste eine andere, eigenständige Plattform für den Tor Server her. Da kam mir dann der kleine Mini-Computer RaspberryPi in den Sinn, welcher bei vielen schon als MediaCenter im Einsatz ist. Der geringe Anschaffungspreis, niedrige Verbrauch und die einfache Bestückung mit leichtgewichtigen Linux-Distributionen sind einige der Vorteile dieser Hardware-Plattform.

Hardware:

Software:

Als die Hardware nach einigen Wochen endlich eintraf, lud ich das entsprechende Image von Raspbian “wheezy” herunter. Dies ist eine kleine debian-basierte Linux-Distribution angepasst für die Hardware des Raspberry Pi. Dadurch wird die Installation zum Kinderspiel. Da auch gleich ein aktivierter ssh-Server mitgeliefert wird, braucht mensch nicht mal Bildschirm, Tastatur und Maus an den Raspberry Pi anschließen um ihn bequem konfigurieren zu können. All das geschieht ohne große Mühen über eine Terminalverbindung vom Desktop Rechner aus. Zudem liefern die Paketquellen der Distribution auch gleich sämtliche Software die für eine Tor Node benötig werden mit.

Ich verwende zur Einrichtung des Raspberry Pi einen Desktop mit Ubuntu (64bit; 3.5.0-21-generic). Aber auch für Windows oder Mac User ist die Einrichtung problemlos möglich. Die Schritte zum Einrichten sind banal und ausführlich im Wiki beschrieben.

SD Karte vorbereiten

Als erstes besorgt mensch sich das gewünschte Image, in meinem Fall habe ich das aktuelle empfohlene Raspberry “wheezy” heruntergeladen und kontrolliert ob die Prüfsumme in Ordnung ist.

sha1sum ~/2012-12-16-wheezy-raspbian.zip

Anschließend wird das enthaltene Image entpackt und auf die SD Karte kopiert:

unzip ~/2012-12-16-wheezy-raspbian.zip
sudo dd bs=4M if=~/2012-12-16-wheezy-raspbian.img of=/dev/sdd*

* Wichtig: Hier unbedingt das richtige Laufwerk angeben! Wer hier das falsche Laufwerk angibt riskiert einen Datenverlust!

sudo sync

Das war es auch schon was ich tun musste. Die Netzwerkeinstellungen waren für den Betrieb mit dem Heimrouter (dhcp) gleich richtig eingestellt. Die weitere Konfiguration erledigte ich dann mittels ssh-Verbindung im laufenden Betrieb des Raspberry.

Hardware anschließen und Einrichtung via ssh

Einfach die vorbereitete SD-Karte in den Raspberry einlegen, Netzwerkkabel an den Router anschließen und den Raspberry mit Strom versorgen. Der Raspberry bootet dann automatisch das installierte Raspberry System und kann aus der Ferne mit Hilfe einer ssh-Verbindung angesteuert werden. Die IP Adresse des Raspberry Pi fand ich in meinem Router.

IP Adresse des Raspberry Pi

IP Adresse des Raspberry Pi

Die Verbindung wird dann ganz einfach aus der Konsole des Desktoprechners aufgebaut.

ssh pi@192.168.0.112

Vor dem @ steht der Benutzername “pi” (das Standardpasswort für diese Nutzer lautet “raspberry”) die IP Adresse müsst ihr natürlich gemäß Eurer Netzwerkkonfiguration anpassen.

Als erstes habe ich das Benutzerpasswort geändert sowie die Partitionierung der SD-Karte an meine Bedürfnisse angepasst. Das habe ich “klassisch” mittels passwd und parted erledigt. Zur einfacheren Einrichtung gibt es aber auch das Tool raspi-config womit ihr einfach durch einzelne Konfigurationsschritte geführt werdet.

raspi-config

raspi-config hilft beim Setup

Als nächstes habe ich dann das System aktualisiert.

sudo apt-get update
sudo apt-get upgrade

Dann installierte ich Tor, sowie das Tor Monitoring Tool Arm (optional).

sudo apt-get install tor tor-arm

Während Tor auf dem Raspberry Pi installiert wird kann mensch sich nun mal Gedanken über die zu verwendenden Ports machen. Denn wenn sich der Tor-Server hinter einem Router befindet, müssen diese durch den Router zu dem Rapsberry Pi getunnelt werden. Filesharer und Gamer werden mit dieser Thematik vertraut sein. Im Regelfall verwendet Tor die Ports 9001 sowie 9030. Eine Übersicht, welche Ports für welche Dienste vorgesehen sind findet sich in der Wikipedia. Ich habe mich für die Ports 9035 und 9040 entschieden und diese entsprechend im Router zum Raspberry Pi getunnelt.

Tunnel01 Tunnel02

Jetzt steigen wir in die Konfiguration des Tor-Servers ein. Die Konfiguration von Tor wird in der Datei /etc/tor/torrc geändert. Dazu öffnen wir diese mit Hilfe eines Editors.

sudo nano /etc/tor/torrc

Die Einstellungen mögen auf den ersten Blick sehr umfangreich wirken, aber im Grunde ist alles gut erklärt und wir brauchen auch nur an wenigen Stellen Änderungen vornehmen. Für meine Installation habe ich die folgenden Einstellungen vorgenommen:

ORPort und DirPort habe ich auf die oben erwähnten Ports gelegt (9035, 9040), bei Nickname wählt ihr einfach einen beliebigen Namen für Eure Tor-Node aus, bei ContactInfo gebt ihr eine Emailadresse für den Fall an, dass es irgendwelche Probleme mit der Tor-Node gibt und mensch mit Euch in Kontakt treten möchte. Die angegebene Mailadresse wird durch Google auffindbar, verwendet also nicht Eure normale Emailadresse sondern ein gesondertes Konto. Mit ExitPolicy “reject *.*” legt ihr fest nur ein Mittelknoten im Tor System zu sein und keinen Verkehr aus dem Tor-Netz über Eure Internetverbindung in “das echte Internet” zuzulassen. Ich plane künftig auch wieder eine Exit-Node zu betreiben, jedoch muss ich dazu noch einlesen um nicht unnötig von “Rechteinhabern” und “Sicherheitsbehörden” genervt zu werden. Eine Übersicht über empfohlene Exit-Node Policys gibt das Torproject. Mit den Einstellungen RelayBandwidthRate und RelayBandwidthBurst legt ihr die Traffic-Beschränkung fest. Hier blicke ich noch nicht ganz durch. Die Traffic-Beschränkung wir in Bits angegeben, umgerechnet in Bytes wird mit dem Faktor 8 (1 byte = 8 bits; Danke die Kommentatoren!). Meine Einstellungen (100 KB/200 KB) führen beispielsweise dazu, dass einen konstanten Durchsatz von etwa 800 kb/s in beide Richtungen durch meinen Raspberry laufen lasse. Die Einstellung DisableDebuggerAttachment benötige ich um mit Arm die aktiven Verbindungen angezeigt zu bekommen.

Update: Mit der Option AvoidDiskWrites werden Schreibzugriffe reduziert um den Flashspeicher zu schonen. Danke an @marcel_sch für den Tipp.

Eine detaillierte Übersicht über die Einstellungsmöglichkeiten findet ihr beim Torproject.

Nachdem die Einstellungen wie gewünscht angepasst wurden, muss der Tor Server noch neu gestartet werden.

sudo  /etc/init.d/tor restart

Das wars, der Tor Server sollte jetzt erfolgreich laufen.

Updates und Überflüssige Pakete deinstallieren
Natürlich sollte der so betriebene TOR-relay auch stets mit den aktuellen Updates versorgt werden. Das geht bequem via ssh und den Befehlen

sudo  apt-get update
sudo  apt-get dist-upgrade

Hier ist es natürlich etwas überflüssig den ganzen Ballast der grafischen Oberfläche und all den damit verbundenen Abhängigkeiten zu aktualisieren, weswegen es ratsam ist diese Pakete zu entfernen.
Es böte sich natürlich an, eine Linux Distribution zu wählen, die etwas schlanker und bereits ohne grafische Oberfläche daher kommt zu nutzen, aber es ist auch kein Problem diese Pakete nachträglich und rückstandslos zu entfernen. Dazu habe ich einfach folgende Befehle genutzt:

sudo apt-get remove --auto-remove --purge libx11-.*
sudo apt-get autoremove

Anschließend solltet ihr alle Abhängigkeiten deinstalliert haben und könnt den Pi neustarten.

Damit habe ich die Liste der ausgeführten Prozesse (selbst wenn ich nie die grafische Oberfläche gestartet habe) deutlich schmälern können und der Aktualisierungsvorgang geht nun auch wesentlich schneller von statten.

Tor Status überprüfen

Um den Status des Tor Servers einzusehen, greife ich via ssh Tunnel auf das Tool Arm zurück:

sudo -u debian-tor arm

Arm 1 Arm 2 Arm 3

Aber auch mit Hilfe eines Smartphones, bzw. Tablets, lässt sich im Netzwerk problemlos via ssh auf den Raspberry zugreifen. Ich empfehle dazu die ssh Anwendung ConnectBot sowie das Keyboard Hacker’s Keyboard. Das ganze sieht dann, mit aufgerufenem Arm, so aus:

android_connectbot_arm

Alternativ kann man auch auf diversen Seiten im Netz den Status des Tor-Netzwerkes einsehen. Meine favorisierte Seite ist http://torstatus.blutmagie.de/ wo ich auch einen festen Link zu meinem kleinen Server gefunden habe. Allerdings weicht die Statistik dort stark von dem ab, was ich aktuell in Arm angezeigt bekomme. Das mag aber auch einfach nur an einer zeitlichen Verzögerung liegen.

Statusmeldungen per Email

Da mensch nun nicht immer den Server im Auge hat, ist es hilfreich, sich noch bei Tor Weather anzumelden um per EMail darüber informiert zu werden wenn bspw. ein Software-Update notwendig wird oder aber der Server aus irgendwelchen Gründen aus dem Netz verschwindet.

Ich hoffe das war verständlich und nachvollziehbar. Wenn ihr Fehler findet oder Optimierungsbedarf seht, bitte in die Kommentare damit.

flattr this!

22 Gedanken zu “Raspberry Pi als TOR-Server (Update)

  1. moin,
    du könntest noch den Teil bezüglich der Bandbreite abändern da du ja jetzt weißt, wie die Angaben dazu in der torrc von Tor interpretiert werden ;-)
    LLAP

    • Die “Interpretation” stimmt doch irgendwie auffallend:
      1B(yte) = 8 b(it). ;-)

      Aber danke für die schöne Anleitung. Hat bei mir gut funktioniert.

  2. Danke für die Anleitung!

    Hat mich endgültig dazu bewogen, einen TOR-Server aufzusetzen, und war in einer halben Stunde erledigt und läuft stabil seit 3 Monaten. Zur Nachahmung absolut empfohlen!

  3. Hallo ist es möglich zu Tor parallel einen VPN auf den gleichen RPi laufen zu lassen? Damit man z.B. von iPhone über das VPN zugriff hat und über Tor anonym surft?

    • Das müsste möglich sein. Aber habe ich bisher noch nicht probiert. Ich weiß, dass es recht simpel sein soll einen eigenen VPN Server aufzusetzen um zumindest den Weg bis zum eigenen Zugang zu verschlüsseln, den Verkehr dann durch TOR zu leiten sollte aber auch möglich sein.

  4. Super.Danke.
    Bitte mach ein ähnlich gutes Tut. wenn du einen Exit-Node aufsetzt.
    Ich würde gerne diesbezüglich von deinem Wissen profitieren.

    • Für eine Exit Node müsste lediglich die Konfiguration “ExitPolicy reject *:*” in der “torrc” entsprechend angepasst werden.

      Dazu gibt es bspw. hier ein paar Empfehlungen:
      https://blog.torproject.org/running-exit-node

      Allerdings wird, insbesondere bei privaten Anschlüssen davon abgeraten eine Exit-Node zu betreiben. Damit begibst Du Dich in Deutschland leider schnell mal in Probleme, sei es durch die Anschlussinhaberhaftung (Gefährderproblematik, insbesondere bei Urheberrechtskrams) oder durch andere ärgerliche und oder teure Ermittlungen.

      Das wurde auch zuletzt auf dem DigiGes-Abend der “Zwiebelfreunde e.V.” erwähnt: https://www.youtube.com/watch?v=vX_JQq71Ytk

    • Das kannst, bzw. brauchst Du nicht.
      Dieses TOR Relay schaltet sich nur als Zwischenstation in das TOR Netzwerk ein.
      Wenn Du in Deinem Client/Browser TOR nutzen möchtest, dann kannst Du neben TOR auch bspw. Erweiterungen wie TOR Button (als PlugIn) installieren.
      Aber ich würde Dir eher das TOR Browser Bundle ans Herz legen: https://www.torproject.org/projects/torbrowser.html.en
      Einfach für das gewünsche Betriebssystem herunter laden, starten und alles andere funktioniert automatisch.
      Das hat zudem den Vorteil, dass Du da einen ganz “frischen” Browser hast, der nciht bereits irgendwelche Profile/Cookies und was weiß ich noch alles mitschleppt und damit Deine Privatheit potentiell gefährdet.

  5. Danke für die Anleitung, hat mir sehr bei der Einrichtung meines RasPi als Tor-Relay geholfen.

    Ich habe noch einen Hinweis: Das Torprojekt selbst empfiehlt, falls Dein Provider dies nicht blockt, die http(s)-Ports 443 (OR-Port) und 80 (Directory-Port) für Tor zu verwenden. Grund ist, dass so auch Menschen aus stark reglementierten Netzwerken auf Dein Relay zugreifen können, da http eigentlich durch jede Firewall kommt.
    Vielleicht kannst Du das ja noch im Text ergänzen.

    Außerdem ist mir bei einem der Screenshots Deine Kernelversion (3.2.x) aufgefallen. Ich würde Dir empfehlen, das Tool “rpi-update” zu installieren und zu benutzen, so erhältst Du nicht nur eine aktuellere Kernelversion (3.6.11), sondern auch die aktuellste Firmware für den Raspi (die ebenfalls auf der SD-Karte gespeichert wird).

    Anleitung:
    sudo apt-get install rpi-update
    Ggfs. müssen noch “git-core” und “ca-certificates” installiert werden, das sollte aber automatisch aufgelöst und vorgeschlagen werden
    sudo rpi-update
    Reboot

    Und ganz zuletzt: Du hast bei “apt-get autoremovE” das e vergessen.
    Danke nochmals für die Anleitung!

  6. Hey, vielen Dank für diese Anleitung. Habe zwar noch ein paar Probs mit der Pi selber, aber dann steht meiner Relay-Karriere nichts mehr im Weg.

    Allerdings scheint TOR selber von der Verwendung des Repositorys abzuraten: “You’ll need to set up our package repository before you can fetch Tor. ” http://www.torproject.org.in/docs/debian.html.en. Oder gilt das nur für Ubuntu? Die Überschrift lautet jedenfall Ubuntu/Debian…

    Wie auch immer: Danke!

  7. nachtrag : lese grad das du raspbian als basis verwendest. es gibt mitlerweile eine besser alterntive für tor => https://code.google.com/p/torberry/

    ich habe das torberry image verwendet, dort sind auch schon die passenden repos für die aktuelle TOR version hinterlegt und man muss im prinzip nur noch das Netzwerk und TOR konfigurieren.

  8. Ich kapier es nicht – der Raspberry PI RASPIAN tut (auch dank dieser Anleitung), aber ich komm mit dem Firefox nicht raus, sobald ich sage nutze socks-host Port 9050.
    Lasse ich das weg, habe ich meine ‘übliche’ xx.yyy.zz.aa als IP – aber ich denke ich sollte eine andere haben, oder?
    [...]20:09:14 [ARM_NOTICE] Relay resumed
    20:09:09 [ARM_NOTICE] Relay unresponsive (last heartbeat: Wed Nov 13 20:08:54 2013)
    … 19:57:45 [NOTICE] Self-testing indicates your DirPort is reachable from the outside. Excellent.
    19:57:43 [NOTICE] Now checking whether ORPort xx.yyy.zz.aa:9001 and DirPort 79.241.97.33:9030 are reachable… (this may take up to 20 minutes —
    look for log messages indicating success)
    [...]
    wo liegt mein Denkfehler?
    socks-host 127.0.01 (oder localhost) ist doch falsch, da der TOR nicht auf meinem PC, sondern dem Raspberry läuft …

  9. Hier* gibt es eine Anleitung wie man mittels Privoxy über den eigenen Tor Server surft. Das erspart vor allem die Installation des Tor Clients auf allen Rechnern im Haus.

    *http://www.foxplex.com/sites/tor-proxy-server-auf-dem-raspberry-pi/

  10. Hey,

    Danke für deine ausgezeichnete Anleitung. Vom Auspacken des Raspberry bis zum Tor Relay habe ich keine 2h gebraucht. Was mich aber noch irritiert ist diese Meldung:

    “ControlPort is open, but no authentication method has been configured. This means that any program on your computer can reconfigure your Tor. That’s bad! You should upgrade your Tor controller as soon as possible.”

    Die torrc File habe ich weitestgehend von dir übernommen. Wie behebe ich dass denn bzw. brauche ich den ControlPort, z.B. um mir die Statistiken mit arm anzugucken, überhaupt?

    • Ähm, das ist eine gute Frage, auf die ich aktuell keine wirkliche Antwort geben kann. :)

      Ich finde in meiner /etc/tor/torrc Konfiguration jedenfalls einen festgelegten ControlPort sowie ein “HashedControlPassword” wobei auch die “CookiesAuthentification” aktiviert ist.

      Aber wann, wie und warum ich das angelegt habe ist mir gerade auch nicht ersichtlich, dazu ist das setup bei mir zu lange her. Mag sein, dass ich das via arm in die torrc geschrieben habe, da bin ich mir aber sehr unsicher und dieser Option sollte ich wohl nochmal hinter her recherchieren. :)

      Erste Suchergebnisse und schnelles überfliegen der folgenden beiden Seiten:
      https://www.torproject.org/docs/tor-manual.html.en
      https://gitweb.torproject.org/torspec.git?a=blob_plain;hb=HEAD;f=control-spec.txt

      zeigen mir, dass das Anlegen eines Passwortes für den ControlPort mit der Kommandooption “–hash-password” (Generates a hashed password for control port access.) erfolgen sollte, ich kann mich aber nicht erinnern dieses Kommando ausgeführt zu haben und es mir nur so erklären, dass ich das irgendwann einmal (ggf. in arm) ausgeführt haben könnte.

      Sorry, falls jemand dazu mehr Informationen hat, ich würde mich freuen. Weiß noch nicht wann ich sonst dazu komme mir das genauer anzusehen.

  11. Pingback: Internetadresse (IP) mit TOR verschleiern – jetzt geht`s los ! | OpenSource is a lifestyle …

  12. Wer lässt den sein TOR-Relay über seinen hemischen DSL Anschluss mit dynamischer IP laufen?

    Meine Erfahrung mittlerweile ist, dass die Bandbreite kaum ausgenutzt wird und bei um die 50 kb/s rumdümpelt. Das ändert sich auch nach 2 Wochen uptime nicht großartig.

    Gibt es da Tricks die eigene Uploadbandbreite besser auszunützen?

Hinterlasse eine Antwort

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

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>