GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux IPTables:So fügen Sie Firewall-Regeln hinzu (Beispiel:SSH zulassen)

In diesem Artikel wird erläutert, wie Sie iptables-Firewallregeln mit dem Befehl „iptables -A“ (append) hinzufügen.

„-A“ steht für Anhängen. Wenn es Ihnen dadurch leichter fällt, sich „-A“ als Add-Regel (statt Append-Rule) zu merken, ist das in Ordnung. Beachten Sie jedoch, dass „-A“ die Regel am Ende der Kette hinzufügt.

Auch hier ist es sehr wichtig, sich daran zu erinnern, dass -A die Regel am Ende hinzufügt.

Normalerweise besteht die letzte Regel darin, alle Pakete zu verwerfen. Wenn Sie bereits eine Regel zum Verwerfen aller Pakete haben und versuchen, „-A“ von der Befehlszeile aus zu verwenden, um eine neue Regel zu erstellen, fügen Sie die neue Regel nach der aktuellen Regel „Alle Pakete verwerfen“ hinzu. wodurch Ihre neue Regel ziemlich nutzlos wird.

Sobald Sie die iptables gemeistert haben und sie in der Produktion implementieren, sollten Sie ein Shell-Skript verwenden, in dem Sie den Befehl -A verwenden, um alle Regeln hinzuzufügen. In diesem Shell-Skript sollte Ihre letzte Zeile immer die Regel „Alle Pakete verwerfen“ sein. Wenn Sie neue Regeln hinzufügen möchten, ändern Sie dieses Shell-Skript und fügen Sie Ihre neuen Regeln über der Regel „Alle Pakete verwerfen“ hinzu.

Syntax:

iptables -A chain firewall-rule
  • -A chain – Geben Sie die Kette an, an der die Regel angehängt werden soll. Verwenden Sie zum Beispiel die INPUT-Kette für eingehende Pakete und OUTPUT für ausgehende Pakete.
  • firewall-rule – Verschiedene Parameter bilden die Firewall-Regel.

Wenn Sie nicht wissen, was Kette bedeutet, sollten Sie sich zuerst über die Grundlagen von iptables informieren.

Firewall-Regelparameter

Die folgenden Parameter sind für alle Arten von Firewall-Regeln verfügbar.

-p steht für Protokoll

  • Gibt das Protokoll für die Regel an.
  • Mögliche Werte sind tcp, udp, icmp
  • Verwenden Sie „alle“, um alle Protokolle zuzulassen. Wenn Sie -p nicht angeben, werden standardmäßig „alle“ Protokolle verwendet. Es empfiehlt sich nicht, „alle“ zu verwenden und immer ein Protokoll anzugeben.
  • Verwenden Sie entweder den Namen (zum Beispiel:tcp) oder die Nummer (zum Beispiel:6 für tcp) für das Protokoll.
  • /etc/protocols-Datei enthält alle zulässigen Protokollnamen und -nummern.
  • Sie können auch –protocol
  • verwenden

-s steht für Quelle

  • Gibt die Quelle des Pakets an.
  • Dies kann eine IP-Adresse, eine Netzwerkadresse oder ein Hostname sein
  • Zum Beispiel:-s 192.168.1.101 gibt eine bestimmte IP-Adresse an
  • Verwenden Sie für die Netzwerkmaske /mask. Beispiel:„-s 192.168.1.0/24“ steht für eine Netzwerkmaske von 255.255.255.0 für dieses Netzwerk. Dies entspricht dem Netzwerk 192.168.1.x.
  • Wenn Sie keine Quelle angeben, stimmt es mit allen Quellen überein.
  • Sie können auch –src oder –source
  • verwenden

-d steht für das Ziel

  • Gibt das Ziel des Pakets an.
  • Dies ist dasselbe wie „-s“ (außer dass dies den Zielhost, die IP-Adresse oder das Netzwerk darstellt)
  • Sie können auch –dst oder –destination
  • verwenden

-j ist Ziel

  • j steht für „jump to target“
  • Dies gibt an, was mit dem Paket geschehen soll, das dieser Firewall-Regel entspricht.
  • Mögliche Werte sind ACCEPT, DROP, QUEUE, RETURN
  • Sie können auch eine andere benutzerdefinierte Kette als Zielwert angeben.

-i steht für in Schnittstelle

  • i steht für „Eingabeschnittstelle“
  • Sie könnten dies übersehen und annehmen, dass „-i“ für Schnittstelle steht. Bitte beachten Sie, dass sowohl -i als auch -o für Schnittstellen stehen. Allerdings -i für Eingabeschnittstelle und -o für Ausgabeschnittstelle.
  • Gibt die Schnittstelle an, über die die eingehenden Pakete durch die INPUT-, FORWARD- und PREROUTING-Kette kommen.
  • Zum Beispiel:-i eth0 gibt an, dass diese Regel die eingehenden Pakete berücksichtigen soll, die über die Schnittstelle eth0 kommen.
  • Wenn Sie die Option -i nicht angeben, werden alle verfügbaren Schnittstellen auf dem System für Eingabepakete berücksichtigt.
  • Sie können auch –in-interface
  • verwenden

-o steht für die Ausgangsschnittstelle

  • o steht für „Ausgabeschnittstelle“
  • Gibt die Schnittstelle an, über die die ausgehenden Pakete durch die INPUT-, FORWARD- und PREROUTING-Kette gesendet werden.
  • Wenn Sie die Option -o nicht angeben, werden alle verfügbaren Schnittstellen auf dem System für Ausgabepakete berücksichtigt.
  • Sie können auch –out-interface
  • verwenden

Zusätzliche Optionen für Firewall-Parameter

Einige der oben genannten Firewall-Parameter haben wiederum eigene Optionen, die mit ihnen weitergegeben werden können. Im Folgenden sind einige der gebräuchlichsten Optionen aufgeführt.

Um diese Parameteroptionen zu verwenden, sollten Sie den entsprechenden Parameter in der Firewallregel angeben. Um beispielsweise die Option „–sport“ zu verwenden, sollten Sie den Parameter „-p tcp“ (oder „-p udp“) in Ihrer Firewall-Regel angegeben haben.

Hinweis:Allen diesen Optionen sind zwei Bindestriche vorangestellt. Zum Beispiel stehen vor Sport zwei Bindestriche.

–sport ist für den Quellport (für -p tcp oder -p udp)

  • Standardmäßig werden alle Quellports abgeglichen.
  • Sie können entweder die Portnummer oder den Namen angeben. Um beispielsweise den SSH-Port in Ihrer Firewall-Regel zu verwenden, verwenden Sie entweder „–sport 22“ oder „–sport ssh“.
  • /etc/services-Datei enthält alle zulässigen Portnamen und -nummern.
  • Die Verwendung der Portnummer in der Regel ist (für die Leistung) besser als die Verwendung des Portnamens.
  • Um den Bereich der Ports abzugleichen, verwenden Sie einen Doppelpunkt. Beispielsweise entspricht 22:100 einer Portnummer von 22 bis 100.
  • Sie können auch –source-port
  • verwenden

–dport ist für den Zielport (für -p tcp oder -p udp)

  • Alles ist dasselbe wie bei –sport, außer dass dies für Zielhäfen gilt.
  • Sie können auch –destination-port
  • verwenden

–tcp-flags ist für TCP-Flags (für -p tcp)

  • Dies kann mehrere durch Komma getrennte Werte enthalten.
  • Mögliche Werte sind:SYN, ACK, FIN, RST, URG, PSH. Sie können auch ALLE oder KEINE verwenden

–icmp-type steht für den ICMP-Typ (für -p icmp)

  • Wenn Sie das ICMP-Protokoll „-p icmp“ verwenden, können Sie den ICMP-Typ auch mit dem Parameter „–icmp-type“ angeben.
  • Beispiel:Verwenden Sie „–icmp-type 0“ für „Echo Reply“ und „–icmp-type 8“ für „Echo“.

Beispiel einer Firewall-Regel zum Zulassen eingehender SSH-Verbindungen

Nachdem Sie nun die verschiedenen Parameter (und ihre Optionen) der Firewall-Regel verstanden haben, lassen Sie uns eine Beispiel-Firewall-Regel erstellen.

Lassen Sie uns in diesem Beispiel nur die eingehende SSH-Verbindung zum Server zulassen. Alle anderen Verbindungen werden blockiert (einschließlich Ping).

WARNUNG:Wenn Sie mit Firewall-Regeln spielen, kann Ihr System unzugänglich werden. Wenn Sie nicht wissen, was Sie tun, sperren Sie sich (und alle anderen) möglicherweise aus dem System aus. Machen Sie also all Ihr Lernen nur auf einem Testsystem, das von niemandem verwendet wird, und Sie haben Zugriff auf die Konsole, um die iptables neu zu starten, wenn Sie ausgesperrt werden.

1. Vorhandene Regeln löschen

Wenn Sie bereits einige iptables-Regeln haben, erstellen Sie eine Sicherungskopie, bevor Sie die vorhandenen Regeln löschen.

Löschen Sie alle vorhandenen Regeln und lassen Sie die Firewall alles akzeptieren. Verwenden Sie iptables flush, wie wir zuvor besprochen haben, um alle Ihre bestehenden Regeln zu bereinigen und von vorne zu beginnen.

Testen Sie, um sicherzustellen, dass Sie diesen Server von außen per SSH und Ping erreichen können.

Wenn wir mit diesem Beispiel fertig sind, können Sie nur noch SSH zu diesem Server senden. Sie können diesen Server nicht von außen anpingen.

2. Nur SSH zulassen

Lassen Sie nur die eingehende SSH-Verbindung zu diesem Server zu. Sie können von überall aus per SSH auf diesen Server zugreifen.

iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT

Der obige iptables-Befehl hat die folgenden 4 Komponenten.

  • „-A INPUT“ – Dies zeigt an, dass wir eine neue Regel an die INPUT-Kette anhängen (oder hinzufügen). Diese Regel gilt also für eingehenden Datenverkehr.
  • „-i eth0“ – Eingehende Pakete über die Schnittstelle eth0 werden gegen diese Regel geprüft.
  • „-p tcp –dport 22“ – Diese Regel gilt für TCP-Pakete. Dies hat eine TCP-Option namens „–dport 22“, die angibt, dass der Zielport für diese Regel auf dem Server 22 ist (was ssh ist).
  • „-j ACCEPT“ – Zum Akzeptieren springen, was das Paket einfach AKZEPTIERT.

Vereinfacht lässt sich die obige Regel so formulieren:Alle eingehenden Pakete über eth0 für ssh werden akzeptiert.

3. Alle anderen Pakete verwerfen

Nachdem Sie Ihre benutzerdefinierten Regeln zum Akzeptieren von Paketen festgelegt haben, sollten Sie auch eine Standardregel zum Verwerfen aller anderen Pakete haben.

Dies sollte Ihre letzte Regel in der INPUT-Kette sein.

Gehen Sie wie folgt vor, um alle eingehenden Pakete zu verwerfen.

iptables -A INPUT -j DROP

4. Sehen Sie sich die SSH-Regel und den Test an

Um die aktuellen iptables-Firewallregeln anzuzeigen, verwenden Sie den Befehl „iptables -L“.

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
DROP       all  --  anywhere             anywhere

Wie Sie aus der obigen Ausgabe sehen, hat es die folgenden zwei Regeln in Folge.

  • Alle eingehenden SSH-Verbindungen akzeptieren
  • Alle anderen Pakete verwerfen.

Anstatt die Firewall-Regeln über die Befehlszeile hinzuzufügen, ist es möglicherweise besser, ein Shell-Skript zu erstellen, das Ihre Regeln enthält, wie unten gezeigt.

# vi iptables.sh
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP

# sh -x iptables.sh
+ iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
+ iptables -A INPUT -j DROP

# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
DROP       all  --  anywhere             anywhere

Ähnlich wie beim Befehl iptables append/add gibt es einige andere Befehle, die für iptables verfügbar sind. Ich werde sie in den kommenden Artikeln der iptables-Serie behandeln. Ich werde auch einige praktische Beispiele für Firewall-Regeln bereitstellen, die in realen Szenarien hilfreich sein werden.

Frühere Artikel in der iptables-Reihe:

  • Linux-Firewall-Tutorial:Grundlagen zu IPTables-Tabellen, -Ketten, -Regeln
  • IPTables Flush:Alle Regeln auf RedHat und CentOS Linux löschen/entfernen

Linux
  1. Benutzer zu Gruppe in Linux hinzufügen, Anleitung (mit Beispielen)

  2. So fügen Sie benutzerdefinierte iptables-Regeln in der CSF-Firewall hinzu

  3. So fügen Sie Shebang # hinzu! mit PHP-Skript unter Linux?

  4. Wie lässt man iptables-Regeln ablaufen?

  5. So richten Sie einen Linux-Server als Router mit NAT ein

So richten Sie eine Firewall mit UFW unter Linux ein

So richten Sie eine Firewall mit Gufw auf einem Linux-Desktop ein

So richten Sie eine Firewall mit GUFW unter Linux ein

So sichern Sie eine Linux-Firewall mit IPTables-Regeln

Cron Vs Anacron:So richten Sie Anacron unter Linux ein (mit einem Beispiel)

So richten Sie eine Firewall auf Ihrem Linux-Server ein