38.4Firewall-Konfigurationshilfen
Viele Distributionen helfen ihren Anwendern bei der Firewall-Konfiguration mit komfortablen Benutzeroberflächen. Damit können Sie quasi per Mausklick eine einfache Firewall einrichten oder verändern. Hinter der recht einfachen Konfiguration verbirgt sich in der Regel eine Menge Paketfilter-Know-how. Das Resultat ist also oft ein besserer Schutz als eine selbst gebastelte Lösung.
Der Nachteil vorgegebener Firewalls ist deren Blackbox-Verhalten: Wenn die Wirkung des Filters überhaupt dokumentiert ist, dann zumeist nur dürftig. Sie wissen weder, wogegen der Filter Sie schützt, noch, welche Nebenwirkungen der Filter hat. Da kann es schon passieren, dass Linux-Einsteiger nach tagelangem Suchen, warum das Drucken im Netzwerk unmöglich ist, schließlich die Firewall als Schuldigen ausmachen. Der Versuch, den Paketfilter nun entsprechend anzupassen, wird vermutlich scheitern, vor allem dann, wenn ein Firewall-Grundwissen fehlt. Das vorauszusehende Ergebnis: Die Firewall wird einfach ausgeschaltet!
Alle im Folgenden beschriebenen Programme richten auch Regeln für IPv6 ein. Debian sieht standardmäßig keine Firewall vor und kennt auch keine distributions- spezifischen Konfigurationswerkzeuge.
Mit dem Kommando iptables -L | wc -l können Sie abschätzen, aus wie vielen Regeln die aktuelle Firewall besteht. Die resultierende Zahl ist ein Maß für die Komplexität der Firewall, aber nicht für ihre Sicherheit! Am sichersten wäre es, den Netzwerkverkehr ganz lahmzulegen – und das gelingt mit einer oder mit zwei Regeln.
Neben den hier beschriebenen Programmen finden Sie im Internet unzählige weitere Konfigurationshilfen. Populär und seit vielen Jahren erprobt sind:
http://www.fwbuilder.org
http://www.shorewall.net
CentOS, Fedora und RHEL
Fedora verwendet seit 2012 das neu entwickelte FirewallD-System. CentOS und RHEL haben FirewallD mit Version 7 ebenfalls übernommen. FirewallD wird durch Systemd gestartet und durch Dateien in /etc/firewalld sowie /usr/lib/firewalld konfiguriert.
Der Hauptvorteil von FirewallD gegenüber herkömmlichen Firewall-Systemen besteht darin, dass Änderungen dynamisch, also im laufenden Betrieb, durchgeführt werden. Im Gegensatz dazu war es beim bisherigen statischen System erforderlich, zur Aktivierung von Änderungen die Firewall vorübergehend abzuschalten und dann neu zu errichten. Das war nicht nur ein Sicherheitsrisiko, sondern führte auch dazu, dass vorhandene Netzwerkverbindungen unterbrochen wurden.
Für die Verwaltung der Firewall ist der Hintergrundprozess firewalld verantwortlich. Konfigurationswerkzeuge kommunizieren via D-BUS mit dem Dämon. Eine zentrale Grundidee von FirewallD besteht darin, dass jeder Netzwerkschnittstelle eine sogenannte Zone zugeordnet wird. Eine »Zone« im Sinne von FirewallD ist eine Sammlung von Regeln für einen bestimmten Anwendungszweck. Die folgende Liste beschreibt ganz kurz einige Zonen:
-
block: blockiert jeden Netzwerkverkehr. Der Absender erhält eine ICMP-Fehlermeldung.
-
drop: blockiert jeden Netzwerkverkehr. Der Absender wird nicht informiert.
-
trusted: erlaubt jeden Netzwerkverkehr. Diese Zone ist für gut gesicherte lokale Netzwerke gedacht, aber nicht für WLAN-Verbindungen.
-
external: blockiert die meisten Ports und aktiviert Masquerading (IPv4). Bei einem Router ist diese Zone für die Schnittstelle vorgesehen, die die Verbindung zum Internet herstellt.
-
home und internal: blockiert die meisten Ports, akzeptiert aber Samba (nur als Client), CUPS und Zeroconf/Avahi/mdns. Beide Zonen sind für Rechner in einem als einigermaßen sicher geltenden lokalen Netzwerk gedacht. Wenn Sie diese Zone nutzen und selbst Windows-Netzwerkverzeichnisse freigeben möchten, müssen Sie außerdem den Dienst Samba freischalten.
-
public: ähnlich wie home, blockiert aber auch CUPS und Samba-Client-Funktionen. Die Zone ist für die Internetnutzung in unsicheren Netzwerken gedacht, z.B. in einem öffentlichen WLAN.
-
FedoraWorkstation und FedoraServer: Diese beiden Zonen kommen standardmäßig für Netzwerkschnittstellen von Fedora-Installationen zum Einsatz. FedoraServer blockiert alle Dienste außer SSH und DHCP-Client. FedoraWorkstation ist deutlich liberaler und akzeptiert auch Samba-Client-Verbindungen sowie den Verkehr über alle Ports zwischen 1025 und 65535.
Die Zonenregeln mit der Ausnahme von block, drop und trusted können verändert werden. Bei Bedarf können Sie auch selbst eigene Zonen definieren.
Standardmäßig ordnen CentOS und RHEL alle Schnittstellen der Zone public zu. Bei aktuellen Fedora-Versionen kommt stattdessen die Zone FedoraWorkstation bzw. FedoraServer zum Einsatz.
Um eine Schnittstelle explizit einer Firewall-Zone zuzuordnen, tragen Sie in die Datei /etc/sysconfig/network-scripts/ifcfg-xxx die Zeile ZONE=zonenname ein. Dabei ist xxx der Name der Schnittstelle.
Zur Firewall-Konfiguration steht die Benutzeroberfläche firewall-config zur Verfügung (siehe Abbildung 38.3). Das gleichnamige Paket muss vor dem ersten Start installiert werden. Die Bedienung ist leider recht unübersichtlich. Nach dem Start sehen Sie die sogenannte Runtime-Konfiguration der diversen Zonen. Hier durchgeführte Änderungen gelten sofort für die betreffende Zone, sie werden aber nicht gespeichert und gehen somit beim Neustart des Rechners verloren.
Mit Optionen • Standardzone ändern können Sie einstellen, welche Zone standardmäßig gilt, also für alle Netzwerkschnittstellen, bei denen nicht explizit eine andere Zone eingestellt ist.
Die Benutzeroberfläche verrät unbegreiflicherweise nicht, welche Zone nun tatsächlich aktiv ist! Um das herauszufinden, führen Sie Optionen • Verbindungszonen ändern aus. Damit gelangen Sie in einen Dialog mit einer Liste aller vom Network Manager verwalteten Schnittstellen. Bearbeiten führt in den Detaildialog dieser Schnittstelle, und erst dessen Dialogblatt Allgemein gibt die Zone an. Die Einstellung Vorgabe bedeutet, dass diese Schnittstelle der Standardzone zugeordnet ist, also normalerweise public.
Um die Definition einer Zone dauerhaft zu ändern, wechseln Sie im Konfigurationsprogramm in die Ansicht Permanent. Ärgerlicherweise müssen Änderungen, die Sie zuvor in der Runtime-Ansicht ausprobiert haben, jetzt wiederholt werden.
Abbildung 38.3Die grafische Benutzeroberfläche zur FirewallD-Konfiguration
Firewall deaktivieren
Das Konfigurationsprogramm bietet keine direkte Option, um die Firewall ganz zu deaktivieren. Wenn Sie das wünschen, müssen Sie hape Options • Standardzone ändern ausführen und die Zone trusted einstellen. Standardmäßig sind alle Schnittstellen der Standardzone zugewiesen. Mit trusted ist damit jeglicher Netzverkehr erlaubt.
Beachten Sie aber, dass diese Veränderung der Standardzone keinen Einfluss auf Schnittstellen hat, die Sie explizit einer anderen Zone zugewiesen haben. Sollte es bei Ihnen derartige Schnittstellen geben, müssen Sie diese mit hape Optionen • Verbindungszonen ändern extra bearbeiten. In der Standardkonfiguration ist das nicht erforderlich.
Wenn Sie eine vollkommen eigene Firewall einrichten möchten, müssen Sie das Paket firewalld deinstallieren.
firewall-cmd
Im Terminal führen Sie FirewallD-Konfigurationsänderungen mit firewall-cmd durch. Standardmäßig werden die Änderungen dabei nur dynamisch durchgeführt, aber nicht gespeichert. Wenn die Änderungen dauerhaft gelten sollen, müssen Sie zusätzlich die Option --permanent angeben und die Änderungen anschließend mit firewall-cmd --reload explizit aktivieren. Eigene Regeln werden im Verzeichnis /etc/firewalld gespeichert.
Um einen Überblick über den aktuellen Zustand der Firewall zu erhalten, führen Sie die beiden folgenden Kommandos aus:
Sie wissen jetzt, dass die Firewall aktiv ist und welche Netzwerkschnittstellen welchen Firewall-Zonen zugeordnet sind.
Die folgenden Kommandos ergründen, welche Zonen es gibt und welche davon aktiv sind:
Die Default-Zone können Sie mit firewall-cmd --set-default-zone verändern. Die Zuordnung einer Zone zu einer Schnittstelle können Sie mit --add-interface bzw. --remove-interface verändern:
Beachten Sie aber, dass die Zonenzuordnung auch durch /etc/sysconfig/network-scripts/ifcfg-xxx erfolgen kann. Die ifcfg-Dateien haben Vorrang gegenüber der Veränderung der Zonen!
Es gibt kein Kommando, um alle für FirewallD bekannten Dienste aufzulisten. Stattdessen können Sie mit ls alle entsprechenden XML-Dateien ermitteln. Die Syntax der XML-Dateien ist leicht zu verstehen, d.h., Sie erkennen auf Anhieb, welche Ports jeweils freigeschaltet werden.
Um für eine Zone einen Dienst oder einen IP-Port freizuschalten, führen Sie die folgenden Kommandos aus:
Dabei ist name der Name eines Dienstes (z.B. https oder nfs) bzw. nnn die Nummer eines Ports.
Wenn Sie zusätzlich zu den FirewallD-Regeln eigene iptables-Regeln integrieren möchten, können Sie das unkompliziert in /etc/firewalld/direct.xml tun. Die Syntax dieser Datei dokumentiert man firewalld.direct. Ein Beispiel finden Sie in Abschnitt 39.3, »Squid-Konfiguration als transparenter Proxy-Cache«.
Eine umfassende Dokumentation zu FirewallD sowie eine Menge Anwendungsbeispiele zu firewall-cmd finden Sie hier:
https://fedoraproject.org/wiki/FirewallD
CentOS 6 / RHEL 6
Während der Installation von RHEL 6 und seinen Varianten wird standardmäßig eine Firewall eingerichtet, die alle von außen kommenden Verbindungsversuche blockiert. Zur Konfiguration starten Sie das Programm system-config-firewall. Sie können nun einzelne Dienste und Netzwerkschnittstellen als sicher definieren und so vom Schutz ausnehmen. Wenn der Rechner als Gateway dient, können Sie zudem eine Schnittstelle für das Masquerading angeben.
Die Einstellungen werden in /etc/sysconfig/iptables gespeichert. Für den Start der Firewall ist das Init-V-Script /etc/init.d/iptables verantwortlich.
SUSE
SUSE-Distributionen richten standardmäßig eine Firewall ein, wobei die Schnittstelle zum Internet automatisch der externen Zone zugeordnet wird. Die Konfiguration erfolgt durch das YaST-Modul Sicherheit • Firewall. Dabei werden – abweichend vom sonst dialogorientierten YaST-Konzept – die einzelnen Dialogblätter durch Einträge im linken Teil des YaST-Fensters ausgewählt (siehe Abbildung 38.4). Falls der Rechner als Gateway zu einem LAN dient, ordnen Sie im Dialogblatt Interfaces die LAN-Schnittstelle der internen Zone zu und aktivieren im Dialogblatt Masquerading die gleichnamige Option. Insgesamt ist die Konfiguration sehr geradlinig und einfach durchzuführen.
Abbildung 38.4Firewall-Konfiguration in SUSE-Distributionen
Die Firewall-Einstellungen werden in /etc/sysconfig/SuSEfirewall gespeichert. Um den Start der Firewall kümmern sich bei älteren SUSE-Versionen die Init-V-Scripts SuSEfirewall2*. Aktuelle openSUSE-Versionen verwenden stattdessen Systemd.
Ubuntu
Bei Ubuntu wird standardmäßig keine Firewall eingerichtet, und es gibt auch keine grafischen Konfigurationswerkzeuge. Dafür enthält Ubuntu das Kommando ufw (Uncomplicated Firewall). Es ermöglicht die Definition von Firewall-Regeln in einer wesentlich einfacheren Syntax als iptables. Zudem sollen in zukünftigen Ubuntu-Versionen bei der Installation von Netzwerkdiensten die entsprechenden ufw-Regeln zur Absicherung gleich mitinstalliert werden. Das ist freilich noch Zukunftsmusik: ufw hat bislang nur eine geringe Akzeptanz gefunden.
Wenn Sie schon Erfahrung mit Paketfiltern haben, werden Sie mit ufw rasch zum Ziel kommen: ufw enable aktiviert die Firewall. Die Firewall wird sofort und in Zukunft auch bei jedem Rechnerstart aktiviert. ufw disable deaktiviert die Firewall wieder. ufw default allow bzw. ufw default deny gibt an, ob eintreffende Pakete grundsätzlich akzeptiert oder abgewiesen werden. Normalerweise gilt deny, d.h., mit der Aktivierung der Firewall kann kein auf dem Rechner laufender Netzwerkdienst mehr von außen angesprochen werden!
Zusätzlich definieren Sie mit ufw allow/deny n bzw. ufw allow/deny dienst Regeln, die für spezielle IP-Ports bzw. Protokolle gelten. ufw status gibt Informationen zum aktuellen Zustand der Firewall. ufw kümmert sich standardmäßig sowohl um IPv4 als auch um IPv6. Wenn Sie IPv6-Verkehr ganz blockieren möchten, verwenden Sie in /etc/sysconfig/ufw die Einstellung IPV6=no.
Bei Bedarf können Firewall-Regeln für bestimmte Schnittstellen oder IP-Adressbereiche formuliert werden. Details dazu erläutert man ufw. Eigene Regeln werden in /lib/ufw/user.rules und user6.rules (für IPv6) gespeichert. Außerdem berücksichtigt ufw die Regeldateien aus dem Verzeichnis /etc/ufw/.
Darüber hinaus werden bei der Installation von Netzwerkdiensten dazu passende Regeldateien im Verzeichnis /etc/ufw/applications.d gespeichert. ufw app list liefert die Liste der so definierten Profile. Mit ufw allow/deny können Sie derartige Profile aktivieren (also die entsprechenden Ports in der Firewall freigeben) bzw. sperren.
Bitte beachten Sie, dass Applikationsprofile zwar standardmäßig installiert, aber nicht aktiviert werden! Die Profile sollen Ihnen lediglich eine Hilfestellung geben, wenn Sie eine Firewall einrichten möchten.
Weitere Informationen und Beispiele zu ufw erhalten Sie mit man ufw bzw. auf den folgenden Seiten:
http://wiki.ubuntuusers.de/ufw
https://help.ubuntu.com/14.04/serverguide/firewall.html
https://wiki.ubuntu.com/UncomplicatedFirewall
Zu ufw gibt es mit Gufw eine grafische Benutzeroberfläche, die bei aktuellen Ubuntu-Versionen als universe-Paket zur Verfügung steht, also ohne offiziellen Support. Leider ignoriert das Programm die Applikationsprofile.