Zum Inhalt springen

iptables

Aus Foxwiki
Die 5 zuletzt angesehenen Seiten:  Bootvirus » iptables

iptables - Beschreibung

Beschreibung

Aufruf

Die meisten Befehle, die Sie mit iptables ausführen, sehen in etwa so aus:

iptables [-t table] [mode] [chain] [rulenum] [rule-specification] [options]

Lassen Sie uns dies Teil für Teil aufschlüsseln:* Die Tabelle sagt iptables, mit welchem Teil der Firewall dieser Befehl arbeiten soll

  • Es gibt mehrere Tabellen für verschiedene Zwecke:
    FILTER
    Die meisten Firewall-Regeln kommen hier rein
    NAT
    Network Address Translation table, für die Übersetzung von IP-Adressen zwischen zwei Netzwerken
  • Der Modus teilt iptables mit, welche Art von Aktion dieser Befehl ausführen soll
  • Hier sind die nützlichsten davon:
    -A
    Eine Regel an das Ende der Kette anhängen
    -I
    Eine Regel irgendwo in der Mitte der Kette einfügen
    -D
    Löschen einer Regel aus der Kette
    -R
    Ersetzen einer Regel in der Kette durch eine neue
    -P
    Einstellen der Standardrichtlinie für die Kette, die Aktion, die ausgeführt werden soll, wenn keine Regel passt
    -L
    Listen Sie alle Regeln in der Kette auf (oder, wenn keine Kette angegeben ist, in der Tabelle)
  • Die Kette sagt iptables, mit welcher Kette dieser Befehl arbeiten soll
  • Es gibt fünf Ketten, aber nicht alle davon sind in allen Tabellen vorhanden:
    PREROUTING
    Handhabt alle Pakete, die von irgendeinem anderen Computer in diesen Computer kommen
    INPUT
    Handhabt alle Pakete, deren Endziel dieser Computer ist
    FORWARD
    Handhabt Pakete, die nur "durchlaufen",", d.h., deren Quelle und Ziel beide nicht dieser Computer sind
    OUTPUT
    Verarbeitet alle Pakete, deren Quelle dieser Computer ist
    POSTROUTING
    Verarbeitet alle Pakete, die diesen Computer in Richtung eines anderen Computers verlassen
  • Die Regel gibt eine numerische Position in der Kette an
  • Die Regeln in jeder Kette sind von 1 beginnend nummeriert
  • Sie können rulenum mit dem -I Modus verwenden, um iptables mitzuteilen, wo in der Kette die Regel eingefügt werden soll und mit dem -R Modus, um ihm zu sagen, welche Regel ersetzt werden soll
  • Sie können es auch mit -D verwenden, um iptables mitzuteilen, welche Regel gelöscht werden soll
  • Die Regel-Spezifikation gibt iptables die Bedingungen und die Aktion, aus denen die Regel besteht, die Sie ihm geben
  • Offensichtlich braucht man dies, wenn man eine Regel einfuegt, hinzufuegt oder ersetzt, um iptables mitzuteilen, welche neuen Informationen es in die Tabelle einfuegen soll, aber man kann es auch benutzen, um eine zu loeschende Regel anzugeben
  • Wenn es mit der Option -D benutzt wird, wird iptables die Kette nach einer Regel durchsuchen, die genau mit der von Ihnen angegebenen Spezifikation übereinstimmt, und sie löschen, wenn es eine findet
  • Die Optionen können eine beliebige der verschiedenen Optionen sein:
    -v
    Ausführliche Ausgabe; zum Beispiel mit -L die Anzahl der Pakete/Bytes auflisten, die von jeder Regel oder Kette seit dem Start von IPTables behandelt wurden.
    -n
    Numerische Ausgabe; zeigt IP-Adressen, Port-Nummern, etc
  • als einfache Zahlen an, anstatt zu versuchen, sie in symbolische Namen umzuwandeln.
    -x
    Geben Sie genaue Zahlen für die Paket- und Byte-Zählungen mit dem -L Befehl an.
    --Zeilennummern
    Wenn Sie Regeln auflisten, zeigen Sie deren Regelnummern in der ersten Spalte an.
    --modprobe=command
    Verwenden Sie command, um alle zusätzlichen Module zu laden, die für die Regel benötigt werden
  • Es ist ziemlich selten, dass diese Option tatsächlich benötigt wird

Regel-Spezifikationen

Eine iptables Regelspezifikation besteht aus einer Anzahl von Parametern, die als Optionen für den iptables Befehl angegeben werden

  • Erinnern Sie sich daran, dass jede Regel in einer Firewall aus einer Reihe von Bedingungen und einer Aktion besteht, die ausgeführt wird, wenn alle Bedingungen zutreffen
  • Wenn Sie also eine Regel spezifizieren, sollte einer der Parameter die Aktion angeben und alle anderen die Bedingungen
  • Es ist normalerweise eine gute Praxis, den Aktionsparameter an letzter Stelle zu setzen, da es beim Lesen der Regelspezifikation deutlich macht, dass die Bedingungen zuerst geprueft werden, obwohl iptables nicht pingelig ist, wie die Parameter angeordnet sind. (Eine Ausnahme: Ein Modul muss geladen werden, bevor einer seiner Befehle verwendet wird
  • Darauf werde ich später eingehen.)

Was sind nun diese Parameter?

Aktionsparameter

Die meisten Regeln sollten einen Aktionsparameter haben

  • IPTables akzeptiert Regeln, die keine Aktion haben, aber offensichtlich werden sie nichts tun
  • Allerdings werden Paket- und Byte-Zähler für Regeln ohne Aktion beibehalten, so dass Sie aktionslose Regeln verwenden können, um zu sehen, wie viele Pakete auf eine bestimmte Gruppe von Bedingungen zutreffen
-j, --jump [target]
Diese Aktion gibt an, dass IPTables bei Übereinstimmung mit der Regel zum angegebenen Ziel springen soll
  • Das Ziel kann ein terminierendes Ziel sein, was bedeutet, dass die Verarbeitung des Pakets sofort beendet wird, oder ein nicht-terminierendes Ziel, was bedeutet, dass die Verarbeitung des Pakets nicht sofort beendet wird
  • Sie können auch den Namen einer benutzerdefinierten Kette als Ziel angeben, was bedeutet, dass IPTables das Paket anhand der Regeln in dieser Kette überprüft
  • Wenn keine von ihnen übereinstimmt und die Kette keine definierte Richtlinie hat, kehrt es zurück und setzt die Prüfung in der aktuellen Kette fort, beginnend mit der nächsten Regel nach dem Sprung.
-g, --goto [target]

Diese Aktion gibt an, dass IPTables bei Übereinstimmung mit der Regel zum angegebenen Ziel springen soll

  • Der Unterschied zu -j oder --jump besteht darin, dass IPTables den Rest der aktuellen Kette überspringt, wenn das Ziel eine benutzerdefinierte Kette ist und keine ihrer Regeln übereinstimmt

Eingebaute Bedingungsparameter

Alle Bedingungsparameter sind optional

  • Wenn keine Bedingungen angegeben sind, wird die Regel standardmäßig auf alle Pakete zutreffen
  • Verwenden Sie daher Bedingungen, um die Gruppe von Paketen einzuschränken, auf die die Regel zutreffen soll

Die meisten Bedingungen können durch ein Ausrufezeichen nach der Bedingungsoption, aber vor dem Wert invertiert werden; zum Beispiel wird -p ! tcp jedem Paket entsprechen, das kein TCP-Paket ist

-p, --protocol [!] [protocol]
Hier wird das Internetprotokoll angegeben, das das Paket haben muss, um die Bedingung zu erfüllen
  • Normalerweise, wenn Sie dies überhaupt angeben, wird das Protokoll eines von tcp, udp oder icmp sein, aber jedes in /etc/protocols aufgeführte Protokoll (entweder der Protokollname in Kleinbuchstaben, Spalte 1, oder der numerische Code, Spalte 2) ist akzeptabel.
-s, --src, --source [!] [address[/mask]]
Dies gibt die Quell-IP-Adresse an, die in dem Paket enthalten sein muss, damit es die Bedingung erfüllt
  • Die /mask ist optional, aber wenn sie angegeben wird, gibt sie an, welche Bits bei der Übereinstimmung berücksichtigt werden sollen; zum Beispiel ist 255.255.255.0 11111111111111111111111100000000 in binärer Form, so dass nur die äußersten linken 24 Bits der Adresse berücksichtigt werden
  • Denken Sie daran, dass Quell-IP-Adressen gefälscht werden können.
-d, --dst, --destination [!] [address[/mask]]
Dies gibt die Ziel-IP-Adresse an, die im Paket enthalten sein muss, damit es die Bedingung erfüllt
  • Die Maske funktioniert auf die gleiche Weise wie bei --source
  • Denken Sie daran, dass Ziel-IP-Adressen gefälscht werden können, obwohl dies schwieriger ist als bei Quell-IP-Adressen.
-i, --in-interface [!] [name]
Dies gibt die Schnittstelle an, also die physische Netzwerkverbindung, über die das Paket empfangen worden sein muss, damit diese Regel zutrifft
  • Viele Computer haben mehrere Schnittstellen; ein Laptop kann zum Beispiel eine Ethernet-Karte haben, an die man ein Kabel anschließt, was einer Schnittstelle namens eth0 entspricht, und eine drahtlose Netzwerkkarte, die einer Schnittstelle namens wlan0 entspricht
  • Ein Server kann zwei Ethernet-Karten mit zwei angeschlossenen Kabeln haben, eth0 für das Internet im Allgemeinen und eth1 für ein privates Netz
  • Alle Linux-Computer haben auch eine Schnittstelle namens lo, die Loopback-Schnittstelle, die nur zum Senden von Paketen von diesem Computer zu sich selbst verwendet werden kann
  • Beachten Sie, dass, wenn Sie die Option --in-interface für eine Kette angeben, die nur ausgehende Pakete verarbeitet (nämlich OUTPUT oder POSTROUTING), iptables sich beschweren wird!
-o, --out-interface [!] [name]
Dies gibt die Schnittstelle an, über die das Paket ausgehen muss, damit diese Regel zutrifft
  • Wie bei --in-interface wird sich INPUT oder PREROUTING beschweren, wenn man diese Option für eine Kette angibt, die nur eingehende Pakete verarbeitet!
[!] -f, --fragment
Pakete können manchmal in Fragmenten empfangen werden
  • Da die Informationen, die andere Bedingungen prüfen, wie die Quelladresse, am Anfang eines Pakets stehen, enthält nur das erste Fragment diese Informationen, so dass alle Regeln, die andere Bedingungen beinhalten, nur auf das erste Fragment passen
  • Die -f-Bedingung erlaubt es, den Rest des Pakets abzufangen, obwohl es in der Praxis normalerweise nicht notwendig ist, dies zu tun
  • Beachten Sie, dass Sie im Gegensatz zu den meisten anderen Parametern das Ausrufezeichen vor dem -f setzen, wenn Sie diese Bedingung negieren wollen.
-c, --set-counters [pkts] [bytes]

Dies wirkt nicht wirklich wie eine Bedingung, aber die iptables Manpage listet es mit den Bedingungen auf, also füge ich es hier der Vollständigkeit halber ein

  • Damit kann man einfach die Anfangswerte der Paket- und Byte-Zähler setzen, wenn man eine Regel einfügt, anhängt oder ersetzt

Bedingungsparameter aus Modulen

Genau wie die integrierten Bedingungen sind diese optional und können verwendet werden, um die Menge der Pakete einzuschränken, auf die die Regel zutrifft

  • Der Unterschied besteht darin, dass diese Bedingungen nicht in das Hauptprogramm integriert sind, sondern in Modulen programmiert sind, die Sie laden müssen, bevor Sie die Befehle verwenden können
  • Es gibt zwei Möglichkeiten, ein Modul zu laden:* Wenn Sie die Bedingung -p [Protokoll] angeben und ein Modul mit dem gleichen Namen wie das Protokoll vorhanden ist, wird es automatisch geladen
  • Sie können ein Modul explizit mit dem Parameter -m [Modul] laden

Beachten Sie, dass die Teile der Regelspezifikation von links nach rechts ausgewertet werden

  • Wenn Sie also ein Modul verwenden möchten, müssen Sie die Option zum Laden des Moduls angeben, bevor Sie eine seiner Optionen verwenden
  • Beispielsweise funktioniert -p tcp --dport 1779, aber --dport 1779 -p tcp führt zu einer Fehlermeldung

Es stehen zahlreiche Module zur Verfügung, die alle in der Manpage beschrieben sind

  • Hier finden Sie eine Auswahl der nützlichsten Module:* limit
  • --limit [Zahl[/Intervall]]
Begrenzt die Regel auf eine bestimmte Anzahl von Paketen im angegebenen Zeitintervall, das „Sekunde“, „Minute“, ‚Stunde‘ oder „Tag“ sein kann
  • Dies wird in der Regel mit dem LOG-Ziel verwendet, um zu verhindern, dass die gesamte Zeit mit dem Schreiben auf die Festplatte verbracht wird
  • Beispiel: --limit 3/hour (dies ist die Standardeinstellung).
--limit-burst [Zahl]
Ermöglicht es, dass die Übereinstimmungsrate vorübergehend das mit dem Parameter --limit festgelegte Limit überschreitet, wenn Sie eine Zahl angeben, die größer ist als die Zahl in --limit.

* multiport

Dieses Modul kann nur in einer Regel verwendet werden, die nur TCP- oder UDP-Pakete abgleicht (da dies die einzigen Protokolle sind, die Ports definieren).

*

--sports, --source-ports [!] [port,port,..]
Gleicht alle Pakete ab, deren Quellport einer der angegebenen Werte ist
  • Die Liste der Ports ist eine durch Kommas getrennte Liste einzelner Portnummern und/oder durch Doppelpunkte getrennter Bereiche (wie in den Optionen --source-port und ähnlichen Optionen)
  • Beispiel: --source-ports 1907:1909,2156,7703.
--dports, --destination-ports [!] [port,port,..]
Passt auf alle Pakete, deren Zielport einer der angegebenen Werte ist
  • Wie bei --source-portsist die Liste der Ports eine durch Kommas getrennte Liste einzelner Portnummern und/oder durch Doppelpunkte getrennter Bereiche.
--ports, --ports [!] [port,port,..]
Passt auf alle Pakete, deren Port, entweder Quell- oder Zielport, einer der angegebenen Werte ist
  • Wie bei --source-portsist die Liste der Ports eine durch Kommas getrennte Liste einzelner Portnummern und/oder durch Doppelpunkte getrennter Bereiche.

* state

  • --state [state]
Passt auf alle Pakete mit dem angegebenen Status. [state]kann tatsächlich eine durch Kommas getrennte Liste von Status sein
  • In diesem Fall passt jedes Paket, das einen dieser Status hat, auf die Bedingung
  • Es gibt vier mögliche Zustände: Der --state Die Bedingung ist wichtig, damit die Antworten des anderen Computers nicht von der Firewall blockiert werden, wenn ein Programm auf Ihrem Computer ein ausgehendes Paket sendet, um eine Verbindung herzustellen
  • Aus diesem Grund finden Sie am Anfang jeder Firewall-Konfiguration eine Regel wie diese: iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

*

INVALID
Das Paket konnte nicht identifiziert werden.
ESTABLISHED
Das Paket ist Teil einer bestehenden Verbindung, die bereits durch erfolgreiche Paketübertragungen in beide Richtungen hergestellt wurde.
RELATED
Das Paket startet eine neue Verbindung, die mit einer bestehenden Verbindung in Zusammenhang steht (einige Protokolle verwenden mehrere separate Verbindungen).
NEW
Das Paket startet eine neue Verbindung, die (soweit IPTables dies erkennen kann) nicht mit einer bestehenden Verbindung in Verbindung steht.

* tcp

  • --sport, --source-port [!] [port[:port]]
Passt zu jedem TCP-Paket mit dem angegebenen Quellport
  • Der Wert kann eine einzelne Zahl sein, in diesem Fall passt die Bedingung nur zu diesem Port, oder er kann einen Doppelpunkt enthalten, der einen Portbereich angibt
  • Sie können eine der beiden Portnummern weglassen, um den Bereich bis zum niedrigsten Port (0) oder zum höchsten Port (65535) zu erweitern
  • Beispiele: --source-port 5509 oder --source-port 7795:7799.

*

--dport, --destination-port [!] [port[:port]]
Entspricht jedem TCP-Paket mit dem angegebenen Zielport
  • Sie können einen einzelnen Port oder einen Bereich angeben, wie bei --source-port
  • Dies ist bei weitem die nützlichste Option des Moduls tcp.
--tcp-flags [!] [mask] [comp]
Entspricht jedem Paket mit den angegebenen TCP-Flags
  • Das erste Argument [mask] gibt an, welche Flags überprüft werden sollen, und das zweite [comp] gibt an, welche gesetzt werden sollen.
[!] --syn
Eine Abkürzung für --tcp-flags SYN,ACK,FIN,RST SYN, die die SYN-, ACK-, FIN- und RST-Flags überprüft und eine Übereinstimmung findet, wenn von diesen nur das SYN-Flag gesetzt ist
  • Dies ist nützlich, um Pakete herauszufiltern, die neue Verbindungen starten.
--tcp-option [!] [Zahl]
Findet alle TCP-Pakete mit der angegebenen Option.
udp

*

--sport, --source-port [!] [port[:port]]
Gleicht alle UDP-Pakete mit dem angegebenen Quellport ab
  • Der Wert kann eine einzelne Zahl sein, wobei die Bedingung nur für diesen Port gilt, oder ein Doppelpunkt, der einen Portbereich angibt
  • Sie können eine der beiden Portnummern weglassen, um den Bereich bis zum niedrigsten Port (0) oder zum höchsten Port (65535) zu erweitern
  • Beispiele: --source-port 5509 oder --source-port 7795:7799.

*

--dport, --destination-port [!] [port[:port]]
Entspricht jedem UDP-Paket mit dem angegebenen Zielport
  • Sie können einen einzelnen Port oder einen Bereich angeben, wie bei --source-port
  • Dies ist bei weitem die nützlichste Option des Moduls udp.

Installation

Aufruf

Optionen

Unix GNU Parameter Beschreibung

Parameter

Umgebungsvariablen

Exit-Status

Wert Beschreibung
0 Erfolg
>0 Fehler

Anwendung

Problembehebung

Konfiguration

Dateien

Datei Beschreibung


Anhang

Siehe auch


Dokumentation

Man-Page
Info-Pages

Links

Projekt

Weblinks