Connect with us

Wie man

Der Anfängerleitfaden für iptables, die Linux-Firewall

Der Anfängerleitfaden für iptables, die Linux-Firewall

Iptables ist ein extrem flexibles Firewall-Dienstprogramm, das für Linux-Betriebssysteme entwickelt wurde. Egal, ob Sie ein Linux-Neuling oder ein Systemadministrator sind, es gibt wahrscheinlich eine Möglichkeit, wie iptables für Sie von großem Nutzen sein kann. Lesen Sie weiter, während wir Ihnen zeigen, wie Sie die vielseitigste Linux-Firewall konfigurieren.

Foto von ezioman.

Über iptables

iptables ist ein Befehlszeilen-Firewall-Dienstprogramm, das Richtlinienketten verwendet, um Datenverkehr zuzulassen oder zu blockieren. Wenn eine Verbindung auf Ihrem System aufzubauen versucht, sucht iptables in seiner Liste nach einer Regel, mit der es übereinstimmen kann. Wenn es keine findet, greift es auf die Standardaktion zurück.

iptables ist auf jeder Linux-Distribution fast immer vorinstalliert. Um es zu aktualisieren/installieren, rufen Sie einfach das iptables-Paket ab:

sudo apt-get install iptables

Es gibt GUI-Alternativen zu iptables wie Feuerstarter, aber iptables ist nicht wirklich schwer, wenn Sie ein paar Befehle haben. Sie sollten bei der Konfiguration von iptables-Regeln äußerst vorsichtig sein, insbesondere wenn Sie per SSH in einen Server eingebunden sind, da ein falscher Befehl Sie dauerhaft aussperren kann, bis er manuell auf der physischen Maschine behoben wird. Und vergiss nicht Sperren Sie Ihren SSH-Server wenn Sie den Port öffnen.

Arten von Ketten

iptables verwendet drei verschiedene Ketten: Eingabe, Weiterleitung und Ausgabe.

Eingang – Diese Kette wird verwendet, um das Verhalten für eingehende Verbindungen zu steuern. Wenn ein Benutzer beispielsweise versucht, eine SSH-Verbindung zu Ihrem PC/Server herzustellen, versucht iptables, die IP-Adresse und den Port einer Regel in der Eingabekette zuzuordnen.

Nach vorne – Diese Kette wird für eingehende Verbindungen verwendet, die nicht tatsächlich lokal zugestellt werden. Denken Sie an einen Router – Daten werden immer an ihn gesendet, sind aber selten tatsächlich für den Router selbst bestimmt; die Daten werden nur an ihr Ziel weitergeleitet. Sofern Sie keine Art von Routing, NATing oder etwas anderes auf Ihrem System durchführen, das eine Weiterleitung erfordert, werden Sie diese Kette nicht einmal verwenden.

Es gibt einen sicheren Weg, um zu überprüfen, ob Ihr System die Vorwärtskette verwendet/benötigt.

iptables -L -v

Der obige Screenshot zeigt einen Server, der seit einigen Wochen läuft und keine Einschränkungen für eingehende oder ausgehende Verbindungen hat. Wie Sie sehen, hat die Eingabekette 11 GB Pakete verarbeitet und die Ausgabekette 17 GB. Andererseits brauchte die Vorwärtskette kein einzelnes Paket zu verarbeiten. Dies liegt daran, dass der Server keine Weiterleitung durchführt oder als Pass-Through-Gerät verwendet wird.

Ausgabe – Diese Kette wird für ausgehende Verbindungen verwendet. Wenn Sie beispielsweise versuchen, howtogeek.com zu pingen, überprüft iptables seine Ausgabekette, um zu sehen, welche Regeln bezüglich ping und howtogeek.com gelten, bevor eine Entscheidung getroffen wird, den Verbindungsversuch zuzulassen oder abzulehnen.

Der Vorbehalt

Auch wenn das Pingen eines externen Hosts so aussieht, als müsste nur die Ausgabekette durchlaufen werden, denken Sie daran, dass zur Rückgabe der Daten auch die Eingabekette verwendet wird. Denken Sie bei der Verwendung von iptables zum Sperren Ihres Systems daran, dass viele Protokolle eine Zwei-Wege-Kommunikation erfordern, sodass sowohl die Eingabe- als auch die Ausgabekette richtig konfiguriert werden müssen. SSH ist ein gängiges Protokoll, das vergessen wird, in beiden Ketten zuzulassen.

Standardverhalten der Richtlinienkette

Bevor Sie bestimmte Regeln konfigurieren und konfigurieren, sollten Sie entscheiden, wie das Standardverhalten der drei Ketten aussehen soll. Mit anderen Worten, was soll iptables tun, wenn die Verbindung keinen bestehenden Regeln entspricht?

Um zu sehen, was Ihre Richtlinienketten derzeit für nicht übereinstimmenden Datenverkehr konfiguriert sind, führen Sie die iptables -L Befehl.

Wie Sie sehen, haben wir auch den grep-Befehl verwendet, um eine sauberere Ausgabe zu erhalten. In diesem Screenshot wird davon ausgegangen, dass unsere Ketten derzeit Traffic akzeptieren.

In den meisten Fällen möchten Sie, dass Ihr System standardmäßig Verbindungen akzeptiert. Sofern Sie die Richtlinienkettenregeln nicht zuvor geändert haben, sollte diese Einstellung bereits konfiguriert sein. So oder so, hier ist der Befehl, um standardmäßig Verbindungen zu akzeptieren:

iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT

Wenn Sie standardmäßig die Annahmeregel verwenden, können Sie dann mit iptables bestimmte IP-Adressen oder Portnummern verweigern, während Sie weiterhin alle anderen Verbindungen akzeptieren. Wir kommen in einer Minute zu diesen Befehlen.

Wenn Sie lieber alle Verbindungen verweigern und manuell angeben möchten, welche Verbindungen Sie zulassen möchten, sollten Sie die Standardrichtlinie Ihrer Ketten auf «Drop» ändern. Dies wäre wahrscheinlich nur für Server sinnvoll, die sensible Informationen enthalten und mit denen immer nur die gleichen IP-Adressen verbunden sind.

iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP

Verbindungsspezifische Antworten

Wenn Ihre Standardkettenrichtlinien konfiguriert sind, können Sie iptables Regeln hinzufügen, damit es weiß, was zu tun ist, wenn es auf eine Verbindung von oder zu einer bestimmten IP-Adresse oder einem bestimmten Port stößt. In diesem Handbuch werden wir die drei grundlegendsten und am häufigsten verwendeten „Antworten“ durchgehen.

Annehmen – Erlauben Sie die Verbindung.

Tropfen – Trennen Sie die Verbindung, tun Sie so, als wäre es nie passiert. Dies ist am besten, wenn Sie nicht möchten, dass die Quelle erkennt, dass Ihr System existiert.

Ablehnen – Verbindung nicht zulassen, aber Fehler zurücksenden. Dies ist am besten, wenn Sie nicht möchten, dass eine bestimmte Quelle eine Verbindung zu Ihrem System herstellt, aber Sie möchten, dass sie wissen, dass Ihre Firewall sie blockiert hat.

Der beste Weg, den Unterschied zwischen diesen drei Regeln zu zeigen, besteht darin, zu zeigen, wie es aussieht, wenn ein PC versucht, einen Linux-Rechner mit iptables zu pingen, die für jede dieser Einstellungen konfiguriert sind.

Zulassen der Verbindung:

Verbindung trennen:

Verbindung ablehnen:

Zulassen oder Blockieren bestimmter Verbindungen

Wenn Ihre Richtlinienketten konfiguriert sind, können Sie jetzt iptables so konfigurieren, dass bestimmte Adressen, Adressbereiche und Ports zugelassen oder blockiert werden. In diesen Beispielen setzen wir die Verbindungen auf DROP, aber Sie können sie ändern auf ACCEPT oder REJECT, abhängig von Ihren Anforderungen und der Konfiguration Ihrer Richtlinienketten.

Hinweis: In diesen Beispielen verwenden wir iptables -A um Regeln an die vorhandene Kette anzuhängen. iptables beginnt am Anfang seiner Liste und geht jede Regel durch, bis es eine findet, die zutrifft. Wenn Sie eine Regel über einer anderen einfügen müssen, können Sie iptables -I [chain] [number] um die Nummer anzugeben, die in der Liste enthalten sein soll.

Verbindungen von einer einzigen IP-Adresse

Dieses Beispiel zeigt, wie Sie alle Verbindungen von der IP-Adresse 10.10.10.10 blockieren.

iptables -A INPUT -s 10.10.10.10 -j DROP

Verbindungen von einer Reihe von IP-Adressen

Dieses Beispiel zeigt, wie Sie alle IP-Adressen im Netzwerkbereich 10.10.10.0/24 blockieren. Sie können eine Netzmaske oder eine Standard-Schrägstrich-Notation verwenden, um den Bereich der IP-Adressen anzugeben.

iptables -A INPUT -s 10.10.10.0/24 -j DROP

oder

iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

Verbindungen zu einem bestimmten Port

Dieses Beispiel zeigt, wie Sie SSH-Verbindungen ab dem 10.10.10.10 blockieren.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

Sie können „ssh“ durch ein beliebiges Protokoll oder eine beliebige Portnummer ersetzen. Die -p tcp Ein Teil des Codes teilt iptables mit, welche Art von Verbindung das Protokoll verwendet. Wenn Sie ein Protokoll blockieren, das UDP statt TCP verwendet, dann -p udp wäre stattdessen notwendig.

Dieses Beispiel zeigt, wie Sie SSH-Verbindungen von einer beliebigen IP-Adresse blockieren.

iptables -A INPUT -p tcp --dport ssh -j DROP

Verbindungsstatus

Wie bereits erwähnt, erfordern viele Protokolle eine Zwei-Wege-Kommunikation. Wenn Sie beispielsweise SSH-Verbindungen zu Ihrem System zulassen möchten, müssen den Eingabe- und Ausgabeketten eine Regel hinzugefügt werden. Aber was ist, wenn Sie nur möchten, dass SSH in Ihr System eindringt? Wird das Hinzufügen einer Regel zur Ausgabekette nicht auch ausgehende SSH-Versuche zulassen?

Hier kommen Verbindungszustände ins Spiel, die Ihnen die Möglichkeit geben, die Zweiwegekommunikation zuzulassen, aber nur den Aufbau von Einwegverbindungen zuzulassen. Schauen Sie sich dieses Beispiel an, wo SSH-Verbindungen AB 10.10.10.10 erlaubt sind, SSH-Verbindungen TO 10.10.10.10 jedoch nicht. Das System darf jedoch Informationen über SSH zurücksenden, solange die Session bereits aufgebaut ist, was eine SSH-Kommunikation zwischen diesen beiden Hosts ermöglicht.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT

Änderungen speichern

Die Änderungen, die Sie an Ihren iptables-Regeln vornehmen, werden beim nächsten Neustart des iptables-Dienstes verworfen, es sei denn, Sie führen einen Befehl zum Speichern der Änderungen aus. Dieser Befehl kann je nach Distribution unterschiedlich sein:

Ubuntu:

sudo /sbin/iptables-save

Red Hat / CentOS:

/sbin/service iptables save

Oder

/etc/init.d/iptables save

Andere Befehle

Listen Sie die aktuell konfigurierten iptables-Regeln auf:

iptables -L

Hinzufügen der -v Option gibt Ihnen Paket- und Byte-Informationen und fügt hinzu -n wird alles numerisch auflisten. Mit anderen Worten – Hostnamen, Protokolle und Netzwerke werden als Zahlen aufgelistet.

Um alle derzeit konfigurierten Regeln zu löschen, können Sie den Befehl flush ausführen.

iptables -F

Continue Reading
Click to comment

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Tendencia