Prof. Dr. Detlef Stern

Sicher ins Heimnetz mit dem Raspberry Pi

Wer kennt es nicht: man surft über den Hotspot seines Lieblingscafes und man überlegt, ob die Passwörter zum Login tatsächlich sicher übertragen werden. Man überlegt vielleicht ebenfalls, wer alles mitlesen kann, welche Webseiten man sich ansieht. Schließlich werden die Daten über WLAN so übertragen, dass prinzipiell jeder diese Daten lesen kann. Was nun?

Ein ganz anderes Szanario: man ist unterwegs und stellt fest, dass auf dem eigenen Rechner wichtige Dateien fehlen. Diese liegen, gut geschützt, auf einem Rechner im Heimnetz. Dieser Rechner ist zwar in Betrieb, aber vor Zugriffen von außen geschützt. Was nun?

In beiden Fällen hilft ein "virtuelles, privates Netz", ein VPN. Unternehmen richten ein solches Netz ein, damit die eigenen Mitarbeiter sicher auf interne Daten zugreifen können, der Wettbewerber aber nicht. Man kann ein VPN einsetzen, um Niederlassungen eines Unternehmens miteinander sicher und geschützt zu verbinden. Hochschulen setzen es ein, damit Studierende und Mitarbeiter in gleicher Weise von zu Hause aus auf interne Daten zugreifen können, z.B. lizensierte eBooks. Ein VPN ist sehr nützlich.

Hat man ein VPN installiert, kann man sich von seinem Lieblingscafe ins Heimnetz einwählen und man surft, als würde man von zu Hause surfen. Die vom WLAN-Hotspot übertragenen Daten sind verschlüsselt, keiner sollte diese lesen können. Und man kann unterwegs auf alle Rechner zugreifen, als wäre man zu Hause.

Wer kein VPN benötigt, braucht nicht weiterzulesen. Das gilt ebenfalls für stolze Besitzer eines VPN-fähigen Routers, die dem Hersteller des Routers vertrauen. Alle anderen sollten schon einmal ihren Raspberry Pi anwärmen. Mit einem Stromverbrauch von gerade mal 3,5 Watt eignet sich der RPi hervorragend, eine vertrauenswürdige VPN-Infrastruktur auf Basis von OpenVPN aufzubauen.

Vorbereitungen

Was benötigen Sie?

  1. einen Raspberry Pi,
  2. einen Router, bei dem man UDP-Ports freigeben kann und der, z.B. mittels dynamischem DNS, extern adressiert werden kann,
  3. etwas Zeit.

Als erstes müssen Sie prüfen, ob Sie mit Ihrem Router einem beliebigem System per DHCP eine feste IP-Adresse zuweisen können. Ist das der Fall, dann weisen Sie dem Raspberry Pi eine feste IP-Adresse zu. Ich gehe im folgenden einfach davon aus, dass Sie dem RPi die IPv4-Adresse 192.168.100.100 zugewiesen haben. Die konkrete Adresse hängt natürlich davon ab, welchen Adressbereich Sie für Ihr Heimnetz nutzen.

Ist das nicht möglich, müssen Sie Ihrem Raspberry Pi eine statische IP-Adresse geben. Wie das funktioniert, hängt von der Linux-Distribution Ihres RPi ab. Ich nutze, aus guten Gründen, Arch Linux. Für die folgenden Aktionen müssen Sie als Benutzer root angemeldet sein.

Zuerst installieren Sie das Paket netcfg:

pacman -S netcfg

Erstellen Sie die Datei /etc/network.d/default:

cat <<EOF >/etc/network.d/default
CONNECTION='ethernet'
DESCRIPTION='A basic static ethernet connection using iproute'
INTERFACE='eth0'
IP='static'
ADDR='192.168.100.100'
GATEWAY='192.168.100.1'
DNS=('8.8.8.8')
EOF

Ersetzen Sie 192.168.100.1 durch die IPv4-Adresse Ihres Routers und 8.8.8.8 durch die IPv4-Adresse Ihres DNS-Servers. Zur Not belassen Sie 8.8.8.8, dann nutzen Sie Google als DNS-Server.

Unter /etc/network.d/examples/ethernet-static finden Sie eine Musterdatei. Dann müssen Sie evtl. nicht so viel tippen.

Damit diese Konfiguration einen Neustart übersteht, müssen Sie die Konfiguration aktivieren und den DHCP-Client deaktivieren:

systemctl enable netcfg@default
systemctl disable dhcpcd@eth0
reboot

Melden Sie sich nach dem Neustart wieder beim RPi an und überprüfen Sie, ob die Änderungen wirksam sind:

ifconfig

Fertig sind die Vorbereitungen.

Installation von OpenVPN

OpenVPN kann auf zwei Arten betrieben werden:

  • Im Bidging-Modus werden alle Datenpakete zwischen externem Rechner und dem Heimnetz ausgetauscht.
  • Im Routing-Modus werden nur IP-Pakete durch den OpenVPN-Server zwischen externem Rechner und dem Heimnetz gelenkt.

Der Raspberry Pi unterstützt nur den Routing-Modus, was aber nicht schlimm ist. Wenn Sie sich über ein Mobilfunknetz ins Heimnetz einwählen wollen, spart der Routing-Modus einiges an kostbarem Datenvolumen.

Zunächst müssen Sie ein sog. "Tunnel device" einrichten. Das geht einfach:

cat <<EOF >/etc/modules-load.d/tun.conf
# Load tun.ko at boot
tun
EOF

Danach installieren Sie OpenVPN:

pacman -S openvpn

Starten Sie den RPi neu, um zu überprüfen, dass alles soweit in Ordnung ist:

reboot

Nach dem Neustart überprüfen Sie, ob das Tunnel device eingerichtet ist. Wenn Sie

ifconfig

eingeben, sollte dort ein Gerät mit Namen tun0 erscheinen.

OpenVPN konfigurieren

Der nächste Schritt ist das Einrichten einer Infrastruktur zur sicheren Verschlüsselung (Public Key Infrastructure, PKI). Aus Sicherheitsgründen empfehle ich, dass Sie die entsprechenden Systemdateien nicht direkt verwenden, sondern diese in einem separaten Verzeichnis verwalten.

cp -r /usr/share/openvpn/easy-rsa /root/OpenVPN
cd /root/OpenVPN

Öffnen Sie die Datei vars mit einem Editor Ihrer Wahl und ändern Sie die folgenden Wert:

export KEY_COUNTRY="DE"       # Land
export KEY_PROVINCE="BW"      # Bundesland
export KEY_CITY="Stadt"
export KEY_ORG="Organisation"
export KEY_EMAIL=mail@host.domain
export KEY_CN=rpi-CA
export KEY_NAME=rpi-CA
export KEY_OU=""
#export PKCS11_MODULE_PATH=changeme
#export PKCS11_PIN=1234

Sollten Sie ein erhöhtes Sicherheitsbedürfnis haben, ändern Sie

export KEY_SIZE=2048

Speichern Sie die Datei und initialisieren Sie Ihre PKI mit

source ./vars
./clean-all
./build-ca

Alle Fragen, die beim letzten Befehl gestellt werden, können Sie mit einem einfachen Druck auf die Return-Taste beantworten. Sie haben die Fragen schon durch Speichern der Datei vars beantwortet.

Daten für den Server erstellen

Im nächsten Schritt müssen Sie die Infrastrukturdateien für den OpenVPN-Server erstellen. Dazu führen Sie folgenden Befehl aus:

./build-key-server RPi

Sie können RPi durch einen anderen Namen ersetzen.

Während die Dateien erzeugt werden, stellt Ihnen das Programm wieder einige Fragen, die Sie fast alle mit der Return-Taste beantworten können. Lediglich bei der Frage, ob Sie das Zertifikat signieren möchten und ob Sie alles bestätigen wollen ("commit") müssen Sie mit y und der Return-Taste antworten.

Es sollten nun im Verzeichnis /root/OpenVPN/keys folgende drei Dateien stehen:

  • RPi.crt
  • RPi.csr
  • RPi.key

Die Datei RPi.key darf unter keinen Umständen in fremde Hände gelangen! Andernfalls kann jeder, unter Vorspiegelung falscher Tatsachen, in Ihr Heimnetz eindringen. Idealerweise sollten Sie das Verzeichnis keys auf eine CD brennen und vom Raspberry Pi löschen, nachdem alles funktioniert. Aber erst machen Sie weiter, Sie sind ja noch nicht fertig.

Im nächsten Schritt lassen Sie einige Dateien berechnen, so dass Ihr OpenVPN-Server mit Ihren externen Rechnern sogar in unsicheren Umgebungen (WLAN-Hotspot) sicher Verschlüsselungsschlüssel austauschen kann:

./build-dh

Gehen Sie nun in aller Ruhe Kaffee trinken. Wenn Sie, wie ich, oben die KEY_SIZE auf den Wert 2048 gesetzt haben, braucht der Raspberry Pi mehr als 30 Minuten, um die notwendigen Daten zu berechnen.

Der nächste Befehl wird wieder schneller ausgeführt. Er berechnet einen individuellen Code für den OpenVPN-Server, um diesen vor Angriffen zu schützen.

openvpn --genkey --secret /root/OpenVPN/keys/ta.key

Hier gilt wieder, das die Datei ta.key unter keinen Umständen in fremde Hände gelangen darf.

Daten für die externen Rechner erstellen

Mit "externen Rechner" bezeichne ich die Computer, mit denen Sie sich später in Ihr Heimnetz einwählen wollen. Aller Wahrscheinlichkeit nach wird das ein Laptop, ein Smart Phone oder ein Tablet sein.

Für jeden Rechner führen Sie folgenden Befehl aus:

./build-key NAME

Für NAME sollten Sie Ihren jeweiligen Namen des externen Rechners angeben. Wichtig ist, dass Sie die Namen nicht doppelt vergeben. Ansonsten gibt es keine Einschränkungen.

Konfigurationsdateien zusammenführen

Jetzt erstellen Sie ein Verzeichnis, in dem Sie sämtliche Konfigurationsdateien sammeln, bevor diese dem System bekanntgegeben werden.

mkdir /root/OpenVPN/configurations
cd /root/OpenVPN/configurations
cp /usr/share/openvpn/examples/server.conf /usr/share/openvpn/examples/client.conf .
mv server.conf RPi.conf
mv client.conf NAME.conf

Passen Sie nun mit einem Editor die Server-Konfiguration RPi.conf an. Ersetzen Sie folgende Werte:

ca /etc/openvpn/ca.crt
cert /etc/openvpn/RPi.crt
key /etc/openvpn/RPi.key  # This file should be kept secret
push "redirect-gateway def1 bypass-dhcp"
tls-auth /etc/openvpn/ta.key 0 # This file is secret
push "dhcp-option DNS 8.8.8.8"

Wie schon oben besprochen, ersetzen Sie 8.8.8.8 durch die IP-Adresse Ihres DNS-Servers. Sofern Sie KEY_SIZE auf 2048 gesetzt haben, müssen Sie

dh /etc/openvpn/dh2048.pem

angeben. Es kann sich lohnen (experimentieren Sie ein wenig)

keepalive 30 360

zu setzen. Dann werden in Surfpausen weniger Datenpakete übertragen, um die sichere Verbindung aufrecht zu erhalten.

Jetzt ist es endlich an der Zeit, alle relevanten Dateien in das entsprechende Systemverzeichnis zu kopieren:

cp Rpi.conf /etc/openvpn
cd /root/OpenVPN/keys
cp ca.crt Rpi.crt Rpi.key dh2048.pem ta.key /etc/openvpn

Wenn Sie KEY_SIZE auf dem Wert 1024 belassen haben, müssen Sie dh2048.pem durch dh1024.pem ersetzen.

Aktivieren Sie OpenVPN, damit es nach einem Neustart gestartet wird:

systemctl enable openvpn@Rpi.service

Routing konfigurieren

Im letzten Schritt müssen Sie das Routing konfigurieren, damit die IP-Pakete immer ihr Ziel finden.

Ändern Sie in der Datei /etc/sysctl.conf die Zeile auf den Wert 1:

net.ipv4.ip_forward=1

In der Datei /etc/conf.d/iptables müssen Sie ebenfalls einen Wert auf 1 setzen:

IPTABLES_FORWARD=1

Zum Abschluss müssen Sie eine Regel zum Routing angeben, die Regeln sichern und aktivieren, sowie den Raspberry Pi neu starten:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables-save > /etc/iptables/iptables.rules
systemctl enable iptables
reboot

Externe Rechner einrichten

Auf den Computern, mit denen Sie sich in Ihr Heimnetz einwählen wollen, müssen Sie OpenVPN installieren.

  • Für Windows gibt es entsprechende Client-Software auf der OpenVPN-Seite. Allerdings habe ich die, mangels Windows-Rechner, noch nicht ausprobieren können. Für eine Rückmeldung bin ich dankbar.
  • Für OSX gibt es Tunnelblick als funktionierenden Client.
  • Linux-Nutzer werden vermutlich das OpenVPN-Plugin für den Network-Manager verwenden.
  • Für Android nutze ich selbst OpenVPN für Android
  • Die iOS-Fraktion kann ebenfalls einen OpenVPN-Client aus ihrem Äpp-Store nutzen. Auch hier bin ich für Rückmeldungen dankbar.

Welchen Client Sie möglicherweiseverwenden, Sie benötigen folgende Dateien:

  • ca.crt
  • NAME.crt
  • NAME.key
  • ta.key

NAME ist der oben angegebene Name, den Sie beim ./build-key angegeben haben. Denken Sie daran, dass die Dateien, die mit .key enden, auf keinen Fall in fremde Hände gelangen dürfen.

Die Dateien können Sie mit einem SSH-Client Ihrer Wahl (mit dem Sie sich in den Raspberry Pi eingewählt haben) herauskopieren.

Abschluss

Jetzt müssen Sie nur noch an Ihrem Router den UDP-Port 1194 des Raspberry Pi freigeben, damit UDP-Pakete an den RPi weitergeleitet werden. Konsultieren Sie dazu die Betriebsanleitung Ihres Routers.

Um ganz sicher zu gehen, sollten Sie das Verzeichnis /root/OpenVPN auf eine CD brennen und das Verzeichnis anschließend auf dem Raspberry Pi löschen.

Mit Ihrer OpenVPN-Installation können Sie nun an Hotspots sicher surfen und auf Reisen auf Ihr Heimnetz zugreifen. Ein Passwort ist nicht nötig, Sie müssen lediglich daran denken, den installieren VPN-Client zu nutzen.

Sollte Ihr externer Rechner in unbefugte Hände gelangen, müssen Sie lediglich die von Ihnen erstellten Client-Zertifikate als ungültig markieren. Eine Anleitung dazu finden Sie mit der Suchmaschine Ihrer Wahl.

Viel Spaß beim sicheren Surfen.

Quellen: