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:

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.

# Datei /etc/sysconfig/network-scripts/ifcfg-xxx ... ZONE=trusted

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.

Die grafische Benutzeroberfläche zur FirewallD-Konfiguration

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:

root# firewall-cmd --state running root# firewall-cmd --get-active-zones internal interfaces: enp0s8 external interfaces: enp0s3

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:

root# firewall-cmd --get-zones (alle Zonen auflisten) FedoraServer FedoraWorkstation block dmz drop external home internal public trusted work root# firewall-cmd --get-default-zone (Default-Zone feststellen) FedoraWorkstation root# firewall-cmd --get-zone-of-interface=enp4s0 (Zone für eine Schnittstelle) FedoraServer

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:

root# firewall-cmd --permanent --zone=FedoraServer --remove-interface=enp4s0 root# firewall-cmd --permanent --zone=FedoraWorkstation --add-interface=enp4s0

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.

user$ ls /usr/lib/firewalld/services/*.xml /etc/firewalld/services/*.xml

Um für eine Zone einen Dienst oder einen IP-Port freizuschalten, führen Sie die folgenden Kommandos aus:

root# firewall-cmd --permanent --zone=FedoraWorkstation --add-service=name root# firewall-cmd --permanent --zone=public --add-port=nnn/tcp root# firewall-cmd --permanent --zone=public --add-port=nnn/udp root# firewall-cmd --reload (Änderungen aktivieren)

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.

Firewall-Konfiguration in SUSE-Distributionen

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.

user$ sudo -s root# ufw enable root# ufw allow ssh root# ufw status Status: Aktiv Zu Aktion Von -- ------ ---- 22 ALLOW Anywhere 22 ALLOW Anywhere (v6)

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.

root# ufw app list Verfügbare Anwendungen: Apache Apache Full Apache Secure CUPS Dovecot IMAP Dovecot POP3 Dovecot Secure IMAP Dovecot Secure POP3 OpenSSH Postfix ... root# ufw app info "Apache Full" Profil: Apache Full Titel: Web Server (HTTP,HTTPS) Beschreibung: Apache v2 is the next generation of the omnipresent Apache web server. Ports: 80,443/tcp root# ufw allow "Apache Full"

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.