Wenn die Iptables des Kernels vollständig leer sind ( iptables -F
), wird dies tun, was Sie fragen:
# iptables -A INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -s 127.0.0.0/8 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j DROP
Dies besagt, dass alle LAN-Adressen mit TCP-Port 22 kommunizieren dürfen, dass localhost die gleiche Überlegung erhält (ja, 127. * nicht nur 127.0.0.1) und dass Pakete von jeder anderen Adresse, die nicht mit diesen ersten beiden Regeln übereinstimmen, kurzerhand abgelegt werden der kleine Eimer . Sie können REJECT
anstelle von DROP
eine aktive Zurückweisung (TCP RST) verwenden, anstatt TCP-Port 22 zu einem schwarzen Loch für Pakete zu machen.
Wenn Ihr LAN den 192.168.0. * -Block nicht verwendet, müssen Sie natürlich die IP-Adresse und die Maske in der ersten Zeile ändern, um sie an das IP-Schema Ihres LAN anzupassen.
Diese Befehle tun möglicherweise nicht das, was Sie möchten, wenn in Ihrer Firewall bereits einige Regeln konfiguriert sind. (Sagen Sie dies iptables -L
als root, um es herauszufinden.) Es kommt häufig vor, dass eine der vorhandenen Regeln die Pakete erfasst, die Sie filtern möchten, sodass das Anhängen neuer Regeln keine Auswirkungen hat. Während Sie verwenden können , -I
statt -A
mit dem iptables
Befehl neuen Regeln in der Mitte einer Kette spleißen , anstatt sie anhängt, dann ist es in der Regel besser, um herauszufinden , wie die Ketten beim Systemstart bevölkert bekommen und das Verfahren zu ändern , so immer Ihre neuen Regeln in installiert werden die richtige Reihenfolge.
RHEL 7+
Bei neueren RHEL-Systemen ist dies am besten über die Verwendung firewall-cmd
der entsprechenden GUI möglich. Hiermit wird dem firewalld
Daemon des Betriebssystems mitgeteilt, was Sie möchten. Dies ist das, was tatsächlich aufgefüllt und bearbeitet wird, was Sie über sehen iptables -L
.
RHEL 6 und früher
Auf älteren RHEL-Systemen können Sie die Firewall-Ketten am einfachsten bei der Bestellung ändern, indem Sie sie bearbeiten /etc/sysconfig/iptables
. Die GUI- und TUI-Firewall-Tools des Betriebssystems sind recht simpel. Wenn Sie also anfangen, komplexere Regeln wie diese hinzuzufügen, ist es besser, zu guten alten Konfigurationsdateien zurückzukehren. Beachten Sie, dass Sie Ihre Änderungen verlieren können, wenn Sie jemals die Firewall-Tools des Betriebssystems verwenden, um die Konfiguration zu ändern, da dieses möglicherweise nicht weiß, wie es mit handgefertigten Regeln wie diesen umgeht.
Füge so etwas zu dieser Datei hinzu:
-A RH-Firewall-1-INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 22 -s 127.0.0.0/8 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 22 -j DROP
Wo Sie es hinzufügen, ist das schwierige Stück. Wenn Sie in dieser Datei eine Zeile finden, von der die Rede ist --dport 22
, ersetzen Sie sie einfach durch die drei obigen Zeilen. Andernfalls sollte es wahrscheinlich vor der ersten vorhandenen Zeile mit der Endung enden -j ACCEPT
. Im Allgemeinen müssen Sie sich mit der Funktionsweise von iptables vertraut machen. An diesem Punkt ist die richtige Einfügemarke offensichtlich.
Speichern Sie diese Datei und sagen Sie dann, dass Sie service iptables restart
die Firewall-Regeln neu laden möchten. Stellen Sie sicher, dass Sie dies tun, während Sie in der Konsole angemeldet sind, falls Sie die Änderungen fetten! Sie möchten sich nicht von Ihrem Computer ausschließen, während Sie über SSH angemeldet sind.
Die Ähnlichkeit zu den obigen Befehlen ist kein Zufall. Der größte Teil dieser Datei besteht aus Argumenten für den iptables
Befehl. Die Unterschiede zu den oben genannten bestehen darin, dass der iptables
Befehl gelöscht wird und der INPUT
Kettenname zur speziellen RHEL-spezifischen RH-Firewall-1-INPUT
Kette wird. (Wenn Sie die Datei genauer untersuchen möchten, sehen Sie weiter oben in der Datei, wo sie die INPUT
Kette im Wesentlichen umbenannt haben . Warum? Kann ich nicht sagen.)
Der bevorzugte Weg ist mit
iptables
. Es sieht so aus, als ob dies von anderen hinreichend abgedeckt wurde. Aus Gründen der Vollständigkeit werde ich daher auf eine alternative Zugriffskontrollmethode hinweisen, die für viele Daemons in den meisten Linux-Distributionen verfügbar ist. Diese Zugriffskontrollmethode wird von derlibwrap
Bibliothek bereitgestellt .libwrap
Führen Sie die folgenden Schritte aus , um zu überprüfen, ob Ihr Lieblingsdämon Unterstützung bietet:Wenn Sie ein nicht leeres Ergebnis erhalten, wie z
dann bist du definitiv gut zu gehen.
Es ist fast eine Gewissheit, dass Ihr
sshd
Daemonlibwrap
Unterstützung hat. Daher sollte er die/etc/hosts.allow
und/etc/hosts.deny
-Dateien zur Zugriffskontrolle konsultieren . Angenommen, Ihr lokales LAN-Netzwerk ist192.168.100.0/24
, können Sie den Zugriff aufsshd
alle Clients mit Ausnahme der Clients auf dem lokalen Host oder im lokalen LAN verweigern , indem Sie Folgendes in Ihre/etc/hosts.deny
Datei einfügen:Beachten Sie, dass diese Methode an sich keine Ports öffnet oder schließt. Es teilt Dämonen, die diese Methode der Zugriffssteuerung verwenden, einfach mit, ob Verbindungsversuche von Clients akzeptiert oder abgelehnt werden sollen, die den angegebenen Mustern entsprechen.
Ausführliche Informationen finden Sie auf den Manpages, beginnend mit
hosts_access(5)
.quelle
Wenn Sie eine eigene Linux-basierte Firewall haben, richten Sie diese am besten ein
iptables
, wie andere hier beschreiben. Wenn dies nicht der Fall ist und die Firewall Ihr Router ist, verhindert die Standardkonfiguration höchstwahrscheinlich bereits den Zugriff von außen, es sei denn, Sie aktivieren ausdrücklich die Portweiterleitung (wie ich kürzlich in der Antwort auf diese Frage beschrieben habe ).Für zusätzliche Sicherheit können Sie darüber hinaus ein separates Subnetz für In-LAN-Verbindungen verwenden. Fügen Sie dazu für jeden Computer eine zweite IP-Adresse hinzu, die nur im LAN und nicht vom Router verwendet wird. Angenommen, das gesamte LAN verwendet jetzt
192.168.0.xxx
Adressen und der Router (Gateway, Firewall) ist192.168.0.1
. Fügen Sie also für jeden Computer eine zweite Adresse hinzu - zum Beispiel:Bearbeiten Sie als Nächstes die
sshd
Konfiguration, um nur diese Adresse zu verwenden (damit keine Verbindungen hergestellt werden können192.168.0.xxx
). Bearbeiten/etc/ssh/sshd_config
und ändern Sie sieListenAddress
in das neue Subnetz (192.168.5.1
im obigen Beispiel). Das ist es! Wenn Sie das Gateway nicht so konfigurieren, dass die Kommunikation dieses Subnetzes weitergeleitet wird, sollte es von außen getrennt sein.quelle