- Iptables
-
iptables Entwickler: Netfilter-Projekt-Team Aktuelle Version: 1.4.3.2
(6. April 2009)Betriebssystem: Linux Kategorie: Firewall Lizenz: GPL (Freie Software) Deutschsprachig: nein iptables.org Netfilter ist eine Freie Software innerhalb des Linux-Kernels, die es erlaubt, Netzwerkpakete abzufangen und zu manipulieren. Es bildet damit das Herzstück einer Firewall auf Basis von Linux. Xtables stellt die Tabellenstruktur zur Regelmanipulation bereit; mithilfe von weiteren Modulen sind verschiedene Tests und Manipulationen möglich. Weitere Komponenten im Rahmen von Netfilter sind Connection Tracking und Network Address Translation.
iptables ist das dazugehörige Programm zur Konfiguration von Xtables, während für Connection Tracking und NAT conntrack zum Einsatz kommt.
Die beiden Begriffe Netfilter und iptables werden oft austauschbar für die Summe aus den Kernel- und den Userspace-Bestandteilen verwendet.
Das Netfilter/Iptables-Gespann kann die wesentlichen Protokolle des Internets aus der Vermittlungsschicht, der Transportschicht und teilweise auch aus der Anwendungsschicht verarbeiten (siehe Internet-Protokoll-Familie). Für die darunterliegende Netzzugangsschicht gibt es dagegen Programme wie ebtables (Ethernet-Bridge Tables).
Zu den Funktionen gehören:
- Paketfilterung einschließlich Stateful Inspection bzw. connection tracking. Netfilter kann auch mit FTP und anderen Protokollen umgehen.
- Network Address Translation (NAT) einschließlich Masquerading und Portweiterleitung
Der Kernel-Anteil, also Netfilter im engeren Sinne, ist in eine Vielzahl von Kernel-Modulen aufgeteilt, so dass sich einzelne Bausteine und Netfilter insgesamt leicht ein- und ausschalten lassen.
Netfilter und Iptables gehören zum Lieferumfang aller neueren Linux-Distributionen und sind der Standard für Firewalls unter Linux. Es wird vom netfilter-Projekt unterstützt und weiterentwickelt. Die Software unterliegt, wie der Linux-Kernel insgesamt auch, der GNU General Public License, ist also Freie Software.
Inhaltsverzeichnis
Geschichte
Linux besitzt seit 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 überarbeitete den Paketfilter nochmals und stellte ihn als ipchains zur Verfügung. Er wurde in Linuxversion 2.2 integriert. Gegen 1999 wurde der Kernel und damit auch ipchains komplett überarbeitet. Aus ipchains ging iptables hervor, das seit Kernel 2.4 zum "Lieferumfang" gehört. Iptables wird vom Netfilter-Projekt-Team gepflegt und weiterentwickelt. Dieses Team wurde 1999 durch eine kleine Gruppe von Entwicklern ins Leben gerufen, die sich selbst das Coreteam nennen. Seit 2000 ist Iptables unter der GNU General Public License (GPL) verfügbar.
Aufbau
Ein Diagramm zur Abarbeitungsreihenfolge findet sich auf [1].
Tabellen (tables)
Die iptables-Architektur gruppiert die Regeln für die Verarbeitung von Netzwerk-Paketen gemäß ihrer Funktion in drei Tabellen:
- filter für Paketfilter
- nat für Network Address Translation und
- mangle für Paketmanipulationen.
Diese Tabellen enthalten Ketten (engl. chains) von Verarbeitungsregeln, bestehend aus Mustern (engl. patterns), die bestimmen, auf welche Pakete die Regel angewendet wird und Ziele (engl. targets), die festlegen, was mit den Paketen passiert. Anders gesagt bestimmen also Chains, wo geprüft wird, Patterns, welche Pakete betroffen sind und Targets, was mit ihnen geschieht. Die Filterregeln werden dabei, von Ausnahmen abgesehen, stets sequentiell bis zum ersten Treffer abgearbeitet.
Ketten (chains)
Iptables hat fünf fest vorgegebene Ketten (built-in chains) im Kernel eingebaut:
- PREROUTING: Unmittelbar, bevor eine Routing-Entscheidung getroffen wird, müssen die Pakete hier durch (nur nat und mangle).
- INPUT: Hier landen alle Pakete, die an einen lokalen Prozess gerichtet sind (nur filter und mangle).
- OUTPUT: Hier laufen alle Pakete durch, die von einem lokalen Prozess stammen.
- FORWARD: für alle zu routenden Pakete, also Pakete, die für andere Rechner bestimmt sind (nur filter und mangle).
- POSTROUTING: Alle Pakete, lokale und solche, die geroutet werden, laufen hier durch (nur nat und mangle).
Zusätzlich lassen sich noch eigene Ketten definieren.
Ziele (targets)
Jede Kette kann Regeln enthalten. Jede Regel besteht dabei aus einer Filterspezifikation und einem Ziel (target). Das Ziel gibt letztendlich an, was mit einem Paket passiert. Ein Ziel kann eine benutzerdefinierte Kette, ein Standardziel oder ein erweitertes Ziel sein. Für die fest vorgegebenen Ketten kann man eine Policy definieren, die angewandt wird, wenn keine der Regeln greift. Eine Policy ist immer ein Standardziel. Default ist ACCEPT.
Folgende Standardziele gibt es:
- ACCEPT: Das Paket wird akzeptiert.
- 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: In benutzerdefinierten Ketten angewendet, wird die Abarbeitung dieser Kette abgebrochen und mit der nächsten Regel der vorhergehenden (aufrufenden) Kette fortgeführt. Bei den fest vorgegebenen Ketten greift die Policy der Kette.
Daneben gibt es zahlreiche erweiterte Ziele. Die wichtigsten sind:
- LOG: Das Paket wird mit ausgewählten Informationen im Syslog aufgezeichnet und anschließend weiter durch die Kette geleitet.
- REJECT: Das Paket wird verworfen und der Sender darüber informiert (mittels ICMP-Nachricht oder RST-Paket bei TCP-Verbindungen)
Folgende Ziele sind nur in der nat-Tabelle gültig:
- DNAT und SNAT (nur PREROUTING und OUTPUT bzw. POSTROUTING) stehen für Destination NAT bzw. Source NAT. Dabei wird die Ziel- bzw. die Quell-Adresse des Paketes durch eine angegebene Adresse ersetzt.
- MASQUERADE (nur POSTROUTING) ist eine Spezialform von Source NAT. Die Quell-Adresse des Paketes wird dabei durch die IP-Adresse der Schnittstelle ersetzt, über die es den Rechner (in diesem Fall Masquerading-Router genannt) verlassen wird.
- REDIRECT (nur PREROUTING und OUTPUT) leitet das Paket zum lokalen Rechner um; das wird beispielsweise für transparente Proxyserver benötigt.
Bei DNAT, SNAT und MASQUERADE merkt sich Netfilter die Adressübersetzung - daher connection tracking - und wendet sie auf alle nachfolgenden Pakete derselben Verbindung (in beide Richtungen) ebenfalls an.
Muster (patterns)
Muster machen einen Großteil der Regeln aus, da sie die Bedingungen enthalten, auf die hin Pakete geprüft werden. Diese können sowohl auf OSI-Schicht 3 stattfinden, als auch darunter (z.B. das Filtern von MAC-Adressen per --mac-source) oder darüber (z.B. bestimmte Protokolle herausfiltern mit -p tcp, -p udp oder -p icmp). Neben generischen Mustern enthält iptables viele spezialisierte Matches, die über dynamisch geladene Erweiterungen zur Verfügung stehen und mit dem Schalter -m oder --match geladen werden.
Erweiterungen
Die Netfilter-Gruppe ist zusätzlich für das Projekt Patch-o-matic(-ng) (kurz POM(-ng); ng = "next generation") verantwortlich, das experimentelle Funktionen erprobt und dessen Erkenntnisse evtl. in zukünftige iptables-Versionen mit einfließen lässt. Die Erweiterungen fügen neue Module hinzu, indem mit einem Skript die Quellcodes von iptables und Netfilter verändert werden. Damit die Änderungen übernommen werden, müssen beide Komponenten nach dem Patchen neu kompiliert und der Rechner neu gestartet werden.
Seit Januar 2008 gibt es als Alternative zu patch-o-matic das Paket Xtables-addons, das für die meisten im Internet erhältlichen Module ohne Patchen oder Neustarts auskommt.
Frontends / Alternativen
Zu iptables gibt es zahlreiche Frontends, die von einfachen Shell-Scripts bis hin zu komplexen grafischen Oberflächen die Verwaltung des Firewall-Regelwerkes übernehmen (z.B. IPCop, Shorewall, Webmin; mehr siehe unter Weblinks).
Andere Betriebssysteme sind mit anderen Firewall-Systemen ausgestattet; Für alle BSD-Derivate gibt es pf, für alle Unix-Derivate (inkl. Linux, wobei es nicht auf netfilter aufbaut) IPFilter (ipf). Zusätzlich nutzt FreeBSD bzw. Mac OS X ipfw. Um mit Linux den Netzwerkverkehr auf Anwendungsebene zu filtern, sind andere Programme wie TuxGuardian nötig.
Siehe auch
Literatur
- Gregor N. Purdy: Linux iptables - kurz & gut. O'Reilly, Dezember 2004, ISBN 3897215063
- Gregor N. Purdy: Linux iptables Pocket Reference. O'Reilly Media, August 2004, englisch, ISBN 0596005695
- Ralf Spenneberg: Linux-Firewalls mit iptables & Co., m. CD-ROM. Addison-Wesley, München, Februar 2006, ISBN 3827321360 (Hier kapitelweise als PDF verfügbar [1])
Weblinks
- Homepage des Netfilter-Teams
- Anleitung für iptables (englisch)
- Umfangreicher deutschsprachiger Workshop
- ↑ Diagramm zur Reihenfolge von Tabellen/Chains, http://jengelh.medozas.de/images/nf-packet-flow.png (.svg)
Wikimedia Foundation.