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