Einführung
Iptables ist eine Software-Firewall für Linux-Distributionen. Dieses Spickzettel-Style-Handbuch bietet eine schnelle Referenz zu iptables-Befehlen, die Firewall-Regeln erstellen, die in üblichen Alltagsszenarien nützlich sind. Dies beinhaltet iptables-Beispiele zum Erlauben und Blockieren verschiedener Dienste nach Port, Netzwerkschnittstelle und Quell-IP-Adresse.
Wie man dieses Handbuch verwendet
- Die meisten hier beschriebenen Regeln gehen davon aus, dass Ihre iptables eingehenden Datenverkehr auf DROP eingestellt ist, durch die Standard-Eingangsrichtlinie, und Sie eingehenden Verkehr selektiv zulassen möchten
- Verwenden Sie diejenigen Abschnitte, die für das, was Sie erreichen möchten, relevant sind. Die meisten Abschnitte hängen nicht voneinander ab, sodass Sie die untenstehenden Beispiele unabhängig voneinander verwenden können
- Verwenden Sie das Inhaltsverzeichnis auf der rechten Seite dieser Seite (bei breiten Seitenbreiten) oder die Suchfunktion Ihres Browsers, um die benötigten Abschnitte zu finden
- Kopieren und fügen Sie die angegebenen Befehlszeilenbeispiele ein, wobei Sie die markierten Werte durch Ihre eigenen ersetzen
Beachten Sie, dass die Reihenfolge Ihrer Regeln wichtig ist. Alle diese iptables
-Befehle verwenden die Option -A
, um die neue Regel am Ende einer Kette anzuhängen. Wenn Sie sie an anderer Stelle in der Kette platzieren möchten, können Sie die Option -I
verwenden, mit der Sie die Position der neuen Regel angeben können (oder platzieren Sie sie am Anfang der Kette, indem Sie keine Regelnummer angeben).
Hinweis: Wenn Sie mit Firewalls arbeiten, achten Sie darauf, sich nicht aus Ihrem eigenen Server auszusperren, indem Sie den SSH-Verkehr (Standardmäßig Port 22) blockieren. Wenn Sie aufgrund Ihrer Firewall-Einstellungen den Zugriff verlieren, müssen Sie möglicherweise über eine webbasierte Konsole eine Verbindung dazu herstellen, um Ihren Zugriff zu reparieren. Wenn Sie DigitalOcean verwenden, können Sie unsere Dokumentation zum Recovery-Konsole-Produkt für weitere Informationen lesen. Sobald Sie über die Konsole verbunden sind, können Sie Ihre Firewall-Regeln ändern, um SSH-Zugriff zu erlauben (oder allen Verkehr zuzulassen). Wenn Ihre gespeicherten Firewall-Regeln den SSH-Zugriff erlauben, ist eine andere Methode, Ihren Server neu zu starten.
Denken Sie daran, dass Sie Ihre aktuellen iptables-Regeln mit sudo iptables -S
und sudo iptables -L
überprüfen können.
Lassen Sie uns einen Blick auf die iptables-Befehle werfen!
Regeln speichern
Iptables-Regeln sind flüchtig, das bedeutet, sie müssen manuell gespeichert werden, damit sie nach einem Neustart bestehen bleiben.
Auf Ubuntu können Sie iptables-Regeln auf eine Weise speichern, indem Sie das Paket iptables-persistent
verwenden. Installieren Sie es mit apt wie folgt:
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:
Andere Linux-Distributionen können alternative Möglichkeiten haben, um Ihre iptables-Änderungen dauerhaft zu machen. Bitte beachten Sie die entsprechende Dokumentation für weitere Informationen.
Auflisten und Löschen von Regeln
Wenn Sie lernen möchten, wie Sie iptables-Regeln auflisten und löschen können, sehen Sie sich dieses Tutorial an: Wie man Iptables Firewall-Regeln auflistet und löscht.
Allgemein nützliche Regeln
In diesem Abschnitt finden Sie eine Vielzahl von iptables-Befehlen, die Regeln erstellen, die auf den meisten Servern generell nützlich sind.
Zulassen von Loopback-Verbindungen
Die Loopback-Schnittstelle, auch als lo
bezeichnet, wird von einem Computer verwendet, um Netzwerkverbindungen an sich selbst weiterzuleiten. Wenn Sie beispielsweise ping localhost
oder ping 127.0.0.1
ausführen, wird Ihr Server sich selbst über die Loopback-Schnittstelle anpingen. Die Loopback-Schnittstelle wird auch verwendet, wenn Sie Ihren Anwendungsserver so konfigurieren, dass er sich mit einem Datenbankserver unter Verwendung einer localhost
-Adresse verbindet. Daher sollten Sie sicherstellen, dass Ihre Firewall diese Verbindungen zulässt.
Um den gesamten Datenverkehr auf Ihrer Loopback-Schnittstelle zu akzeptieren, führen Sie diese Befehle aus:
Erlauben von etablierten und verwandten eingehenden Verbindungen
Da Netzwerkverkehr im Allgemeinen bidirektional sein muss – eingehend und ausgehend –, um ordnungsgemäß zu funktionieren, ist es typisch, eine Firewall-Regel zu erstellen, die eingehenden Verkehr, der etabliert ist und mit dem verwandt ist, zulässt, sodass der Server Rückverkehr für ausgehende Verbindungen zulässt, die vom Server selbst initiiert wurden. Dieser Befehl wird dies ermöglichen:
Erlauben von etablierten ausgehenden Verbindungen
Sie möchten möglicherweise den ausgehenden Datenverkehr aller etablierten Verbindungen zulassen, die in der Regel die Antwort auf legitime eingehende Verbindungen sind. Mit diesem Befehl wird das ermöglicht:
Zulassen des internen Netzwerks auf das externe Netzwerk zugreifen
Unter der Annahme, dass eth0
Ihr externes Netzwerk ist und eth1
Ihr internes Netzwerk ist, ermöglicht dies Ihrem internen Netzwerk, auf das externe zuzugreifen:
Ungültige Pakete abwerfen
Einige Netzwerkverkehrspakete werden als ungültig markiert. Manchmal kann es nützlich sein, diese Art von Paketen zu protokollieren, aber oft ist es in Ordnung, sie abzuwerfen. Tun Sie dies mit diesem Befehl:
Blockieren einer IP-Adresse
Um Netzwerkverbindungen zu blockieren, die von einer bestimmten IP-Adresse ausgehen, beispielsweise 203.0.113.51
, führen Sie diesen Befehl aus:
In diesem Beispiel gibt -s 203.0.113.51
die Quell-IP-Adresse „203.0.113.51“ an. Die Quell-IP-Adresse kann in jeder Firewall-Regel angegeben werden, einschließlich einer Erlaubnis-Regel.
Wenn Sie die Verbindung stattdessen ablehnen möchten, was mit einem „Verbindung abgelehnt“ Fehler auf die Verbindungsanfrage reagiert, ersetzen Sie „DROP“ durch „REJECT“ wie folgt:
Blockieren von Verbindungen mit einem Netzwerkinterface
Um Verbindungen von einer bestimmten IP-Adresse, z.B. 203.0.113.51
, zu einem bestimmten Netzwerkinterface, z.B. eth0
, zu blockieren, verwenden Sie diesen Befehl:
Dies entspricht dem vorherigen Beispiel, mit dem Zusatz von -i eth0
. Das Netzwerkinterface kann in jeder Firewall-Regel angegeben werden und ist eine gute Möglichkeit, die Regel auf ein bestimmtes Netzwerk zu beschränken.
Dienst: SSH
Wenn Sie einen Server ohne lokale Konsole verwenden, möchten Sie wahrscheinlich eingehende SSH-Verbindungen (Port 22) zulassen, damit Sie eine Verbindung zu Ihrem Server herstellen und diesen verwalten können. Dieser Abschnitt behandelt die Konfiguration Ihrer Firewall mit verschiedenen SSH-bezogenen Regeln.
Erlauben aller eingehenden SSH-Verbindungen
Um alle eingehenden SSH-Verbindungen zu erlauben, führen Sie diese Befehle aus:
Der zweite Befehl, der den ausgehenden Datenverkehr von etablierten SSH-Verbindungen erlaubt, ist nur erforderlich, wenn die OUTPUT
-Richtlinie nicht auf ACCEPT
festgelegt ist.
Erlauben von eingehenden SSH-Verbindungen von einer bestimmten IP-Adresse oder Subnetz
Um eingehende SSH-Verbindungen von einer bestimmten IP-Adresse oder einem Subnetz zu erlauben, geben Sie die Quelle an. Wenn Sie beispielsweise das gesamte 203.0.113.0/24
-Subnetz zulassen möchten, führen Sie diese Befehle aus:
Der zweite Befehl, der den ausgehenden Datenverkehr von etablierten SSH-Verbindungen erlaubt, ist nur erforderlich, wenn die OUTPUT
-Richtlinie nicht auf ACCEPT
festgelegt ist.
Erlauben von ausgehenden SSH-Verbindungen
Wenn Ihre Firewall-Ausgabe Richtlinie 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 diese Befehle ausführen:
Zulassen eingehender Rsync von einer bestimmten IP-Adresse oder Subnetz
Rsync, das auf Port 873 läuft, kann verwendet werden, um Dateien von einem Computer auf einen anderen zu übertragen.
Um eingehende Rsync-Verbindungen von einer bestimmten IP-Adresse oder einem Subnetz zuzulassen, geben Sie die Quell-IP-Adresse und den Zielport an. Wenn Sie beispielsweise dem gesamten Subnetz 203.0.113.0/24
erlauben möchten, auf Ihren Server zu rsyncen, führen Sie diese Befehle aus:
Der zweite Befehl, der den ausgehenden Verkehr von etablierten rsync-Verbindungen zulässt, ist nur erforderlich, wenn die Ausgabepolitik nicht auf ‚ACCEPT‘ gesetzt ist.
Dienst: Webserver
Webserver wie Apache und Nginx hören typischerweise auf Anfragen auf Port 80 und 443 für HTTP- bzw. HTTPS-Verbindungen. Wenn Ihre Standardrichtlinie für eingehenden Verkehr auf ‚Drop‘ oder ‚Deny‘ eingestellt ist, möchten Sie Regeln erstellen, die es Ihrem Server ermöglichen, auf diese Anfragen zu antworten.
Erlauben aller eingehenden HTTP
Um alle eingehenden HTTP (Port 80) Verbindungen zuzulassen, führen Sie diese Befehle aus:
Der zweite Befehl, der den ausgehenden Datenverkehr von etablierten HTTP-Verbindungen ermöglicht, ist nur erforderlich, wenn die Richtlinie AUSGABE
nicht auf AKZEPTIEREN
gesetzt ist.
Erlauben aller eingehenden HTTPS
Um alle eingehenden HTTPS (Port 443) Verbindungen zuzulassen, führen Sie diese Befehle aus:
Der zweite Befehl, der den ausgehenden Datenverkehr von etablierten HTTP-Verbindungen ermöglicht, ist nur erforderlich, wenn die Richtlinie AUSGABE
nicht auf AKZEPTIEREN
gesetzt ist.
Erlauben aller eingehenden HTTP und HTTPS
Wenn Sie sowohl den HTTP- als auch den HTTPS-Verkehr zulassen möchten, können Sie das multiport-Modul verwenden, um eine Regel zu erstellen, die beide Ports zulässt. Um alle eingehenden HTTP- und HTTPS (Port 443) Verbindungen zuzulassen, führen Sie diese Befehle aus:
Der zweite Befehl, der den ausgehenden Verkehr von etablierten HTTP- und HTTPS-Verbindungen ermöglicht, ist nur erforderlich, wenn die OUTPUT-Richtlinie nicht auf ACCEPT gesetzt ist.
Dienst: MySQL
MySQL hört auf Client-Verbindungen am Port 3306. Wenn Ihr MySQL-Datenbankserver von einem Client auf einem Remote-Server verwendet wird, müssen Sie sicherstellen, dass dieser Verkehr zugelassen ist.
Zulassen von MySQL von einer bestimmten IP-Adresse oder einem Subnetz
Um eingehende MySQL-Verbindungen von einer bestimmten IP-Adresse oder einem Subnetz zuzulassen, geben Sie die Quelle an. Wenn Sie beispielsweise das gesamte Subnetz 203.0.113.0/24
zulassen möchten, führen Sie diese Befehle aus:
Der zweite Befehl, der den ausgehenden Verkehr von etablierten MySQL-Verbindungen ermöglicht, ist nur erforderlich, wenn die OUTPUT-Richtlinie nicht auf ACCEPT gesetzt ist.
Zulassen von MySQL für eine bestimmte Netzwerkschnittstelle
Um MySQL-Verbindungen über eine bestimmte Netzwerkschnittstelle zuzulassen – nehmen wir an, Sie haben eine private Netzwerkschnittstelle eth1
, zum Beispiel – verwenden Sie diese Befehle:
Der zweite Befehl, der den ausgehenden Datenverkehr von hergestellten MySQL-Verbindungen ermöglicht, ist nur erforderlich, wenn die Richtlinie OUTPUT
nicht auf ACCEPT
festgelegt ist.
Dienst: PostgreSQL
PostgreSQL lauscht auf Client-Verbindungen auf Port 5432. Wenn Ihr PostgreSQL-Datenbankserver von einem Client auf einem entfernten Server verwendet wird, müssen Sie sicherstellen, dass dieser Datenverkehr zugelassen ist.
PostgreSQL von einer bestimmten IP-Adresse oder Subnetz
Um eingehende PostgreSQL-Verbindungen von einer bestimmten IP-Adresse oder einem Subnetz zuzulassen, geben Sie die Quelle an. Wenn Sie beispielsweise das gesamte Subnetz 203.0.113.0/24
zulassen möchten, führen Sie diese Befehle aus:
Der zweite Befehl, der den ausgehenden Datenverkehr von hergestellten PostgreSQL-Verbindungen ermöglicht, ist nur erforderlich, wenn die Richtlinie OUTPUT
nicht auf ACCEPT
festgelegt ist.
Erlauben von PostgreSQL für bestimmte Netzwerkschnittstelle
Um PostgreSQL-Verbindungen zu einer bestimmten Netzwerkschnittstelle zuzulassen – nehmen wir an, Sie haben eine private Netzwerkschnittstelle eth1
, verwenden Sie diese Befehle:
Der zweite Befehl, der den ausgehenden Verkehr von etablierten PostgreSQL-Verbindungen ermöglicht, ist nur erforderlich, wenn die Richtlinie OUTPUT
nicht auf ACCEPT
gesetzt ist.
Dienst: E-Mail
E-Mail-Server wie Sendmail und Postfix hören auf einer Vielzahl von Ports, je nach den verwendeten Protokollen für die E-Mail-Zustellung. Wenn Sie einen Mail-Server betreiben, bestimmen Sie, welche Protokolle Sie verwenden, und lassen Sie die entsprechenden Arten von Verkehr zu. Wir zeigen Ihnen auch, wie Sie eine Regel erstellen, um ausgehende SMTP-E-Mails zu blockieren.
Blockieren ausgehender SMTP-E-Mails
Wenn Ihr Server keine ausgehenden E-Mails senden soll, möchten Sie möglicherweise diese Art von Verkehr blockieren. Um ausgehende SMTP-E-Mails zu blockieren, die Port 25 verwenden, führen Sie diesen Befehl aus:
Dies konfiguriert iptables so, dass alle ausgehenden Verbindungen auf Port 25 abgelehnt werden. Wenn Sie einen anderen Dienst anhand seiner Portnummer ablehnen müssen, ersetzen Sie die Portnummer 25
oben.
Zulassen aller eingehenden SMTP
Um Ihrem Server zu erlauben, auf SMTP-Verbindungen auf Port 25 zu antworten, führen Sie diese Befehle aus:
Der zweite Befehl, der den ausgehenden Datenverkehr von etablierten SMTP-Verbindungen zulässt, ist nur erforderlich, wenn die Richtlinie OUTPUT
nicht auf ACCEPT
gesetzt ist.
Zulassen aller eingehenden IMAP
Um Ihrem Server zu erlauben, auf IMAP-Verbindungen auf Port 143 zu antworten, führen Sie diese Befehle aus:
Der zweite Befehl, der den ausgehenden Datenverkehr von etablierten IMAP-Verbindungen zulässt, ist nur erforderlich, wenn die Richtlinie OUTPUT
nicht auf ACCEPT
gesetzt ist.
Zulassen aller eingehenden IMAPS
Um Ihrem Server zu erlauben, auf IMAPS-Verbindungen, Port 993, zu antworten, führen Sie diese Befehle aus:
Der zweite Befehl, der den ausgehenden Datenverkehr von etablierten IMAPS-Verbindungen erlaubt, ist nur notwendig, wenn die Richtlinie OUTPUT
nicht auf ACCEPT
gesetzt ist.
Zulassen aller eingehenden POP3-Verbindungen
Um Ihrem Server zu erlauben, auf POP3-Verbindungen, Port 110, zu antworten, führen Sie diese Befehle aus:
Der zweite Befehl, der den ausgehenden Datenverkehr von etablierten POP3-Verbindungen erlaubt, ist nur notwendig, wenn die Richtlinie OUTPUT
nicht auf ACCEPT
gesetzt ist.
Zulassen aller eingehenden POP3S-Verbindungen
Um Ihrem Server zu erlauben, auf POP3S-Verbindungen, Port 995, zu antworten, führen Sie diese Befehle aus:
Der zweite Befehl, der den ausgehenden Datenverkehr von etablierten POP3S-Verbindungen erlaubt, ist nur notwendig, wenn die Richtlinie OUTPUT
nicht auf ACCEPT
gesetzt ist.
Abschluss
Das sollte viele der Befehle abdecken, die häufig verwendet werden, um eine iptables-Firewall zu konfigurieren. Natürlich ist iptables ein sehr flexibles Tool, also fühlen Sie sich frei, die Befehle mit verschiedenen Optionen zu kombinieren, um Ihre spezifischen Anforderungen zu erfüllen, wenn sie hier nicht abgedeckt sind.
Wenn Sie Hilfe bei der Bestimmung benötigen, wie Ihre Firewall eingerichtet werden soll, werfen Sie einen Blick auf dieses Tutorial: Wie Sie eine effektive Firewall-Richtlinie auswählen, um Ihre Server zu sichern.