1. Paketfilter
Eine Firewall kontrolliert und filtert Datenpakete zwischen Netzen. Sie stellt sozusagen einen kontrollierten Übergang dar und soll die Weiterleitung von Paketen verhindern, die eine mögliche Bedrohung für die Daten und Komponenten eines Netzwerks bedeuten könnten. Anhand eines Regelwerks wird der Datenverkehr überwacht und entschieden, ob bestimmte Netzwerkpakete passieren dürfen oder nicht.
Das OpenWrt-Projekt integriert den Paketfilter netfilter/iptables, um den Datenverkehr innerhalb der Zonen bzw. über die Zonen hinaus zu filtern. Über die LuCI-Weboberfläche oder die Kommandozeile können neue Firewallregeln angelegt, verändert oder gelöscht werden.
Im vorliegenden Beitrag möchte ich euch das Hinzufügen von Firewallregeln vorstellen, um den ausgehenden Datenverkehr zu filtern. Clients im internen Netzwerk sollen nur jene Dienste im WAN/DMZ bzw. Internet erreichen können, die auch tatsächlich benötigt werden. Alle anderen Pakete werden vor der Weiterleitung verworfen.
- FRITZ!Box 4040 und Netzwerkaufbau – OpenWrt Teil1
- Flash OpenWrt auf FRITZ!Box 4040 – OpenWrt Teil2
- Hardening SSH- und LuCI-Webzugang – OpenWrt Teil3
- Keine Werbung und Tracker mit Adblock-Addon – OpenWrt Teil4
- Stubby: Verschlüsselte DNS-Anfragen – OpenWrt Teil5
- Firewall | Kontrolle ausgehender Datenverkehr – OpenWrt Teil6
- OpenWrt-Upgrade einspielen – OpenWrt Teil7
2. Firewall Mini-Guide
Unterstütze den Blog mit einem Dauerauftrag!
Unabhängig. Kritisch. Informativ. Praxisnah. Verständlich.
Die Arbeit von kuketz-blog.de wird vollständig durch Spenden unserer Leserschaft finanziert. Sei Teil unserer Community und unterstütze unsere Arbeit mit einer Spende.
2.1 Personal-Firewall vs. Netzwerk-Firewall
Die Konfiguration der OpenWrt-Firewall erfolgt auf dem Router. Wir arbeiten also mit einer sog. Netzwerk-Firewall, die im Gegensatz zur Personal-Firewall nicht auf dem zu schützenden System selbst arbeitet. Netzwerk-Firewalls schützen im Normalfall also mehrere Clients, während die Personal-Firewall direkt auf dem Client installiert und konfiguriert wird. Beide Varianten haben ihre Vor- und Nachteile und sollten grundsätzlich parallel verwendet werden. Personal-Firewalls bringen bspw. oftmals noch einen Anwendungsfilter mit, der es erlaubt, den Datenverkehr für jede Anwendung separat bzw. feingranular zu definieren.
Noch ein grundsätzlicher Hinweis: Die Funktion einer Firewall besteht nicht darin, Angriffe zu erkennen, sondern ausschließlich in der Anwendung der definierten Regelsätze.
2.2 Blacklist- vs. Whitelist-Prinzip
Die Schutzwirkung, die sich mithilfe einer Firewall erreichen lässt, hängt zu einem hohen Grad von einer sachgemäßen Konfiguration ab. Generell werden zwei unterschiedliche Konfigurationsansätze unterschieden:
- Blacklist: Erlaubt ist alles, was nicht ausdrücklich verboten ist
- Whitelist: Verboten ist alles, was nicht ausdrücklich erlaubt ist
Ich empfehle grundsätzlich das Whitelist-Prinzip. Es werden also nur jene Verbindungen nach außen zugelassen, die explizit erlaubt sind – alles andere wird verworfen. Nicht nur bei einer Firewall, sondern auch in anderen Bereichen der IT, ist das Whitelist-Prinzip oftmals dem Blacklist-Prinzip vorzuziehen.
2.3 Regelwerk
Das Regelwerk einer Firewall umfasst alle Regeln, wie mit einem Netzwerkpaket verfahren werden soll. Regeln werden für jedes Paket der Reihe nach geprüft und die erste zutreffende Regel angewendet. Die Reihenfolge der Regeln ist daher äußerst relevant. Firewall-Regeln setzen sich meist aus unterschiedlichen Informationen bzw. Komponenten zusammen:
- Bezeichnung
- Absender-IP-Adresse
- Empfänger-IP-Adresse
- Transport- bzw. Netzwerkprotokoll (TCP, UDP, ICMP etc.)
- Port-Nummer
- Aktion (erlauben, verwerfen oder ablehnen)
- Protokollieren (ja/nein)
Jede Regel umfasst eine Aktion bzw. Handlung, die eine Firewall entsprechend der Konfiguration durchführt. Meist können folgenden Aktionen definiert werden:
- DROP / DENY: Das Paket wird verworfen, also nicht durchgelassen, ohne weiter darauf zu reagieren.
- REJECT: Das Paket wird verworfen und dem Absender wird mitgeteilt, dass die Verbindung abgelehnt wurde.
- ACCEPT: Die Netzwerkanfrage ist erlaubt und wird durchgelassen.
- FORWARD: Die Netzwerkanfrage ist erlaubt und wird weitergeleitet.
Als Beispiel eine OpenWrt-Regel, die Clients den Zugriff auf Webserver via Port 80 (HTTP) und 443 (HTTPS) erlaubt:
Nehmen wir uns mal ein paar Bestandteile der Regel vor:
- Name: Die Bezeichnung ist frei wählbar. Generell finde ich es empfehlenswert diese so zu wählen, dass auf den ersten Blick ersichtlich ist, welche Ports bzw. Ziele / Quellen gefiltert werden.
- Protocol: Das Transportprotokoll ist abhängig vom gewählten Anwendungsprotokoll bzw. der Gegenstelle. HTTP bzw. HTTPS funktioniert ausschließlich über TCP, da es auf ein zuverlässiges Transportprotokoll angewiesen ist.
- Source zone: Die Quelle der ausgehenden Datenverbindungen ist im Beispiel die Zone WiFi – also alle Geräte, die der Zone WiFi zugeordnet sind bzw. mit dem WiFi-Interface verbunden sind.
- Source address: Bei Quell-IP-Adresse ist
any
ausgewählt. Das bedeutet: Jedem Client aus der Zone WiFi ist der Zugriff auf HTTP-Webserver über die Ports 80 bzw. 443 erlaubt. Man könnte hier auch eine Einschränkung auf bestimmte IP-Adressen vornehmen, um bestimmten Clients den Zugriff zu verwehren. - Destination zone: Pakete, die keine private IP-Adresse des lokalen Netzwerks zum Ziel haben, werden über die Zone WAN ins Internet bzw. an das Gateway geschickt. Möchten wir also öffentliche Webserver erreichen, müssen wir als Zone
wan
wählen. - Destination address: Da die Clients grundsätzlich alle öffentlichen Webserver im Internet erreichen sollen, nehmen wir keine Beschränkung vor und konfigurieren das Ziel als
any
. - Destination port: Gemäß der Spezifikation bzw. der Liste mit standardisierten Ports lauscht ein Webserver auf Port 80 bzw. 443.
- Action: Abschließend wird der Zugriff bzw. die Weiterleitung der Anfrage von internen Clients auf öffentliche Webserver mit der Aktion
accept
erlaubt.
Hinweis
Die in OpenWrt eingesetzte Firewall ist ein einfacher Paketfilter, der Filter-Entscheidungen auf Basis der Header-Informationen von Netzwerkpaketen trifft.3. Ausgehenden Datenverkehr filtern
Dank der LuCI-Weboberfläche ist die Konfiguration von Firewall-Regeln im Grunde genommen relativ simpel. Unter Network -> Firewall -> Traffic Rules
sind bereits ein paar Standardregeln angelegt. Diese könnt ihr so belassen und eure eigenen ergänzen. Dabei solltet ihr euch die folgenden Fragen stellen:
- Welche Dienste bzw. Ports sollen die Clients aus der Zone LAN, WIFI etc. erreichen können?
- Sollen alle Clients einer Zone Zugriff auf bestimmte Dienste wie Web- oder E-Mail-Server haben oder soll der Zugriff auf einige Clients beschränkt werden?
Solltet ihr Dienste bzw. Ports vergessen, ist das nicht weiter schlimm. Diese könnt ihr jederzeit ergänzen. Was allerdings ein Problem darstellen könnte: Ihr vergesst schlichtweg, dass die OpenWrt-Firewall aktiv ist bzw. alle ausgehenden Datenpakete verwirft, die nicht explizit erlaubt sind. Sollte also ein clientseitiges Problem auftreten, könnte unter Umständen auch die Firewall als Fehlerquelle infrage kommen – das solltet ihr stets im Hinterkopf behalten.
Letztendlich gibt es kein Patentrezept bzw. jede Firewall-Konfiguration wird vermutlich anders aussehen. Im Folgenden möchte ich euch eine Art »Grundgerüst« vorstellen. Ihr könnt es als Vorlage nehmen bzw. auch beliebig erweitern. Die mitgelieferten Standardregeln sind auf dem Screenshot nicht enthalten und befinden sich in der Reihenfolge über den ergänzten Regeln:
Die dargestellte Konfiguration bezieht sich auf Clients der Zone WIFI
. Neben Standardregeln wie HTTP- und SMTPS- bzw. IMAPS-Verkehr sind auch Regeln zum Aufbau einer OpenVPN- und Wireguard-Verbindung enthalten. Die wohl wichtigste Regel steht ganz am Ende und ist rot markiert. Diese »Block all« Regel sorgt dafür, dass alle Pakete, auf die die zuvor aufgelisteten Regelsätze nicht zutreffen, verworfen werden. Ohne diese Abschlussregel würde jeglicher Verkehr (ins Internet) erlaubt sein.
3.1 Logging von Rejected-Paketen
Zurückgewiesene (engl. rejected) Pakete könnt ihr euch bei Bedarf im Syslog anzeigen lassen. Das ist bspw. dann notwendig, wenn eine Anwendung nicht funktioniert und ihr herausfinden möchtet, welche Ports ihr öffnen müsst. Wichtig: Die »Block all« Regel muss unter Action auf reject
eingestellt werden. Stellt ihr die Action auf drop
können keine Pakete geloggt werden. In der oben dargestellten Beispiel-Konfiguration ist die letzte Regel auf »Reject« eingestellt.
Ist diese Voraussetzung erfüllt müsst ihr das Logging am WAN-Interface aktivieren. Klickt dazu auf Network -> Firewall -> General Settings
. Bei Zones sucht ihr die Zeile der WAN-Zone und klickt rechts in der Zeile auf den Button Edit
. Unter dem Tab Advanced Settings
setzt ihr anschließen das folgende Häkchen:
Über das Menü Status -> System Log
könnt ihr die Rejected-Pakete anschließend einsehen. Im nachfolgenden Beispiel habe ich den HTTP-Verkehr temporär deaktiviert – beim Aufruf einer Webseite wird sofort ein Eintrag im Syslog erzeugt:
Thu Dec 5 10:16:15 2019 kern.warn kernel: [13594.979197] REJECT wan out: IN=wlan1 OUT=eth1 MAC=fd:b1:56:f3:d2:0a:af:6l:af:32:a0:c6:07:a0 SRC=192.168.150.10 DST=95.216.40.49 LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=24764 DF PROTO=TCP SPT=46422 DPT=443 WINDOW=29200 RES=0x00 SYN URGP=0
Neben der Quelle ist das Ziel bzw. insbesondere der Zielport (DPT=443) die essenzielle Information. Auf Basis dieser Information kann anschließend eine neue Firewall-Regel erstellt werden.
3.2 Grenzen des Paketfilters
Ein Paketfilter arbeitet auf den OSI-Schichten 3 und 4, also auf der Netzwerk- und Transportschicht. Zur Filterung des Datenverkehrs werden also lediglich die Header-Informationen der Netzwerkpakete ausgewertet. Im Gegensatz dazu können Application-Firewalls bspw. zusätzlich die Nutzdaten von Anwendungsprotokollen auswerten (OSI-Schicht 7). Sie besitzen also Kenntnisse über die jeweilige Anwendung bzw. den Protokollaufbau wie HTTP, FTP, DNS etc.
Eine clevere Schadsoftware könnte den Paketfilter relativ einfach umgehen, indem der Verbindungsaufbau mit dem Angreifer über den HTTP bzw. HTTPS-Port verläuft, der im Normalfall für die Kommunikation mit Webservern freigegeben ist. Über einen dazwischengeschalteten Proxy könnte das Risiko etwas gemindert werden – der springende Punkt ist aber: Ein Paketfilter hat seine Grenzen und ist lediglich ein kleines Puzzleteil eines Sicherheitskonzepts.
4. Fazit
Gerade an einem zentralen Netzwerkgerät wie einem Router sind Firewall-Regelsätze sinnvoll, da alle dahinterliegenden Clients davon profitieren. Allerdings sollte man hierbei die Grenzen eines Paketfilters stets im Hinterkopf behalten und sich nicht in falsche Sicherheit wiegen.
Persönlich nutze ich die OpenWrt-Firewall noch für einen anderen Zweck: Der virtuellen Windows-7-Maschine habe ich jeglichen Datenaustausch mit dem Internet verboten – lediglich die IP-Adresse des ansässigen Finanzamts kann von der Maschine erreicht werden, um die Umsatzsteuervoranmeldung und Einkommensteuererklärung abzusenden. Damit lässt sich Windows für ausgewählte Anwendungszwecke weiterhin nutzen, ohne an Microsofts Datensammelspiel teilzunehmen.
Im nachfolgenden und letzten Teil der OpenWrt-Artikelserie werden wir uns mit dem Update-Vorgang des OpenWrt-Routers bzw. Images befassen.
Bildquellen:
Firewall: Smashicons from www.flaticon.com is licensed by CC 3.0 BY
Wenn du über aktuelle Beiträge informiert werden möchtest, hast du verschiedene Möglichkeiten, dem Blog zu folgen:
12 Ergänzungen zu “Firewall | Kontrolle ausgehender Datenverkehr – OpenWrt Teil6”
Forum oder der Chat geeignete Anlaufstellen, um dein Anliegen zu diskutieren. Per E-Mail beantworte ich grundsätzlich keine (Support-)Anfragen – dazu fehlt mir einfach die Zeit. Kuketz-ForumAbschließender Hinweis
Blog-Beiträge erheben nicht den Anspruch auf ständige Aktualität und Richtigkeit wie Lexikoneinträge (z.B. Wikipedia), sondern beziehen sich wie Zeitungsartikel auf den Informationsstand zum Zeitpunkt des Redaktionsschlusses.Kritik, Anregungen oder Korrekturvorschläge zu den Beiträgen nehme ich gerne per E-Mail entgegen.
Hallo Mike toller Artikel mal wieder. Nur eine Frage dazu: Gibt es eine Möglichkeit das ASN-Script einzubinden wie bei der IPFire oder wie hast du das umgesetzt? Oder gibt es dazu noch ein Artikel?
Das geht auch, maloe hat das Skript dahingehend modifiziert bzw. angepasst, so dass dies über Firewall -> Custom Rules abgebildet werden kann. Dazu wird es allerdings vorerst keine Anleitung geben. Ich muss mir das selbst noch anschauen – eventuell gibt es dann dazu einen Artikel.
Hallo Mike,
vielleicht eine doofe Frage aber einmal zur Verständnis. Deine Grundkonfiguration bezieht sich auf die WIFI Zone. Würde das auch für die LAN Zone passen oder gibts da noch etwas besonderes zu beachten?
Danke
Gruß
Stanok
Passt auch dort.
Hallo Mike,
könntest du ggf. die Standard-Regeln noch als Screenshot hinterlegen?
Würde mich interessieren, welche dort hinterlegt sind (habe selbst leider kein OpenWRT-Router, um das zu testen).
Hallo Mike,
Danke für das Tutorial! Kleine Anmerkung. Wäre es nicht sinnvoll on Top noch eine sehr wichtige Regel hinzuzufügen? Nämlich die Regel, die verhindert sich selbst auszusperren. Ist mir leider selbst schon passiert da alle meine Zonen INPUT rejecten. Also eine Regel für die Ports SSH, WEB 80 (http) und WEB 443 (https) welche Verbindungen vom Client von dem aus OpenWRT administiert zulässt.
Accept input Regel:
IPv4-tcp, udp
From IP 192.168.XX.XXX in lan
To IP 192.168.XX.X at ports 22, 80, 443 on this device
Gruß!
Wenn du deine Zone(n) auf INPUT [Reject] stellst (auf dem auch das LuCi-Webinterface lauscht), dann ist das sinnvoll, ja. INPUT [Reject] ist im Normalfall allerdings nur am WAN-Interface notwendig. Kommt eben drauf an, was du erreichen möchtest.
Hallo Mike,
danke für deinen Artikel! Die beschrieben Firewall-Regeln beziehen sich alle auf den ausgehenden Verkehr. Macht es Sinn für eingehenden Verkehr auch regeln aufzustellen und ist das nicht eigentlich wichtiger? Welche Regeln würdest du dafür empfehlen?
Grüße,
Alex
Eingehende Firewall-Regeln benötigst du nur, wenn du Dienste nach außen anbietest bzw. diese von außen erreichbar sein sollen. Ansonsten sind diese nicht notwendig. Stichwort: Stateful Packet Inspection
Hallo Mike,
eine Verständnisfrage zur Regel „Samba-Share“: Dort ist als Destination Zone „wan“ angegeben, obwohl die Destination Address 192.168.50.1 offenbar zu einem lokalen Netzwerk gehört.
Wäre in dem Fall z.B. eine Angaben Destination Zone „lan“ sinnvoll, wenn „lan“ als Netzwerk 192.168.50.x bekannt ist?
Gruß
Rodario
Das hat etwas mit meinem Netzwerkaufbau zu tun – siehe Teil 1.
Die davorgeschaltete Fritz!Box 6490 hat einen offenen Samba-Share (ins interne Netz). Für die Clients hinter dem OpenWrt-Router ist dieser Share über das WAN-Interface also Zone
wan
erreichbar.Hallo Mike,
Danke für deine sehr guten Artikel.
Bei den Firewall Traffic Rules habe ich die aus dem o.g OpenWrt Teil 6
deine Beispiele genommen (http,https,ntp usw.) leider funktioniert
bei mir der Captiv-Portal-check dann nicht mehr.
Es bleibt immer das kleine x im WLAN-Symbol.
Den Port 853 habe ich auch freigegeben.
Das System Log zeigt:
REJECT wan out: IN=br-WIFI OUT=eth1 MAC=
Danke
maga