Auflisten und Löschen von Iptables-Firewall-Regeln

Einführung

Iptables ist eine Firewall, die für die Netzwerksicherheit der meisten Linux-Systeme eine wesentliche Rolle spielt. Während Sie in vielen iptables-Lernprogrammen unter https://www.digitalocean.com/community/tutorials/iptables-essentials-common-firewall-rules-and-commands erfahren, wie Sie Firewall-Regeln erstellen, um Ihren Server zu schützen], wird sich dieses auf Folgendes konzentrieren zu einem anderen Aspekt der Firewallverwaltung: Auflisten und Löschen von Regeln.

In diesem Tutorial erfahren Sie, wie Sie die folgenden iptables-Aufgaben ausführen:

  • Regeln auflisten

  • Paket- und Bytezähler löschen

  • Regeln löschen

  • Ketten spülen (alle Regeln in einer Kette löschen)

  • Leeren Sie alle Ketten und Tabellen, löschen Sie alle Ketten und akzeptieren Sie den gesamten Datenverkehr

Voraussetzungen

Bevor Sie dieses Lernprogramm verwenden, müssen Sie ein separates Superuser-Konto (kein Root-Konto) auf Ihrem Server eingerichtet haben, das Benutzer mit Sudo-Berechtigungen ist. Wenn Sie dies einrichten müssen, befolgen Sie die entsprechenden Anweisungen:

Sehen wir uns zunächst an, wie Sie Regeln auflisten. Es gibt zwei verschiedene Möglichkeiten, um Ihre aktiven iptables-Regeln anzuzeigen: in einer Tabelle oder als Liste mit Regelspezifikationen. Beide Methoden liefern ungefähr die gleichen Informationen in unterschiedlichen Formaten.

Regeln nach Spezifikation auflisten

Um alle aktiven iptables-Regeln nach Spezifikation aufzulisten, führen Sie den Befehl + iptables + mit der Option + -S + aus:

sudo iptables -S
Example: Rule Specification Listing-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N ICMP
-N TCP
-N UDP
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT

Wie Sie sehen, sieht die Ausgabe genauso aus wie die Befehle, mit denen sie erstellt wurden, ohne den vorangegangenen Befehl + iptables +. Dies ähnelt auch den Konfigurationsdateien für iptables-Regeln, wenn Sie jemals "+ iptables-persistent " oder " iptables save +" verwendet haben.

List Specific Chain

Wenn Sie die Ausgabe auf eine bestimmte Kette beschränken möchten ("+ INPUT", "+ OUTPUT", "+ TCP" usw.), können Sie den Kettennamen direkt nach der Option "+ -S " angeben. Um beispielsweise alle Regelspezifikationen in der Kette " TCP +" anzuzeigen, führen Sie den folgenden Befehl aus:

sudo iptables -S
Example: TCP Chain Rule Specification Listing-N TCP
-A TCP -p tcp -m tcp --dport 22 -j ACCEPT

Werfen wir einen Blick auf die alternative Möglichkeit, die aktiven iptables-Regeln als Regeltabelle anzuzeigen.

Listenregeln als Tabellen

Das Auflisten der iptables-Regeln in der Tabellenansicht kann nützlich sein, um verschiedene Regeln miteinander zu vergleichen.

Um alle aktiven iptables-Regeln in einer Tabelle auszugeben, führen Sie den Befehl + iptables + mit der Option + -L + aus:

sudo iptables -L

Dies gibt alle aktuellen Regeln sortiert nach Kette aus.

Wenn Sie die Ausgabe auf eine bestimmte Kette beschränken möchten ("+ INPUT", "+ OUTPUT", "+ TCP" usw.), können Sie den Kettennamen direkt nach der Option "+ -L +" angeben.

Schauen wir uns ein Beispiel für eine INPUT-Kette an:

sudo iptables -L
Example: Input Chain Rule Table ListingChain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere
DROP       all  --  anywhere             anywhere             ctstate INVALID
UDP        udp  --  anywhere             anywhere             ctstate NEW
TCP        tcp  --  anywhere             anywhere             tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
ICMP       icmp --  anywhere             anywhere             ctstate NEW
REJECT     udp  --  anywhere             anywhere             reject-with icmp-port-unreachable
REJECT     tcp  --  anywhere             anywhere             reject-with tcp-reset
REJECT     all  --  anywhere             anywhere             reject-with icmp-proto-unreachable

Die erste Ausgabezeile gibt den Kettennamen (in diesem Fall INPUT) gefolgt von der Standardrichtlinie (DROP) an. Die nächste Zeile besteht aus den Überschriften der einzelnen Spalten in der Tabelle, gefolgt von den Regeln der Kette. Sehen wir uns an, was jeder Header anzeigt:

  • * target *: Wenn ein Paket der Regel entspricht, gibt das Ziel an, was damit zu tun ist. Beispielsweise kann ein Paket akzeptiert, verworfen, protokolliert oder an eine andere Kette gesendet werden, um mit weiteren Regeln verglichen zu werden

  • * prot *: Das Protokoll, z. B. "+ tcp ", " udp ", " icmp " oder " all +"

  • * opt *: Diese Spalte wird selten verwendet und zeigt IP-Optionen an

  • * source *: Die Quell-IP-Adresse oder das Subnetz des Datenverkehrs oder "+ anywhere +"

  • * destination *: Die Ziel-IP-Adresse oder das Subnetz des Datenverkehrs oder "+ anywhere +"

Die letzte Spalte, die nicht beschriftet ist, zeigt die * Optionen * einer Regel an. Dies ist ein Teil der Regel, der in den vorherigen Spalten nicht angegeben ist. Dies kann alles sein, vom Quell- und Zielport bis zum Verbindungsstatus des Pakets.

Paketanzahl und Gesamtgröße anzeigen

Wenn Sie iptables-Regeln auflisten, können Sie auch die Anzahl der Pakete und die Gesamtgröße der Pakete in Byte anzeigen, die mit den jeweiligen Regeln übereinstimmen. Dies ist oft nützlich, wenn Sie versuchen, eine ungefähre Vorstellung davon zu bekommen, welche Regeln mit Paketen übereinstimmen. Verwenden Sie dazu einfach die Optionen "+ -L " und " -v +" zusammen.

Schauen wir uns zum Beispiel die INPUT-Kette noch einmal mit der Option "+ -v +" an:

sudo iptables -L  -v
Example: Verbose ListingChain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination
284K   42M ACCEPT     all  --  any    any     anywhere             anywhere             ctstate RELATED,ESTABLISHED
   0     0 ACCEPT     all  --  lo     any     anywhere             anywhere
   0     0 DROP       all  --  any    any     anywhere             anywhere             ctstate INVALID
 396 63275 UDP        udp  --  any    any     anywhere             anywhere             ctstate NEW
17067 1005K TCP        tcp  --  any    any     anywhere             anywhere             tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
2410  154K ICMP       icmp --  any    any     anywhere             anywhere             ctstate NEW
 396 63275 REJECT     udp  --  any    any     anywhere             anywhere             reject-with icmp-port-unreachable
2916  179K REJECT     all  --  any    any     anywhere             anywhere             reject-with icmp-proto-unreachable
   0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:ssh ctstate NEW,ESTABLISHED

Beachten Sie, dass die Auflistung jetzt zwei zusätzliche Spalten enthält: "+ pkts " und " bytes +".

Nachdem Sie nun wissen, wie Sie die aktiven Firewall-Regeln auf verschiedene Arten auflisten können, wollen wir uns ansehen, wie Sie die Paket- und Byte-Zähler zurücksetzen können.

Paketanzahl und Aggregatgröße zurücksetzen

Wenn Sie die Paket- und Bytezähler für Ihre Regeln löschen oder auf Null setzen möchten, verwenden Sie die Option "+ -Z +". Sie werden auch zurückgesetzt, wenn ein Neustart erfolgt. Dies ist nützlich, wenn Sie sehen möchten, ob Ihr Server neuen Datenverkehr empfängt, der Ihren vorhandenen Regeln entspricht.

Verwenden Sie die Option "+ -Z +" für sich, um die Zähler für alle Ketten und Regeln zu löschen:

sudo iptables -Z

Um die Zähler für alle Regeln in einer bestimmten Kette zu löschen, verwenden Sie die Option "+ -Z +" und geben Sie die Kette an. Führen Sie beispielsweise den folgenden Befehl aus, um die INPUT-Kettenzähler zu löschen:

sudo iptables -Z INPUT

Wenn Sie die Zähler für eine bestimmte Regel löschen möchten, geben Sie den Kettennamen und die Regelnummer an. Führen Sie beispielsweise Folgendes aus, um die Zähler für die erste Regel in der INPUT-Kette auf Null zu setzen:

sudo iptables -Z INPUT 1

Nachdem Sie nun wissen, wie Sie die iptables-Paket- und Bytezähler zurücksetzen, sehen wir uns die beiden Methoden an, mit denen Sie sie löschen können.

Regel nach Spezifikation löschen

Eine Möglichkeit zum Löschen von iptables-Regeln besteht in der Angabe von Regeln. Dazu können Sie den Befehl + iptables + mit der Option + -D + gefolgt von der Regelspezifikation ausführen. Wenn Sie Regeln mit dieser Methode löschen möchten, können Sie die Ausgabe der Regelliste "+ iptables -S +" als Hilfe verwenden.

Wenn Sie beispielsweise die Regel löschen möchten, die ungültige eingehende Pakete löscht (+ -A INPUT -m conntrack --ctstate INVALID -j DROP +), können Sie folgenden Befehl ausführen:

sudo iptables -D

Beachten Sie, dass die Option "+ - A +", mit der die Regelposition zum Zeitpunkt der Erstellung angegeben wird, hier ausgeschlossen werden sollte.

Regel nach Kette und Nummer löschen

Die andere Möglichkeit, iptables-Regeln zu löschen, besteht in der Angabe von * chain * und * line number *. Um die Zeilennummer einer Regel zu ermitteln, listen Sie die Regeln im Tabellenformat auf und fügen Sie die Option "+ - Zeilennummern +" hinzu:

sudo iptables -L --line-numbers
[secondary_output Example Output: Rules with Line Numbers]
Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
2    ACCEPT     all  --  anywhere             anywhere
3    DROP       all  --  anywhere             anywhere             ctstate INVALID
4    UDP        udp  --  anywhere             anywhere             ctstate NEW
5    TCP        tcp  --  anywhere             anywhere             tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
6    ICMP       icmp --  anywhere             anywhere             ctstate NEW
7    REJECT     udp  --  anywhere             anywhere             reject-with icmp-port-unreachable
8    REJECT     tcp  --  anywhere             anywhere             reject-with tcp-reset
9    REJECT     all  --  anywhere             anywhere             reject-with icmp-proto-unreachable
10   ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh ctstate NEW,ESTABLISHED
...

Dadurch wird jeder Regelzeile die Zeilennummer hinzugefügt, die durch die Überschrift * num * angegeben wird.

Wenn Sie wissen, welche Regel Sie löschen möchten, notieren Sie sich die Ketten- und Zeilennummer der Regel. Führen Sie dann den Befehl "+ iptables -D +" gefolgt von der Ketten- und Regelnummer aus.

Wenn wir beispielsweise die Eingaberegel löschen möchten, die ungültige Pakete löscht, können wir erkennen, dass es sich um die Regel "+ 3 " der Kette " INPUT +" handelt. Also sollten wir diesen Befehl ausführen:

sudo iptables -D

Nachdem Sie nun wissen, wie Sie einzelne Firewall-Regeln löschen, gehen wir noch einmal darauf ein, wie Sie Regelketten * leeren * können.

Ketten spülen

Mit Iptables können Sie alle Regeln in einer Kette löschen oder eine Kette * leeren *. In diesem Abschnitt werden die verschiedenen Möglichkeiten beschrieben, dies zu tun.

Eine einzelne Kette spülen

Um eine bestimmte Kette zu leeren, wodurch alle Regeln in der Kette gelöscht werden, können Sie die Option "+ -F " oder die entsprechende Option " - Flush +" und den Namen der zu löschenden Kette verwenden.

Führen Sie beispielsweise den folgenden Befehl aus, um alle Regeln in der Kette "+ INPUT +" zu löschen:

sudo iptables -F

Alle Ketten spülen

Um alle Ketten zu leeren, wodurch alle Firewall-Regeln gelöscht werden, können Sie die Option "+ -F " oder die entsprechende Option " - Flush +" verwenden:

sudo iptables -F

Lösche alle Regeln, lösche alle Ketten und akzeptiere alle

In diesem Abschnitt erfahren Sie, wie Sie alle Firewall-Regeln, -Tabellen und -Ketten leeren und den gesamten Netzwerkverkehr zulassen.

Setzen Sie zunächst die Standardrichtlinien für jede der integrierten Ketten auf "+ ACCEPT +". Der Hauptgrund dafür ist, dass Sie nicht über SSH von Ihrem Server ausgesperrt werden:

sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

Leeren Sie dann die Tabellen + nat + und + mangle +, leeren Sie alle Ketten (+ -F +) und löschen Sie alle nicht standardmäßigen Ketten (+ -X +):

sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -F
sudo iptables -X

Ihre Firewall lässt jetzt den gesamten Netzwerkverkehr zu. Wenn Sie Ihre Regeln jetzt auflisten, werden Sie feststellen, dass es keine gibt und nur die drei Standardketten (INPUT, FORWARD und OUTPUT) übrig bleiben.

Fazit

Nachdem Sie dieses Tutorial durchgearbeitet haben, sollten Sie mit dem Auflisten und Löschen der iptables-Firewallregeln vertraut sein.

Denken Sie daran, dass alle Änderungen an iptables über den Befehl "+ iptables +" vergänglich sind und gespeichert werden müssen, um auch nach einem Neustart des Servers bestehen zu können. Dies wird im Abschnitt Saving Rules des Common Firewall Rules and Commands-Tutorials behandelt.