Firewall-Filterregeln automatisch wiederherstellen

Aus LinuxUser 03/2016

Firewall-Filterregeln automatisch wiederherstellen

© Hannu Liivaar, Fotolia

Nachgeladen

Dem Linux-Paketfilter Iptables fehlt eine einfache Möglichkeit, die Filterregeln nach einem Systemneustart automatisch zu laden. Die lässt sich aber durchaus nachrüsten – sogar auf mehreren Wegen.

Jeder Admin muss sich damit auseinandersetzen, wie er sein Netz zuverlässig gegen unbefugten Zugriff absichert. Darüber hinaus gilt es, sicherzustellen, dass das zu betreuende (Teil-)Netzwerk seine Aufgabe erwartungsgemäß erfüllt und möglichst nicht als Ausgangspunkt für Aktivitäten mit einer Schadwirkung dient.

Auf Netzwerkebene stehen dem Admin dazu verschiedene Mittel und Wege zur Verfügung. Dazu zählen beispielsweise das Verwalten von Zugangsdaten zur Authentifizierung der Benutzer (etwa via PAM und LDAP), die geeignete Auswahl an eingerichteten Diensten sowie das Konfigurieren der Netzwerkgeräte.

Zum Abschotten einzelner Netzwerksegmente kommen häufig Router und Firewalls zum Einsatz. Die Firewall-Regeln verwaltet der Linux-Kernel im Arbeitsspeicher des Systems. Nachfolgend stellen wir Ihnen verschiedene Methoden vor, wie Sie Ihre Firewall-Einstellungen auf der Basis von Iptables permanent speichern und nicht jedes Mal wieder neu eintippen müssen.

Brandschutzmauer

Firewall bedeutet im Deutschen Brandschutzmauer. Aus Netzwerksicht ist deren primäres Ziel die Auswahl und Beschränkung der Netzwerkpakete, die über eine beobachtete Schnittstelle von einem Netzwerksegment in ein weiteres gelangen. In der Praxis kommt eine Firewall sowohl als Software direkt auf dem zu schützenden System zum Einsatz, als auch in Form einer separaten Hardware-Appliance, die häufig auch noch weitere Dienste unter einem Dach vereint.

Kurz gesagt handelt es sich bei einer Firewall um einen Paketfilter. Ein Filtern erfolgt beispielsweise anhand der IP-Adresse, des Verbindungszustands, der MAC-Adresse oder der Nutzlast eines Pakets. Die ersten beiden Fälle deckt Iptables aus dem Netfilter-Projekt [1] ab, den dritten übernimmt Ebtables [2]. In Zukunft vereint Nftables die Einzelprojekte Iptables, Ip6tables, Ebtables und Arptables unter einem Dach.

Für Fall vier, das Auswerten und Begrenzen des Nutzertraffics, zeichnet sich eine sogenannte Application Level Firewall zuständig, wie beispielsweise der Proxy Squid [3]. Dieser Beitrag beschränkt sich jedoch ausschließlich auf Iptables.

Funktionsweise

Iptables arbeitet mit Ketten (Chains), Regeln (Filtern) und Aktionen (Targets). Anhand dieser Kriterien nimmt die Software die Pakete an (ACCEPT), verwirft sie (DROP beziehungsweise REJECT) oder leitet sie weiter und schreibt sie um (MASQUERADE).

Listing 1 zeigt eine typische Aufrufreihenfolge, die im Beispiel lediglich Verbindungen über Port 22 mit einer Quell-IP-Adresse zwischen 192.168.45.0 und 192.168.45.255 passieren lässt. Der Eintrag in Zeile 1 des Listings löscht zunächst alle bestehenden Regeln, die Kommandos in den Zeilen 2 bis 4 legen das Standardverhalten fest.

Zeile 5 fügt eine Filterregel zur Kette der empfangenen Pakete hinzu. Diese schränkt die akzeptierten Pakete (-j ACCEPT) auf TCP-Pakete (-p tcp) zum Ziel-Port 22 (--dport 22) aus dem Subnetz 192.168.45.x (-s 192.168.45.0/24) ein. Zeile 6 erlaubt auch die entsprechenden Antwortpakete (-j ACCEPT) – hier abgehend von Port 22 (--sport 22) in das Zielnetz 192.168.45.x (-d 192.168.45.0/24) ausschließlich nur für bereits bestehende Verbindungen (--state ESTABLISHED).

Listing 1

# iptables -F
# iptables -P INPUT  DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARD DROP
# iptables -A INPUT -p tcp --dport 22 -s 192.168.45.0/24 -j ACCEPT
# iptables -A OUTPUT --sport 22 -d 192.168.45.0/24 --state ESTABLISHED -j ACCEPT

Grundlagen [4] und eine detaillierte Beschreibung zu Iptables [5] finden Sie bei Interesse in zwei älteren LU-Beiträgen (auch auf Heft-DVD). Um die beschriebenen Kommandos auch auf das inzwischen verfügbare IPv6 anzuwenden, verwenden Sie statt Iptables das neue Ip6tables, das mit der gleichen Syntax arbeitet.

Gültigkeit

Wie erwähnt gelten die Iptables-Regeln nur solange das System läuft. Die Software legt die Regeln nicht persistent ab, sondern hält sie lediglich im Hauptspeicher vor. Schalten Sie den Rechner ab oder rebooten ihn, gehen die aktuellen Firewall-Einstellungen verloren. Um sie nicht jedes Mal neu eingeben zu müssen, gilt es, sie dauerhaft abzulegen und automatisch beim Rechnerstart zu aktivieren.

Die nachfolgend vorgestellten Varianten basieren auf eigenen Erfahrungen und dem Firewall-Eintrag aus dem Debian-Wiki [6]. Dabei sollen nach Möglichkeit nur vorhandene Bordmittel zum Einsatz kommen. Die Varianten zeigen zudem eine Auswahl von Lösungen – entscheiden Sie selbst, welche davon für Ihre Zwecke am besten passt.

Zu Fuß

Bei der manuellen Variante benutzen Sie die Kommandos beziehungsweise Werkzeuge aus dem Iptables-Paket. Mithilfe von iptables-save lesen Sie die aktuellen Firewall-Regeln aus. Da das Programm diese auf die Standardausgabe ausgibt, leiten Sie die Ausgabe mit dem Umleitungsoperator in eine Datei um (Listing 2). Diese Datei bekommt ein spezifisches, kompaktes Format.

Listing 2

# iptables-save > /etc/regeln
# cat /etc/regeln
# Generated by iptables-save v1.4.21 on Tue Dec 8 23:03:26 2015
*filter
:INPUT DROP [3:604]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -s 192.168.45.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
-A OUTPUT -d 192.168.45.0/24 -p tcp -m tcp --sport 22 -j ACCEPT
COMMIT
# Completed on Tue Dec 8 23:03:26 2015
[...]
# iptables-restore < /etc/regeln

Diese Regeln lesen Sie zu einem späteren Zeitpunkt mit dem Kommando iptables-restore wieder ein und stellen sie damit wieder her (Listing 2, letzte Zeile). Dieser Weg ist einfach, übersichtlich, aber noch nicht automatisiert. Das gelingt Ihnen mit den folgenden Varianten.

Automatisiert

Die Runlevel enthalten Shell-Skripte, die jeweils beim Wechsel in den jeweiligen Runlevel ausgeführt werden. Um die vorher gespeicherten Firewall-Regeln einzulesen, legen Sie ein passendes Shell-Skript an. Darin verwenden Sie entweder den beschriebenen Aufruf von Iptables-restore oder legen für jede einzelne Regel einen separaten Iptables-Aufruf in der gewünschten Reihenfolge an.

Wesentlich individueller gestaltet sich nachfolgend vorgestellte Variante. Hier erweitern Sie die Einträge zu den Netzwerkschnittstellen in der Datei /etc/network/interfaces. Die Einträge erlauben Ihnen die Angabe eines Skripts beziehungsweise Kommandos, das startet, sobald das System ein Netzwerk-Interface aktiviert beziehungsweise deaktiviert (Listing 3).

Das erste Kommando in Zeile 3 erfolgt als Angabe hinter dem Schlüsselwort pre-up und bewirkt das Ausführen des Kommandos vor dem Aktivieren der Schnittstelle. Die Anweisung post-down in Zeile 4 bezieht sich auf den Zeitpunkt nach dem Deaktivieren des Interfaces. Damit erreichen Sie, dass die Firewall bestimmte Regeln nur dann abarbeitet, wenn ein bestimmtes Interface eingeschaltet ist.

Listing 3

allow-hotplug eth0
iface eth0 inet dhcp
  pre-up /usr/local/sbin/firewall-einschalten.sh
  post-down /usr/local/sbin/firewall-ausschalten.sh

Auch findige Debian-Entwickler erkannten das Problem und ersannen eine Lösung, die sie Iptables-persistent [7] tauften. Sie zählt bereits seit Debian 5 alias “Squeeze” zum Lieferumfang und kombiniert die bereits oben vorgestellten Varianten miteinander.

Dazu legt Iptables-persistent die beiden Dateien /etc/iptables/rules.v4 für IPv4 und /etc/iptables/rules.v6 für IPv6 an. Darin speichert es bereits bei der Paketkonfiguration die aktuellen Firewall-Regeln. Zusätzlich erstellt es ein passendes Init-Skript namens /etc/init.d/netfilter-persistent, das Sie via service netfilter und den üblichen Schaltern start, stop, reload und restart aufrufen.

Ausblick: Hilfreiches

Im Kontext von Iptables existieren etliche kleine Programme, die den Alltag etwas erleichtern. Dazu zählen etwa Iptables-apply und Iptables-xml, beide Bestandteil des Pakets iptables, sowie der Iptables-converter aus dem gleichnamigen Paket.

Das Shell-Skript Iptables-apply hilft Ihnen beim Testen von Firewall-Regeln aus der Ferne. Es erlaubt ein Zurückrollen der Regeländerungen, sofern diese dazu führen würden, die aktuelle Verbindung zu unterbrechen. Dazu fragt es ab, ob die Änderungen in Ordnung sind. Antworten Sie nicht innerhalb einer bestimmten Zeitspanne, rollt es die Änderungen zurück. Das verringert das Risiko, dass Sie sich bei Änderungen der Firewall-Regeln aussperren. Sofern der entfernte Rechner entsprechend ausgestattet ist, bleibt als weitere Sicherheitsleine noch die Kommunikation über die serielle Schnittstelle, da die Firewall-Regeln diese im Normalfall nicht mit berücksichtigen. Denkbar wäre auch ein Zugang via KVM-Switch.

Das Skript Iptables-xml gibt Firewall-Regeln im XML-Format aus. Etliche grafische Werkzeuge für Firewalls verstehen dieses Format und verarbeiten es. Abbildung 1 zeigt beispielhaft eine mit diesem Tool generierte XML-Datei.

Abbildung 1: Das Tool Iptables-xml wandelt Iptables-Regeln in eine XML-Struktur um, die sich in anderen Applikationen weiterverwenden lässt.

Abbildung 1: Das Tool Iptables-xml wandelt Iptables-Regeln in eine XML-Struktur um, die sich in anderen Applikationen weiterverwenden lässt.

Hilfreich ist auch das Programm Iptables-converter. Es wandelt Iptables-Anweisungen in das Format um, das Iptables-save und Iptables-restore verwenden. Damit überführen Sie etwa bestehende Shell-Skripte mit Abfolgen von Iptables-Anweisungen direkt in dieses Format. Auch das grafische Werkzeug Fwbuilder [8] liest entsprechende Dateien ein und generiert daraus wiederum maßgeschneiderte Paketüberprüfungen (Abbildung 2). 

Abbildung 2: Das grafische Bearbeiten der Regeln in Fwbuilder zeigt die eingelesenen Regeln, die der Iptables-converter erzeugt hat.

Abbildung 2: Das grafische Bearbeiten der Regeln in Fwbuilder zeigt die eingelesenen Regeln, die der Iptables-converter erzeugt hat.

Danksagung

Der Autor bedankt sich bei Werner Heuser und Axel Beckert für deren Kritik und Anregungen im Vorfeld dieses Artikels.

Der Autor

Frank Hofmann (http://www.efho.de) arbeitet in Berlin im Büro 2.0, einem Open-Source-Expertennetzwerk, als Dienstleister mit Spezialisierung auf Druck und Satz. Seit 2008 koordiniert er das Regionaltreffen der LUGs aus der Region Berlin-Brandenburg. Er ist Co-Autor des Debian-Paketmanagement-Buchs (http://www.dpmb.org).

Glossar

KVM-Switch

Ein KVM-Switch fungiert als Umschalter, der einen Satz von Endgeräten (Keyboard, Video, Maus) mit mehreren Computern verbindet. Auf diese Weise lassen sich mehrere Rechner mit nur einer Tastatur, einer Maus und einem Bildschirm steuern.

Infos

[1] Netfilter: http://www.netfilter.org

[2] Ebtables: http://ebtables.netfilter.org

[3] Squid: http://www.squid-cache.org

[4] Iptables-Basics: Marcus Nasarek, “Feuerfest”, LU 01/2007, S. 28, https://www.linux-community.de/11961

[5] Iptables im Detail: Marc André Selig, “Private Feuerwände”, LU 05/2002, S. 30, https://www.linux-community.de/2107

[6] Debian-Wiki: Firewall: https://wiki.debian.org/DebianFirewall

[7] Iptables-Firewall-Regeln dauerhaft speichern: https://www.thomas-krenn.com/de/wiki/Iptables_Firewall_Regeln_dauerhaft_speichern

[8] Fwbuilder: Florian Effenberger, “Aufbauhilfe”, LU 05/2011, S. 70, https://www.linux-community.de/22939

LinuxUser 03/2016 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben