Viele Linux-Anwender glauben immer noch, sie bräuchten keine Firewall. Das Mantra wurde schließlich jahrzehntelang vor Linux hergetragen. Doch die meisten Linux-Desktopinstallationen sind nicht mehr minimalistisch und bewegen sich auch nicht mehr nur innerhalb des Heimnetzes.
Eine Firewall kann dann Sinn machen, wenn man ein mobiles Gerät besitzt und sich in fremde Netze einwählt. Nennt sich Notebook und dürfte bei den meisten Anwendern der Standardfall sein. Man verweist immer gerne auf Windows mit seinen vermeintlich vielen offenen Ports und Diensten, die man nicht braucht, aber auch bei Linux laufen viele Dienste, die außerhalb des Heimnetzes nicht gebraucht werden: CUPS, Avahi, KDE Connect, ggf. ein Samba-Share. Die Liste ließe sich sicher noch erweitern. Das ist jetzt grundsätzlich kein Problem, aber es schadet auch nicht, diese Ports bei unbekannten Netzwerken zu blockieren. Wer weiß schon, welche Sicherheitslücke demnächst in CUPS oder sshfs gefunden wird.
Distributionen wie Red Hat Enterprise Linux, Fedora, SUSE Linux Enterprise oder openSUSE liefern deshalb mit Firewalld schon länger standardmäßig eine aktivierte Firewall aus. Distributionen wie Debian oder Ubuntu bieten eine Nachinstallation aus den Paketquellen an, aber hier ist ufw verbreiteter.
Ein bisschen Nacharbeit ist in jedem Fall notwendig. Bei SUSE kann man dies via YaST machen oder auf der Konsole. KDE bietet seit Neuestem mit Plasma Firewall eine GUI für Firewalls, aber bei mir hat diese nicht funktioniert.
Zonen in Firewalld
Firewalld arbeitet mit vordefinierten Zonen. Die wichtigen Kern-Zonen sind:
- block – Alle eingehenden Netzwerkverbindungen werden blockiert. Nur vom System aus initiierte Netzwerkverbindungen sind möglich.
- dmz – Klassische entmilitarisierte Zone (DMZ), die begrenzten Zugang zum Netzwerk bietet und nur definierte eingehende Ports zulässt.
- drop – Löscht eingehenden Netzwerkverbindungen und erlaubt nur ausgehende Netzwerkverbindungen.
- external – Nützlich vor allem im Router-Kontext.
- home – Gedacht für Heimcomputer wie Notebooks und Desktops innerhalb des eigenen Netzwerks, in dem anderen Systemen vertraut werden kann.
- internal – Für interne Netzwerke, wenn den anderen Servern oder Computern im Netzwerk vertraut werden kann.
- public – Es wird anderen Systemen im Netzwerk nicht vertraut. Nur erforderliche Ports und Dienste sind erlaubt.
- trusted – Alle Netzwerkverbindungen werden akzeptiert.
- work – Äquivalent von Home für den Einsatz am Arbeitsplatz.
Welche Zonen zusätzlich noch verfügbar sind kann mit folgendem Kommando geprüft werden:
# firewall-cmd --get-zones
Code-Sprache: PHP (php)
Dienste für Zonen konfigurieren
Für die klassischen Notebook-Installation sind vor allem zwei Zonen von Firewalld von Interesse: home und public.
Die Standard-Zone sollte public sein, das lässt sich mit folgendem Befehl prüfen:
# firewall-cmd --get-default-zone
Code-Sprache: PHP (php)
Durch die Integration in den NetworkManager lassen sich Netzwerke Zonen zuordnen. Jede neue Verbindung wird automatisch public zugewiesen. Eigene Netzwerke können home zugewiesen werden.
Für Home können dann Dienste freigeschaltet werden, die man im heimischen Netzwerk gerne nutzen möchte.
Mit folgendem Befehl überprüft man, welche Services gerade aktiv sind:
<strong>#</strong> firewall-cmd --list-services --zone=home
Code-Sprache: HTML, XML (xml)
Folgender Befehl kann man die vorkonfigurierten Dienste für Firewalld ausgeben. Diese sind bereits für den Dienst passend konfiguriert und man muss nicht manuell irgendwelche Ports zusammen stellen und freigeben.
# firewall-cmd --get-services
Code-Sprache: PHP (php)
Für meinen persönlichen Bedarf haben die vorkonfigurierten Dienste immer gereicht, aber das hängt natürlich von den eigenen Einsatzszenarien ab.
Mit folgenden beiden Befehlen fügt man einen Dienst hinzu bzw. entfernt ihn wieder. Hier mal am Beispiel von SSH.
# firewall-cmd --zone=home --add-service=ssh --permanent
# firewall-cmd --zone=home --remove-service=ssh --permanent
Code-Sprache: PHP (php)
Nach jeder Anpassung muss man Firewalld neustarten, damit die Änderung greift:
# systemctl restart firewalld
Code-Sprache: PHP (php)
Beispiel für den Einsatz
Mein primäres Notebook kommt mit zwei Zonen aus: home und public. In public ist so wenig die nötig erlaubt, in home einiges mehr, damit ich z. B. KDE Connect nutzen kann oder meinen Drucker erreiche:
<strong>GH-Elite:/home/gerrit #</strong> firewall-cmd --list-services --zone=home
dhcpv6-client kdeconnect kdeconnect-kde mdns samba-client
<strong>GH-Elite:/home/gerrit #</strong> firewall-cmd --list-services --zone=public
dhcpv6-client
Code-Sprache: HTML, XML (xml)
Die Netzwerke eines Erst- und Zweitwohnsitzes sind Home zugewiesen. Alle anderen Netzwerke landen bei der Einrichtung automatisch bei Public. Bisher hatte ich damit keine Probleme.
Danke für den Artikel – endlich Licht im Dunkeln! 🙂 Aber kdeconnect habe ich bei mir im public, kdeconnect-kde gar nirgends freigegeben. KDE Connect läuft trotzdem einwandfrei.
Danke für den Tipp. Hab ich vermutlich doppelt gemoppelt. Muss mir mal die Konfigurationen ansehen und schmeiße dann eines raus. 🙂
Gibt es auch eine Lern-Variante? So wie es die persönlichen Firewalls unter Windows (bsp. SimpleWall) schon immer anbieten?
Grundsätzlich hätte ich gerne, dass alle Netzzugriffe erstmal gesperrt sind und beim Erstmaligen zugriff werde ich dann gefragt Erlauben/blockieren/für Xmin erlauben.
Nein, sowas bieten ufw und firewalld nicht. Schau dir mal Open Snitch an: https://curius.de/2020/06/open-snitch-verbindungen-unter-linux-im-blick-behalten/
Klingt spannend.
Mir ist da gerade aufgefallen, dass laut git repo der Forkende zugriff auf das Original repo bekommen hat und nun da weitermacht und den Fork selbst aufgibt.
Allenfalls musst du da deinen Artikel aktualisieren.
Ah danke. Tja nichts ist so alt wie ein Blogpost von “gestern” 😉
Dummerweise passiert es selten das man einen Blogpost von heute findet. 😂
Noch eine Ergänzung:
Warum interessiert mich Open Snitch? Einfach weil seit ein paar Windows 10 Versionen plötzlich alte Spiele unter Wine besser laufen als unter Windows. Aber die will ich nicht im Netz haben, daher auch Simplewall unter Windows 10.
Hallo Gerrit. Ich habe mich bisher erst mit UFW beschäftigt und bin damit auch sehr zufrieden. Wenn ich mit Fedora anstatt Debian unterwegs bin, würde Firewalld aber eine beßere Wahl sein. UFW läuft bei mir teilweise im Hardcore Modus. Eingehend (Drop) | Ausgehend (Reject). Danach DNS (53), HTTP (80), HTTPS (443) wieder freigeben. Teilweise ist sogar nur DNS und HTTPS auf die jeweils gewünschte IP eingestellt. Wie funktioniert diese paranoide Konfiguration bei Firewalld? Ich konnte das bisher nirgends finden.