RaspianPi Tor Proxy

Grundüberlegung war, einen WLAN Proxy im eigenen Heimnetz zu schaffen, welcher sämtlichen Traffic automatisch in das Tor Netzwerk leitet. Dies ist interessant, da einige Geräte, z. B. mein Windows Phone, nicht mit einem Tor Browser ausgerüstet werden können.

Die dafür notwendige Hardware in Form eines RaspberryPi (Model B) war bereits vorhanden. WLAN-Netzwerkkarte ist eine TL-WDN3200 von TP-Link (Modul rt2800usb). Somit musste nur noch die entsprechende Software installiert werden. Hierzu habe ich einen interessanten Artikel bei adafruit.com gefunden, der dieses Projekt auch schon grob beschreibt. Auch auf der Tor Seite gibt es hierzu schon ein paar Anhaltspunkte, wie man das am besten umsetzt.

Für alle, die sich die einzelnen Teile noch bestellen möchten, habe ich bei Reichelt einen Warenkorb erstellt. In diesem sind alle von mir verwendeten Teile aufgelistet. Ggf. wird noch ein SD-Kartenleser zum beschreiben der Karte benötigt.

Grundinstallation des Raspberry Pi

Basis für die Installation dient Debian Wheezy System (Raspian OS). Das entsprechende Image kann man einfach von der Raspberry Webseite herunterladen. Dieses schreibt man dann auf eine SD-Karte und bootet davon. Nun nimmt man die allgemeinen Einstellungen vor, wie man diese sonst auch vornimmt. Passwort, Zeitzone, Tastatur, ggf. Übertaktung etc. Die Vergrößerung des Festplattenspeicherplatzes sollte man nicht vergessen. Anschließend startet man neu.

Da ich kein grafisches System benötige, habe ich per aptitude alle X11 Pakete gelöscht. Das sind schon alles Pakete, welche ich nicht pflegen muss. Zusätzlich gewinnt man so knapp 1 GB Speicherplatz auf der SD-Karte. Was man meiner Meinung nach ebenfalls auf diesem System nicht benötigt sind die Samba Funktionen. Auch diese habe ich entfernt.

Meine Netzwerkkarte (eth0) habe ich mit einer statischen IP-Adresse versehen. Zwar habe ich einen DHCP aber da es sich hier um ein festes Netzwerkgerät handelt vergebe ich hier immer feste Adressen.

In diesem Beispiel hat mein reguläres Netzwerk das Segment 192.168.90.0/24 und mein Segment, welches immer über den Tor Proxy laufen soll 192.168.91.0/24.

$ sudo nano /etc/network/interfaces
[...]
auto eth0
iface eth0 inet static
address 192.168.90.2
subnet 255.255.255.0
gateway 192.168.90.1
[...]

 

Einrichtung eines WLAN Access Points

Der erste Schritt ist die Einrichtung eines Access Points auf dem Raspberry. Als Software kommt hier hostapd zum Einsatz. Automatische IP-Adressen werden mit einem isc-dhcp-server verteilt. Natürlich können auch andere Programme verwenden werden. Bei der Einrichtung habe ich mich hier grob an die Anleitung von Adafruit gehalten.

Im Unterschied arbeite ich jedoch im 5 GHz Bereich. Die Besonderheiten dazu habe ich in einer extra Anleitung beschrieben. Hintergrund ist, dass in meinem Wohngebiet das 2,4 GHz WLAN-Segment ziemlich überfrachtet ist.

Als erstes installieren wir die benötigten Programme. Bei dem verwendeten Debian sind alle im Repository vorhanden und es sind keine Backports etc. notwendig.

$ sudo apt-get install hostapd isc-dhcp-server

 

Nun müssen wir als erstes den DHCP Server konfigurieren. Dieser liefert eine sehr gute Beispielkonfiguration mit die wir einfach nur abändern bzw. ergänzen.

$ sudo nano /etc/dhcp/dhcpd.conf

 

Ziemlich am Anfang der Datei befinden sich zwei Optionszeilen, welche einen Domainnamen sowie die dazu gehörigen Nameserver definieren. Da wir sowas hier nicht benötigen, kommentieren wir das einfach durch das Voranstellen eines Raute-Zeichens aus. Die Zeilen müssen dann wie folgt aussehen:

#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;

 

Da unser DHCP ja die Hauptvergabestelle von IP-Adressen ist, also der Authorative DHCP, müssen wir dies auch so einstellen. Ein paar Zeilen unter der gerade getroffenen Zeile befindet sich genau dieser Eintrag. Hier muss einfach die Kommentierung entfernt werden. Das Ergebnis schaut dann wie folgt aus:

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented. authoritative;

 

Der vermutlich wichtigste Eintrag hier ist jedoch die Einstellung zum eigentlichen Subnetz. Das tragen wir einfach weiter unten bei den Beispieleinträgen zu den Subnetzen ein.

subnet 192.168.91.0 netmask 255.255.255.0 {
  range 192.168.91.100 192.168.91.200;
  option broadcast-address 192.168.91.255;
  option routers 192.168.91.1;
  default-lease-time 600;
  max-lease-time 7200;
  option domain-name "local";
  option domain-name-servers 8.8.8.8, 8.8.4.4;
}

 

Als Adressen werden IPs zwischen 100 und 200 aus dem o. g. 192.168.91.0/24 Segment vergeben. Als Nameserver kommen die Google Public DNS Nameserver zum Einsatz. Router ist die 192.168.91.1 welcher später der Raspberry Pi wird.

Zum Schluss passen wir noch die Hauptkonfigurationsdatei an, welche dann für den Daemon relevant ist.

$ sudo nano /etc/default/isc-dhcp-server

 

In dem Wert INTERFACES="" muss wlan0 eingetragen werden. Dies bewirkt, dass der DHCP Dienst auf unserer WLAN Netzwerkkarte aktiv wird.

Gerade haben wir im DHCP eine IP-Adresse für den Router eingestellt. Jetzt müssen wir natürlich auch dafür sorgen, dass diese IP vorhanden ist. Im Klartext heißt dies, wir geben unserer WLAN-Karte ebenfalls eine statische IP-Adresse.

$ sudo nano /etc/network/interfaces
allow-hotplug wlan0 iface wlan0 inet static address 192.168.91.1 subnet 255.255.255.0

 

Beim nächsten Systemstart erhält die Karte diese IP automatisch. Jetzt für den Test weißen wir der Karte die Adresse so zu:

$ sudo ifconfig wlan0 192.168.91.1

 

Der Daemon, der uns die Access Point Funktion bereit stellt ist HOSTAPD. Auch dieser muss eingerichtet werden. Für diesen Zweck legen wir eine eigene Konfigurationsdatei an. Achtung! Mein Beispiel bezieht sich auf 5 GHz! Ein Beispiel für 2,4 GHz ist ein der Adafruit-Anleitung aufgeführt.

$ sudo nano /etc/hostapd/hostapd.conf
interface=wlan0 driver=nl80211 ssid=Raspberry_Tor
country_code=DE ieee80211n=1 ieee80211d=1 hw_mode=a channel=36 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=top_secret_passphrase wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP

 

SSID und Kennwort sollten natürlich entsprechend geändert werden! Verschlüsselt wird per WPA2. Mehr ist es nicht.

Auch hier müssen wir die Defaultkonfiguration noch modifizieren damit das init-Skript unsere Datei findet.

$ sudo nano /etc/default/hostapd

Der Eintrag DAEMON_CONF muss auskommentiert werden und dort der Pfad zu unserer Konfigurationsdatei eingetragen werden (/etc/hostapd/hostapd.conf).

Als nächstes muss der Raspberry nur noch so eingerichtet werden, dass er auch Pakete weiterleiten darf. Dazu wird in der Datei /etc/sysctl.conf das Forwarding aktiviert.

$ sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1

Um diese Einstellung zum testen sofort aktiv haben führen wir zusätzlich folgenden Befehl aus:

$ sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

 

Zusätzlich sind noch ein paar iptables Regeln notwendig. Diese brauchen wir jedoch nur um jetzt den Access Point zu testen. Später werden diese durch andere Regeln im Tor Proxy ersetzt. Jetzt sorgen diese jedoch für die Verbindung zwischen den Netzwerkkarten wlan0 und eth0.

$ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
$ sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
$ sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

 

Damit diese Regeln nicht verloren gehen, speichern wir diese mit iptables-save in eine Datei unter /etc und sorgen dann dafür, dass diese beim starten der Netzwerkkarten geladen wird. Dazu modifizieren wir noch einmal die /etc/Network/Interfaces:

$ sudo sh -c "iptables-save > /etc/iptables.ipv4.nat" 
$ nano /etc/network/interfaces
[... nach dem wlan0 device]
up iptables-restore < /etc/iptables.ipv4.nat

 

Nun sollten wir testen, ob der Access Point funktioniert. Dafür starten wir den DHCP Daemon und danach interaktiv den hostapd. Anschließend sollte man sich verbinden können.

$ sudo service isc-dhcp-server start
$ sudo /usr/sbin/hostapd -d /etc/hostapd/hostapd.conf

 

Sollten hier Fehlermeldungen erscheinen, so sind diese zu prüfen. Tippfehler oder falsche Regionseinstellungen sind ein häufiger Fehler.

Zum Abschluss sorgen wir noch dafür, dass die zwei Dienste automatisch gestartet werden.

$ sudo update-rc.de hostapd enable
$ sudo update-rc.de isc-dhcp-server enable

 

Nach einem reboot sollte der Access Point problemlos funktionieren und man sollte über den Raspberry z. B. von einem Smartphone oder Laptop ins Internet gelangen.

Tor Relay installieren

Wenn der Access Point sauber funktioniert kann man Tor installieren. Auch hier habe ich mich im groben an die Anleitung von Adafruit gehalten. Jedoch unterscheidet sich die Anleitung vom Installationsskript das auf der Seite angeboten wird. Ich habe hier meine funktionstüchtige Lösung zusammen gefasst.

Der erste Schritt ist die Installation der tor Software. Dies geht problemlos über apt-get.

$ sudo apt-get install tor

 

Als nächstes muss Tor konfiguriert werden. Es wird eine Beispielkonfiguration mitgeliefert. Da ich durch die Anleitung jedoch ziemlich genaue Vorgaben hatte, habe ich meine Werte einfach unten angehängt.

$ sudo nano /etc/tor/torrc
# Transparent proxy port
TransPort 9040
TransListenAddress 192.168.91.1
TransListenAddress 127.0.0.1
# Explicit SOCKS port for applications.
SocksPort 9050
# Port that Tor will output 'info' level logs to.
Log notice file /var/log/tor/notices.log
# Have Tor run in the background
RunAsDaemon 1
# Only ever run as a client. Do not run as a relay or an exit.
ClientOnly
# Ensure resolution of .onion and .exit domains happen through Tor.
AutomapHostsSuffixes .onion,.exit
AutomapHostsOnResolve 1
VirtualAddrNetwork 10.192.0.0/10
# Serve DNS responses
DNSPort 53
DNSListenAddress 192.168.91.1
DNSListenAddress 127.0.0.1

 

Die in der Konfiguration angegebene Logdatei legen wir noch an und setzen hier die Berechtigungen richtig:

$ sudo touch /var/log/tor/notices.log
$ sudo chown debian-tor /var/log/tor/notices.log
$ sudo chmod 644 /var/log/tor/notices.log

 

Sind diese Einstellungen getroffen startet man Tor neu. Tor läuft nämlich (zumindest bei mir) nach der Installation gleich.

$ sudo service tor restart

 

Wie weiter oben angekündigt, muss man hier auch etwas mit iptables arbeiten. Zuerst löschen wir alle bestehenden Regeln um dann neue zu definieren. Die Regeln habe ich 1-zu-1 von Adafruit übernommen. SSH wird freigegeben, DNS Anfragen grundsätzlich über Tor geleitet und der andere TCP Traffic auf den Proxy auf Port 9040.

$ sudo iptables -F
$ sudo iptables -t nat -F
$ sudo iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 22 -j REDIRECT --to-ports 22
$ sudo iptables -t nat -A PREROUTING -i wlan0 -p udp --dport 53 -j REDIRECT --to-ports 53
$ sudo iptables -t nat -A PREROUTING -i wlan0 -p tcp --syn -j REDIRECT --to-ports 9040

 

 

Verbinde ich mich jetzt über den Access Point, so sollte der Datenverkehr über Tor laufen. Testen kann ich dies, wenn ich die Webseite https://check.torproject.org aufrufe.

Funktioniert alles, so sorgen wir noch dafür, dass Tor sowie die iptables Regeln immer beim starten automatisch gestartet werden. Für iptables verwenden wir einfach die Datei, welche wie ursprünglich für den Access Point verwendet haben.

$ sudo update-rc.d tor enable
$ sudo iptables-save > /etc/iptables.ipv4.nat

 

Somit ist die Einrichtung abgeschlossen. Nach einem reboot sollte auch weiterhin alles funktionieren. Der Access Point sollte sich melden, eine IP-Adresse sollte automatisch vergeben werden und der Datentransfer sollte über Tor laufen. Wünsch ich viel Spaß damit.

Kommentare: