Product SiteDocumentation Site

14.2. Firewall oder Paketfilter

Eine Firewall ist ein filternder Netzübergang und nur bei Paketen wirksam, die durch sie hindurchgehen müssen. Deshalb kann sie nur dann wirksam sein, wenn der Weg durch die Firewall für diese Pakete die einzige Route ist.
Da es keine Standardkonfiguration gibt (und das Motto „Prozess, nicht Produkt“ gilt), gibt es auch keine schlüsselfertige Lösung. Es gibt jedoch Hilfsprogramme, die die Konfigurierung der Netfilter-Firewall mit einer grafischen Darstellung der Filterregeln vereinfachen. fwbuilder ist zweifellos unter ihnen eines der besten.
Der Linux 2.6 Kernel schließt die Netfilter-Firewall ein. Diese kann aus dem Benutzer-Raum mit den Befehlen iptables und ip6tables gesteuert werden. Der Unterschied zwischen diesen beiden Befehlen besteht darin, dass ersterer auf das IPv4-Netzwerk einwirkt, letzterer auf IPv6. Da beide Netzwerkstapel wahrscheinlich noch viele Jahre in Gebrauch sein werden, müssen beide Hilfsprogramme parallel verwendet werden.

14.2.1. Verhalten von Netfilter

Netfilter verwendet vier verschiedene Tabellen, in denen Regeln gespeichert werden, die drei Arten von Vorgängen bei Paketen regeln:
  • filter betrifft Filterregeln (ein Paket annehmen, zurückweisen oder ignorieren);
  • nat betrifft die Übersetzung von Quell- oder Zieladressen und der Ports von Paketen; man beachte, dass es diese Tabelle nur für IPv4 gibt;
  • mangle betrifft sonstige Änderungen an den IP-Paketen (einschließlich des ToS — Type of Service — Feldes und seiner Optionen);
  • raw ermöglicht andere manuelle Veränderungen an Paketen, bevor sie das Verbindungsverfolgungssystem erreichen.
Jede Tabelle enthält Regellisten, die Ketten genannt werden. Die Firewall verwendet Standardketten, um Pakete in Abhängigkeit von vorher festgelegten Umständen zu bearbeiten. Der Administrator kann weitere Ketten erstellen, die aber nur benutzt werden, wenn von einer der Standardketten (entweder direkt oder indirekt) auf sie verwiesen wird.
Die Tabelle filter enthält drei Standardketten:
  • INPUT: betrifft Pakete, deren Ziel die Firewall selbst ist;
  • OUTPUT: betrifft Pakete, die von der Firewall ausgesandt werden;
  • FORWARD: betrifft Pakete, die die Firewall durchqueren (die weder ihre Quelle noch ihr Ziel ist).
Die Tabelle nat enthält ebenfalls drei Standardketten:
  • PREROUTING: um Pakete zu verändern, sobald sie eintreffen;
  • POSTROUTING: um Pakete zu verändern, wenn sie für die Versendung bereit sind;
  • OUTPUT: um von der Firewall selbst erzeugte Pakete zu verändern.
Wie Netfilter-Ketten aufgerufen werden
Abbildung 14.1. Wie Netfilter-Ketten aufgerufen werden

Jede Kette ist eine Liste von Regeln; jede Regel besteht aus einem Satz von Bedingungen und einer Aktion, die ausgeführt wird, wenn die Bedingungen erfüllt sind. Wenn ein Paket bearbeitet wird, fragt die Firewall die passende Kette Regel für Regel ab; wenn die Bedingungen einer Regel erfüllt sind, „springt“ (daher die Option -j für „jump“ in den Befehlen) sie zu der angegebenen Aktion, um die Bearbeitung dort fortzusetzen. Die gebräuchlichsten Verhaltensweisen sind standardisiert, und es gibt fest zugeordnete Aktionen für sie. Die Ausführung einer dieser Standardaktionen bricht die Bearbeitung der Kette ab, da das Schicksal des Pakets bereits besiegelt ist (abgesehen von einer weiter unten genannten Ausnahme):
  • ACCEPT: erlaube dem Paket, seinen Weg fortzusetzen;
  • REJECT: weise das Paket mit einem ICMP-Fehlerpaket zurück (die Option --reject-with Typ in Verbindung mit dem Befehl iptables ermöglicht es, den Fehlertyp auszuwählen);
  • DROP: lösche (ignoriere) das Paket;
  • LOG: protokolliere (mittels syslogd) eine Meldung mit einer Beschreibung des Pakets; man beachte, dass hierdurch die Verarbeitung nicht abgebrochen wird und die Ausführung der Kette mit der nächsten Regel weitergeht, weshalb das Protokollieren zurückgewiesener Pakete sowohl die LOG-Regel als auch die REJECT/DROP-Regel erfordert;
  • ULOG: protokolliere eine Meldung mittels ulogd, das für die Verarbeitung einer hohen Anzahl von Meldungen anpassungsfähiger und effizienter ist als syslogd; man beachte, dass dieser Vorgang, wie bei LOG, die weitere Verarbeitung an die nächste Regel in der aufrufenden Kette zurückgibt;
  • ketten_name: springe zu der angegebenen Kette und werte ihre Regeln aus;
  • RETURN: beende die Verarbeitung der aktuellen Kette und kehre zu der aufrufenden Kette zurück; falls die aktuelle Kette eine Standardkette ist, gibt es keine aufrufende Kette, und so wird stattdessen die voreingestellte Aktion (die durch die Option -P des Befehls iptables festgelegt wird) ausgeführt;
  • SNAT (nur in der Tabelle nat, daher nur in IPv4): wende Source NAT an (weitere Optionen beschreiben genau die anzuwendenden Änderungen);
  • DNAT (nur in der Tabelle nat, daher nur in IPv4): wende Destination NAT an (weitere Optionen beschreiben genau die anzuwendenden Änderungen);
  • MASQUERADE (nur in der Tabelle nat, daher nur in IPv4): wende masquerading an (ein Sonderfall von Source NAT);
  • REDIRECT (nur in der Tabelle nat, daher nur in IPv4): lenke das Paket an einen vorgegebenen Port der Firewall selbst um; dies kann dazu benutzt werden, einen transparenten Webproxy aufzusetzen, der auf der Clientseite ohne Konfiguration funktioniert, da der Client davon ausgeht, dass er direkt mit dem Empfänger verbunden ist, während der Nachrichtenaustausch in Wirklichkeit durch den Proxy läuft.
Andere Aktionen, insbesondere solche, die die mangle-Tabelle betreffen, liegen außerhalb des Rahmens dieses Textes. Die Handbuchseiten iptables(8) und ip6tables(8) enthalten umfangreiche Auflistungen.