Tutorial

Auflisten und Löschen von iptables-Firewall-Regeln

Published on December 2, 2020
Deutsch
Auflisten und Löschen von iptables-Firewall-Regeln

Einführung

Iptables ist eine Firewall, die in vielen Linux-Systemen eine wesentliche Rolle bei der Netzwerksicherheit spielt. Während Ihnen viele iptables-Tutorials beibringen, wie Sie Firewall-Regeln erstellen, um Ihren Server zu schützen, wird es hier um andere Aspekte der Firewall-Verwaltung gehen: um das Auflisten und Löschen von Regeln.

In diesem Tutorial behandeln wir folgende iptables-Aufgaben:

  • Regeln auflisten
  • Paket- und Byte-Zähler löschen
  • Regeln löschen
  • Ketten leeren (alle Regeln in einer Kette löschen)
  • Alle Ketten und Tabellen leeren, alle Ketten löschen und allen Datenverkehr akzeptieren

Anmerkung: Passen Sie bei der Arbeit mit Firewalls auf, sich nicht aus Ihrem eigenen Server auszusperren, indem Sie SSH-Verkehr blockieren (standardmäßig an Port 22). Wenn Sie aufgrund Ihrer Firewall-Einstellungen den Zugriff verlieren, müssen Sie sich möglicherweise über eine Out-of-Band-Konsole verbinden, um wieder Zugriff zu erhalten.

Voraussetzungen

In diesem Tutorial wird davon ausgegangen, dass Sie einen Linux-Server mit dem installierten Befehl iptables verwenden und Ihr Benutzer sudo-Berechtigungen aufweist.

Wenn Sie Hilfe bei der Ersteinrichtung benötigen, lesen Sie unseren Leitfaden zur Ersteinrichtung des Servers unter Ubuntu 20.04. Er ist auch für Debian und CentOS verfügbar.

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

Regeln nach Spezifikation auflisten

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

  1. sudo iptables -S
Output
-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 erkennen können, sieht die Ausgabe genauso aus wie die Befehle, die zur Erstellung verwendet wurden, jedoch ohne den vorangehenden Befehl iptables. Dies wird auch den Konfigurationsdateien für iptables-Regeln ähneln, sollten Sie jemals iptables-persistent oder iptables save verwendet haben.

Eine bestimmte Kette auflisten

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

  1. sudo iptables -S TCP
Output
-N TCP -A TCP -p tcp -m tcp --dport 22 -j ACCEPT

Sehen wir uns nun die alternative Methode an, um die aktiven iptables-Regeln als Regeltabelle anzuzeigen.

Regeln als Tabellen auflisten

Eine Auflistung der iptables-Regeln in der Tabellenansicht kann für den Vergleich verschiedener Regeln miteinander nützlich sein.

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

  1. sudo iptables -L

Dadurch werden alle aktuellen Regeln nach Kette sortiert ausgegeben.

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

Sehen wir uns eine exemplarische INPUT-Kette an:

  1. sudo iptables -L INPUT
Output
Chain 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 Zeile der Ausgabe gibt den Kettennamen (in diesem Fall INPUT) an, gefolgt von der Standardrichtlinie (DROP). Die nächste Zeile besteht aus den Kopfzeilen der einzelnen Spalten in der Tabelle, gefolgt von den Regeln der Kette. Sehen wir uns an, was die einzelnen Kopfzeilen angeben:

  • target: Wenn ein Paket der Regel entspricht, gibt das Ziel an, was damit geschehen soll. Beispielsweise kann ein Paket akzeptiert, fallen gelassen, protokolliert oder an eine andere Kette gesendet werden, um mit mehr Regeln abgeglichen zu werden.
  • prot: Das Protokoll wie tcp, udp, icmp oder all.
  • opt: Selten verwendet; in dieser Spalte werden IP-Optionen angegeben.
  • 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 gekennzeichnet ist, gibt die Optionen einer Regel an. Das heißt: alle Teile der Regel, die nicht in den vorherigen Spalten angegeben sind. Dies kann alles von Quell- und Ziel-Ports bis hin zum Verbindungszustand des Pakets umfassen.

Paketzahlen und aggregierte Größe anzeigen

Bei der Auflistung von iptables-Regeln ist es auch möglich, die Anzahl der Pakete und die aggregierte Größe der Pakete in Bytes anzuzeigen, die mit den einzelnen Regeln übereingestimmt haben. Dies ist oft nützlich, wenn Sie versuchen, eine ungefähre Vorstellung davon zu erhalten, welche Regeln mit Paketen übereinstimmen. Verwenden Sie dazu gemeinsam die Optionen -L und -v.

Sehen wir uns beispielsweise die INPUT-Kette mit der Option -v erneut an:

  1. sudo iptables -L INPUT -v
Output
Chain 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 nun zwei zusätzliche Spalten (pkts und bytes) enthält.

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

Paketzähler und aggregierte Größe zurücksetzen

Wenn Sie die Paket- und Byte-Zähler für Ihre Regeln löschen oder auf null setzen möchten, verwenden Sie die Option -Z. Sie werden auch zurückgesetzt, wenn es zu einem Neustart kommt. Dies ist nützlich, wenn Sie sehen möchten, ob Ihr Server neuen Datenverkehr erhält, der mit Ihren vorhandenen Regeln übereinstimmt.

Um die Zähler für alle Ketten und Regeln zu löschen, verwenden Sie nur die Option -Z:

  1. 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. Um beispielsweise die Kette INPUT zu löschen, führen Sie folgenden Befehl aus:

  1. 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. Um beispielsweise die Zähler für die 1. Regel in der Kette INPUT auf null zu setzen, führen Sie Folgendes aus:

  1. sudo iptables -Z INPUT 1

Nachdem Sie wissen, wie Sie die Paket- und Byte-Zähler von iptables zurücksetzen, sehen wir uns nun die beiden Methoden an, die Sie zum Löschen verwenden können.

Regeln nach Spezifikation löschen

Eine der Möglichkeiten, iptables-Regeln zu löschen, besteht in der Regelspezifikation. Dazu können Sie den Befehl iptables mit der Option -D ausführen, gefolgt von der Regelspezifikation. Wenn Sie Regeln mit dieser Methode löschen möchten, können Sie die Ausgabe der Regelliste (iptables -S) für Hilfestellungen verwenden.

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

  1. sudo iptables -D INPUT -m conntrack --ctstate INVALID -j DROP

Beachten Sie, dass die Option -A, die die Regelposition zur Erstellungszeit angibt, hier ausgeschlossen werden soll.

Regeln nach Kette und Nummer löschen

Die andere Möglichkeit, iptables-Regeln zu löschen, ist anhand ihrer Kette und Zeilennummer. Um die Zeilennummer einer Regel zu ermitteln, listen Sie die Regeln im Tabellenformat auf und fügen die Option --line-numbers hinzu:

  1. sudo iptables -L --line-numbers
[secondary_output Output]
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 die Zeilennummer zu den einzelnen Regelzeilen hinzufügt, angegeben durch die Kopfzeile num.

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

Wenn wir beispielsweise die Eingangsregel löschen möchten, die ungültige Pakete fallen lässt, können wir sehen, dass es sich um Regel 3 der Kette INPUT handelt. Also sollten wir folgenden Befehl ausführen:

  1. sudo iptables -D INPUT 3

Nachdem Sie wissen, wie Sie einzelne Firewall-Regeln löschen, sehen wir uns nun an, wie Sie Regelketten leeren können.

Ketten leeren

Iptables bietet eine Möglichkeit, alle Regeln in einer Kette zu löschen oder eine Kette zu leeren. Dieser Abschnitt behandelt die Vielfalt der Möglichkeiten.

Anmerkung: Passen Sie auf, sich nicht über SSH aus Ihrem Server auszusperren, indem Sie eine Kette mit einer Standardrichtlinie von drop oder deny leeren. Wenn Sie dies tun, müssen Sie sich möglicherweise über die Konsole verbinden, um wieder Zugriff zu erhalten.

Eine einzelne Kette leeren

Um eine bestimmte Kette zu leeren, wobei alle Regeln in der Kette gelöscht werden, können Sie die Option -F oder die äquivalente Option --flush und den Namen der zu leerenden Kette verwenden.

Um beispielsweise alle Regeln in der Kette INPUT zu löschen, führen Sie folgenden Befehl aus:

  1. sudo iptables -F INPUT

Alle Ketten leeren

Um alle Ketten zu leeren, wodurch alle Firewall-Regeln gelöscht werden, können Sie die Option -F oder die äquivalente Option --flush verwenden:

  1. sudo iptables -F

Alle Regeln leeren, Alle Ketten löschen und Alle akzeptieren

In diesem Abschnitt erfahren Sie, wie Sie alle Ihre Firewall-Regeln, Tabellen und Ketten leeren und allen Netzwerkverkehr zulassen können.

Anmerkung: Dadurch wird Ihre Firewall im Prinzip deaktiviert. Sie sollten diesem Abschnitt nur folgen, wenn Sie mit der Konfiguration Ihrer Firewall neu starten möchten.

Legen Sie zunächst die Standardrichtlinien für die einzelnen integrierten Ketten auf ACCEPT fest. Der Hauptgrund dafür besteht darin, sicherzustellen, dass Sie sich nicht über SSH aus Ihrem Server aussperren:

  1. sudo iptables -P INPUT ACCEPT
  2. sudo iptables -P FORWARD ACCEPT
  3. sudo iptables -P OUTPUT ACCEPT

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

  1. sudo iptables -t nat -F
  2. sudo iptables -t mangle -F
  3. sudo iptables -F
  4. sudo iptables -X

Ihre Firewall lässt nun jeglichen Netzwerkverkehr zu. Wenn Sie Ihre Regeln nun auflisten, sehen Sie, dass es keine gibt und nur die drei Standardketten (INPUT, FORWARD und OUTPUT) übrig sind.

Zusammenfassung

Nach dem Absolvieren dieses Tutorials sollten Sie mit dem Auflisten und Löschen Ihrer iptables-Firewall-Regeln vertraut sein.

Denken Sie daran, dass alle iptables-Änderungen über den Befehl iptables kurzlebig sind und gespeichert werden müssen, um nach Server-Neustarts noch vorhanden zu sein. Dies wird im Abschnitt Speichern von Regeln des Tutorials „Allgemeine Firewall-Regeln und -Befehle“ beschrieben.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the authors

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Become a contributor for community

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

DigitalOcean Documentation

Full documentation for every DigitalOcean product.

Resources for startups and SMBs

The Wave has everything you need to know about building a business, from raising funding to marketing your product.

Get our newsletter

Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

New accounts only. By submitting your email you agree to our Privacy Policy

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

*This promotional offer applies to new accounts only.