Startseite » wie man » Das Einsteigerhandbuch für iptables, die Linux-Firewall

    Das Einsteigerhandbuch für iptables, die Linux-Firewall

    Iptables ist ein äußerst flexibles Firewall-Dienstprogramm für Linux-Betriebssysteme. Egal, ob Sie ein Linux-Neuling oder ein Systemadministrator sind, es gibt wahrscheinlich eine Möglichkeit, dass iptables für Sie von großem Nutzen ist. 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 den Datenverkehr zuzulassen oder zu blockieren. Wenn eine Verbindung versucht, sich auf Ihrem System zu etablieren, sucht iptables in der Liste nach einer Regel, die der Regel entspricht. Wenn es keine findet, greift es auf die Standardaktion zurück.

    iptables ist auf jeder Linux-Distribution fast immer vorinstalliert. Zum Aktualisieren / Installieren rufen Sie einfach das iptables-Paket ab:

    sudo apt-get install iptables

    Es gibt GUI-Alternativen zu iptables wie Firestarter, aber iptables ist nicht wirklich schwer, wenn Sie ein paar Befehle haben. Sie möchten beim Konfigurieren von iptables-Regeln äußerst vorsichtig sein, insbesondere wenn Sie SSH-fähig sind, da ein falscher Befehl Sie dauerhaft sperren kann, bis er manuell auf dem physischen Computer behoben wird.

    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 Eingangskette zuzuordnen.

    Nach vorne - Diese Kette wird für eingehende Verbindungen verwendet, die nicht tatsächlich lokal bereitgestellt werden. Stellen Sie sich einen Router vor - Daten werden immer an ihn gesendet, sind aber selten für den Router selbst bestimmt. Die Daten werden nur an ihr Ziel weitergeleitet. Wenn Sie kein Routing, NATing oder etwas anderes auf Ihrem System durchführen, für das eine Weiterleitung erforderlich ist, verwenden Sie diese Kette nicht einmal.

    Es gibt eine sichere Methode, um zu prüfen, ob Ihr System die Vorwärtskette verwendet oder nicht.

    iptables -L -v

    Der Screenshot oben zeigt einen Server, der seit einigen Wochen läuft, und hat keine Beschränkungen für eingehende oder ausgehende Verbindungen. Wie Sie sehen, hat die Eingangskette 11 GB Pakete und die Ausgangskette 17 GB verarbeitet. Andererseits muss die Vorwärtskette kein einzelnes Paket verarbeiten. Dies liegt daran, dass der Server keine Weiterleitung durchführt oder als Durchgangsgerät verwendet wird.

    Ausgabe - Diese Kette wird für ausgehende Verbindungen verwendet. Wenn Sie beispielsweise versuchen, an howtogeek.com ein Ping durchzuführen, überprüft iptables seine Ausgabekette auf die Regeln für ping und howtogeek.com, bevor Sie eine Entscheidung zum Zulassen oder Ablehnen des Verbindungsversuchs treffen.

    Der Vorbehalt

    Auch wenn das Pingen eines externen Hosts wie etwas aussieht, das nur die Ausgabekette durchlaufen muss, sollten Sie daran denken, dass zur Rückgabe der Daten auch die Eingabekette verwendet wird. Beachten Sie bei der Verwendung von iptables zum Sperren Ihres Systems, dass für viele Protokolle eine bidirektionale Kommunikation erforderlich ist, sodass sowohl die Eingabe- als auch die Ausgabekette ordnungsgemäß konfiguriert werden müssen. SSH ist ein allgemeines Protokoll, das die Benutzer in beiden Ketten vergessen lassen.

    Standardverhalten der Richtlinienkette

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

    Um zu sehen, was Ihre Richtlinienketten derzeit für den nicht übereinstimmenden Datenverkehr konfiguriert haben, führen Sie das aus iptables -L Befehl.

    Wie Sie sehen, haben wir auch den Befehl grep verwendet, um eine sauberere Ausgabe zu erhalten. In diesem Screenshot sind unsere Ketten derzeit so eingestellt, dass sie Verkehr akzeptieren.

    Meistens soll Ihr System Verbindungen standardmäßig akzeptieren. Wenn Sie die Richtlinienkettenregeln nicht zuvor geändert haben, sollte diese Einstellung bereits konfiguriert sein. So oder so, hier der Befehl, Verbindungen standardmäßig zu akzeptieren:

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

    Als Standardeinstellung für die Annahmeregel können Sie dann iptables verwenden, um bestimmte IP-Adressen oder Portnummern zu sperren, während Sie weiterhin alle anderen Verbindungen akzeptieren. Wir werden in einer Minute zu diesen Befehlen kommen.

    Wenn Sie lieber alle Verbindungen ablehnen und manuell angeben möchten, welche Verbindungen Sie zulassen möchten, sollten Sie die Standardrichtlinie Ihrer Ketten ändern, um sie zu löschen. Dies wäre wahrscheinlich nur für Server sinnvoll, die vertrauliche Informationen enthalten und immer nur über 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 mit dem Hinzufügen von Regeln zu iptables beginnen, sodass Sie wissen, was zu tun ist, wenn eine Verbindung von oder zu einer bestimmten IP-Adresse oder einem bestimmten Port hergestellt wird. In diesem Leitfaden werden die drei grundlegendsten und am häufigsten verwendeten "Antworten" behandelt..

    Akzeptieren - Verbindung zulassen.

    Fallen - Trennen Sie die Verbindung, verhalten Sie sich, als wäre es nie passiert Dies ist am besten, wenn Sie nicht möchten, dass die Quelle Ihr System erkennt.

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

    Der beste Weg, den Unterschied zwischen diesen drei Regeln aufzuzeigen, besteht darin, zu zeigen, wie es aussieht, wenn ein PC versucht, ein Ping-Signal an eine Linux-Maschine mit iptables für jede dieser Einstellungen zu senden.

    Verbindung zulassen:

    Verbindung trennen:

    Verbindung ablehnen:

    Zulassen oder Blockieren bestimmter Verbindungen

    Wenn Ihre Richtlinienketten konfiguriert sind, können Sie jetzt iptables konfigurieren, um bestimmte Adressen, Adressbereiche und Ports zuzulassen oder zu blockieren. In diesen Beispielen setzen wir die Verbindungen auf FALLEN, aber Sie können sie auf umschalten AKZEPTIEREN oder ABLEHNEN, abhängig von Ihren Bedürfnissen und wie Sie Ihre Richtlinienketten konfiguriert haben.

    Hinweis: In diesen Beispielen werden wir verwenden iptables -A Regeln an die bestehende Kette anhängen. iptables beginnt am Anfang seiner Liste und durchläuft jede Regel, bis sie eine Regel findet, die sie erfüllt. Wenn Sie eine Regel über einer anderen einfügen möchten, können Sie verwenden Iptables -I [Kette] [Nummer] um die Nummer anzugeben, die in der Liste stehen soll.

    Verbindungen von einer einzigen IP-Adresse

    Dieses Beispiel zeigt, wie alle Verbindungen von der IP-Adresse 10.10.10.10 blockiert werden.

    iptables -A INPUT -s 10.10.10.10 -j DROP

    Verbindungen aus einem Bereich von IP-Adressen

    Dieses Beispiel zeigt, wie alle IP-Adressen im Netzwerkbereich 10.10.10.0/24 blockiert werden. Sie können eine Netzmaske oder eine Standard-Schrägstrichnotation verwenden, um den IP-Adressbereich 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. Das -p tcp Ein Teil des Codes teilt iptables mit, welche Art von Verbindung das Protokoll verwendet. Wenn Sie ein Protokoll blockiert haben, das UDP anstelle von TCP verwendet, dann -pudp wäre stattdessen notwendig.

    Dieses Beispiel zeigt, wie SSH-Verbindungen von einer beliebigen IP-Adresse blockiert werden.

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

    Verbindungszustände

    Wie bereits erwähnt, erfordern viele Protokolle eine bidirektionale Kommunikation. Wenn Sie beispielsweise SSH-Verbindungen zu Ihrem System zulassen möchten, müssen den Eingabe- und Ausgabeketten eine Regel hinzugefügt werden. Was aber, wenn Sie möchten, dass nur SSH in Ihr System kommt? Das Hinzufügen einer Regel zur Ausgabekette erlaubt auch ausgehende SSH-Versuche?

    Hier kommen Verbindungszustände ins Spiel, die Ihnen die Möglichkeit geben, bidirektionale Kommunikation zuzulassen, aber nur einseitige Verbindungen herzustellen. Sehen Sie sich dieses Beispiel an, in dem SSH-Verbindungen FROM 10.10.10.10 zulässig sind, SSH-Verbindungen TO 10.10.10.10 jedoch nicht. Das System darf jedoch Informationen über SSH zurücksenden, solange die Sitzung bereits eingerichtet ist, wodurch die SSH-Kommunikation zwischen diesen beiden Hosts möglich ist.

    iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state -state NEU, ERSTELLT -j ACCEPT

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

    Änderungen speichern

    Die Änderungen, die Sie an Ihren iptables-Regeln vornehmen, werden beim nächsten Neustart des iptables-Dienstes verworfen, sofern Sie nicht einen Befehl zum Speichern der Änderungen ausführen. Dieser Befehl kann je nach Verteilung unterschiedlich sein:

    Ubuntu:

    sudo / sbin / iptables-save

    Red Hat / CentOS:

    / sbin / service iptables speichern

    Oder

    /etc/init.d/iptables speichern

    Andere Befehle

    Listen Sie die aktuell konfigurierten iptables-Regeln auf:

    iptables -L

    Hinzufügen der -v Mit dieser Option erhalten Sie Informationen zu Paketen und Bytes sowie zum Hinzufügen -n wird alles numerisch auflisten. Mit anderen Worten - Hostnamen, Protokolle und Netzwerke werden als Nummern aufgeführt.

    Um alle derzeit konfigurierten Regeln zu löschen, können Sie den Befehl zum Leeren ausgeben.

    iptables -F