Wenn Sie mit Linux arbeiten, haben Sie viele Möglichkeiten, Ihr Gerät zu schützen. Es verfügt über iptables, ein Kommandozeilen-Firewallprogramm, das Flexibilität und hervorragenden Schutz bietet.
Da es sich jedoch um ein Befehlszeilendienstprogramm handelt, ist eine leichte Einarbeitung erforderlich.
Wenn Sie also ein Systemadministrator oder ein Linux-Kenner sind, sind Sie hier genau richtig, denn wir gehen die gängigen iptables-Befehle mit Beispielen durch.
Was ist iptables?
iptables ist eine softwarebasierte, in Linux integrierte Firewall. Sie ermöglicht es Linux-Benutzern, Richtlinien zu erstellen oder zu definieren, die sich direkt und indirekt auf den Internetverkehr auswirken.
Das bedeutet, dass Sie mit iptables Regeln erstellen können, die den Verkehr über den Port, die Quell-IP-Adresse, die Netzwerkschnittstellen und mehr blockieren oder zulassen.
Sobald Sie die Regeln definiert haben, muss der gesamte Datenverkehr diese Regeln durchlaufen. So prüft iptables zum Beispiel bei jeder neuen Verbindung, ob es vordefinierte Regeln gibt, die auf die Verbindung zutreffen. Wenn dies der Fall ist, wird die Regel auf die Verbindung angewendet. Wenn jedoch keine entsprechenden Regeln vorhanden sind, wird die Standardregel angewendet.
Um iptables zu verwenden, müssen Sie den folgenden Befehl verwenden.
$ iptables -L -n -v
Hier sind die Parameter wie folgt:
- -L steht für die Auflistung aller Regeln.
- -n für die numerische Ausgabe, die eine schnellere Leistung bietet.
- -v für die Anzeige der Ausgabe in einem detaillierten Format.
Wenn Sie den Befehl iptables ohne Parameter ausführen, erhalten Sie die folgende Ausgabe:
iptables v1.8.7 (nf_tables): kein Befehl angegeben
Versuchen Sie `iptables -h' oder 'iptables --help' für weitere Informationen.
Sie müssen es installieren, wenn es auf einen Fehler stößt, wie z.B. den Befehl “iptables” nicht gefunden.
Um iptables in Ihrer Linux-Distribution zu installieren, führen Sie den folgenden Befehl aus.
$ sudo apt-get install iptables
Es wird das Folgende zurückgeben, da es in meiner Linux-Distribution bereits vorinstalliert ist.
#Ausgabe
Paketlisten lesen... Erledigt
Abhängigkeits-Baum erstellen... Erledigt
Lesen von Statusinformationen... Erledigt
iptables ist bereits die neueste Version (1.8.7-1ubuntu5).
iptables wurde auf manuell installiert gesetzt.
0 upgegradet, 0 neu installiert, 0 zu entfernen und 35 nicht upgegradet.
Was ist eine Firewall?
Firewalls sind die grundlegendste Form des Schutzes von Systemen, Netzwerken und Personalcomputern. Sie können hardware- oder softwarebasiert sein und basieren auf Regeln, um ordnungsgemäß zu funktionieren.
Die meisten Firewalls sind in hohem Maße anpassbar und ermöglichen es Ihnen, Regeln zu erstellen oder zu bearbeiten. Da beispielsweise Pakete aus dem Internet über Ports in ein System gelangen, können Sie diese mit Hilfe von Port-basierten Scans herausfiltern. Darüber hinaus können Sie auch Dienste nach Quell-IP-Adresse oder Netzwerkschnittstelle zulassen oder blockieren.
Wenn Sie Linux verwenden, haben Sie Zugriff auf die integrierten iptables. Sie können jedoch auch eine eigenständige Linux-Firewall verwenden, die Ihnen beim Schutz Ihres Systems hilft.
Warum brauchen Sie iptables, um die Firewall zu konfigurieren?
Aber warum sollten Sie iptables überhaupt verwenden? Schließlich gibt es gute alternative Firewall-Dienstprogramme für die Befehlszeile wie ufw und firewalld. Außerdem können Sie eigenständige Linux-Firewalls verwenden, die einfach zu bedienen sind und mehr Funktionen bieten.
Was macht iptables also so attraktiv für die Konfiguration einer Firewall? Die Gründe für die Verwendung von iptables sind unter anderem:
- Es bietet von Haus aus eine hervorragende Flexibilität. Sie können Regeln auf Paketebene festlegen.
- Es ist relativ einfach zu bedienen, sobald Sie wissen, wie es funktioniert.
- Blockieren Sie unerwünschten Datenverkehr auf unkomplizierte Weise.
- Leiten Sie Pakete an eine alternative IP-Adresse um.
- Schützen Sie Ihre Systeme vor Denial of Service (DoS)-Angriffen.
Und vieles mehr!
Verstehen der iptables-Architektur und ihrer Beziehung zu Netfilter
Um iptables richtig zu verstehen, müssen wir uns mit seiner Architektur vertraut machen. Dies wird uns zunächst ein klares Verständnis der verschiedenen iptables-Komponenten vermitteln. Wenn wir dann die einzelnen Komponenten kennen, können wir sie zum Schreiben von Firewall-Regeln verwenden.
Und wenn wir über iptables sprechen, kommt auch Netfilter ins Spiel. Sie können sich “Netfilter” als großen Bruder von iptables vorstellen. Er baut auf iptables auf und bietet einen besseren Funktionsumfang für die Verwaltung Ihrer Firewall. Allerdings nutzt er iptables als eines der Mittel, um ausgezeichnete Firewall-Fähigkeiten zu erreichen.
Iptables ist eine Befehlszeilenschnittstelle für Netfilter-Hooks auf Kernel-Ebene. Diese Hooks können mit dem Linux-Netzwerk-Stack interagieren, der die Pakete auf der tiefsten Ebene beeinflusst.
Wie sieht also die iptables-Architektur aus?
Tabellen
die iptables-Architektur beginnt mit Tabellen. Diese Tabellen sind für die Organisation der Regeln zuständig. Und jede Tabelle ist nach der Art der Entscheidung klassifiziert, die sie trifft. Einfacher ausgedrückt: Eine Tabelle vereinfacht die gesamte Paketverarbeitung, indem sie eine bestimmte Art der Verarbeitung von Paketen festlegt.
Die verschiedenen von iptables angebotenen Tabellen umfassen
- Filter-Tabelle: Legt den Entscheidungstyp für die Paketfilterung fest. Vereinfacht ausgedrückt, bestimmt sie, ob ein Paket sein Ziel erreichen soll oder nicht.
- NAT-Tabelle: Legt den Entscheidungstyp für die Adressübersetzung fest. Hier wird die Weiterleitung der Pakete auf der Grundlage der NAT-Netzwerke bestimmt. Wenn ein Paket beispielsweise nicht auf NAT zugreifen kann, wird es übersprungen und versucht, ein Nicht-NAT-Netzwerk zu finden.
- Mangle-Tabelle: Verwaltet die speziellen Verarbeitungsanforderungen des Pakets. Sie können es zum Beispiel so konfigurieren, dass es die Header-Informationen des Pakets ändert, wie z.B. TTL-Werte.
- Raw-Tabelle: Mit der Raw-Tabelle können Sie sorgfältig mit dem zustandsbehafteten Aspekt der iptables-Firewall arbeiten. Mithilfe der Tabelle können Sie Pakete auf der Grundlage ihres “Zustands” weiterleiten, bevor der Linux-Kernel beginnt, ihren Zustand zu verfolgen. Die Tabelle dient in erster Linie dazu, die Pakete zu markieren, unabhängig davon, ob das System zur Verfolgung der Verbindung sie bearbeitet oder nicht. Wenn ein Paket nicht verfolgt wird, wird es auf NOTRACK target gesetzt.
Verkettungen
Und dann haben wir noch “Ketten” innerhalb von “Tabellen”
Diese Ketten behandeln die Deep Packet Inspection in verschiedenen Stadien ihrer Reise. Sie können sie zum Beispiel prüfen, wenn sie einen Port oder eine Netzwerkschnittstelle erreichen. Auf diese Weise kann eine Entscheidung getroffen werden, bevor das Paket für den Prozess eines Systems freigegeben wird.
Genau wie Tabellen erhalten Sie auch verschiedene Ketten. Diese umfassen:
- PREROUTING-Kette: Hier behandeln die Regeln die gerade an der Netzwerkschnittstelle angekommenen Pakete.
- INPUT-Kette: Die in der INPUT-Kette genannten Regeln behandeln das Verhalten eingehender Verbindungen. Sobald dies geschehen ist, werden sie an den lokalen Prozess weitergegeben.
- OUTPUT-Kette: Die OUTPUT-Kette befasst sich mit Paketen, die Prozesse produzieren.
- FORWARD-Kette: Die FORWARD-Kette verwaltet Pakete, die nicht für lokale Systeme bestimmt sind. Sie ist ein Träger für andere bestimmte Systeme, wie z.B. einen Router.
- POSTROUTING-Kette: Schließlich gibt es noch die POSTROUTING-Kette, die sich mit den Paketen befasst, die die Netzwerkschnittstelle verlassen sollen.
Nicht alle Ketten sind in jeder Tabelle verfügbar. Die FORWARD-Kette ist zum Beispiel nur in der Mangle-, Filter- und Security-Tabelle verfügbar. In ähnlicher Weise ist die POSTROUTING-Kette in mangle und nat (SNAT) verfügbar. Nur die OUTPUT-Kette ist in allen Tabellen verfügbar.
Ziel
Jetzt haben wir ein “Ziel” Sobald ein Paket eintrifft, durchläuft es die Ketten, um zu sehen, welche Regelbeschreibung am besten passt. Wenn es auf die Beschreibung einer Regel passt, führt es die zugehörige Aktion auf der Grundlage dieser Regel aus und leitet es dann an das Ziel weiter – und besiegelt damit das Schicksal des Pakets.
In vielen Fällen passt ein Paket auf keine Beschreibung und keinen Regelsatz. Und hier kommt die Standardrichtlinie, ein Ziel, ins Spiel.
Die Ziele können ACCEPT, DROP und REJECT sein. Dies sind abschließende Ziele, die über das Schicksal des Pakets entscheiden.
- ACCEPT: Nimmt die Pakete an.
- DROP: Lässt das Paket fallen, so dass der Absender nicht erfahren kann, ob das System vorhanden ist oder nicht.
- REJECT: Weist das Paket zurück.
Es gibt auch nicht-terminierende Ziele, die hauptsächlich dazu dienen, Informationen über das Paket zu speichern.
Die häufigsten iptables-Befehle mit Beispielen
Bevor Sie mit der Ausführung des iptables-Befehls beginnen, sollten Sie sich vergewissern:
- Sie haben administrative Rechte, um die Befehle auszuführen. Wenn der Befehl aufgrund von Administratorrechten fehlschlägt, führen Sie den Befehl mit dem vorangestellten
sudo-Befehl
erneut aus. - Dieser Artikel ist keine Anleitung für die Konfiguration von iptables unter Ubuntu.
- Wir werden den iptables-Befehl verwenden, der mit IPv4 funktioniert. Wenn Sie mit IPv6 arbeiten möchten, müssen Sie stattdessen ip6tables verwenden.
Überprüfen des iptables-Status
Um den aktuellen iptables-Status zu überprüfen, müssen Sie den folgenden Befehl ausführen.
$ iptables -L -n -v
#Ausgabe
Kette INPUT (Richtlinie ACCEPT 0 Pakete, 0 Bytes)
pkts bytes ziel prot opt in out quelle ziel
Kette FORWARD (Richtlinie ACCEPT 0 Pakete, 0 Bytes)
pkts bytes ziel prot opt in out quelle ziel
Kette OUTPUT (Richtlinie ACCEPT 0 Pakete, 0 Bytes)
pkts bytes ziel prot opt in out quelle ziel
Die obige Ausgabe enthält eine Vielzahl von Informationen. Sie deutet jedoch auch auf eine inaktive Firewall hin. Das liegt daran, dass derzeit alle Ketten auf ACCEPT eingestellt sind und keine Regeln haben.
Sie müssen anfangen, Regeln hinzuzufügen, um die Firewall zu aktivieren.
Hinzufügen von Regeln zu einer Kette
Wenn Sie eine Regel hinzufügen, wird diese immer an die Kette angehängt. Daher müssen Sie die Option -A (Append) verwenden. Die Syntax dafür lautet wie folgt:
$ sudo iptables - A
Wenn Sie es jedoch ausführen, wird Folgendes zurückgegeben:
iptables v1.8.7 (nf_tables): Option "-A" erfordert ein Argument
Versuchen Sie `iptables -h' oder 'iptables --help' für weitere Informationen.
Die Argumente, die Sie zum Hinzufügen von Regeln verwenden können, sind:
- – i: Es steht für die Schnittstelle. Hier können Sie die Schnittstelle angeben, für die Sie Regeln hinzufügen möchten. Das kann ppp0, eth0 und so weiter sein.
- – p: Steht für das Protokoll. Hier geben Sie die Regel für die Verwendung eines Netzwerkprotokolls zum Filtern von Packern an. Sie können zum Beispiel ICMP, TCP, UDP usw. angeben. Wenn Sie möchten, dass die Regel für alle Protokolle gilt, geben Sie “all” als Argument an.
- – s: Als nächstes kommt das Argument source, das die Quelle des Datenverkehrs angibt (als IP-Adresse oder Hostname)
- – dport: Dport steht für den Zielport, wobei Sie die Portnummer angeben, für die das Paket bestimmt ist.
- – j: Schließlich haben wir noch ein TARGET-Argument, bei dem Sie den TARGET-Namen, ACCEPT, DROP oder RETURN angeben können
Es ist außerdem wichtig, den Befehl in der folgenden Reihenfolge zu schreiben:
$ sudo iptables -A <Kettenname> -i <Schnittstellenname> - p <protocool-name> - s <Quelle> --dport <Port-Nr.> -j <Ziel>
Speichern von Änderungen an iptables
Sobald Sie eine Regel hinzugefügt haben, können Sie sie mit dem Befehl iptables -save speichern.
$ sudo iptables -save
Die Ausgabe sieht wie folgt aus:
nitt@logan99:~$ sudo iptables-save
# Erzeugt von iptables-save v1.8.7 am Sun May 14 13:37:34 2023
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 392 -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o lo -j ACCEPT
COMMIT
# Abgeschlossen am Sun May 14 13:37:34 2023
Manuelles Speichern von Regeln
Standardmäßig speichert iptables die Regeln nicht. Wenn Sie also Ihren Computer neu starten, werden alle Regeln gelöscht. Um sicherzustellen, dass Sie iptables nicht neu konfigurieren müssen, müssen Sie die folgenden Befehle verwenden.
Für IPv4-Regeln schreiben Sie den Befehl:
$ sudo iptables-save > /etc/iptables/rules.v4
Und für IPv6-Regeln schreiben Sie den Befehl:
$ sudo iptables-save > /etc/iptables/rules.v6
Automatisches Beibehalten von Regeln
Damit die Regeln auch nach einem Neustart erhalten bleiben, und zwar automatisch, müssen Sie das Paket iptables-presistent installieren.
Führen Sie dazu den folgenden Befehl aus.
$ sudo apt-get install iptables-persistent
Daraufhin öffnet sich das folgende Fenster. Drücken Sie die Eingabetaste auf
Da wir mit der IPv4-Tabelle arbeiten, werden hier nur IPv4-Regeln angezeigt. Wenn Sie mit IPv6 arbeiten, wird das entsprechende Fenster angezeigt.
Hinweis: Das Paket lädt nur Ihre gespeicherten iptables-Regeln. Wenn Sie also die iptables-Regeln ändern, müssen Sie sie mit und dem Befehl iptables -save speichern.
Regeln nach dem Neustart neu laden
Sobald die Regeln gespeichert sind, müssen Sie sie mit dem folgenden Befehl wiederherstellen.
$ sudo iptables-restore < /etc/iptables/rules.v4
Und
$ sudo iptables-restore < /etc/iptables/rules.v6
Aktivieren des Datenverkehrs auf Localhost / Aktivieren von Loopback
Um den Datenverkehr auf Localhost zu aktivieren, verwenden Sie den folgenden Befehl:
$ sudo iptables -A INPUT -i lo -j ACCEPT
Hier steht das lo für die Loopback-Schnittstelle für die gesamte Localhost-Kommunikation.
Ebenso können wir Pakete zulassen, die über die Loopback-Schnittstelle gehen.
$ sudo iptables -A OUTPUT -o lo -j ACCEPT
Um zu überprüfen, wie die Regeln geändert wurden, führen Sie iptables -L -n -V
#Ausgabe
Kette INPUT (Richtlinie ACCEPT 0 Pakete, 0 Bytes)
pkts bytes ziel prot opt in out quelle ziel
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
Kette FORWARD (Richtlinie ACCEPT 0 Pakete, 0 Bytes)
pkts bytes ziel prot opt in out quelle ziel
Kette OUTPUT (Richtlinie ACCEPT 0 Pakete, 0 Bytes)
pkts bytes ziel prot opt in out quelle ziel
Aktivieren von Verkehr auf bestimmten Ports
Sie können den Datenverkehr an bestimmten Ports auf ACCEPT oder REJECT setzen.
So sind beispielsweise SSL-, HTTP- und SSH-Ports wichtig für das normale Funktionieren Ihrer Anwendungen. Sie können dem ACCEPT-Paket über die Portnummern Regeln hinzufügen, um sicherzustellen, dass sie wie vorgesehen funktionieren.
Für SSL führen Sie den folgenden Befehl aus.
$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Für HTTPS führen Sie den folgenden Befehl aus.
$ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Um den gesamten HTTPS-Verkehr an der Schnittstelle eth0 zuzulassen.
$ iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
Für SSH führen Sie den folgenden Befehl aus.
$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Und um den gesamten eingehenden SSH-Verkehr auf der Schnittstelle eth0 zu akzeptieren, führen Sie Folgendes aus:
$ iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
$ iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
Ein anderes Beispiel wäre, den Portverkehr auf einem bestimmten Port für Ihre benutzerdefinierte Anwendung zu aktivieren. Sagen wir Port 233.
Um Verbindungen auf diesem Port zu öffnen, führen Sie aus.
$ sudo iptables -A INPUT -p tcp --dport 233 -j ACCEPT
In ähnlicher Weise können Sie auch Verbindungen an einem bestimmten Port mit der Option REJECT target sperren.
Lassen Sie uns alle Verbindungen an Port 392 blockieren.
$ sudo iptables -A INPUT -p tcp --dport 392 -j REJECT
Um das zu überprüfen, führen Sie den Befehl iptables -L -n -v aus.
#Ausgabe
Kette INPUT (Richtlinie ACCEPT 0 Pakete, 0 Bytes)
pkts bytes ziel prot opt in out quelle ziel
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
0 0 ACCEPT tcp -- * * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT tcp -- * * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
0 0 ACCEPT tcp -- * * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:233
0 0 REJECT tcp -- * * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:392 reject-with icmp-port-unreachable
Kette FORWARD (Richtlinie ACCEPT 0 Pakete, 0 Bytes)
pkts bytes ziel prot opt in out quelle ziel
Kette OUTPUT (Richtlinie ACCEPT 0 Pakete, 0 Bytes)
pkts bytes ziel prot opt in out quelle ziel
0 0 ACCEPT alle -- * lo 0.0.0.0/0 0.0.0.0/0
Vorhandene Regeln löschen
Um bestehende Regeln zu löschen, müssen Sie den folgenden Befehl ausführen.
$ iptables -F
oder
$ iptables --flush
Hinweis: Wenn Sie Ihre Regeln nicht gespeichert haben, sind sie für immer verloren und können nicht mit iptables -restore wiederhergestellt werden
Regeln mit Zeilennummern löschen
Um eine bestimmte Regel zu löschen, müssen Sie die Liste der Regeln mit Nummern abrufen.
$ sudo iptables -L --line-numbers
#Ausgabe
Kette INPUT (Richtlinie ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- überall überall tcp dpt:ssh
2 ACCEPT tcp -- überall überall tcp dpt:http
3 ACCEPT tcp -- überall überall tcp dpt:https
4 ACCEPT tcp -- überall überall tcp dpt:233
5 REJECT tcp -- überall überall tcp dpt:392 reject-with icmp-port-unreachable
Führen Sie den folgenden Befehl aus, wenn Sie die Regel Nummer 4 für die INPUT-Kette entfernen möchten.
$ sudo iptables -D INPUT 4
Und wenn Sie erneut den Befehl iptables -n -v -L ausführen.
#Ausgabe
Kette INPUT (Richtlinie ACCEPT 0 Pakete, 0 Bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
0 0 ACCEPT tcp -- * * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT tcp -- * * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
0 0 REJECT tcp -- * * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:392 reject-with icmp-port-unreachable
Nur INPUT- oder OUTPUT-Kettenregeln anzeigen
Um nur die Regeln der INPUT-Kette anzuzeigen, führen Sie den folgenden Befehl aus.
$ sudo iptables -L INPUT -n -v --line-numbers
#ouput
Kette INPUT (Richtlinie ACCEPT 0 Pakete, 0 Bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
2 0 0 ACCEPT tcp -- * * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
3 0 0 ACCEPT tcp -- * * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
4 0 0 REJECT tcp -- * * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:392 reject-with icmp-port-unreachable
Wenn Sie nur die Regeln der OUTPUT-Kette sehen möchten, führen Sie einen ähnlichen Befehl aus:
$ sudo iptables -L OUTPUT -n -v --line-numbers
#Ausgabe
Kette OUTPUT (Richtlinie ACCEPT 0 Pakete, 0 Bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT alle -- * lo 0.0.0.0/0 0.0.0.0/0
Starten/Stoppen/Neustarten der Firewall
Wenn Sie mit RHEL/Fedora Linux oder CentOS arbeiten, können Sie die Firewall starten/stoppen oder neu starten, indem Sie die folgenden Befehle ausführen.
$ service iptables stop
$ dienst iptables start
$ dienst iptables neu starten
Sie können auch den Befehl systemctl verwenden.
Er funktioniert jedoch nicht unter Ubuntu.
Regeln an einer bestimmten Stelle einfügen
Wenn Sie Regeln an einer bestimmten Stelle einfügen möchten, müssen Sie die folgenden Befehle verwenden.
Überprüfen Sie zunächst die Regeln.
$ sudo iptables -L INPUT -n --line-numbers
#Ausgabe
Kette INPUT (Richtlinie ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
4 REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:392 reject-with icmp-port-unreachable
Führen Sie den folgenden Befehl aus, wenn Sie Regeln zwischen 2 und 3 einfügen möchten.
$ sudo iptables -I INPUT 3 -s 252.32.1.2 -j DROP
Überprüfen Sie nun die aktualisierten Regeln.
#Ausgabe
Kette INPUT (Richtlinie ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
3 DROP all -- 252.32.1.2 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
5 REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:392 reject-with icmp-port-unreachable
Eingehenden Verkehr blockieren, aber ausgehenden Verkehr zulassen
Um den gesamten eingehenden Datenverkehr zu blockieren, müssen Sie den folgenden Befehl eingeben.
$ iptables -P INPUT DROP
$ iptables -P FORWARD DROP
$ iptables -P OUTPUT ACCEPT
$ iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT
$ iptables -L -v -n
Auf diese Weise können Sie Pakete anpingen oder herunterladen, aber jeden unbekannten eingehenden Verkehr blockieren.
Eine bestimmte IP-Adresse blockieren
Um eine bestimmte IP-Adresse zu blockieren, führen Sie den folgenden Befehl aus.
$ iptables -A INPUT -s 14.23.59.9 -J DROP
Sie können auch eine Variable definieren, um die blockierte IP-Adresse zu speichern und dann den Befehl ausführen.
BLOCK_THE_IP = "a.b.c.d"
Und führen Sie dann aus:
$ iptables -A INPUT -s "BLOCK_THE_IP" -j DROP
Hinweis: Ändern Sie “a.b.c.d” in Ihre bevorzugte IP-Adresse.
Pinging des Systems von außen zulassen
Sie können externe Benutzer dazu bringen, Ihren Server anzupingen, um Ihr Netzwerk auffindbar zu machen.
$ sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
$ sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
Internes Netzwerk darf mit externem Netzwerk kommunizieren
Führen Sie den folgenden Befehl aus, um das interne Netzwerk (z.B. eth0) für das externe Netzwerk (z.B. eth1) zuzulassen.
$ sudo iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
Ausgehendes DNS zulassen
Um DNS-Verbindungen zu Ihrem Server zuzulassen, führen Sie den folgenden Befehl aus.
$ iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
$ iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT
Rsycn von einem bestimmten Netzwerk zulassen
Wenn Sie den Befehl Rsync verwenden und ihn über ein bestimmtes Netzwerk zulassen möchten, führen Sie den folgenden Befehl aus.
iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT
Port blockieren
Führen Sie den folgenden Befehl aus, um einen bestimmten Port und alle eingehenden Anfragen zu blockieren.
iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP
Ausgehenden Datenverkehr zu einer bestimmten IP-Adresse blockieren
Sie können den Verkehr zu einer beliebigen IP-Adresse blockieren, indem Sie den folgenden Befehl ausführen.
$ host -t a geekflare.com/de
#Ausgabe
geekflare.com/de hat eine Adresse von 172.66.40.93
Um den ausgehenden Datenverkehr zu dieser bestimmten IP-Adresse zu blockieren, führen Sie den folgenden Befehl aus.
iptables -A OUTPUT -d 72.66.40.93 -j DROP
Soziale Medienplattformen blockieren
Auf ähnliche Weise können Sie auch Social Media-Plattformen wie Instagram, Twitter und Facebook blockieren.
Finden Sie die IP-Adresse der sozialen Medien, indem Sie den folgenden Befehl ausführen:
$ host -t a social-media-web-adrress.com
Für Instagram wäre das zum Beispiel so:
$ host -t a www.instagram.com
Nun müssen Sie den CIDR für die IP-Adresse der jeweiligen Social Media-Plattform finden.
$ whois 185.89.219.11 | grep CIDR
Hinweis: Möglicherweise müssen Sie das whois-Paket installieren, indem Sie sudo apt-get install whois ausführen
Geben Sie nun den CIDR-Wert auf folgende Weise ein:
$ iptables - A OUTPUT -p tcp -d CIDR-Wert -j DROP
Hinweis: Stellen Sie sicher, dass Sie den CIDR-Wert entsprechend ändern.
ICMP-Ping-Anfrage zulassen oder blockieren
Um ICMP-Ping-Anfragen zuzulassen oder zu blockieren, führen Sie die folgenden Befehle aus.
$ iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
$ iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP
Einen bestimmten Bereich von Ports öffnen
Um eine Reihe von Ports zu öffnen, führen Sie den folgenden Befehl aus.
$ iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8933: 8500 -j ACCEPT
NAT-Regeln auflisten
Um NAT-Regeln aufzulisten, führen Sie den folgenden Befehl aus:
$ sudo iptables -t nat -L -n -v
Oder
$ sudo iptables -t nat -v -L -n --line-number
Paket-Zähler zurücksetzen
Um den aktuellen iptables-Zähler zu überprüfen:
$ sudo iptables -L -n -v
Um die Zähler zurückzusetzen oder zu löschen, führen Sie Folgendes aus:
$ sudo iptables -Z
$ sudo iptables -L -n -v
Um nur den Zähler der INPUT-Kette zurückzusetzen, führen Sie aus:
$ iptables -Z INPUT
Um einen bestimmten Regelzähler zurückzusetzen, führen Sie Folgendes aus:
$ iptables -z INPUT RULE-NUMBER
Stellen Sie sicher, dass Sie RULE-NUMBER auf die betreffende Regel ändern.
Letzte Worte
iptables ist ein leistungsstarkes Firewall-Befehlszeilenprogramm. Sie können fast alles konfigurieren, was mit Netzwerkressourcen, Paketen, Schnittstellen und bestimmten Szenarien zu tun hat.
Außerdem bietet iptables eine Vielzahl von Optionen. Schauen Sie sich die Hauptseite mit dem Befehl man an, um sich ein vollständiges Bild zu machen.
$ man iptables
$ man ip6tables
Als nächstes sehen Sie sich eine Netzwerk-Firewall an und erfahren, wie sie Angriffe abwehrt.