Verbindung zu einem SSH-Server vom Client hinter einem NTLM-Proxy

14627
Mark Tomlin

Ich versuche, von einem Firmennetzwerk auf meinen SSH-Server im Internet zuzugreifen. Alle Verbindungen zum externen Internet müssen über einen Server weitergeleitet werden, der bei jeder Anforderung den NTLM-Hash jedes Clients überprüft. Ich verwende dafür Cntlm, und es funktioniert nur zur Hälfte. Es funktioniert gut für HTTP-basierte Verbindungen, aber nicht für SSH-Verbindungen. Ich weiß das, weil ich eine Verbindung herstellen kann Sublime Text ‚s Package Control Plugin zu erhalten und Plugins zu aktualisieren. Ich kann es jedoch nicht mit der Tunnelkonfiguration von Cntlm für SSH auf meinem Server verwenden.

Wenn ich mir Cntlms Logs anschaue, kann ich folgendes sehen ...

cntlm: PID 1460: 127.0.0.1 TUNNEL ts.io:443 Tunneling to ts.io:443 for client 6... Starting authentication... NTLM Request: Domain: domain.tld Hostname: D-HOSTNAME Flags: 0xA208B205 

NTLM-Handshake (Typ 1)

Sending PROXY auth request... Proxy-Connection => keep-alive Proxy-Authorization => NTLM [REDACTED] Content-Length => 0 

PROXY-Authentifizierungsantwort lesen ...

HEAD: HTTP/1.1 407 Proxy Authentication Required ( Access is denied. ) Via => 1.1 FOLLICLE Proxy-Authenticate => NTLM [REDACTED] Connection => Keep-Alive Proxy-Connection => Keep-Alive Pragma => no-cache Cache-Control => no-cache Content-Type => text/html Content-Length => 0 NTLM Challenge: Challenge: 4AC9211DC2875FFF (len: 178) Flags: 0xA2898205 NT domain: NTDOMAIN Server: PROXY Domain: domain.tld FQDN: proxy.domain.tld TLD: domain.tld TBofs: 64 TBlen: 114 ttype: 0 NTLMv2: Nonce: CB4E6617ABF19C24 Timestamp: -1581153408 NTLM Response: Hostname: 'D-HOSTNAME' Domain: 'domain.tld' Username: 'username' Response: '[REDACTED]' (162) Response: '[REDACTED]' (24) Sending real request: Proxy-Connection => keep-alive Proxy-Authorization => NTLM [REDACTED] 

Und endlich bekomme ich das ...

Reading real response: HEAD: HTTP/1.1 200 Connection established Via => 1.1 PROXY Connection => Keep-Alive Proxy-Connection => Keep-Alive Ok CONNECT response. Tunneling... tunnel: select cli: 6, srv: 7 Joining thread 537272664; rc: 0 

Da die Firewall nur Verbindungen zum externen Internet über den Proxyserver von Port 80 und Port 443 zulässt, habe ich meinen SSH-Server so konfiguriert, dass er Verbindungen von Port 443 akzeptiert.

Das Problem, das ich sehe, ist, dass, sobald ich eine SSH-Verbindung ausprobiert habe, die Verbindung als Verbindungszeitlimit von Sublime Text gemeldet wird, wenn das SFTP-Plugin verwendet wird . Die Verwendung von PuTTY führt zu einem sofortigen Ergebnis PuTTY Fatal Error: Server unexpectedly closed network connection. Google Chrome Extension Secure Shell gibt mir einen detaillierteren Fehler vonssh_exchange_identification: Connection closed by remote host NaCl plugin exited with status code 255.


Cntlm-Konfiguration

# The username of the client you wish to masquerade as. # Username username  # The domain name of the network you are connected too. #  Domain domain.tld  # The Password, LM, NTLM, or NTLMv2 Password. # You should leave this blank and then start cntlm # with the -M arg to get the hash information, then # place that information here. # PassNTLMv2 [REDACTED]  # Specify the netbios hostname cntlm will send to the parent # proxies. Normally the value is auto-guessed. # Workstation D-HOSTNAME  # List of parent proxies to use. More proxies can be defined # one per line in format <proxy_ip>:<proxy_port> # Proxy PROXY:8080  # Specify the port cntlm will listen on # You can bind cntlm to specific interface by specifying # the appropriate IP address also in format <local_ip>:<local_port> # Cntlm listens on 127.0.0.1:3128 by default # Listen 3128  # Use -M first to detect the best NTLM settings for your proxy. # Default is to use the only secure hash, NTLMv2, but it is not # as available as the older stuff. # # This example is the most universal setup known to man, but it # uses the weakest hash ever. I won't have it's usage on my # conscience. :) Really, try -M first. # Auth NTLMv2  # Tunnels mapping local port to a machine behind the proxy. # The format is <local_port>:<remote_host>:<remote_port> #  Tunnel 1443:ts.io:443 

Dies ist der Konfigurationsabschnitt, den ich für den Tunnel in Cntlm verwende.

PuTTY-Konfiguration

IP:PORT localhost:1443 

Das verwende ich für die PuTTY-Verbindung.

Erhabener Text

"http_proxy": "http://localhost:3128", 

Irgendeine Idee, was kann ich tun, um das zu beheben? Ich möchte SSH in meinen Server einbauen, es muss eine Möglichkeit geben, dies nur mit der Tunneling-Funktion von Cntlm zu tun. Ich weiß nur nicht, was ich falsch mache.

Ich kann Ihnen sagen, dass ich über Port 443 von außerhalb des Unternehmensnetzwerks eine Verbindung zu meinem SSH-Server herstellen kann.

8

2 Antworten auf die Frage

1
rubinho

Ich erhielt die 407-Antwort, als ich versuchte, über CNTLM mit Putty eine Verbindung zu einem SSH-Server herzustellen. Der Forefront TMG-Proxy widersprach DNS-Suchvorgängen von PuTTY und nicht dem SSH-Datenverkehr. Sie müssen deaktivieren Do DNS - Name - Lookups an Proxy - Ende in der Proxy - Seite von PuTTY - Konfiguration. Die Einstellung " Nein" funktioniert, " Auto" oder " Ja" führt zur Reaktion des 407.

0
user640811

Anstatt die Protokolle zu lesen, können Sie cntlm mit der Option -v aufrufen. Diese Option bleibt im Vordergrund und gibt die Diagnoseausgabe auf dem Terminal aus, sobald sie generiert wird.

Sowohl Ihre Authentifizierung als auch Ihr Tunnel-Setup scheinen korrekt zu funktionieren. Deshalb habe ich auch keine Erklärung, warum Ihre Verbindung nicht funktioniert (außer dass 'localhost' möglicherweise nicht richtig in 127.0.0.1 aufgelöst wird).

Ich habe gerade die SSH-Weiterleitung getestet (für den einfachen Fall, dass tatsächlich keine Benutzerauthentifizierung erforderlich ist). Hier ist das, was ich Ihnen nach dem Ausgeben des Befehls zum Vergleichen zur Verfügung habe

$ cntlm -L 443: entfernter Host: 22 -v

section: global, Username = ... section: global, Domain = ... section: global, PassNTLMv2 = ... section: global, Proxy = '139.23.33.27:81' section: global, NoProxy = 'localhost, 127.0.0.*, 10.*, 192.168.*' Default config file opened successfully Adding no-proxy for: 'localhost' Adding no-proxy for: '127.0.0.*' Adding no-proxy for: '10.*' Adding no-proxy for: '192.168.*' cntlm: Workstation name used: mchn256c cntlm: Using following NTLM hashes: NTLMv2(1) NT(0) LM(0) cntlm[27413]: Cntlm ready, staying in the foreground 

(bei Ausgabe von 'ssh -p 443 localhost' auf einem anderen Terminal):

 NO: remotehost (localhost) NO: remotehost (127.0.0.*) NO: remotehost (10.*) NO: remotehost (192.168.*) cntlm[27413]: Using proxy 139.23.33.27:81 cntlm[27413]: Resolving proxy 139.23.33.27... Resolve 139.23.33.27: -> 139.23.33.27 cntlm[27413]: 127.0.0.1 TUNNEL remotehost:22 Tunneling to remotehost:22 for client 6... Starting authentication... NTLM Request: Domain: ... Hostname: ... Flags: 0xA208B205  Sending PROXY auth request... Proxy-Connection => keep-alive Proxy-Authorization => NTLM ... Content-Length => 0  Reading PROXY auth response... HEAD: HTTP/1.1 200 Connection established Via => 1.1 MCHP941X Connection => Keep-Alive Proxy-Connection => Keep-Alive Ok CONNECT response. Tunneling... tunnel: select cli: 6, srv: 7 
Ich werde es versuchen, sobald ich hinter ihrem Stellvertreter stehe. Sollte ein paar Tage bis Montag (Montag) sein. Mark Tomlin vor 11 Jahren 0
Leider hatte dies keine Auswirkung. Es gab mir die gleichen Informationen, die ich zuvor hatte, aber in den Protokolldateien ... Daher konnte ich mit diesem Flag keine Verbindung zum Fremdserver herstellen. Mark Tomlin vor 11 Jahren 0