Netfilter/iptables

Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 17. August 2005 um 06:09 Uhr durch 153.96.188.183 (Diskussion) (Geschichte). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Iptables ist ein Userspace-Programm zum Einstellen des Paketfilters im Linux-Kernel. Zusammen mit dem Filter-Code im Kernel, netfilter, bildet dieses Duo die Grundlage für die Implementierung eines Firewall-Systems ab Kernel 2.4. Iptables fügt diverse Filter in den Kernel ein, löscht andere und verwaltet bestehende Filterregeln. Zusatzfunktionen können per Kernel-Modul ein/ausgeschaltet werden.

Durch den modularen Aufbau lassen sich mit iptables sehr komplexe und umfangreiche Regelwerke erstellen welche auch höchsten Anforderungen genügen. Aus diesem Grund ist iptables in vielen Netzwerken, sowohl Privat als auch Firma, im Einsatz. Ein weiterer Grund ist jedoch auch, dass es sich bei iptables um freie Software handelt.


Geschichte

Linux besitzt seit der Version 1.0 einen Paketfilter. Dieser stammte zunächst von BSD ab und wurde in der Linuxversion 2.0 unter dem Namen ipfwadm erweitert. Rusty Russell überarbeite den Paketfilter nochmals und stellte diesen als ipchains zur Verfügung, welcher in der Linuxversion 2.2 integriert wurde. Gegen 1999 wurde der Kernel und damit auch ipchains komplett überarbeitet. Aus ipchains ging dann iptables hervor, welches seit Kernel 2.4 zum "Lieferumfang" gehört. Iptables wird vom Netfilter-Projekt-Team gepflegt und weiter entwickelt, welches durch eine kleine Gruppe von Entwicklern die sich selbst das Coreteam nennen, 1999 ins Leben gerufen wurde. Iptables ist seit 2000 unter der GNU General Public License (GPL) verfügbar.

Im Gegensatz zu seinen Vorgängern ist iptables fähig, auch Verbindungsorientierte Protokolle wie FTP zu "handle'n". Eine Unterstützung für Network Address Translation (NAT) ist ebenfalls vorhanden.

Aufbau/Funktion

Chains

 
Diagramm zur Reihenfolge der Behandlung von IP-Paketen

Iptables hat per Standard fünf feste, sogenannte Ketten (chains), im Kernel eingebaut:

  • PREROUTING
  • INPUT
  • OUTPUT
  • FORWARD
  • POSTROUTING

Diese Ketten enthalten vom Benutzer definierte Regeln (rules). Jedes IP-Paket welches auf einer Kette eintrifft muss nun selbe durchlaufen. Dabei wird bei jeder Regel überprüft, ob das Paket den in der Regel angegebenen Werten und Argumenten entspricht. Trifft die Regel nicht zu, wird solange zur nächsten Regel gesprungen bis eine zutrifft. Ist das nicht der Fall, kommt die default policy der Kette zum Zug. Das heist, Pakete welche die Kette ohne einen Treffer durchlaufen, werden entweder akzeptiert oder fallengelassen.

Wenn nun ein solches IP-Paket auf einer Netzwerkkarte ankommt, wird es zuerst durch die PREROUTING-Kette geschickt, anschließend wird anhand der Ziel-Adresse entschieden, ob das Paket für einen lokalen Prozess des Rechners selbst oder im Falle eines Routers oder Gateways für einen Rechner aus dem Netz hinter dem Router bestimmt ist. Dieser Vorgang wird Routing-Entscheidung genannt.

Falls das IP-Paket für einen lokalen Prozess bestimmt ist, wird es anschließend durch die INPUT-Kette geleitet. Hier wird anhand von Regeln entschieden, was mit diesem Paket geschieht. Gibt der lokale Prozess eine Antwort, wird das von ihm gesendete Paket durch die OUTPUT-Kette geleitet.

Sollte ein IP-Paket nicht für einen lokalen Prozess, sondern für einen Rechner aus dem Netz dahinter bestimmt sein, wird es an die FORWARD-Kette übergeben. Anschließend werden alle Pakete an die POSTROUTING-Kette übergeben.

Zusätzlich zu diesen Standard Ketten können noch benutzerdefinierte Ketten erstellt werden. Das bedeutet, man erstellt z.B. in der INPUT-Kette eine Regel, welche alle Pakete die auf der Schnittstelle eth0 eintreffen und vom Netzwerk 192.168.0.0 stammen, auf die benutzerdefinierte lan-input-Kette weiterleitet. In dieser vom Benutzer definierten Kette treffen nun alle Pakete ein, die der oben beschrieben Regel entsprechen. In ihr können nun weitere Regeln erstellt werden, welche z.B. noch nach Ports unterscheiden.

Die Funktion einer benutzerdefinerten Kette ist mit der eines Unterprogramms vergleichbar. Wird ein Paket dorthin geschickt, werden dessen Regeln angewendet. Nach Abarbeiten dieser Kette landet das Paket, sofern es nicht fallengelassen wurde, wieder hinter der Regel, die es zur benutzerdefinierten Kette gesendet hat.

Targets

Jede Kette kann Regeln enthalten. Jede Regel besteht dabei aus einer Filterspezifikation und am Ende dieser aus einem Ziel (target). Das Ziel gibt letztendlich an, was mit einem Paket passiert. Ein Ziel kann eine benutzerdefinierte Kette, ein Standard Ziel oder ein erweitertes Ziel sein.

Folgende Standard Ziele existieren:

  • ACCEPT: Das Paket wird von der Chain akzeptiert und von der nächsten Chain bearbeitet.
  • DROP: Das Paket wird ohne Rückmeldung an den Sender verworfen.
  • QUEUE: Das Paket wird in eine Queue im Userspace geschickt, so dass es von einem Benutzerprogramm bearbeitet werden kann. Wird die Queue von keinem Programm gelesen, hat dies denselben Effekt wie DROP.
  • RETURN: Das Paket gelangt ans Ende der Chain. Vergleichbar mit Rücksprung aus Unterprogramm.

Folgende erweiterte Ziele existieren:

  • DNAT: (nur in der nat-Tabelle der PREROUTING- und OUTPUT-Kette) Die Ziel-Adresse des Paketes wird durch eine angegebene ersetzt.
  • LOG: Das Paket wird mit sämtlichen Informationen im Syslog aufgezeichnet. LOG ist neben ULOG das einzige Target, das ein Paket anschließend weiter durch die Chain leitet.
  • MASQUERADE: (nur in der nat-Tabelle der POSTROUTING-Kette) Die Quell-Adresse des Paketes wird durch die IP-Adresse der Schnittstelle ersetzt, auf dem es den Rechner verlassen wird.
  • MIRROR: (experimentell; nur in INPUT-, FORWARD- und PREROUTING-Kette) Vertauscht Quell- und Ziel-Adresse eines Paketes.
  • REDIRECT: (nur in der nat-Tabelle der POSTROUTING- und OUTPUT-Kette) Die Ziel-Adresse des Paketes wird verändert, so dass es direkt an die Firewall gesendet wird.
  • REJECT: Das Paket wird verworfen und der Sender darüber informiert.
  • SNAT: (nur in der nat-Tabelle der POSTROUTING-Kette) Die Quell-Adresse des Paketes wird durch eine angegebene Adresse ersetzt.
  • TTL: Die Anzahl der sogenannten hops (Router in einer Verbindungsstrecke) kann verändert werden. Ist sie erreicht, wird das Paket am letzten Router verworfen.
  • ULOG: Das Paket wird mit einem Logging Level an den Logdaemon ulogd (userspace logging daemon) weiter geleitet. So ist es möglich die Ausgaben in eine Datenbank z.B MySQL oder in ein seperates Logfile umzuleiten.

Siehe auch