Verstecken Sie den SSH-Verkehr vor der Firewall

762
The Omitter

Ist es irgendwie (vorzugsweise leicht) möglich, den ssh-Verkehr vor einer Firewall-Firewall zu verbergen? Ich dachte daran, die ssh-Sitzung grundsätzlich in eine harmlos aussehende TLS-Sitzung einzubetten. Ich habe herausgefunden, dass dies mit socat möglich sein sollte, aber ich habe keine Ahnung, wie ich das zum Laufen bringen kann. Ich habe vollen Admin-Zugriff auf SSH-Client und -Server, aber eine Lösung im Benutzerbereich wäre natürlich die schönste :-)

Falls jemand davon weiß socat, habe ich Folgendes ausprobiert (aber ich bin auch neugierig auf andere Lösungen):

Server:

socat OPENSSL-LISTEN:10000,fork,cipher=aNULL,verify=0 TCP-CONNECT:localhost:22 

Klient:

ssh -o ProxyCommand='socat STDIO OPENSSL-CONNECT:%h:10000,cipher=aNULL,verify=0' theserver 

Serverlog:

socat[27898] E SSL_accept(): Success socat[27897] E exiting on signal 11 

clientlog:

socat[15953] E SSL_connect(): error:141640B5:SSL routines:tls_construct_client_hello:no ciphers available ssh_exchange_identification: Connection closed by remote host 

Laut der Manpage sollte aNull diesen Fehler nicht auslösen.

Update : Dank Grawity ist der Tunnel nun erfolgreich aufgebaut. Danach hatte ich Probleme, herauszufinden, dass Verbindungen von localhost blockiert wurden (eingerichtet in /etc/hosts.allow). Aber jetzt funktioniert es gut. Vielen Dank.

1
`stunnel` ist wahrscheinlich einfacher zu handhaben, weil es genau zu diesem Zweck gemacht wurde. Daniel B vor 6 Jahren 1
Hab das auch zum Laufen gebracht. Gute Idee, danke. Funktioniert auch mit Benutzerberechtigungen, wenn Sie manuell gestartet werden (offensichtlich nicht als Systemdienst). The Omitter vor 6 Jahren 0

1 Antwort auf die Frage

2
grawity

Ja, das wird häufig gemacht. (Obwohl auf der Serverseite häufiger stunnel ist.)

Ihr Hauptproblem ist jedoch cipher=aNULL, dass aktuelle TLS-Bibliotheken möglicherweise nicht akzeptieren. (Ganz zu schweigen davon, dass Firewalls und IDSes eine solche Verbindung für ungewöhnlich und verdächtig halten.)

Verwenden Sie stattdessen reguläres, mit Zertifikaten authentifiziertes TLS mit einem selbstsignierten Zertifikat:

openssl req -new -subj "/CN=ponies" -days 365 -extensions v3_req -x509 \ -out tunnel.crt -newkey rsa:2048 -keyout tunnel.key -nodes  socat OPENSSL-LISTEN:10000,fork,cert=tunnel.crt,key=tunnel.key,verify=0 ... 

(Dies muss nur auf der Serverseite erfolgen; Clients werden standardmäßig nicht authentifiziert.)

Vielen Dank für die Hilfe. Ich musste auch eine dh-Parameterdatei mit `openssl dhparam 2048` generieren und sie dem Serverbefehl` dhparams = dhparmasfile` hinzufügen (nachdem eine socat-Version, die die Option unterstützte, manuell kompiliert wurde). The Omitter vor 6 Jahren 0
Huh Unterstützt es nicht ECDH? grawity vor 6 Jahren 0
Es beschwerte sich nur, dh der Schlüssel zu kurz. The Omitter vor 6 Jahren 0