Einführung
Eine grundlegende Anleitung zur Sicherung des Zugriffs auf Ihren Server mit iptables.
Voraussetzungen
Server mit CentOS 6.5 oder früher (diese Anleitung könnte auch unter anderen Linux-Distributionen funktionieren, allerdings mit geringfügigen Änderungen je nach Distribution; dieser Artikel funktioniert ab CentOS 6.5)
Wenn Sie noch keinen Server haben, ziehen Sie in Betracht, einen virtuellen privaten Server von Atlantic.Net hochzufahren
iptables installiert
Beginnend mit einfachen IPTables über die Befehlszeile
Lassen Sie uns zunächst überprüfen, ob iptables installiert und aktiv ist (für alle diese Befehle sind Root-Berechtigungen erforderlich, stellen Sie also sicher, dass Ihr Benutzer Zugriff auf diese Berechtigungen hat – oder, wenn Sie möchten, erhöhen Sie die Rechte auf Root und vermeiden Sie die Notwendigkeit, alle voranzustellen Ihre Befehle mit 'sudo')
sudo service iptables status
iptables-Status des Dienstes
Für diesen neuen Server läuft iptables nicht, also lässt er derzeit den gesamten Datenverkehr zu. Nicht gut. Lassen Sie uns das beheben.
Um einige Grundlagen abzudecken, werden wir das Standardverhalten so einstellen, dass der gesamte Datenverkehr verworfen und nur bestimmter Datenverkehr zugelassen wird (dies ist eine Sicherheitspraxis, die oft als „Whitelisting“ bezeichnet wird). Wir erledigen das alles zuerst auf der Befehlszeile und richten es dann so ein, dass diese Regeln über Neustarts hinweg bestehen bleiben.
Lassen Sie uns zuerst den Dienst starten und dann prüfen, was ausgeführt wird.
sudo service iptables start
sudo service iptables status
Beachten Sie, dass die Standardrichtlinie in jeder dieser Ketten darin besteht, Datenverkehr zu akzeptieren. Lassen Sie uns die Standardeinstellung für INPUT ändern, um den Datenverkehr zu verwerfen. (WARNUNG:Stellen Sie sicher, dass Sie mindestens eine ACCEPT-Regel in der INPUT-Kette haben, um entweder die IP-Adresse Ihrer Workstation oder Port 22 zuzulassen, wenn Sie remote über ssh auf diesen Server zugreifen. Beachten Sie in der obigen Ausgabe des iptables-Status, dass der TCP-Datenverkehr an Port 22 ("tcp dpt:22") wird akzeptiert. Wenn diese Regel nicht wäre, könnten wir uns von diesem Server aussperren!)
sudo iptables -P INPUT DROP
Das „-P “ gibt an, dass wir eine Änderung an der allgemeinen Richtlinie vornehmen werden, „INPUT ‘ ist die bestimmte zu bearbeitende Kette und ‘DROP ‘ ist das standardmäßige Richtlinienziel.
Lassen Sie uns nun einige spezifische Regeln hinzufügen.
Zuerst erlauben wir den Zugriff für HTTP- und HTTPS-Verkehr, auf den wir von jeder IP-Adresse aus zugreifen wollen. Beim Hinzufügen von Regeln zu iptables ist es wichtig, auf die Reihenfolge dieser Regeln zu achten, da iptables die Regeln der Reihe nach analysiert und den Datenverkehr gemäß dem in der Regel angegebenen Ziel verarbeitet und dann die Kette verlässt (in den meisten Fällen). Beachten Sie in der obigen Ausgabe, dass die letzte Regel Datenverkehr ablehnt. Wenn wir eine Zulassungsregel an das Ende dieser Kette anhängen, wird sie niemals aufgerufen, da die darüber liegende Ablehnungsregel den Datenverkehr ablehnt und die Verarbeitung aller folgenden Regeln in der INPUT-Kette beendet.
Finden wir also heraus, an welcher Zeilennummer wir unsere neue Regel einfügen wollen:
sudo iptables -nL INPUT --line-numbers
Iptables-Status
Die Datei „-nL ‘ kombiniert ein paar Flags:‘n ‘ überspringt die DNS-Auflösung (damit wir sehen können, welche IPs jede Regel untersucht); „L ‘ listet jede Regel in der angegebenen Kette auf. Die letzte Option „–line-numbers ‘ fügt passenderweise Zeilennummern zu jedem Regeleintrag hinzu. (Diese Ausgabe ähnelt der, die Sie mit „sudo service iptables status“ erhalten könnten “, aber dieser Befehl stellt die Regeln für alle Ketten bereit, während die „iptables Der obige Befehl gibt uns die Möglichkeit, den Umfang der Ausgabe nach einzelnen Ketten einzugrenzen.)
In diesem Fall fügen wir unsere Regeln direkt über der Ablehnungsregel ein:
sudo iptables -I INPUT 5 -m tcp -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT 6 -m tcp -p tcp --dport 443 -j ACCEPT
Iptables-Liste mit Zeilennummern
Was bedeutet das alles?
* ‘-ich ‘ gibt an, dass wir diese Regel an der angegebenen Zeilennummer einfügen werden (die Nummer nach dem Namen der Kette, in die wir die Regel einfügen).
* ‘-m tcp -p tcp –dport 80 ‘ gibt an, dass diese Regel TCP-Pakete abgleicht, die mit einem Zielport von 80 (oder 443 im Fall der zweiten Regel) ankommen.
* ‘-j ACCEPT ‘ gibt an, dass, wenn diese Regel zutrifft, dieses Paket zum ACCEPT-Ziel „springt“ (was die lange Art zu sagen ist, dass es durchgelassen wird).
Beachten Sie, dass die Ablehnungsregel nach Eingabe des ersten Befehls in Zeile 6 verschoben wird, weshalb sich die zweite Regel in Zeile 6 einfügt.
Lassen Sie uns nun eine Regel hinzufügen, um den Zugriff von einer bestimmten IP zuzulassen, unabhängig von der Art des Datenverkehrs oder Ports.
sudo iptables -I INPUT 4 -s 192.168.0.1 -j ACCEPT
Hier fügen wir diese Regel direkt über der Regel ein, die den gesamten SSH-Datenverkehr auf Zeile 4 zulässt. Das „-s ‘ Gibt die Quell-IP an. Wir hätten genauso gut einen Quell-IP-Bereich mit CIDR-Notation zulassen können, um also den gesamten Bereich 192.168.0.0/24 zuzulassen:
sudo iptables -I INPUT 4 -s 192.168.0.0/24 -j ACCEPT
Wir könnten diese Regel präzisieren – sagen wir, wir wollen nur in der Lage sein, von dieser 192.168.0.1-Adresse auf diesen Server zu sshen. Lassen Sie uns auch einen Kommentar abgeben!
sudo iptables -R INPUT 4 -s 192.168.0.1 -m tcp -p tcp --dport 22 -j ACCEPT -m comment --comment "Only home workstation can ssh in"
Da diese Regel unsere vorherige ersetzen wird, beachten Sie zunächst das „-R ‘–das bedeutet ‘ersetzen’ in der angegebenen Zeilennummer statt einfügen. Diese Regel kombiniert die Überprüfung der Quell-IP und des Zielports. Damit Datenverkehr zugelassen wird, müssen wir also beide abgleichen. Die endgültige Übereinstimmungsoption für den Kommentar ist optional, kann aber beim Auflisten von iptables-Regeln sehr hilfreich sein, um kurz anzugeben, warum diese Regel vorhanden ist – was sehr hilfreich sein kann, wenn Ihre iptables-Regeln stärker involviert sind oder wenn es Regeln gibt, die nicht vorhanden sind 't sofort offensichtlich, wenn es aufgelistet wird (wie das für die Loopback-Schnittstelle, für die ich den Kommentar früher hinzugefügt hatte).
Wir könnten an dieser Stelle die Regel entfernen, die es jeder IP erlaubt, über ssh auf diesen Server zuzugreifen:
sudo iptables –D INPUT 5
(Das „-D ’ gibt an, dass die angegebene Zeilennummer in dieser Kette gelöscht wird.)
Wenn Sie mit dem Hinzufügen von Regeln fertig sind, speichern Sie unbedingt:
sudo service iptables save
Dadurch werden Ihre derzeit ausgeführten iptables-Regeln in /etc/sysconfig/iptables gespeichert, sodass beim nächsten Neustart Ihres Servers automatisch die Regeln geladen werden, die Sie hier eingegeben haben. Wenn Sie Ihre iptables-Datei mit aussagekräftigeren Kommentaren bearbeiten möchten (oder einen größeren, komplizierteren Satz von Firewall-Regeln verwalten möchten), lesen Sie den Artikel über die grundlegende IPTables-Dateikonfiguration.