Nur mit SSH: Reverse-Tunnel-Webzugriff über SSH-SOCKS-Proxy

15

Hin und wieder muss ich eine Verbindung zu einem Server herstellen, auf dem der Zugriff stark eingeschränkt ist.
Nur eingehendes SSH wird von der DMZ-Firewall zugelassen.
Ausgehende HTTP-Verbindungen werden blockiert.

Ich suche nach einer einfachen Möglichkeit, den Webzugriff über meine SSH-Sitzung zu tunneln, damit ich Updates und Software über yum / apt-get installieren kann. Im Idealfall möchte ich die Installation zusätzlicher Software / Dienste im geschützten Bereich vermeiden.

Was machst du in einer solchen Situation?

SSH verfügt über die -D <port>SOCKS-Proxy-Option. Aber leider ist es nur eine Einbahnstraße vom Client zum Server und es gibt keine umgekehrte Option.

Kaii
quelle

Antworten:

26

Ich habe es endlich geschafft, mit sshnur:

  1. Starten Sie einen lokalen SOCKS-Proxy auf Ihrem Client-Computer (mit ssh -D)
  2. Stellen Sie eine Verbindung zum Remote-Server her und richten Sie eine Reverse-Port-Weiterleitung ( ssh -R) zum lokalen SOCKS-Proxy ein
  3. Konfigurieren Sie die Serversoftware für die Verwendung des weitergeleiteten Proxys

1. Starten Sie den lokalen Socks-Proxy im Hintergrund

Stellen Sie über SSH eine Verbindung zu localhost her und öffnen Sie den SOCKS-Proxy auf Port 54321.

$ ssh -f -N -D 54321 localhost

-f Läuft SSH im Hintergrund.

Hinweis: Wenn Sie das Terminal schließen, in dem Sie den Befehl gestartet haben, wird der Proxy-Prozess abgebrochen. Denken Sie auch daran, nach Ihnen aufzuräumen, indem Sie entweder das Terminalfenster schließen, wenn Sie fertig sind, oder indem Sie den Vorgang selbst beenden!

2. Stellen Sie eine Verbindung zum Remote-Server her und richten Sie die Reverse-Port-Weiterleitung ein

Binden Sie den Remote-Port 6666 an den lokalen Port 54321. Dadurch wird Ihr lokaler Socks-Proxy für den Remote-Standort an Port 6666 verfügbar.

$ ssh root@target -R6666:localhost:54321

3. Konfigurieren Sie die Serversoftware für die Verwendung des weitergeleiteten Proxys

Konfigurieren Sie einfach yum, apt, curl, wget oder ein anderes Tool, das SOCKS unterstützt, um den Proxy zu verwenden 127.0.0.1:6666.

Voilá! Viel Spaß beim Tunneln!


4. Optional: Konfigurieren Sie die Serversoftware für die Verwendung des weitergeleiteten Proxys

Ich fand, dass die Installation proxychainsauf dem Zielserver die Dinge viel einfacher macht.

Es ermöglicht jeder Software, SOCKS-Proxy (gerade telnet) zu verwenden, indem ein LD_PRELOADTrick verwendet wird, um TCP- und DNS-Anforderungen von beliebigen Befehlen in einen Proxy umzuleiten.

Richten Sie ein /etc/proxychains.conf, um den weitergeleiteten Socks-Proxy zu verwenden:

[ProxyList]
# SSH reverse proxy
socks5  127.0.0.1 6666

Tunneln Sie beliebige Tools (die TCP verwenden) mit proxychains:

$ proxychains telnet google.com 80
$ proxychains yum update
$ proxychains apt-get update
Kaii
quelle
3

Neuere Versionen von SSH ermöglichen die Verwendung der sehr einfachen Option von ssh-R <[bind_address:]port>. Wenn Sie nur den Port auf dem Host und möglicherweise die Bindungsadresse verwenden, aber nicht den clientseitigen Port angeben, wird ein Reverse-SOCKS-Proxy erstellt.

Dies wird auch in den Manpages neuerer SSH-Versionen angegeben:

[...] Wenn kein explizites Ziel angegeben wurde, fungiert ssh als SOCKS 4/5-Proxy und leitet Verbindungen zu den vom Remote-SOCKS-Client angeforderten Zielen weiter.

Sie können dies testen, indem Sie eine Curl-Verbindung zu einer einfachen "Gib mir meine IP" -API wie http://ifconfig.io herstellen .

$ curl ifconfig.io

vs

$ curl --socks5 localhost:<PORT> ifconfig.io

Richard Metzler
quelle
2
Es wäre nützlich zu erwähnen, in welcher Versionsnummer diese Funktion eingeführt wurde.
Kasperd
viel einfacher, danke!
Kaii
1
@kasperd: OpenSSH 7.6 , veröffentlicht am 03.10.2017. Überprüfen Sie den 3. Aufzählungspunkt unter Neue Funktionen
MestreLion