Linux-Firewalls mit FWconf

This page is also available in English.

Übersicht

FWconf ist ein textbasiertes Konfigurationsprogramm für die Erstellung von Firewall-Regeln mit Netfilter/IPtables unter Linux. Es bietet eine einfach verständliche und intuitive Syntax für die Definition von Paketfilter-Regeln.

Auf dieser Seite befindet sich eine deutsche Zusammenfassung der englischsprachigen Dokumentation sowie ein kommentiertes Beispiel für ein mittelgroßes Heimnetzwerk.

Zu den wesentlichen Eigenschaften von FWconf gehören:

FWconf wurde in Perl geschrieben. Es arbeitet als Filter, der die Konfiguration in der FWconf Syntax aus Dateien liest und daraus ein Shellskript mit “iptables” Kommandos erzeugt. Die Ausgabe kann bedenkenlos nach /bin/sh gepiped werden; wenn in der Eingabe ein Syntaxfehler entdeckt wird, gibt es eine Fehlermeldung auf dem Standard-Fehlerkanal, und es wird keine Ausgabe erzeugt.

Aufruf:

./fwconf.pl Config_File [ Config_File ... ]

Beispiel:

./fwconf.pl myfirewall.defs myfirewall.conf  | /bin/bash

Die Konfiguration kann auf verschiedene Dateien aufgeteilt werden. Das ist gleichbedeutend mit einer Aneinanderreihung der Dateien, bevor sie an FWconf übergeben werden. Auf diese Weise können z.B. Gruppen- und Dienst-Definitionen von den eigentlichen Regeln getrennt werden.

Konfigurationssyntax

Es gibt fünf Arten von Kommandos: Gruppen-Definitionen, Dienst-Definitionen, Filterregeln, NAT Regeln und direkte iptables Kommandos.

Die Konfigurationsdatei kann auch Leerzeilen oder Kommentare enthalten; letztere werden mit dem Zeichen ‘#’ eingeleitet.

Gruppen-Definitionen

Gruppendefinitionen haben die Form

group  Group_Name Interface|Address [ Interface|Address ... ]

Beispiele:

group  INT       eth1 192.168.2.0/24                       #  Internal network
group  EXT       ppp+                                      #  Internet connection
group  RFC1918   10.0.0.0/8 172.16.0.0/12 192.168.0.0/16   #  All RFC 1918 private address ranges

Der Group_Name darf Buchstaben, Ziffern und den Underscore ‘_’ enthalten. Er muss mit einem Buchstaben beginnen. Groß- und Kleinschreibung wird unterschieden.

Interface und Address sind die Interface-Angaben und Adressbereiche, die von iptables hinter den Optionen -i, -o, -s und -d verwendet werden können. Das ‘+’-Zeichen kann an einen Interfacenamen angehängt werden, um alle Interfaces des selben Typs zu bezeichnen (z.B. matcht ppp+ auf ppp0, ppp1 usw.), oder um Aliasnamen eines Interfaces zu umfassen (z.B. eth0+ für eth0, eth0:0, eth0:1 usw.).

Dienst-Definitionen

Dienstdefinitionen haben die Form:

service  Service_Name  Port/tcp | Port/udp | Code/icmp | Protocol/prot [...]

Beispiele:

service  Ping         echo-request/icmp
service  Traceroute   33435:33524/udp
service  IPSEC        500/udp 50/prot 51/prot
service  TCPALL       1:65535/tcp
service  DNS          53/udp 53/tcp

Eine Dienstdefinition beinhaltet einen oder mehrere Ports (Services) oder Protokolle.

Als Portbezeichnung können entweder Portnummern oder die Dienstnamen, wie unter Unix in der Datei /etc/services spezifiziert, verwendet werden. Analog dazu können Protokollnummern oder die entsprechenden Namen aus der /etc/protocols genutzt werden. Die gültigen ICMP Dienstnamen können mit dem Kommand iptables -p icmp -h angezeigt werden.

Filterregeln

Eine Filterregel ist eine Anweisung in der Form:

accept|drop|reject[+log|+nolog]  Source_group|ALL|Local->Dest_group|ALL|Local
          Service | Port/tcp | Port/udp | Code/icmp | Protocol/prot [...]

Beispiele:

accept         Intern->Extern    80/tcp 443/tcp
drop+nolog     ALL->Local        ALL
reject         World->Local      auth/tcp
accept         Local->Web        Ping Traceroute TCPALL DNS

Jede Regel beginnt mit einem Target, wie es bei IPtables mit der Option -j spezifiziert wird, in Kleinbuchstaben. accept bedeutet, dass die Verbindung zugelassen wird. drop bedeutet, dass das Paket kommentarlos verworfen wird. Bei reject wird das Paket blockiert und ein Fehler generiert (RST bei TCP, ICMP destination unreachable bei allen anderen Protokollen).

Hinter dem Target kann die Angabe +log oder +nolog stehen. log bedeutet, dass eine Meldung pro akzeptierter Verbindung über den Syslog-Dienst protokolliert wird; nolog erzeugt keine solche Meldung. Standardmäßig ist log aktiv.

Als nächstes folgt eine Angabe der Quelle und des Ziels, für das die Regel gilt. Beides sind entweder Gruppen, wie sie in den Gruppen-Definitionen festgelegt wurden, oder eines der Spezialwörter ALL oder Local. ALL bedeutet, dass die Regel für eine beliebige Quelle und/oder ein beliebiges Ziel gilt. Local bedeutet, dass die Regel für die lokale Maschine (unter eine beliebigen lokalen IP-Adresse) gilt.

Den letzten Teil der Regel bildet eine Liste der Dienste, für den diese Regel gilt. Als Dienst können entweder die unter Dienst-Definitionen festgelegten Bezeichner verwendet oder direkt Ports/Protokolle angegeben werden; im letzten Fall gefolgt von /tcp, /udp, /prot oder /icmp, wie oben beschrieben. Die Angabe ALL bedeutet, dass die Regel für alle Dienste/Protokolle gilt.

Wenn die Firewallregeln aktiv sind, wird für jedes einkommende Paket der Regelsatz von oben nach unten abgearbeitet. Bei jeder Regel wird geprüft, ob die Quelle, das Ziel und Dienst-Angaben der Regel zum Paket passen. Bei der ersten zutreffenden Regel wird das Target ausgeführt und die Regelbearbeitung beendet. Daher sollten spezifische Regeln nach oben, allgemeine Regeln nach unten gestellt werden.

Die von FWconf erstellte Firewall ist zustandsorientiert. Nur Pakete, die zu einer noch nicht geöffneten Verbindung gehören, durchlaufen die Filterregeln. Pakete, die zu bereits bestehenden Verbindungen gehören, werden ohne weitere Prüfung akzeptiert. Im Syslog wird pro zugelassener/abgelehnter Verbindung nur eine (initiale) Meldung geschrieben.

NAT Regeln

Neben Filterregeln erlaubt FWconf auch die Verwendung von IP-Adressumschreibung (Network Address Translation, NAT). Die Syntax einer NAT Regel lautet:

snat|dnat|redirect[+log|+nolog]  Source_group|ALL|Local->Dest_group|ALL|Local=>Target_spec
                                 Service | Port/tcp | Port/udp | Code/icmp | Protocol/prot [...]
masq[+log|+nolog]  Source_group|ALL|Local->Dest_group|ALL|Local
                   Service | Port/tcp | Port/udp | Code/icmp | Protocol/prot [...]

Beispiele:

dnat      Extern->MyIP=>192.168.0.2    80/tcp 443/tcp
snat      Intern->Extern=>1.2.3.4      ALL
masq      LAN->DSL                     ALL
redirect  Workstations->ALL=>3128      Web

Mögliche NAT Regeln sind Source NAT (Umschreiben der Quelladresse), Destination NAT (Umschreien der Zieladresse) und Redirect (Weiterleitung auf einen anderen Port der lokalen Maschine). IP Maquerading ist ein Spezialfall von Source NAT, bei dem keine Adresse explizit angegeben werden muss.

Die Angabe von Quell- und Zielspezifikation erfogt analog zu den Filterregeln. Hinter dem => steht das Ziel der Umschreibung (je nach Regeltyp eine IP-Adresse oder eine Portnummer). Auch die Dienstspezifikation erfolgt analog zu den Filterregeln.

Eine NAT-Regel filtert keine Pakete! Sie gibt lediglich an, wie ein Paket bzw. eine Verbindung NAT-technisch zu behandeln ist, wenn sie denn über eine Filterregel erlaubt wurde. Passend zur NAT-Regel muss es daher immer eine Filterregel geben, die die entsprechende Verbindung erlaubt.

Zu beachten ist außerdem, dass Netfilter nur die NAT Tabellen PREROUTING, POSTROUTING und OUTPUT kennt. Eine Tabelle INPUT existiert nicht; eine Regel mit der Zielspezifikation Local ist daher faktisch wirkungslos (d.h. bewirkt nichts anderes als mit dem Ziel ALL)!

IPtables Regeln

FWconf ist eine leistungsfähige Firewall Konfiguraitonssprache. Dennoch gibt es Regeln, die sich nicht mit den Mitteln von FWconf formulieren lassen. Wird eine solche Regel benötigt, dann kann sie direkt als iptables Regel in die Konfigurationsdatei geschrieben werden.

Zu beachten ist, dass bei der iptables Regel keinerlei syntaktische Überprüfung seitens FWconf stattfindet. Die Regel wird 1:1 in das generierte Shellskript übernommen. Es gibt keine Garantie dafür, dass das resultierende Shellskript nur syntaktisch korrekte iptables Regeln enthält.

Beispiel

Ein kommentiertes Beispiel gibt es auf einer eigenen Seite.

TODOs

FWconf ist weit davon entfernt, perfekt zu sein. Bereiche, in denen FWconf verbessert werden kann, beinhalten:

Auch diese Dokumentation könnte noch verbessert werden.

Download

fwconf.pl (Version 1.02)