Iptables Essentials: Allgemeine Firewall-Regeln und -Befehle

Einführung

Iptables ist die Software-Firewall, die standardmäßig in den meisten Linux-Distributionen enthalten ist. Diese Anleitung im Cheat-Sheet-Stil enthält eine kurze Referenz zu iptables-Befehlen, mit denen Firewall-Regeln erstellt werden. Diese sind in alltäglichen Szenarien nützlich. Dies umfasst iptables-Beispiele für das Zulassen und Sperren verschiedener Dienste nach Port, Netzwerkschnittstelle und Quell-IP-Adresse.

Verwendung dieses Handbuchs
  • Wenn Sie gerade erst mit der Konfiguration Ihrer iptables-Firewall beginnen, lesen Sie unsere https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall- using-iptables-on-ubuntu-14 -04 [Einführung in Iptables]

  • Bei den meisten der hier beschriebenen Regeln wird davon ausgegangen, dass für Ihre iptables über die Standardeingaberichtlinie der eingehende Datenverkehr auf * DROP * festgelegt ist und Sie den Datenverkehr selektiv zulassen möchten

  • Verwenden Sie die nachfolgenden Abschnitte, die sich auf das beziehen, was Sie erreichen möchten. Die meisten Abschnitte basieren auf keinem anderen, sodass Sie die folgenden Beispiele unabhängig voneinander verwenden können

  • Verwenden Sie das Inhaltsmenü rechts auf dieser Seite (bei großen Seitenbreiten) oder die Suchfunktion Ihres Browsers, um die gewünschten Abschnitte zu finden

  • Kopieren Sie die angegebenen Befehlszeilenbeispiele, und fügen Sie sie ein. Ersetzen Sie dabei die Werte in Rot durch Ihre eigenen Werte

Denken Sie daran, dass die Reihenfolge Ihrer Regeln wichtig ist. Alle diese "+ iptables " - Befehle verwenden die Option " -A ", um die neue Regel an das Ende einer Kette anzuhängen. Wenn Sie es an einer anderen Stelle in der Kette ablegen möchten, können Sie die Option " -I +" verwenden, mit der Sie die Position der neuen Regel angeben können (oder sie einfach am Anfang der Kette platzieren, indem Sie keine Regelnummer angeben ).

Denken Sie daran, dass Sie Ihren aktuellen iptables-Regelsatz mit + sudo iptables -S + und + sudo iptables -L + überprüfen können.

Werfen wir einen Blick auf die iptables-Befehle!

Regeln speichern

Iptables-Regeln sind kurzlebig. Dies bedeutet, dass sie manuell gespeichert werden müssen, damit sie nach einem Neustart bestehen bleiben.

Ubuntu

Unter Ubuntu ist die Verwendung des Pakets + iptables-persistent + der einfachste Weg, iptables-Regeln zu speichern, damit sie einen Neustart überstehen. Installiere es mit apt-get wie folgt:

sudo apt-get install iptables-persistent

Während der Installation werden Sie gefragt, ob Sie Ihre aktuellen Firewall-Regeln speichern möchten.

Wenn Sie Ihre Firewall-Regeln aktualisieren und die Änderungen speichern möchten, führen Sie diesen Befehl aus:

sudo netfilter-persistent save

Führen Sie in Ubuntu-Versionen vor 16.04 stattdessen diesen Befehl aus:

sudo invoke-rc.d iptables-persistent save

CentOS 6 und älter

Unter CentOS 6 und älteren Versionen verwendet CentOS 7 standardmäßig FirewallD. Sie können das Init-Skript + iptables + verwenden, um Ihre iptables-Regeln zu speichern:

sudo service iptables save

Dadurch werden Ihre aktuellen iptables-Regeln in der Datei "+ / etc / sysconfig / iptables +" gespeichert.

Regeln auflisten und löschen

Informationen zum Auflisten und Löschen von iptables-Regeln finden Sie in diesem Lernprogramm: How To Auflisten und Löschen von Iptables-Firewall-Regeln.

Allgemein nützliche Regeln

Dieser Abschnitt enthält eine Reihe von iptables-Befehlen, mit denen Regeln erstellt werden, die auf den meisten Servern allgemein nützlich sind.

Loopback-Verbindungen zulassen

Die * loopback * -Schnittstelle, auch als "+ lo " bezeichnet, wird von einem Computer verwendet, um Netzwerkverbindungen an sich selbst weiterzuleiten. Wenn Sie zum Beispiel ` ping localhost ` oder ` ping 127.0.0.1 +` ausführen, pingt Ihr Server sich selbst mit dem Loopback. Die Loopback-Schnittstelle wird auch verwendet, wenn Sie Ihren Anwendungsserver so konfigurieren, dass eine Verbindung zu einem Datenbankserver mit einer "localhost" -Adresse hergestellt wird. Daher sollten Sie sicherstellen, dass Ihre Firewall diese Verbindungen zulässt.

Führen Sie die folgenden Befehle aus, um den gesamten Datenverkehr auf Ihrer Loopback-Schnittstelle zu akzeptieren:

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

Eingehende Verbindungen zulassen

Da der Netzwerkverkehr in der Regel in beide Richtungen eingehend und ausgehend sein muss, ist es üblich, eine Firewall-Regel zu erstellen, die * etablierten * und * zugehörigen * eingehenden Datenverkehr zulässt, damit der Server ausgehenden Datenverkehr wieder zulässt vom Server selbst initiiert. Dieser Befehl ermöglicht Folgendes:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Ausgehende Verbindungen zulassen

Möglicherweise möchten Sie den ausgehenden Datenverkehr aller * eingerichteten * Verbindungen zulassen, bei denen es sich normalerweise um die Antwort auf legitime eingehende Verbindungen handelt. Dieser Befehl ermöglicht Folgendes:

sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

Intern nach Extern

Angenommen, "+ eth0 " ist Ihr externes Netzwerk und " eth1 +" ist Ihr internes Netzwerk, dann können Ihre internen Benutzer auf das externe zugreifen:

sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

Ungültige Pakete löschen

Einige Netzwerkverkehrspakete werden als * ungültig * markiert. Manchmal kann es nützlich sein, diese Art von Paket zu protokollieren, aber oft ist es in Ordnung, sie fallen zu lassen. Tun Sie dies mit diesem Befehl:

sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

Blockieren Sie eine IP-Adresse

Führen Sie zum Blockieren von Netzwerkverbindungen, die von einer bestimmten IP-Adresse stammen, beispielsweise "+ 15.15.15.51 +" den folgenden Befehl aus:

sudo iptables -A INPUT -s  -j DROP

In diesem Beispiel gibt "+ -s 15.15.15.51 +" eine * Quell * -IP-Adresse von "15.15.15.51" an. Die Quell-IP-Adresse kann in jeder Firewall-Regel angegeben werden, einschließlich einer * allow * -Regel.

Wenn Sie stattdessen die Verbindung * ablehnen * möchten, die auf die Verbindungsanfrage mit einem Fehler "Verbindung abgelehnt" reagiert, ersetzen Sie "DROP" durch "REJECT" wie folgt:

sudo iptables -A INPUT -s  -j REJECT

Blockieren von Verbindungen zu einer Netzwerkschnittstelle

So blockieren Sie Verbindungen von einer bestimmten IP-Adresse, z. "+ 15.15.15.51 " an eine bestimmte Netzwerkschnittstelle, z. ` eth0 +`, benutze diesen Befehl:

iptables -A INPUT -i  -s  -j DROP

Dies ist das gleiche wie im vorherigen Beispiel, mit der Hinzufügung von "+ -i eth0 +". Die Netzwerkschnittstelle kann in jeder Firewall-Regel angegeben werden und ist eine hervorragende Möglichkeit, die Regel auf ein bestimmtes Netzwerk zu beschränken.

Service: SSH

Wenn Sie einen Cloud-Server verwenden, möchten Sie wahrscheinlich eingehende SSH-Verbindungen (Port 22) zulassen, damit Sie eine Verbindung zu Ihrem Server herstellen und diesen verwalten können. In diesem Abschnitt erfahren Sie, wie Sie Ihre Firewall mit verschiedenen SSH-Regeln konfigurieren.

Alle eingehenden SSH zulassen

Führen Sie die folgenden Befehle aus, um alle eingehenden SSH-Verbindungen zuzulassen:

sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Der zweite Befehl, der den ausgehenden Verkehr von * hergestellten * SSH-Verbindungen zulässt, ist nur erforderlich, wenn die Richtlinie "+ OUTPUT " nicht auf " ACCEPT +" gesetzt ist.

Eingehendes SSH von bestimmter IP-Adresse oder Subnetz zulassen

Geben Sie die Quelle an, um eingehende SSH-Verbindungen von einer bestimmten IP-Adresse oder einem bestimmten Subnetz zuzulassen. Wenn Sie beispielsweise das gesamte Subnetz "+ 15.15.15.0 / 24 +" zulassen möchten, führen Sie die folgenden Befehle aus:

sudo iptables -A INPUT -p tcp -s  --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Der zweite Befehl, der den ausgehenden Verkehr von * hergestellten * SSH-Verbindungen zulässt, ist nur erforderlich, wenn die Richtlinie "+ OUTPUT " nicht auf " ACCEPT +" gesetzt ist.

Ausgehendes SSH zulassen

Wenn Ihre Firewall-Richtlinie "+ OUTPUT " nicht auf " ACCEPT +" gesetzt ist und Sie ausgehende SSH-Verbindungen zulassen möchten - Ihr Server initiiert eine SSH-Verbindung zu einem anderen Server - können Sie die folgenden Befehle ausführen:

sudo iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Zulassen von eingehendem Rsync von einer bestimmten IP-Adresse oder einem bestimmten Subnetz

Rsync, das auf Port 873 ausgeführt wird, kann zum Übertragen von Dateien von einem Computer auf einen anderen verwendet werden.

Geben Sie die Quell-IP-Adresse und den Zielport an, um eingehende Rsync-Verbindungen von einer bestimmten IP-Adresse oder einem bestimmten Subnetz zuzulassen. Wenn Sie beispielsweise zulassen möchten, dass das gesamte Subnetz "+ 15.15.15.0 / 24 +" mit Ihrem Server synchronisiert werden kann, führen Sie die folgenden Befehle aus:

sudo iptables -A INPUT -p tcp -s  --dport 873 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 873 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Der zweite Befehl, der den ausgehenden Verkehr von * hergestellten * rsync-Verbindungen zulässt, ist nur erforderlich, wenn die Richtlinie "+ OUTPUT " nicht auf " ACCEPT +" gesetzt ist.

Service: Webserver

Webserver wie Apache und Nginx lauschen normalerweise auf Port 80 und 443 nach HTTP- bzw. HTTPS-Verbindungen. Wenn Ihre Standardrichtlinie für eingehenden Datenverkehr auf Löschen oder Verweigern festgelegt ist, möchten Sie Regeln erstellen, mit denen Ihr Server auf diese Anforderungen reagieren kann.

Alle eingehenden HTTP zulassen

Führen Sie die folgenden Befehle aus, um alle eingehenden HTTP-Verbindungen (Port 80) zuzulassen:

sudo iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 80 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Der zweite Befehl, der den ausgehenden Verkehr von * hergestellten * HTTP-Verbindungen zulässt, ist nur erforderlich, wenn die Richtlinie "+ OUTPUT " nicht auf " ACCEPT +" gesetzt ist.

Alle eingehenden HTTPS zulassen

Führen Sie die folgenden Befehle aus, um alle eingehenden HTTPS-Verbindungen (Port 443) zuzulassen:

sudo iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Der zweite Befehl, der den ausgehenden Verkehr von * hergestellten * HTTP-Verbindungen zulässt, ist nur erforderlich, wenn die Richtlinie "+ OUTPUT " nicht auf " ACCEPT +" gesetzt ist.

Alle eingehenden HTTP- und HTTPS-Nachrichten zulassen

Wenn Sie sowohl HTTP- als auch HTTPS-Verkehr zulassen möchten, können Sie mit dem Modul * multiport * eine Regel erstellen, die beide Ports zulässt. Führen Sie die folgenden Befehle aus, um alle eingehenden HTTP- und HTTPS-Verbindungen (Port 443) zuzulassen:

sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Der zweite Befehl, der den ausgehenden Verkehr von * hergestellten * HTTP- und HTTPS-Verbindungen ermöglicht, ist nur erforderlich, wenn die Richtlinie "+ OUTPUT " nicht auf " ACCEPT +" gesetzt ist.

Dienst: MySQL

MySQL wartet auf Client-Verbindungen an Port 3306. Wenn Ihr MySQL-Datenbankserver von einem Client auf einem Remoteserver verwendet wird, müssen Sie sicherstellen, dass dieser Datenverkehr zugelassen wird.

Erlaube MySQL von einer bestimmten IP-Adresse oder einem bestimmten Subnetz

Geben Sie die Quelle an, um eingehende MySQL-Verbindungen von einer bestimmten IP-Adresse oder einem bestimmten Subnetz aus zuzulassen. Wenn Sie beispielsweise das gesamte Subnetz "+ 15.15.15.0 / 24 +" zulassen möchten, führen Sie die folgenden Befehle aus:

sudo iptables -A INPUT -p tcp -s  --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Der zweite Befehl, der den ausgehenden Datenverkehr von * hergestellten * MySQL-Verbindungen zulässt, ist nur erforderlich, wenn die Richtlinie "+ OUTPUT " nicht auf " ACCEPT +" gesetzt ist.

Ermöglichen Sie MySQL für bestimmte Netzwerkschnittstellen

Um MySQL-Verbindungen zu einer bestimmten Netzwerkschnittstelle zuzulassen, z. B. über eine private Netzwerkschnittstelle "+ eth1 +", verwenden Sie die folgenden Befehle:

sudo iptables -A INPUT -i  -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -o  -p tcp --sport 3306 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Der zweite Befehl, der den ausgehenden Datenverkehr von * hergestellten * MySQL-Verbindungen zulässt, ist nur erforderlich, wenn die Richtlinie "+ OUTPUT " nicht auf " ACCEPT +" gesetzt ist.

Dienst: PostgreSQL

PostgreSQL wartet auf Clientverbindungen an Port 5432. Wenn Ihr PostgreSQL-Datenbankserver von einem Client auf einem Remoteserver verwendet wird, müssen Sie sicherstellen, dass dieser Datenverkehr zugelassen wird.

PostgreSQL von einer bestimmten IP-Adresse oder einem bestimmten Subnetz

Geben Sie die Quelle an, um eingehende PostgreSQL-Verbindungen von einer bestimmten IP-Adresse oder einem bestimmten Subnetz zuzulassen. Wenn Sie beispielsweise das gesamte Subnetz "+ 15.15.15.0 / 24 +" zulassen möchten, führen Sie die folgenden Befehle aus:

sudo iptables -A INPUT -p tcp -s  --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Der zweite Befehl, der den ausgehenden Verkehr von * hergestellten * PostgreSQL-Verbindungen ermöglicht, ist nur erforderlich, wenn die Richtlinie "+ OUTPUT " nicht auf " ACCEPT +" gesetzt ist.

Ermöglichen Sie PostgreSQL für bestimmte Netzwerkschnittstellen

Um PostgreSQL-Verbindungen zu einer bestimmten Netzwerkschnittstelle zuzulassen, verwenden Sie beispielsweise die folgenden Befehle:

sudo iptables -A INPUT -i  -p tcp --dport 5432 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -o  -p tcp --sport 5432 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Der zweite Befehl, der den ausgehenden Verkehr von * hergestellten * PostgreSQL-Verbindungen ermöglicht, ist nur erforderlich, wenn die Richtlinie "+ OUTPUT " nicht auf " ACCEPT +" gesetzt ist.

Service: Mail

Mailserver wie Sendmail und Postfix überwachen abhängig von den für die Mailzustellung verwendeten Protokollen eine Vielzahl von Ports. Wenn Sie einen Mailserver ausführen, ermitteln Sie, welche Protokolle Sie verwenden, und lassen Sie die entsprechenden Datenverkehrstypen zu. Wir zeigen Ihnen auch, wie Sie eine Regel zum Blockieren ausgehender SMTP-Mails erstellen.

Ausgehende SMTP-Mail blockieren

Wenn Ihr Server keine ausgehenden E-Mails senden soll, können Sie diese Art von Datenverkehr blockieren. Führen Sie den folgenden Befehl aus, um ausgehende SMTP-Mail zu blockieren, die Port 25 verwendet:

sudo iptables -A OUTPUT -p tcp --dport 25 -j REJECT

Dadurch wird iptables so konfiguriert, dass der gesamte ausgehende Datenverkehr auf Port 25 * abgelehnt * wird. Wenn Sie einen anderen Dienst anhand seiner Portnummer anstelle von Port 25 ablehnen müssen, ersetzen Sie ihn einfach.

Alle eingehenden SMTP zulassen

Führen Sie die folgenden Befehle aus, damit Ihr Server auf SMTP-Verbindungen an Port 25 antworten kann:

sudo iptables -A INPUT -p tcp --dport 25 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 25 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Der zweite Befehl, der den ausgehenden Verkehr von * hergestellten * SMTP-Verbindungen zulässt, ist nur erforderlich, wenn die Richtlinie "+ OUTPUT " nicht auf " ACCEPT +" gesetzt ist.

Alle eingehenden IMAP zulassen

Führen Sie die folgenden Befehle aus, damit Ihr Server auf IMAP-Verbindungen an Port 143 antworten kann:

sudo iptables -A INPUT -p tcp --dport 143 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 143 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Der zweite Befehl, der den ausgehenden Verkehr von * hergestellten * IMAP-Verbindungen zulässt, ist nur erforderlich, wenn die Richtlinie "+ OUTPUT " nicht auf " ACCEPT +" gesetzt ist.

Alle eingehenden IMAPS zulassen

Führen Sie die folgenden Befehle aus, damit Ihr Server auf IMAPS-Verbindungen über Port 993 antworten kann:

sudo iptables -A INPUT -p tcp --dport 993 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 993 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Der zweite Befehl, der den ausgehenden Datenverkehr von * hergestellten * IMAPS-Verbindungen zulässt, ist nur erforderlich, wenn die Richtlinie "+ OUTPUT " nicht auf " ACCEPT +" gesetzt ist.

Alle eingehenden POP3 zulassen

Führen Sie die folgenden Befehle aus, damit Ihr Server auf POP3-Verbindungen, Port 110, antworten kann:

sudo iptables -A INPUT -p tcp --dport 110 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 110 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Der zweite Befehl, der den ausgehenden Verkehr von * hergestellten * POP3-Verbindungen zulässt, ist nur erforderlich, wenn die Richtlinie "+ OUTPUT " nicht auf " ACCEPT +" gesetzt ist.

Alle eingehenden POP3S zulassen

Führen Sie die folgenden Befehle aus, damit Ihr Server auf POP3S-Verbindungen an Port 995 reagieren kann:

sudo iptables -A INPUT -p tcp --dport 995 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 995 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Der zweite Befehl, der den ausgehenden Verkehr von * hergestellten * POP3S-Verbindungen zulässt, ist nur erforderlich, wenn die Richtlinie "+ OUTPUT " nicht auf " ACCEPT +" gesetzt ist.

Fazit

Dies sollte viele der Befehle abdecken, die häufig beim Konfigurieren einer iptables-Firewall verwendet werden. Natürlich ist iptables ein sehr flexibles Tool. Sie können also die Befehle mit verschiedenen Optionen kombinieren, um sie Ihren spezifischen Anforderungen anzupassen, wenn sie hier nicht behandelt werden.

Wenn Sie Hilfe bei der Einrichtung Ihrer Firewall benötigen, lesen Sie dieses Tutorial: https://www.digitalocean.com/community/tutorials/how-to-choose-an-effective-firewall-policy-to -secure-your-servers [So wählen Sie eine wirksame Firewall-Richtlinie zum Schutz Ihrer Server aus].

Viel Glück!