iptables: Unterschied zwischen den Versionen
Michi (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Michi (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(18 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Der [[Shell-Befehl]] <b>iptables</b> stammt aus dem Paket [[Netfilter]] und dient der Konfiguration von [[Xtables]]. | Der [[Shell-Befehl]] <b>iptables</b> stammt aus dem Paket [[Netfilter]] und dient der Konfiguration der Tabellen (engl. tables), die durch die [[Firewall]] im [[Linux-Kernel]] (bestehend aus einer Reihe von Netfilter-Modulen) bereitgestellt wird, sowie deren Ketten (engl. chains) und Regeln (engl. rules) die in diesen Tabellen enthalten sind. Verschiedene Programme werden gegenwärtig für unterschiedliche Protokolle verwendet; iptables beschränkt sich auf [[IPV4]], für IPv6 gibt es Ip6tables, für ARP ist es Arptables, für Ethernetpakete gibt es Ebtables. | ||
== Konzept == | |||
Der Begriff "iptables" wird auch oft verwendet, um ausschliesslich die Linux-Kernel-Komponenten zu beschreiben. "x_tables" ist der Name des Kernelmoduls, der den geteilten Code aller vier Module trägt, und der sonst noch das API für Iptables-Erweiterungen bereitstellt. Folglich wird Xtables mehr oder minder dazu verwendet, um die gesamte Firewall-Infrastruktur zu benennen. | |||
iptables ist ein leistungsfähiger Paketfilter, mit dem sehr leicht eine Firewall aufgesetzt werden kann. Das modulare iptables verwendet Einstiegspunkte in Kernel-Routinen (Hooks), die Netfilter bereitstellt. Das Kernel-Subsystem Netfilter bietet durch seinen Aufbau die Möglichkeit, eine Firewall sehr flexibel zu konfigurieren. | |||
REIN ---> PREROUTING POSTROUTING -----> RAUS | |||
mangle/nat mangle/nat | |||
v ^ | |||
v FORWARD ^ | |||
Routing? --------> filter/mangle -------> ^ | |||
v ^ | |||
v ^ | |||
INPUT OUTPUT | |||
filter/mangle ---> Lokaler Prozess ---> filter/mangle/nat | |||
iptables basiert auf Tabellen mit Regeln zum Bearbeiten von Paketen. Eine Regel legt fest, was mit Paketen geschieht. | |||
* Die Tabelle "filter" etwa enthält Regeln zum Filtern von Daten. | |||
* In der Tabelle "nat" finden sich Regeln, um die [[IP-Adressen]] sowie die [[Ports]] von IP-Paketen zu manipulieren. | |||
* In der Tabelle "mangle" landen Regeln zum Verändern von Paketen. | |||
* Eigene Tabellen fassen bestimmte Regeln zusätzlich in einer Art Unterprogramm zusammen. | |||
Je nach Tabelle gibt es vorgegebene Regelketten (chains), die bestimmen, welche Regel zum Einsatz kommt. | |||
{| class=wiki | |||
! Regelkette !! Beschreibung | |||
|- | |||
| <tt>INPUT</tt> || Behandlung eingehender Pakete für lokale Prozesse. | |||
|- | |||
| <tt>OUTPUT</tt> || Behandlung ausgehender Pakete von lokalen Prozessen. | |||
|- | |||
| <tt>FORWARD</tt> || Regelung der Weiterleitung ([[Routing]]) von Paketen. | |||
|- | |||
| <tt>PREROUTING</tt> || Nimmt unter Umständen bereits vor dem Routing Einfluss auf die Pakete. | |||
|- | |||
| <tt>POSTROUTING</tt> || Nimmt unter Umständen nach dem Routing nochmals Einfluss auf die Pakete, bevor sie wirklich abgeschickt werden. | |||
|} | |||
Oft zum Einsatz kommen die Regelketten "INPUT" und "OUTPUT" sowie bei Routern auch "FORWARD" in der Tabelle "filter". Für jede Regelkette gibt es in jeder Tabelle eine Standardrichtlinie (policy), die festlegt, was mit den IP-Paketen geschieht, auf die keine besondere Regel passt. Grundsätzlich gibt es zwei grundsätzliche Möglichkeiten, einen Paketfilter aufzubauen: | |||
* Es wird alles verboten, was nicht ausdrücklich erlaubt ist. Das ist die sicherere Variante. | |||
* Es wird alles erlaubt, was nicht ausdrücklich verboten ist. | |||
Jede Regel enthält zwei Teile: | |||
* Der erste Teil bestimmt, auf welche IP-Pakete die Regel zutrifft. Zu den Kriterien für die Auswahl der Pakete gehören unter anderem die Quell-IP-Adresse, die Ziel-IP-Adresse, der Quell-Port, der Ziel-Port sowie die Schnittstelle von Quelle oder Ziel. | |||
* Der zweite Teil gibt an, wie der Paketfilter mit diesen Paketen verfährt. | |||
{| class=wiki | |||
! colspan=2 | Eingebaute Ziele | |||
|- | |||
| <tt>ACCEPT</tt> || Akzeptieren von Paketen. | |||
|- | |||
| <tt>DROP</tt> || Verwerfen von Paketen, ohne den Absender zu informieren. Der anfragende Client wartet dabei auf Antwort und bircht das Warten nach einer bestimmten Zeitdauer ab. | |||
|- | |||
| <tt>REJECT</tt> || Verwerfen von Paketen, wobei der [[ICMP]]-Fehler "Port unreachable" zurückgesendet wird. Der anfragende Client meldet also sofort eine abgelehnte Verbindung ("Connection refused"). | |||
|- | |||
| <tt>MASQUERADE</tt> || Umschreiben der IP-Adresse und des Ports eines Pakets. | |||
|- | |||
| <tt>LOG</tt> || Schreiben des Zugriffs in eine [[Protokolldatei]]. | |||
|} | |||
Je nach Ziel beendet iptables das Abarbeiten der Regelkette (ACCEPT, DROP, REJECT, MASQUERADE) oder setzt es danach fort (LOG). | |||
Häufig stellt sich die Aufgabe, IP-Pakete ausgehender Verbindungen weiterzuleiten, IP-Pakete eingehender Verbindungen jedoch zu blockieren. Da die Antwortpakete ausgehender Verbindungen auf einem beliebigen Port zwischen 1024 und 65535 ankommen, gehört es zu den Aufgaben, Pakete an diese Ports zu akzeptieren, auch wenn ein eingehendes Paket gar kein solches Antwortpaket ist. Dadurch gestalten sich einerseits die Regeln komplizierter als nötig, andererseits öffnen sich mehr Löcher als nötig. An diesem Punkt kommt der Connection Tracker von iptables ins Spiel: Er liest den Datenstrom mit und merkt sich, welche Verbindungen der Benutzer oder das System aufbauen. Dieser Mechanismus erlaubt eine Regel, die wie folgt lautet: Akzeptiere alle eingehenden IP-Pakete, bei denen es sich um Antworten auf ausgehende Verbindungen handelt. Der Connection Tracker arbeitet sehr schnell, da er sich nur das erste Paket einer Verbindung anzusehen braucht. | |||
== Konfiguration == | |||
iptables benötigt erweiterte Systemprivilegien und muss deshalb als Benutzer "root" ausgeführt werden. | |||
Auf den meisten Linux-Systemen ist iptables unter "/usr/sbin/iptables" installiert. | |||
== Verwendung == | == Verwendung == | ||
Zeile 36: | Zeile 107: | ||
$ <b>iptables -P INPUT ACCEPT</b> | $ <b>iptables -P INPUT ACCEPT</b> | ||
$ <b>iptables -P OUTPUT ACCEPT</b> | $ <b>iptables -P OUTPUT ACCEPT</b> | ||
=== Beispiel: Einfache Firewall === | |||
#!/bin/bash | |||
# Löschen eines allfällig bereits vorhandenen Regelwerks | |||
iptables -F | |||
# Festlegung der Richtlinien für INPUT, FORWARD und OUTPUT. Es werden | |||
# alle Pakete verworfen, die nicht ausdrücklich akzeptiert werden | |||
iptables -P INPUT DROP | |||
iptables -P FORWARD DROP | |||
iptables -P OUTPUT DROP | |||
# OUTPUT | |||
# - NEW: Rechner darf neue Netzwerkverbindungen aufbauen | |||
# - ESTABLISHED: Akzeptiert Pakete einer bestehenden Verbindung | |||
# - RELATED: Erlauben besonderer Netzwerkfehlermeldungen und z. B. FTP-Verkehr | |||
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT | |||
# INPUT | |||
# - ESTABLISHED: Akzeptiert Pakete einer bestehenden Verbindung | |||
# - RELATED: Erlauben besonderer Netzwerkfehlermeldungen und z. B. FTP-Verkehr | |||
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT | |||
# Protokollierung aller weiteren Pakete, welche die INPUT-Kette verarbeitet, die | |||
# aber zuvor nicht akzeptiert wurden | |||
iptables -A INPUT -j LOG --log-prefix "Firewall: " | |||
Das Skript muss sinnvoll in den Bootvorgang des Rechners eingebaut werden. In vielen Distributionen reicht es, das Skript (oder die einzelnen Befehle) als Benutzer "root" auzurufen und anschliessend folgenden Befehl abzusetzen. | |||
# <b>/etc/init.d/iptables save</b> | |||
== Weblinks == | == Weblinks == | ||
{{Weblinks | {{Weblinks}} | ||
{{url_dewikipedia|Netfilter/iptables|Netfilter/iptables}} | |||
{{url_dewikipedia|Iptables|Iptables}} | |||
{{url_enwikipedia|iptables|iptables}} | {{url_enwikipedia|iptables|iptables}} | ||
}} | {{Fuss}} | ||
* http://www.cyberciti.biz/faq/how-do-i-block-an-ip-on-my-linux-server/ | |||
{{cat|Firewall}} | {{cat|Firewall}} | ||
{{cat|Shell-Befehl}} | {{cat|Shell-Befehl}} |
Aktuelle Version vom 19. September 2014, 21:22 Uhr
Der Shell-Befehl iptables stammt aus dem Paket Netfilter und dient der Konfiguration der Tabellen (engl. tables), die durch die Firewall im Linux-Kernel (bestehend aus einer Reihe von Netfilter-Modulen) bereitgestellt wird, sowie deren Ketten (engl. chains) und Regeln (engl. rules) die in diesen Tabellen enthalten sind. Verschiedene Programme werden gegenwärtig für unterschiedliche Protokolle verwendet; iptables beschränkt sich auf IPV4, für IPv6 gibt es Ip6tables, für ARP ist es Arptables, für Ethernetpakete gibt es Ebtables.
Konzept
Der Begriff "iptables" wird auch oft verwendet, um ausschliesslich die Linux-Kernel-Komponenten zu beschreiben. "x_tables" ist der Name des Kernelmoduls, der den geteilten Code aller vier Module trägt, und der sonst noch das API für Iptables-Erweiterungen bereitstellt. Folglich wird Xtables mehr oder minder dazu verwendet, um die gesamte Firewall-Infrastruktur zu benennen.
iptables ist ein leistungsfähiger Paketfilter, mit dem sehr leicht eine Firewall aufgesetzt werden kann. Das modulare iptables verwendet Einstiegspunkte in Kernel-Routinen (Hooks), die Netfilter bereitstellt. Das Kernel-Subsystem Netfilter bietet durch seinen Aufbau die Möglichkeit, eine Firewall sehr flexibel zu konfigurieren.
REIN ---> PREROUTING POSTROUTING -----> RAUS mangle/nat mangle/nat v ^ v FORWARD ^ Routing? --------> filter/mangle -------> ^ v ^ v ^ INPUT OUTPUT filter/mangle ---> Lokaler Prozess ---> filter/mangle/nat
iptables basiert auf Tabellen mit Regeln zum Bearbeiten von Paketen. Eine Regel legt fest, was mit Paketen geschieht.
- Die Tabelle "filter" etwa enthält Regeln zum Filtern von Daten.
- In der Tabelle "nat" finden sich Regeln, um die IP-Adressen sowie die Ports von IP-Paketen zu manipulieren.
- In der Tabelle "mangle" landen Regeln zum Verändern von Paketen.
- Eigene Tabellen fassen bestimmte Regeln zusätzlich in einer Art Unterprogramm zusammen.
Je nach Tabelle gibt es vorgegebene Regelketten (chains), die bestimmen, welche Regel zum Einsatz kommt.
Regelkette | Beschreibung |
---|---|
INPUT | Behandlung eingehender Pakete für lokale Prozesse. |
OUTPUT | Behandlung ausgehender Pakete von lokalen Prozessen. |
FORWARD | Regelung der Weiterleitung (Routing) von Paketen. |
PREROUTING | Nimmt unter Umständen bereits vor dem Routing Einfluss auf die Pakete. |
POSTROUTING | Nimmt unter Umständen nach dem Routing nochmals Einfluss auf die Pakete, bevor sie wirklich abgeschickt werden. |
Oft zum Einsatz kommen die Regelketten "INPUT" und "OUTPUT" sowie bei Routern auch "FORWARD" in der Tabelle "filter". Für jede Regelkette gibt es in jeder Tabelle eine Standardrichtlinie (policy), die festlegt, was mit den IP-Paketen geschieht, auf die keine besondere Regel passt. Grundsätzlich gibt es zwei grundsätzliche Möglichkeiten, einen Paketfilter aufzubauen:
- Es wird alles verboten, was nicht ausdrücklich erlaubt ist. Das ist die sicherere Variante.
- Es wird alles erlaubt, was nicht ausdrücklich verboten ist.
Jede Regel enthält zwei Teile:
- Der erste Teil bestimmt, auf welche IP-Pakete die Regel zutrifft. Zu den Kriterien für die Auswahl der Pakete gehören unter anderem die Quell-IP-Adresse, die Ziel-IP-Adresse, der Quell-Port, der Ziel-Port sowie die Schnittstelle von Quelle oder Ziel.
- Der zweite Teil gibt an, wie der Paketfilter mit diesen Paketen verfährt.
Eingebaute Ziele | |
---|---|
ACCEPT | Akzeptieren von Paketen. |
DROP | Verwerfen von Paketen, ohne den Absender zu informieren. Der anfragende Client wartet dabei auf Antwort und bircht das Warten nach einer bestimmten Zeitdauer ab. |
REJECT | Verwerfen von Paketen, wobei der ICMP-Fehler "Port unreachable" zurückgesendet wird. Der anfragende Client meldet also sofort eine abgelehnte Verbindung ("Connection refused"). |
MASQUERADE | Umschreiben der IP-Adresse und des Ports eines Pakets. |
LOG | Schreiben des Zugriffs in eine Protokolldatei. |
Je nach Ziel beendet iptables das Abarbeiten der Regelkette (ACCEPT, DROP, REJECT, MASQUERADE) oder setzt es danach fort (LOG).
Häufig stellt sich die Aufgabe, IP-Pakete ausgehender Verbindungen weiterzuleiten, IP-Pakete eingehender Verbindungen jedoch zu blockieren. Da die Antwortpakete ausgehender Verbindungen auf einem beliebigen Port zwischen 1024 und 65535 ankommen, gehört es zu den Aufgaben, Pakete an diese Ports zu akzeptieren, auch wenn ein eingehendes Paket gar kein solches Antwortpaket ist. Dadurch gestalten sich einerseits die Regeln komplizierter als nötig, andererseits öffnen sich mehr Löcher als nötig. An diesem Punkt kommt der Connection Tracker von iptables ins Spiel: Er liest den Datenstrom mit und merkt sich, welche Verbindungen der Benutzer oder das System aufbauen. Dieser Mechanismus erlaubt eine Regel, die wie folgt lautet: Akzeptiere alle eingehenden IP-Pakete, bei denen es sich um Antworten auf ausgehende Verbindungen handelt. Der Connection Tracker arbeitet sehr schnell, da er sich nur das erste Paket einer Verbindung anzusehen braucht.
Konfiguration
iptables benötigt erweiterte Systemprivilegien und muss deshalb als Benutzer "root" ausgeführt werden.
Auf den meisten Linux-Systemen ist iptables unter "/usr/sbin/iptables" installiert.
Verwendung
Anzeige des Status des IPv4-Paketfilters.
$ iptables -L
Eine Ausgabe wie die folgende zeigt eine deaktivierte Firewall.
Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
Stehen die Default Policies dagegen nicht auf "ACCEPT" und enthalten die einzelnen Chains Regeln, so arbeitet die Firewall.
Anzeige des Status des IPv4-Paketfilters mit einer detaillierten Anzeige, welche Regel wie oft "gematcht" hat.
$ iptables -L -v
Anzeige des Status des IPv4-Paketfilters mit einer detaillierten Anzeige, welche Regel wie oft "gematcht" hat. Dabei sollen nur die Treffer für den Dienst FTP angezeigt werden.
$ iptables -L -v | grep ftp
Löschen der Regeln und damit Deaktivierung der Firewall.
$ iptables -F
Zurücksetzen der Regeln auf den Voreinstellungswert "alles erlauben" (ACCEPT).
$ iptables -P INPUT ACCEPT $ iptables -P OUTPUT ACCEPT
Beispiel: Einfache Firewall
#!/bin/bash # Löschen eines allfällig bereits vorhandenen Regelwerks iptables -F # Festlegung der Richtlinien für INPUT, FORWARD und OUTPUT. Es werden # alle Pakete verworfen, die nicht ausdrücklich akzeptiert werden iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT DROP # OUTPUT # - NEW: Rechner darf neue Netzwerkverbindungen aufbauen # - ESTABLISHED: Akzeptiert Pakete einer bestehenden Verbindung # - RELATED: Erlauben besonderer Netzwerkfehlermeldungen und z. B. FTP-Verkehr iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT # INPUT # - ESTABLISHED: Akzeptiert Pakete einer bestehenden Verbindung # - RELATED: Erlauben besonderer Netzwerkfehlermeldungen und z. B. FTP-Verkehr iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Protokollierung aller weiteren Pakete, welche die INPUT-Kette verarbeitet, die # aber zuvor nicht akzeptiert wurden iptables -A INPUT -j LOG --log-prefix "Firewall: "
Das Skript muss sinnvoll in den Bootvorgang des Rechners eingebaut werden. In vielen Distributionen reicht es, das Skript (oder die einzelnen Befehle) als Benutzer "root" auzurufen und anschliessend folgenden Befehl abzusetzen.
# /etc/init.d/iptables save
Weblinks
Herausgeber | Sprache | Webseitentitel | Anmerkungen |
---|---|---|---|
Wikipedia | ger | Netfilter/iptableswbm | Enzyklopädischer Artikel |
Wikipedia | ger | Iptableswbm | Enzyklopädischer Artikel |
Wikipedia | eng | iptableswbm | Enzyklopädischer Artikel |