Wer mit seinem Rechner nur im Internet surft und seine Büroarbeiten erledigt, wird sich mit dem Thema Firewall kaum beschäftigen. Kommen dagegen Geräte für die Heimautomatisierung oder andere IoT-Basteleien zum Einsatz, sieht das schon anders aus. Denn für den Fernzugriff auf Steuerelemente oder Sensoren muss das heimische Netzwerk nach außen für das Internet geöffnet werden. In solchen Szenarien erhöht eine selbst gebaute Firewall die Sicherheit spürbar.
Achtung, Sie verlassen die Komfortzone!
In diesem Artikel lernen Sie zwei verschiedene Ansätze kennen, wie ein Platinenrechner wie der Raspberry Pi als Firewall eingesetzt wird. Allerdings müssen Sie zur Umsetzung schon Spaß mitbringen, mit Terminalbefehlen und manuell in Konfigurationsdateien zu arbeiten. Und da sich alle Komponenten in einer stetigen Weiterentwicklung befinden, stoßen Sie möglicherweise auf Probleme, die sich eventuell nur nach einer intensiveren Recherche im Internet lösen lassen. Was etwa mit dem Raspberry 3 unter einer bestimmten Konfiguration funktioniert hat, muss es mit dem Modell 2 und ansonsten identischen Optionen leider nicht tun. Das hat unter anderem auch damit zu tun, dass die Hersteller von Chipsätzen sich nach wie vor sehr verhalten in ihre Karten schauen lassen, was es den Entwicklern erschwert, die Unterstützung der Geräte zu programmieren.
Lösungsansatz 1: WLAN-Bridge einsetzen
Anders als ein Router besitzt der Raspberry nur einen Ethernet-Anschluss. Und diese Tatsache erfordert Anpassungen und Bastelarbeiten, damit der Netzwerkverkehr durch den Ein-Platinen-Rechner geleitet wird. Der erste Lösungsansatz verwandelt den kleinen Computer in eine WLAN-Bridge. Die Daten werden per Ethernet-Kabel mit dem Router ausgetauscht und durchlaufen dabei die Firewall des Raspberry Pi. Die Clients melden sich drahtlos am Raspberry an und beziehen die so gefilterten Datenpakete. Das ist mit Bordmitteln umzusetzen. Zum Einsatz kommt das Programm Uncomplicated Firewall (ufw). Das ist streng genommen keine eigene Firewall im Wortsinn, sondern vereinfacht nur die Konfiguration der ohnehin eingebauten Funktionen. Das Paket installieren Sie wie gewohnt direkt aus einer Konsole heraus mit
sudo apt-get install ufw
Die Installation schließt auch gleich eine Reihe von fundamentalen Regeln für die Firewall ein.
Firewall aktivieren und Regeln hinterlegen: Im Grundzustand geht das System davon aus, dass nur Verbindungen zugelassen werden, die ausdrücklich erlaubt sind.
Deswegen sollten Sie zunächst die Verbindung per SSH zulassen, um sich von einem externen System auf dem Raspberry anmelden zu können. Das erledigen Sie mit
sudo ufw allow ssh
Das System sollte anschließend mit einem „Rules updated“ antworten. Jetzt können Sie die Firewall starten. Mit
sudo ufw enable
aktivieren Sie das Regelwerk. Die Anwendung weist Sie darauf hin, dass das Kommando eine möglicherweise bestehende SSH-Verbindung beeinträchtigen könnte. Mit „y“ fahren Sie fort. Damit sind die Regeln ab sofort gültig. Mit dem Parameter „disable“ wird die Firewall bei Bedarf wieder deaktiviert – also:
sudo ufw disable
Bei der Einrichtung weiterer Regeln können Sie wie schon oben bei „ssh“ einfach die Protokollbezeichnungen verwenden. Soll der Raspberry als Webserver arbeiten, erlauben Sie den Datenverkehr über das Protokoll HTTP:
sudo ufw allow http
Arbeitet der Computer als Dateiserver, schalten Sie SMB (CIFS) frei. In diesem Fall erlauben Sie das Protokoll „cifs“. Daneben kennt das Regelwerk aber auch eine ganze Reihe von Anwendungen, die spezielle Regeln erfordern. Mit
sudo ufw app list
lassen Sie sich eine Liste der so erkannten Anwendungen ausgeben. Mit „allow appname“ werden die Regeln für die Anwendung dann aktiviert.
Lesetipp So machen Sie den Raspberry Pi sicherer
Raspberry Pi als sichere Bridge konfigurieren: Mit der Firewall schützt der Raspberry sich selbst und die darauf laufenden Anwendungen. Das ist eine gute Basis, um das Netzwerk insgesamt sicherer zu machen. Eine Bridge verwendet das Standardgateway (also die Verbindung zum Internet etwa über den DSL-Anschluss) und einen bereits vorhandenen DHCP-Server (in diesem Fall den des Routers).
Die Einrichtung des Systems ist an sich nicht schwierig. Je nach Modell (externer WLAN-Dongle) muss erst geprüft werden, ob der Chipsatz den AP-Modus beherrscht, also als WLAN-Access-Point arbeiten kann. Die Abfrage erledigen Sie mit dem folgenden Befehl:
iw list | grep AP
Werden mehrere Zeilen mit „AP“ angezeigt, kann es weitergehen. Wird das Kommando iw erst gar nicht ausgeführt, müssen Sie das Tool erst mit sudo apt install iw nachinstallieren.
Damit die Brücke funktioniert, ist es wichtig, dass der DHCP Client Daemon aktiviert ist. Das prüfen Sie einfach mit diesem Befehl, der „active“ melden sollte:
service dhcpd status
Außerdem müssen sowohl die Ethernet-Schnittstelle als auch der WLAN-Adapter vorhanden sein und funktionieren. Der Befehl
ip l
zeigt die gewünschten Informationen an und meldet Ethernet als „eth0“ oder „enp5/6s0“, ferner den WLAN-Adapter als „wl[…]“.
Für die Bridge werden zwei Komponenten benötigt. Einerseits ein Daemon, der die Aufgabe als Access Point für die WLAN-Geräte übernimmt. Zum anderen die Software für die Netzwerkbrücke. Der Host Access Point Daemon, kurz „hostapd“, ist ein Programm, das WLAN-Funktionen verschlüsselt anbietet und sich um die notwendige Authentifizierung der Clients kümmert. Die Brücke selbst stellt das Paket „bridge-utils“ bereit. Die beiden Pakete werden nun erst einmal installiert:
sudo apt-get install hostapd bridge-utils
Ist die Installation erfolgreich abgeschlossen, beginnt die Konfiguration des Access Points. Dazu editieren Sie zunächst eine Konfigurationsdatei:
sudo nano /etc/hostapd/hostapd.conf
Dort müssen einige Zeilen eingetragen werden. Unter „SSID“ vergeben Sie den Namen für das Netzwerk, das die Clients nutzen können. Außerdem müssen Sie den Kanal (Channel) einstellen. Weichen Sie hier am besten auf Kanäle aus, die nicht von den Routern aus der Nachbarschaft genutzt werden. Zur Kontrolle helfen Router wie die Fritzbox („WLAN –› Funkkanal“), die eine Übersicht anbieten, wie viele andere Funknetzwerke aktuell auf den gleichen Kanälen senden. Schließlich sollten Sie ein sicheres Passwort für die Verschlüsselung setzen. Der ganze Block in der „hostapd.conf“ für die Verschlüsselung sieht dann so aus:
wpa=2 wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP wpa_passphrase=das.passwort.
In der Konfigurationsdatei finden Sie einen Beispieleintrag für den Treiber des WLAN-Adapters. Der ist auskommentiert, da hostapd eigentlich automatisch den korrekten Treiber laden sollte. Lediglich wenn es zu keiner Verbindung kommt, können Sie hier manuelle Änderungen vornehmen. Mit Strg-O und Strg-X speichern Sie die Datei und beenden den Editor. Da die Datei das Passwort für das WLAN im Klartext enthält, werden die Rechte so beschränkt, dass nur root Leserecht hat:
sudo chmod 600 /etc/hostapd/hostapd.conf
Jetzt verbleibt noch, die IP-Konfiguration der Schnittstellen einzurichten und die Details der Brücke einzurichten. Dazu editieren Sie mit
sudo nano /etc/network/interfaces
die dafür zuständige Datei. In der Abbildung auf der folgenden Seite sehen Sie unter „Netzwerbrücke“ die wesentlichen Einträge. Die beiden Adapter für Ethernet und WLAN haben hier die Kennung „eth0“ und „wlan0“.
Danach starten Sie das System neu. Mit
hostapd -dd /etc/hostapd/hostapd.conf
können Sie anschließend überprüfen, ob Ihr neues WLAN funktioniert.
Lösungsansatz 2: LEDE für Bastler
Der zweite Ansatz ist anspruchsvoller. Neben der Raspberry-Platine und einem zweiten Ethernet-Port benötigen Sie die Distribution LEDE – ein Fork des bekannteren Projekts Open WRT. Dabei handelt es sich im Kern um die Software für den Betrieb eines Routers. Den notwendigen zweiten Ethernet-Anschluss kann ein passender USB-Adapter nachrüsten. In unserem Fall kommt ein USB-Adapter mit einem Mos-Chip 7830 vom Hersteller Hama zum Einsatz (circa 25 Euro). Für Platinen mit USB 3.0 eignet sich der Delock Adapter 62616 (circa 25 Euro).
Die nachfolgende Anleitung hat folgende grundsätzliche Abfolge: Zuerst wird erst die Distribution LEDE installiert, danach die zweite Ethernet-Schnittstelle mit dem Platinenrechner verbunden und schließlich die Schnittstelle zum Router des Providers eingerichtet. Zum Einsatz kommen in diesem Beispiel ein Raspberry Pi 3 und der genannte Hama-Adapter. An die zweite Ethernet-Schnittstelle können Sie am Ende etwa einen weiteren eigenen Router anschließen, mit dem Sie dann Ihr Heimnetzwerk verbinden.
LEDE installieren: Die Installation von LEDE auf dem Raspberry ist nicht schwierig. Das Projekt PINN (https://github.com/procount/pinn) hat die Software mit an Bord. Dabei handelt es sich um eine Variante von Noobs, dem bekannten grafischen Installer für den Raspberry. Laden Sie sich die aktuelle Version von der Projektseite und installieren Sie diese wie gewohnt. Dazu genügt es, eine SD-Karte zu formatieren und den Inhalt des ZIP-Archivs darauf zu übertragen. Verbinden Sie den Pi mit Tastatur, Maus, Monitor und dem Internet. Starten Sie den Raspberry und wählen Sie aus den angebotenen Distributionen „LEDE“ aus. Ist die Installation abgeschlossen, starten Sie den Rechner neu.
Lesetipp Raspberry Pi: Mehr Features durch Zusatzplatinen
LEDE lauffähig machen: Die eigentliche Konfiguration des Systems können Sie mit dem Browser durchführen. Davor müssen Sie allerdings einmalig eine etwas umständliche Prozedur auf sich nehmen. Sobald LEDE keine Meldungen beim Systemstart ausgibt, drücken Sie die Eingabetaste, um auf die Konsole zu gelangen. Denn Sie müssen die Netzwerkkonfiguration anpassen, da LEDE eine statische IP-Adresse verwendet, die vom Router belegt sein dürfte. Zum Editieren steht Ihnen nur der Editor vi und das auch noch mit US-Tastaturbelegung zur Verfügung. Das Zeichen „/“ finden Sie auf der Taste „-“. Öffnen Sie im Terminal die maßgebliche Konfigurationsdatei mit vi:
vi /etc/config/network
Da Sie die Datei editieren wollen, müssen Sie zunächst „*i“ eingeben, um den Eingabemodus zu aktivieren. Dieser wird später dann wieder mit Esc-Taste beendet. Das Sternchen befindet sich beim englischen Layout auf der „Klammer-auf“-Taste. Ändern Sie in der Textdatei unter
config interface 'lan'
die Zeile mit dem Eintrag „static“ auf „dhcp“. Die gesamte Zeile sollte dann so aussehen:
option proto 'dhcp'
Löschen Sie die darunter angegebene IP-Adresse. Speichern und Schließen funktioniert bei vi mit „:x“ wobei der Doppelpunkt über „Ö“ einzugeben ist (Umschalt-ö). Starten Sie anschließend den Pi neu. Der Raspberry hat vom Router eine neue IP-Adresse bezogen. Fragen Sie diese auf dem Raspberry mit ifconfig ab oder schauen Sie im Router nach.
Mit dieser IP-Adresse können Sie sich jetzt von einem anderen Rechner im lokalen Netz per Browser verbinden. Beim ersten Aufruf der Seite werden Sie um die Eingabe eines Kennworts gebeten. Dadurch wird auch der SSH-Zugang freigeschaltet. So können Sie sich später auch von anderen Rechnern direkt auf der Systemebene bewegen.
Klicken Sie nun auf „System –› Software“. Sie müssen jetzt zunächst das für den Ethernet-Adapter passende Kernel-Modul laden. Das geht in der Regel unter Angabe des verwendeten Chipsatzes. In unserem Fall führt „mcs7830“ zum Erfolg. Den Suchbegriff geben Sie dabei in die Zeile neben „Find“ ein und klicken dann auf „Install“ neben dem Paketnamen. Dieser Adapter taucht dann später als weiterer Anschluss auf.
Neues Interface anlegen: Wechseln Sie nun nach „Network –› Interfaces“. Dort ist ein Eintrag „WAN“ vorhanden. Diesen können Sie mit „Delete“ entfernen. Legen Sie dann über „Add new interface“ ein neues Interface an.
Erstellen Sie das Interface namens „WAN“ mit dem Protokoll „DHCP client“ für den Ethernet-Adapter „eth1“ (das ist der externe USB-Ethernet-Adapter). Dadurch wird dieser Anschluss als externe Schnittstelle zum Router definiert, der an Ihrer Anschlussdose hängt. Im Firewall-Tab des WAN-Interfaces legen Sie dann WAN als Firewall-Zone fest.
Internen Ethernet-Anschluss konfigurieren: Jetzt bearbeiten Sie mit einem Klick auf „Edit“ den LAN-Anschluss „eth0“. Der interne Anschluss des Raspberry wird jetzt mit statischer IP-Adresse und DHCP-Funktion ausgestattet, damit das interne Netzwerk automatisch IP-Adressen erhält. Ändern Sie dazu zunächst das Protokoll auf „static“ und bestätigen Sie. Anschließend können Sie eine statische Adresse aus dem bisherigen Adressraum vergeben, zum Beispiel „192.168.178.2“. „Ipv4 netmask“ setzen Sie auf 255.255.255.0, die restlichen Felder lassen Sie leer.
Die Adresse, die Sie vergeben haben, müssen Sie sich merken. Denn wenn Sie nun „Save & Apply“ geklickt haben, kann der Raspberry nur noch über diese Adresse erreicht werden. Unter „Advanced Settings“ können Sie noch die Force-Option setzen, damit andere DHCP-Server das System nicht stören. Rufen Sie nun das System über die neue Adresse auf und starten Sie das System über „System/Reboot“ neu. Der zweite Ethernet-Anschluss des Raspberry kann jetzt dazu genutzt werden, weitere Geräte anzuschließen.
Nutzen Sie zum Beispiel einen zweiten Router, um damit ein internes WLAN aufzuspannen. Bevor Sie sich an weitläufiges Umstecken machen, verbinden Sie aber zunächst einfach einen einzelnen Rechner direkt mit diesem zweiten LAN-Anschluss. Die Konfiguration funktioniert, wenn Sie dann die Oberfläche von LEDE wieder über die feste IP-Adresse des Geräts erreichen. Danach können Sie sich ans Experimentieren machen.
Sie betreiben jetzt eine eigene Firewall und haben eine Mauer zwischen Ihrem internen Netzwerk und dem Router für den Internetzugriff errichtet.