Fernzugriff auf einen Linux-Computer hinter einer Firewall

11

Ich werde einen Linux-Computer als eine Art öffentliches Terminal an einem entfernten Standort bereitstellen. Ich möchte zur Wartung über SSH remote darauf zugreifen können, möchte jedoch in den seltenen Fällen, in denen ich auf diesen Computer zugreifen muss, keinen Port an der Remote-Firewall offen halten. Ich habe über ein einfaches Skript nachgedacht, um einen Reverse-SSH-Tunnel zu einem Computer von außen zu erstellen, aber ich möchte lieber nicht, dass ein Benutzer etwas tun muss, wenn ich darauf zugreifen muss. Irgendwelche Ideen?

Update: Ich habe beschlossen, mit meinem ursprünglichen Plan eines Skripts einen umgekehrten SSH-Tunnel zu erstellen. Während andere vorgeschlagene Lösungen, wie z. B. das Klopfen von Ports, eher dem entsprechen, was ich wirklich tun möchte, habe ich in diesem Fall keinen anderen Zugriff, um den Router zu konfigurieren, als einen Benutzer durch eine Konfiguration zu führen. schaudern

Baudtack
quelle
Sie müssen den Router nicht konfigurieren. Linux verfügt über eine iptables-Firewall, die für die Firewall-Sicherheit ausreicht. Wenn Sie einen ständig aktiven SSH-Tunnel zum Server erstellen, ist er anfällig für Angriffe und wirft den Host, mit dem er verbunden ist.
Kazimieras Aliulis
1
Ich müsste jedoch einen Port am Router öffnen, um alles, was ich brauchte, an die Linux-Box weiterzuleiten. Der SSH-Tunnel ist nicht immer eingeschaltet. Es wird von einem Benutzer gestartet, der endet, wenn ich den Zugriff auf die Maschine benötige.
Baudtack

Antworten:

5

Es hat weniger damit zu tun, dass ein Port geöffnet ist, als vielmehr damit, dass ein Benutzer nicht durch den Prozess des Öffnens eines Ports geführt werden soll. Ich habe leider überhaupt keinen Zugriff auf diesen Router.

Wenn ein Routerwechsel nicht in Frage kommt, müssen Sie sich möglicherweise eine P2P- oder VPN-Lösung wie Hamachi ansehen . Wenn Sie das System so einrichten, dass beim Start automatisch eine VPN-Verbindung hergestellt wird, sollten Sie jederzeit eine Verbindung herstellen können. Hamachi erledigt alle Firewall-Verhandlungen für Sie. Der einzige Nachteil ist, dass Sie sich darauf verlassen müssen, dass die Hamachi-Server betriebsbereit und funktionsfähig sind, wenn Sie eine Verbindung herstellen müssen.

Wenn Sie einen Server haben, der immer aktiv ist, können Sie autossh so einrichten , dass das Remote-System immer einen Tunnel offen hält und mit Ihrem Server verbunden ist. Der einzige Nachteil ist, dass das Remote-System kompromittiert ist und der Angreifer die Schlüssel erhält, mit denen die SSH-Sitzung eingerichtet wurde. Es wäre sehr wichtig, dass Ihr System, das die SSH-Verbindung akzeptiert, wirklich gesperrt bleibt.


Unten ist meine ursprüngliche Antwort, ich hatte angenommen, dass das Aktualisieren des Routers eine Option war.

Eine Lösung, die Sie möglicherweise untersuchen möchten, wenn Ihre Firewall dies unterstützt, ist das Klopfen von Ports . Bei einigen Firewalls sollte es möglich sein, einen speziellen Satz von Paketen zu versenden, die die Firewall bemerkt und dann vorübergehend ein Loch in der Firewall öffnet.

Es gibt viele Implementierungen, einige besser als andere. Einige verwenden eine starke Kryptographie, um es einer Person ohne die richtigen Schlüssel nahezu unmöglich zu machen, das richtige Klopfen zu senden.

Zoredache
quelle
Das hört sich nach einer guten Idee an! Leider handelt es sich bei der fraglichen Firewall nur um ein einfaches Linksys für Endverbraucher oder ein gleichwertiges Produkt.
Baudtack
1
Wenn Sie dd-wrt installieren können, können Sie knockd ( dd-wrt.com/wiki/index.php/Knockd )
Zoredache
@Zoredache True, aber dies ist an einem entfernten Ort. Ich habe keinen Zugriff auf diesen Router und ich würde bei dem Gedanken, einen Benutzer durch eine dd-wrt-Installation zu führen, schaudern.
Baudtack
Ich bin damit einverstanden, dass dies wahrscheinlich der richtige Weg ist, dies einzurichten, vorausgesetzt, ich hatte physischen Zugriff auf den Router, um dd-wrt zu installieren.
Baudtack
Hamachi hat seit der Übernahme durch LogMeIn Linux-Benutzern eine miserable Rücksicht genommen. Ich finde das Produkt unzuverlässig, wenn Linux-Maschinen Teil meines Hamachi-Netzwerks sind.
Bmb
6

Ich würde mir keine Sorgen machen, Port 22 für das Internet zugänglich zu machen, aber ich würde einige Schritte unternehmen, um ihn zu sichern.

Deaktivieren Sie zunächst die interaktive Tastaturauthentifizierung und wechseln Sie zu den SSH-Tasten.

Zweitens installieren Sie so etwas wie fail2ban auf Ihrem Remote-Server unter Blackball-IP-Adressen, die Ihren Computer wiederholt prüfen. Da Sie SSH-Schlüssel eingerichtet haben, sollten für autorisierte Benutzer keine Authentifizierungsfehler auftreten.

Wenn Sie in der Lage sind, befolgen Sie alternativ den Rat von WerkkreW und konfigurieren Sie die Firewall vor dem Computer so, dass eine VPN-Verbindung beendet wird. Lassen Sie dann nur den SSH-Dämon auf dem Remote-Server Verbindungen akzeptieren, die über diesen VPN kommen.

Wenn Ihre Firewall die VPN-Verbindung nicht beenden kann, können Sie die GRE- oder IPSEC-Pakete wahrscheinlich an Ihren Linux-Computer weiterleiten und dort beenden.

Dave Cheney
quelle
Es hat weniger damit zu tun, dass ein Port geöffnet ist, als vielmehr damit, dass ein Benutzer nicht durch den Prozess des Öffnens eines Ports geführt werden soll. Ich habe leider überhaupt keinen Zugriff auf diesen Router.
Baudtack
Ich verstehe und sympathisiere mit deinem Schmerz.
Dave Cheney
2
Der erste Schritt in dieser Lösung wäre, sshd so zu konfigurieren, dass es auf einem nicht standardmäßigen Port ausgeführt wird. Es klopfen viele Bots an Port 22 da draußen. Wählen Sie einen Port, der nicht in / etc / services angezeigt wird und "nmap HOST" ihn nicht findet.
Hayalci
4

Es hört sich so an, als ob Sie nach Knockd suchen

Sie können das auf dem Linux-Server selbst mit iptables installieren, so dass es einer Art Firewall der zweiten Ebene ähnelt. Selbst wenn Port 22 in der Frontend-Firewall geöffnet wäre, wäre er auf dem Server nicht geöffnet, sodass Portscans keine offenen Ports sehen würden. Wenn Sie dann das "geheime Klopfen" senden, haben Sie plötzlich einen offenen Weg zu Port 22.

Ist das sinnvoll?

Brent
quelle
Wenn ich mich nicht irre, müsste ich auch alle Klopfanschlüsse weiterleiten, oder? Wäre das nicht offensichtlich, wenn jemand den Router scannt? Sie würden die Reihenfolge nicht kennen, aber wenn ich mich daran erinnere, wie man Permutationen richtig macht, wenn sie sich daran erinnern, wie man Permutationen richtig macht, haben sie einen großen Vorsprung. Oder denke ich falsch darüber nach?
Baudtack
Während die zum Klopfen verwendeten Ports weitergeleitet werden müssten, muss der Host, auf dem Knockd ausgeführt wird, in keiner Weise auf die Quelle des Klopfens antworten.
Zoredache
Richtig - Die an der ersten Firewall geöffneten Ports sind an der zweiten nicht geöffnet, sodass sie für den Scanner alle geschlossen erscheinen. Keine Möglichkeit, Klopföffnungen von nicht klopfenden zu unterscheiden.
Brent
3

Um alle Antworten zusammenzufassen:

benutze ssh, aber mache es dunkler und sicherer.

Zur Sicherheit:

  • Stellen Sie sicher, dass die Root-Anmeldung nicht zulässig ist (PermitRootLogin-Nr.).
  • Beschränken Sie Benutzer, die sich über die Konfigurationsoption AllowUsers oder AllowGroups anmelden können.
  • Stellen Sie sicher, dass nur das SSH-Protokoll der Version 2 (Protokoll 2) verwendet wird.
  • Es wird empfohlen, nur Authentifizierungsschlüssel zu verwenden. Das Kennwort ist jedoch praktischer, wenn aus dem Urlaub, in dem Sie keinen Zugriff auf Authentifizierungsschlüssel haben, eine Verbindung zum Server hergestellt werden muss.

Für die Dunkelheit:

  • Ändern Sie den SSH-Port in einen zufälligen High-Port, an den Sie sich erinnern würden, wie z. B. 20486. Dadurch werden die meisten automatischen Bruteforcer entfernt, aber nicht vor allen Port-Scans auf dem Server verborgen.
  • Verstecken Sie die Möglichkeit, eine Verbindung zum Port herzustellen. Eine Möglichkeit ist das in anderen Antworten erwähnte Klopfen von Ports. Sie benötigen jedoch eine spezielle Software, auf die nicht überall zugegriffen werden kann. Eine andere einfache Option ist die Verwendung der iptables-Firewall mit dem zuletzt verwendeten Modul, um eine Regel zu erstellen, mit der nur beim zweiten oder dritten Versuch eine Verbindung hergestellt werden kann. Sie wissen also, dass Sie mehrmals versuchen müssen, eine erfolgreiche Verbindung herzustellen, aber bei einem einfachen Scan aller Ports wird der SSH-Port nicht angezeigt. Die Regeln ähneln denen:


iptables -A INPUT -m tcp -p tcp --dport 20486 -m state --state NEW -m recent --set
iptables -A INPUT -m tcp -p tcp --dport 20486 -m state --state NEW  -m recent --rcheck --seconds 60 --hitcount 2 -j ACCEPT
iptables -A INPUT -m tcp -p tcp --dport 20486 -j DROP

Kazimieras Aliulis
quelle
+1 schöne Zusammenfassung und interessante Idee über den Trick mit mehreren Versuchen.
David Z
2

Geplante Aufgabe das Skript für Ihren Reverse-SSH-Tunnel oder öffnen Sie den Firewall-Port.

Wenn Sie befürchten, dass SSH für die Welt offen ist, können Sie während Ihrer Wartungszeit Aufgaben mit iptables-Skripten planen und nur dann den Port zur Verfügung haben.

Sclarson
quelle
1
Einverstanden. Wenn Sie keine Möglichkeit zum VPN haben, besteht die einzige echte Lösung darin, einen Port zu öffnen. Wenn Sie nervös sind, können Sie immer einen nicht standardmäßigen Port verwenden.
WerkkreW
2

Schauen Sie sich Port-Knocking an, um Ihren SSH-Tunnel zu öffnen.

Führen Sie außerdem Denyhosts aus, um Personen nach zu vielen schlechten Anforderungen auszusperren.

Beide Pakete sind in den Standard-Repositorys Ubuntu, Fedora und RHEL verfügbar.

Tim Howland
quelle
1

Öffnen Sie einen Port, machen Sie ihn einfach außerhalb des normalen Bereichs. Ich würde es über 1024 zu einem zufälligen Port machen. Auf diese Weise würden Hacker wahrscheinlich nicht einmal danach suchen.

Brad Gilbert
quelle
0

Kein Grund, das Loch in der Firewall nicht zu stechen, wenn Sie Remotezugriff auf den Computer benötigen, jedoch selten.

Wenn Sie den Port jedoch immer noch lieber nicht öffnen möchten (oder können), kann ein einfaches Shell-Skript eine im Internet verfügbare Ressource überwachen, die Sie steuern, und auf den Befehl zum Starten des umgekehrten Tunnels warten. E-Mail-Konten, IRC-Kanäle und Webseiten fallen sofort als Auslöser ein.

Dies ist natürlich viel spröder und weniger sicher als nur das Öffnen des Hafens. Aber ich bin sicher, Sie haben Ihre Gründe.

Brian
quelle