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
- 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.
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
- 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.
- 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.
- 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.
- 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!
- Wie bei --in-interface wird sich INPUT oder PREROUTING beschweren, wenn man diese Option für eine Kette angibt, die nur eingehende Pakete verarbeitet!
- 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.
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]]
- 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).
* multiport
*
- 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.
- Wie bei --source-portsist die Liste der Ports eine durch Kommas getrennte Liste einzelner Portnummern und/oder durch Doppelpunkte getrennter Bereiche.
- Wie bei --source-portsist die Liste der Ports eine durch Kommas getrennte Liste einzelner Portnummern und/oder durch Doppelpunkte getrennter Bereiche.
* state
- --state [state]
- 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
*
* tcp
- --sport, --source-port [!] [port[:port]]
- 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.
*
- 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.
- Das erste Argument [mask] gibt an, welche Flags überprüft werden sollen, und das zweite [comp] gibt an, welche gesetzt werden sollen.
- Dies ist nützlich, um Pakete herauszufiltern, die neue Verbindungen starten.
*
- 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.
*
- 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