Articles

Linux iptables Firewall Vereinfachte Beispiele

Im vorherigen Beitrag haben wir darüber gesprochen, wie Sie Linux-Server mit bewährten Methoden zum Härten sichern können. Einige Leute fragten mich nach dem Firewall-Abschnitt, der eine kurze Einführung in die iptables-Firewall war. Heute werden wir im Detail die Linux iptables Firewall diskutieren und wie Sie Ihren Serververkehr mit dieser fantastischen Firewall sichern können.

Inhaltsverzeichnis

Iptables unter CentOS 7

Wenn Sie CentOS 7 verwenden, werden Sie feststellen, dass firewalld iptables verwaltet.

$ systemctl stop firewalld$ systemctl mask firewalld

Installieren Sie dann den iptables-Dienst und aktivieren Sie ihn:

$ yum install iptables-services$ systemctl enable iptables

Dann können Sie ihn starten:

$ systemctl start iptables

Funktionsweise der Linux-Firewall

Die Funktionen der Iptables-Firewall basieren auf dem Netfilter-Framework, das im Linux-Kernel für die Paketfilterung.

Firewall-Typen

Es gibt zwei Arten von Firewalls:

Zustandslose Firewalls verarbeiten jedes Paket für sich, d. h. sie sehen keine anderen Pakete derselben Verbindung.

Stateful Firewall Diese Art von Firewall kümmert sich um alle Pakete, die durch sie geleitet werden, sodass sie den Status der Verbindung kennt. Es gibt mehr Kontrolle über den Verkehr.

Netfilter enthält Tabellen. Diese Tabellen enthalten Ketten und Ketten enthalten einzelne Regeln.

Wenn ein Paket einer Regel entspricht, wenden die iptables die Regelaktion auf dieses Paket an.

Die Aktionen können: akzeptieren, ablehnen, Ignorieren oder übergeben Sie das Paket zur weiteren Verarbeitung an andere Regeln.

Netfilter kann eingehenden oder ausgehenden Datenverkehr über die IP-Adresse und die Portnummer verarbeiten.

Der Befehl iptables verwaltet und konfiguriert Netfilter.

Bevor wir mit dem Schreiben von Firewall-Befehlen beginnen, müssen wir die Firewall-Struktur ein wenig verstehen, damit wir Firewall-Regeln einfach schreiben können.

iptables firewall tables

Netfilter verfügt über drei Tabellen, die Regeln für die Verarbeitung enthalten können.

Die iptables-Filtertabelle ist die Haupttabelle für die Verarbeitung des Datenverkehrs.

Die zweite ist die NAT-Tabelle, die NAT-Regeln behandelt.

Die dritte Tabelle ist die Mangle-Tabelle zum Mangeln von Paketen.

Tabellenketten

Jede Tabelle der oben genannten Tabellen enthält Ketten; Diese Ketten sind der Container der Regeln von iptables.

Die Filtertabelle enthält VORWÄRTS-, EINGABE- und Ausgabeketten. Sie können eine benutzerdefinierte Kette erstellen, um Ihre Regeln darauf zu speichern.

Wenn ein Paket zum Host kommt, verarbeitet iptables es nach Eingabekettenregeln.

Wenn das Paket an einen anderen Host geht, bedeutet dies, dass die Ausgabekettenregeln es verarbeiten.

Die iptables verwenden die Vorwärtskette für die Behandlung von Paketen, die auf den Host zugegriffen haben, aber für einen anderen Host bestimmt sind.

Kettenrichtlinie

Jede Kette in der Filtertabelle hat eine Richtlinie. Die Richtlinie ist die Standardaktion, die iptables ausführt.

Die Richtlinie kann DROP, REJECT und ACCEPT lauten.

Die ACCEPT-Richtlinie erlaubt es den Paketen, die Firewall zu passieren. Die DROP-Richtlinie löscht ein Paket, ohne den Client zu informieren. Die Ablehnungsrichtlinie löscht auch das Paket und informiert den Absender.

Aus Sicherheitsgründen sollten Sie alle Pakete, die zum Host kommen, löschen und nur die Pakete akzeptieren, die von vertrauenswürdigen Quellen stammen.

Hinzufügen von iptables-Regeln

Sie können eine neue Regel mit dem Befehl iptables wie folgt hinzufügen:

$ iptables -A INPUT -i eth1 -p tcp --dport 80 -d 1.2.3.4 -j ACCEPT

Lassen Sie uns diesen Befehl in Teile zerlegen, damit wir alles darüber verstehen können.

Das -A bedeutet, dass wir eine neue Regel hinzufügen. Standardmäßig fügt iptables der Filtertabelle alle neuen Regeln hinzu, es sei denn, Sie geben eine andere Tabelle an.

Das Flag -i gibt das Gerät an, auf das die Regel angewendet wird. Wenn Sie kein Gerät angeben, wendet iptables die Regel unabhängig von den Geräten auf den gesamten eingehenden Datenverkehr an.

Das Flag -p gibt das Protokoll des Pakets an, das Sie verarbeiten möchten, in unserem Fall TCP.

Das Flag –dport gibt den Zielport 80 an.

Das -d gibt die Ziel-IP-Adresse 1.2.3.4 an. Wenn keine Ziel-IP-Adresse angegeben ist, gilt die Regel für den gesamten eingehenden Datenverkehr auf eth1, unabhängig von der IP-Adresse.

Das -j gibt die auszuführende Aktion oder Sprungaktion an. Hier akzeptieren wir die Pakete mit der Accept-Richtlinie.

Die obige Regel erlaubt eingehenden HTTP-Verkehr, der sich auf Port 80 befindet.

Was ist mit dem Zulassen von ausgehendem Datenverkehr?

$ iptables -A OUTPUT -o eth1 -p tcp --sport 80 -j ACCEPT

Sie können das Flag -A verwenden, um der Ausgabekette Regeln hinzuzufügen.

Das Flag -o wird für das Gerät verwendet, das für ausgehenden Datenverkehr verwendet wird.

Das Flag -sport gibt den Quellport an.

Sie können den Dienstnamen wie http oder https anstelle der numerischen Portnummer auf sport oder dport verwenden. Alle Namen der Dienste befinden sich in der Datei /etc/services.

Sie sollten den Dienstnamen anstelle einer Portnummer verwenden, um das Lesen von Regeln zu erleichtern.

Reihenfolge der iptables-Regeln

Die iptables setzen neue Regeln an das Ende der Kette. Sie können es mit der Option -I nach oben hinzufügen.

Die Reihenfolge der Regeln ist wichtig, wie Sie jetzt sehen werden. Mit dem Flag I können Sie Ihre Regeln genau dort einfügen, wo Sie möchten.

Schauen Sie sich die folgenden Regeln an, um zu verstehen, wie wichtig die Reihenfolge der Regeln ist:

$ iptables -I INPUT 3 -i eth1 -p udp -j ACCEPT$ iptables -I INPUT 4 -i eth1 -p udp --dport 80 -j DROP

Die erste Regel akzeptiert den gesamten UDP-Datenverkehr, der zu eth1 kommt, und die Nummer 3 ist die Regelreihenfolge.

Die zweite Regel löscht den Datenverkehr, der Port 80 erreicht.

Die erste Regel akzeptiert den gesamten Datenverkehr, dann wird die zweite Regel, die den Datenverkehr löschen soll, nichts tun, da iptables den Datenverkehr in der ersten Regel übergibt.

Ihre Regeln sollten sinnvoll sein, da die Reihenfolge der Regeln in der Kette von Bedeutung ist.

iptables-Regeln auflisten

Sie können die Regeln in einer Kette mit dem Flag –L auflisten:

$ iptables -L INPUT

Sie können die Zeilennummern für Regeln mit -line-numbers anzeigen:

$ iptables -L INPUT --line-numbers

In der Liste werden die Namen der Dienste angezeigt. Sie können Portnummern stattdessen mit der Option -n anzeigen:

$ iptables -L INPUT -n --line-numbers

Die obige Regel beschleunigt die Auflistung, da sie verhindert, dass iptables DNS-Auflösung und Service-Lookups durchführen.

Sie können alle Regeln für alle Ketten wie folgt auflisten:

$ iptables -L -n --line-numbers

Um zu erfahren, wie viele Pakete von jeder Regel verarbeitet werden, können Sie das Flag -v verwenden:

$ iptables -L -v

Sie können die Zähler auch mit dem Flag -Z auf Null zurücksetzen.

Jetzt können wir jeder Kette, die wir wollen, eine neue Regel hinzufügen, wir können die Regel in einer bestimmten Reihenfolge einfügen, und wir können die Regeln für jede Kette oder alle Ketten auflisten, aber was ist mit dem Löschen einer Regel?

Regeln löschen

Sie können eine Regel mit dem Flag -D löschen:

$ iptables -D INPUT -i eth1 -p tcp --dport 80 -d 1.2.3.4 -j ACCEPT

Dieser Befehl löscht die zuvor angegebene HTTP-Regel.

Bevor Sie eine Regel löschen, überprüfen Sie einfach die Regelspezifikation, indem Sie sie auflisten, und löschen Sie sie dann.

Sie können die Regel mit der Bestellnummer löschen, anstatt die Regelspezifikationen zu schreiben.

$ iptables -D INPUT 2

Sie können alle Regeln in einer bestimmten Kette mit dem Flag -F löschen, was bedeutet, dass alle Regeln gelöscht werden.

$ iptables -F INPUT

Wenn Sie bei der Verwendung des Flags -F vergessen, den Kettennamen zu erwähnen, werden alle Kettenregeln gelöscht.

Regeln ersetzen

Mit dem Flag -R können Sie vorhandene Regeln durch Ihre eigene Regel ersetzen:

$ iptables -R INPUT 1 -i eth1 -p tcp --dport httpht -d 1.2.3.4 -j ACCEPT

Dieser Befehl ersetzt die erste Regel in der Eingabekette durch die eingegebene Regel.

Spezifische Tabelle auflisten

Um eine bestimmte Tabelle aufzulisten, verwenden Sie das Flag -t mit dem Tabellennamen wie folgt:

$ iptables -L -t nat

Hier listen wir die Regeln in der nat-Tabelle auf.

Iptables Benutzerdefinierte Kette

Um eine benutzerdefinierte Kette zu erstellen, verwenden Sie das Flag -N.

$ iptables -N MY_CHAIN

Sie können es auch mit dem Flag -E umbenennen.

$ iptables -E MY_CHAIN NEW_NAME

Und Sie können die benutzerdefinierte Kette mit dem Flag -X löschen.

$ iptables -X MY_CHAIN

Wenn Sie den Kettennamen bei Verwendung des Flags -X nicht erwähnen, werden alle benutzerdefinierten Ketten gelöscht. Sie können integrierte Ketten wie INPUT und OUTPUT nicht löschen.

Umleitung zu einer benutzerdefinierten Kette

Sie können Pakete wie integrierte Ketten mit dem Flag -j zu einer benutzerdefinierten Kette umleiten.

$ iptables -A INPUT -p icmp -j MY_CHAIN

Die obige Regel leitet den gesamten ICMP-Datenverkehr an die Kette MY_CHAIN weiter.

Festlegen der Standardrichtlinie für Ketten

Mit dem Flag -P können Sie die Standardrichtlinie für eine bestimmte Kette festlegen. Die Standardrichtlinie kann AKZEPTIEREN, ABLEHNEN und LÖSCHEN sein.

$ iptables -P INPUT DROP

Jetzt wird die Eingabekette jedes Paket löschen, es sei denn, Sie schreiben eine Regel, um eingehenden Datenverkehr zuzulassen.

SYN Flooding

Der Angreifer sendet SYN-Pakete nur, ohne den TCP-Handshake abzuschließen, und infolgedessen hätte der empfangende Host viele geöffnete Verbindungen, und Ihr Server ist zu beschäftigt, um auf andere Clients zu antworten.

Wir können das Limit-Modul der iptables Firewall verwenden, um uns vor SYN-Flooding zu schützen.

$ iptables -A INPUT -i eth1 -p tcp --syn -m limit --limit 10/second -j ACCEPT

Hier geben wir nur 10 SYN-Pakete pro Sekunde an. Sie können diesen Wert an Ihre Netzwerkanforderungen anpassen.

Wenn dies Ihr Netzwerk drosselt, können Sie SYN-Cookies verwenden.

SYN Cookies

In

/etc/sysctl.conf

Datei und fügen Sie diese Zeile hinzu:

net.ipv4.tcp_syncookies = 1

Dann speichern und neu laden.

$ sysctl -p

UNGÜLTIGE Statuspakete löschen

Die UNGÜLTIGEN Statuspakete sind Pakete, die zu keiner Verbindung gehören, und Sie löschen sie.

$ iptables -A INPUT -m state --state INVALID -j DROP

Diese Regel löscht alle eingehenden ungültigen Statuspakete.

Fragmentierte Pakete löschen

Fragmentierte Pakete sind zerbrochene Teile großer fehlerhafter Pakete, und Sie sollten Regeln schreiben, um sie zu löschen.

Das Flag -f weist die iptables-Firewall an, alle Fragmente auszuwählen. Wenn Sie also iptables nicht als Router verwenden, können Sie fragmentierte Pakete ablegen.

$ iptables -A INPUT -f -j DROP

iptables-Regeln speichern

Wenn Sie Ihren Server neu starten, verlieren Sie alle Regeln, die Sie geschrieben haben. Wie können Sie sie beibehalten?

Sie können alle Ihre Regeln mit dem Befehl iptables-save speichern, wenn Sie CentOS oder Red Hat verwenden.

iptables-save > /etc/sysconfig/iptables

Unter CentOS 7 können Sie Regeln wie folgt speichern:

$ service iptables save

Sie können nur bestimmte Tabellen wie Filtertabellen speichern:

$ iptables-save -t filter

Sie können auch iptables-restore verwenden, um Regeln wiederherzustellen.

Auf Debian-basierten Distributionen können Sie das Paket iptables-persistent verwenden, um Regeln zu speichern und wiederherzustellen.

Installieren Sie es zuerst:

$ apt-get install iptables-persistent

Dann können Sie Regeln speichern und wiederherstellen:

$ netfilter-persistent save
$ netfilter-persistent reload

Ich hoffe, Sie finden die iptables-Firewall einfach. Komm immer wieder.

Vielen Dank.

Gründer von LikeGeeks. Ich arbeite seit 2010 als Linux-Systemadministrator. Ich bin verantwortlich für die Wartung, Sicherung und Fehlerbehebung von Linux-Servern für mehrere Clients auf der ganzen Welt. Ich liebe es, Shell- und Python-Skripte zu schreiben, um meine Arbeit zu automatisieren.