Die eigene Firewall im Heimnetz
Das Internet der Dinge macht jedes Gerät im eigenen Netz gleichzeitig zu Bedrohung und Bedrohtem. Ein selbstgebauter Accesspoint mit Firewall minimiert die Risiken.
Sichern Sie Ihr Netz von innen und außen
E s ist so weit: Neue Varianten der MiraiFamilie agieren noch exibler und nutzen Windows-Schadsoftware als Sprungbrett. Damit gefährden Linux-basierte Systeme nicht nur andere Linux-basierte IoT-Geräte, sondern letztlich jeden Rechner im Netz. Eine ähnliche Lücke wie die von WannaCry ausgenutzte betrifft auch viele Versionen des Samba-Servers. Wann wird die Firmware Ihrer NAS oder Ihres DSLRouters entsprechend aktualisiert sein? Der Babysitter bringt gerne sein eigenes Notebook mit. Was aber, wenn dieses mit einem Wurm in ziert ist, gegen den noch keine Patches vorliegen? Die Lösung liegt in einem WLAN-Accesspoint, dessen Firewall individuell ltert, und zwar den Verkehr nach draußen genauso wie den Verkehr innerhalb des Netzes. Als Hardware können bereits 20 Euro günstige DSL-Router zum Einsatz kommen, mehr Möglichkeiten eröffnen Router mit zwei Funkmodulen, die um rund 50 Euro zu haben sind. In diesem Artikel kon gurieren wir die Router als reine Accesspoints. Falls Sie ein separates Kabelmodem oder DSL-Modem nutzen, können Sie später mit wenigen Änderungen auch einen ähnlich kon gurierten Router aufsetzen (DSL-Router mit integriertem Modem und OpenWRTKompatibilität sind derzeit rar).
OpenWRT oder LEDE?
Um die Frage nach dem richtigen Betriebssystem ist ein kleiner Glaubenskrieg entbrannt: Soll man nun das klassische OpenWRT nehmen oder den moderneren Fork LEDE? Gegründet wurde LEDE von einigen federführenden Entwicklern des OpenWRTProjektes, die mehr Flexibilität haben und moderne Konzepte ausprobieren wollten. Sie waren dafür bereit, Abwärtskompatibilität und die Unterstützung älterer Hardware aufzugeben. Derzeit zeichnet sich die Wiedervereinigung beider Projekte ab, wobei allerdings der Code größtenteils von LEDE stammen wird. Daher sollten Sie beim Neukauf eher auf LEDE-Kompatibilität achten und bei vorhandenen Geräten zunächst nachschlagen, ob LEDE-Images existieren und angesichts der Systemanforderungen nicht von der LEDE-Nutzung abgeraten wird: Beim TP-Link WR841N v10 riet LEDE von der Nutzung ab, in unserem Fall hatten wir jedoch keine Probleme, für einen Archer C7 1750 v2.0 gab es Images beider Projekte. Hier beließen wir das für einen früheren Artikel installierte OpenWRT. Beim Download des Installationsimages ist es wichtig, auf die exakte Hardwarerevision
zu achten (siehe Kasten Hardwareempfehlung). Bei einer Erstinstallation müssen Sie das Image mit factory im Namen verwenden, bei Updates eines mit sysupgrade. Für unseren WR841 war dies lede-17.01.1ar71xx-generic-tl-wr841-v10-squashfs-factory.bin. Die Installation des Images gelingt meist über das Webinterface des Routers. In einigen Fällen (neuere TP-Link-Firmware) muss das Flashen via TFTP erfolgen.
Das erste Login
LEDE und OpenWRT sind standardmäßig auf der IP-Adresse 192.168.1.1 erreichbar und haben einen DHCP-Server aktiviert, der Adressen im Bereich zwischen 100 und 150 vergibt. WLAN ist inaktiv. Zur Erstkon - guration sollten Sie also PC oder Notebook direkt mit dem Router verbinden und die IP-Adresse in einem Bereich einrichten, der nicht vom vorhandenen DSL-Router per DHCP bedient wird. Tragen Sie die IP-Adresse des vorhandenen DSL-Routers sowohl als Gateway als auch als DNS-Server ein. Vergessen Sie nicht, ein Passwort zu vergeben, und deaktivieren Sie DHCP auf der Ethernetschnittstelle. Aktivieren Sie den Dropbear-SSH-Server für diese Schnittstelle, denn einige Einstellungen sind auf der Konsole leichter vorzunehmen. Der nächste Schritt ist ein Aus ug in den Abschnitt Software. Hier wählen Sie zunächst Update Lists, aktivieren den Reiter Available Packages und suchen dann nach ebtables. Installieren Sie die Pakete kmod-ebtables, kmod-ebtables-ipv4, kmodebtables-ipv6, ebtables und ebtables-utils. Auf unserem TP-Link WR941N waren nach der Installation gerade noch 120 KByte für weitere Pakete frei. Punktlandung für die Firewall, unpraktisch, wenn weitere Funktionalität erwünscht ist.
WLAN: Keine Komplikationen mit zwei Netzen
Jetzt richten Sie das WLAN über Network /Wireless ein. Ein Klick auf Enable startet den Accesspoint, der eine direkte Brücke ins LAN darstellt, allerdings hat der noch keine Verschlüsselung. Klicken Sie daher auf Edit und setzen Sie dann im Reiter Interface Con guration/Wireless Security die Verschlüsselung auf WPA2/PSK. Ein Klick auf Save & Apply startet den Accesspoint neu mit aktivierter Verschlüsselung. Spannend wird es mit einem zweiten Netzwerk: Klicken Sie unter Network/Wireless auf Add, um zum vorhandenen WLAN ein weiteres logisches hinzuzufügen. Wir nannten die SSID Gastzugang und asozi- ierten den Accesspoint mit einem neuen Netzwerk Namens nat – bislang ein reines Dummy-Netzwerk ohne Verbindung zu anderen Netzen. Unter Network>Interfaces kon gurieren Sie nun dieses Netzwerk: Setzen Sie das Protokoll auf Static address und tragen Sie als IP-Adresse 10.11.11.1 und als Netzmaske 255.255.255.0 ein. Als DNS-Server können Sie Googles DNS 8.8.8.8 oder einen DNSServer Ihres Providers (im Router auslesen) verwenden. Aktivieren Sie noch den DHCPServer und klicken Sie dann auf Save and Apply. Jetzt gilt es noch, unter Network/ Firewall eine Firewall-Regel für das neue Netz zu erstellen. Nennen Sie die dem Netzwerk nat zugeordnete Firewall-Zone ebenfalls nat, lassen Sie die Regeln auf Input: accept, Output: accept und Forward: reject und aktivieren Sie Masquerading. Unter Inter-Zone-Forwarding aktivieren Sie Forwarding zur Zone lan. Mit Save & Apply speichern Sie die Firewall-Einstellungen. Kon gurieren Sie nun noch unter Firewall Traf c Rules ein Source NAT mit Namen Gastzugang-Internet, welches als Source zone nat und als Destination zone lan eingetragen hat. Als Source IP setzen Sie die externe IP des WLAN-Accesspoints, welche im Drop-down-Menü angeboten wird.
Erste Tests
Nun sollten Sie den Internetzugang testen: Sowohl beim Netzwerk LEDE als auch beim Gastzugang sollte Internetzugriff möglich sein. Über das Netzwerk LEDE, das als reine Bridge fungiert, sollten Endgeräte dieselben IP-Adressen zugewiesen bekommen wie bei direktem Zugriff am DSL-Router. Auch ist noch Zugriff auf alle Hosts im lokalen Netz möglich. Bei Zugang über das Gastnetz sehen andere Rechner im Netz die Gäste nicht, aber noch kann der Gast auf Rechner im internen Netz zugreifen. Auch können Clients des Gastnetzes aufeinander zugreifen. Wenn diese Kon guration zufriedenstellend funktioniert, können wir beginnen, sie abzudichten. Erster Schritt ist die Isolation von Wi -Clients untereinander. Dies geht nur auf der Kommandozeile. Loggen Sie sich per SSH als Root am Accesspoint ein (unter Windows nutzen Sie hierfür putty.exe) und editieren Sie die Kon gurationsdatei /etc/ con g/wireless:
vi /etc/config/wireless Suchen Sie den Abschnitt config 'wifi-iface'
der die SSID Gastzugang enthält. Drücken Sie i, um den Editor in den Insert-Modus zu schalten, und hängen Sie die Zeile option 'isolate' '1' an. Sie verlassen den Editor vi wieder, indem Sie zuerst Esc drücken, dann mit :w (gefolgt von der Eingabetaste) die geänderte Datei schreiben und mit :q schließlich den Editor beenden. Ist etwas schiefgelaufen, sorgt <ESC> :q! <Enter> dafür, dass Sie vi ohne zu speichern verlassen. Alternativ können Sie sich in einem zweiten PuttyProzess anmelden und einfach neu starten. Der Befehl reboot startet den Accesspoint mit neuer Kon guration frisch.
Zuerst die klassische Firewall
Um zu verhindern, dass Gäste auf Clients im LAN zugreifen, empfehlen wir die Einrichtung einer Forward Rule in den Firewall-Einstellungen. Nennen Sie die Regel Gastzugriff auf LAN sperren und wählen Sie als Source zone nat und als Destination zone lan. Als Destination Address tragen Sie das gesamte Subnetz ein (beispielsweise 192.168.1.0/24), als Action drop. Falls gewünscht können Sie noch die Ports 22 (SSH und 80 HTTP) für Zugriffe aus dem Gastnetz auf den Router sperren. Hier ist als Destination zone Device (input) zu wählen. In den Firewall-Regeln können Sie auch den Zugriff auf das komplette Internet sperren (0.0.0.0/0, drop) und einzelne Ports (Liste in der Tabelle) öffnen, um so beispielsweise Gästen nur Zugriff ins WWW (80 und 443) und auf E-Mails (143, 993, 465, 587) zu geben. Dabei ist lediglich zu beachten, dass Regeln in der Reihenfolge von oben nach unten abgearbeitet werden, dabei gewinnt der erste Treffer: Regeln, die den Zugriff auf bestimmte Ports erlauben, müssen also vor Regeln stehen, die den Rest sperren. Mit den kleinen grünen Pfeilchen verschieben Sie Regeln nach oben oder unten. Wenn Sie möchten, können Sie auch den ungenutzten WAN-Port analog zu einem drahtgebundenen Gästenetz mit eigenem IP-Adressbereich ( zum Beispiel 10.11.12.0/24) umrüsten. Die Regeln für Firewall und Source NAT sind entsprechend dem WLAN Gastzugang einzurichten.
Weiter mit den ebtables
Während die klassische Firewall auf TCPEbene arbeitet, ltern die ebtables auf Ethernet Bridges, setzen also eine Ebene tiefer im Netzwerkstack an. Mit ihnen ist Filterung anhand der Hardwareadressen möglich, zusätzliche Kernelmodule erlauben aber die Inspektion von IP-Headern und damit auch die Filterung anhand von IP-Adressen sowie Quell- und Zielports. Mit den richtigen Regeln wird so die Brücke zwischen WLAN und LAN zur Firewall, Clients können sich im selben Adressbereich be nden, und dennoch ist die Filterung
durch den Accesspoint möglich. Wollen wir beispielsweise einem Smart TV Zugriff auf eine NAS mit CIFS-Shares geben, so erreichen wir das mit einer Regel wie der folgenden für die Ports 137, 138, 139 und 445 und TCP und UDP: ebtables -t filter -A INPUT -i wlan0 --ip-src 192.168.1.123 --ip-dst 192.168.1.2 -p IPv4 --ip-proto tcp --ip-dport 137 -j ACCEPT Eine danach folgende Regel sperrt alle anderen Zugriffe ins lokale Netz: ebtables -t filter -A INPUT -i wlan0 --ip-src 192.168.1.123 --ip-dst 192.168.1.0/24 -p IPv4 -j DROP Der Zugriff ins restliche Internet ist hier noch erlaubt. Weitere Einschränkungen des Verkehrs nach draußen sollten wenn möglich am DSL-Router über dessen Firewall statt nden oder beispielsweise per Nameserver-Blacklisting durchgeführt werden (die Installation und Kon guration von piHole erklärten wir in PC Magazin 6/2017). Regeln der ebtables sollten möglichst kompakt gehalten werden, da die Filterung eine deutlich höhere CPU-Last verursacht als per iptables: In unseren Tests stellten wir fest, dass eine einzelne ebtables-Regel bei Fast-Ethernet-Geschwindigkeit schnell 3 bis 5 Prozent CPU-Last beim Accesspoint verursacht: Sie sind demnach auf der sicheren Seite, wenn Sie die Filterregeln so zusammenführen, dass weniger als zehn bis fünfzehn dauerhaft abgearbeitet werden müssen.
Wohin mit den Regeln?
Für ebtables existiert kein GUI-Modul analog dem Frontend für IP-Filterung. Die Regeln müssen stattdessen im Startscript/ etc/ rc.local eingetragen werden. Unser Screenshot zeigt, wie zunächst alle Tabellen geleert werden. Es folgt das CIFS-Beispiel mit zwei verschachtelten For-Schleifen. Nach dem Neustart des Routers und gut 30 Sekunden Wartezeit vergewissern Sie sich, dass die Regeln geladen und aktiv sind: Loggen Sie sich per SSH an der Konsole des Routers ein und geben Sie diesen Befehl ein: ebtables -L
Fazit
Der OpenWRT-basierte Router macht mit mehreren virtuellen Accesspoints die teilweise oder komplette Trennung kritischer Geräte vom eigenen Netz einfach. Allerdings ist Fleißarbeit bei der Art der Filterung angesagt: Soll prinzipiell alles ge ltert werden und nur Verkehr zu bestimmten Diensten oder Hosts freigegeben werden? Oder soll alles offenbleiben und punktuell ge ltert werden? Um das herauszu nden, ist es sinnvoll, den Traf c einzelner Hosts eine Weile lang per tcpdump mitzuschneiden – auch das geht prima an DSL-Routern mit USB-Schnittstelle. Die Mitschnitte können dann mit Wireshark ausgewertet werden und liefern so wichtige Erkenntnisse für künftige Regeln. Wegen der prinzipiellen Fehleranfälligkeit der Kon guration per GUI nden Sie im GitHub-Repository des Autors unter https://github.com/mschlenker/ PC-Magazin die Kon gurationsdateien /etc/ con g/network, /etc/con g/wireless, /etc/ con g/dhcp, /etc/con g/ rewall und /etc/ rc.local, um Ihre eigenen Einstellungen gegenzuchecken.