Folgende Erklärungen beziehen sich auf 2.4er/2.6er Kernel,
bei früheren Versionen gab es andere Konzepte
(ipchains, ipfw).
Zuerst benötigt man einen Kernel mit der Netfilter-Infrastruktur,
das bedeutet, man braucht das iptables Kernelmodul und
ein CONFIG_NETFILTER=Y in der Kernelkonfiguration.
Das Programm iptables kommuniziert mit dem
Linux-Kernel
und weist diesen an, Pakete nach bestimmten Regeln zu
filtern. iptables übernimmt also unter anderem das
Einfügen, Löschen und Manipulieren von Regeln in die
Filtertabellen des Kernels sowie das Setzen der
Filterpolitik. Bei einem Neustart des Computers gehen
alle angelegten Regeln verloren, deshalb ist ein
automatisches Setzen von Regeln sinnvoll. Mit den Tools
iptables-save und iptables-restore können die Regeln
gesichert und wiederhergestellt werden. Beim Bootvorgang
übernimmt dies ein Init-Script.
Im 2.4er/2.6er Linuxkernel werden Listen von Regeln
(Firewall-Ketten) in einer Filtertabelle verwaltet.
Standardmäßig sind INPUT, OUTPUT und FORWARD-Ketten vorhanden.
Der genaue Weg der Pakete wird später beschrieben,
das folgende Diagramm gibt schon mal einen ersten Überblick:
Jede Kette (INPUT, OUTPUT, FORWARD) entscheidet anhand von
Regeln, ob ein Paket gelöscht oder akzeptiert wird. Wird es
akzeptiert, dann reist es weiter durch das Diagramm bis es
letztendlich den Rechner über den Ausgang verlassen kann.
Jede Kette beinhaltet eine Checkliste von Regeln, die ungefähr
so aussehen:
WENN (Filteroption)
DANN Aktion (Löschen, Akzeptieren, ... des Paketes)
Die Regeln werden nacheinander solange durchlaufen, bis
eine Regel auf das eingegangene Paket zutrifft.
Ist das Ende der Regelkette erreicht (keine Regel traf zu)
entscheidet die *Policy* der Kette (zu deutsch:
Politik, Taktik, Vorgehensweise) darüber, was mit dem Paket
zu tun ist. In einem sicherheitsbewussten System werden
alle Pakete verworfen, für die keine Regel zutrifft.
(prohibitive Sicherheitspolitik)
Nun soll noch einmal der Weg der Pakete
durch den Paketfilter ganz genau betrachtet werden:
Nach Eingang eines Paketes an einer Netzwerkschnittstelle (a)
wird dessen Zieladresse ausgewertet (Routing). Ein Paket mit
Zieladresse dieses Rechners (b) wird anschließend durch die
INPUT-Kette geprüft. Diese kann das Paket entweder verwerfen
oder für die weitere Verarbeitung durchlassen. Letztendlich
kann eine Anwendung die empfangenen Daten dem Nutzer zur
Verfügung stellen (anzeigen, abspeichern, ...).
Ein lokaler Prozess (z.B. Mozilla) könnte ein neues Paket
(Anforderung einer Webseite) erzeugen und dieses ins
Netzwerk versenden (d). Die OUTPUT-Kette leitet nach einer
erfolgreichen Prüfung das Paket weiter zur gewünschten
Netzwerkschnittstelle (z.B. eth0 / ippp0).
Kommunikationsserver oder Router verbinden meist ein inneres
(privates) Netzwerk mit einem äußeren (öffentlichen) Netz,
zum Beispiel dem Internet. Dafür wird die Paketweiterleitung
von einer Netzwerkschnittstelle (Eingang) zu einer anderen
(Ausgang) benötigt. Die FORWARD-Kette prüft in diesem
Fall nun die Pakete, die vom inneren ins äußere Netz oder
umgekehrt (f), (g) übertragen werden sollen.
Es sei an dieser Stelle darauf hingewiesen, dass es neben der
Filtertabelle (INPUT-, OUTPUT-, FORWARD-Kette) auch noch eine
NAT-Tabelle (PREROUTING-, POSTROUTING-, OUTPUT-Kette) für die
sogenannte Network Address Translation existiert, welches
später
beschrieben ist. Ebenso gibt es auch noch eine MANGLE Tabelle
mit PREROUTING- und OUTPUT-Kette zur
Paketmanipulation
|