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

9

Ich versuche, über ein Unternehmensnetzwerk auf meinen SSH-Server im Internet zuzugreifen. Alle Verbindungen zum externen Internet müssen über einen Server übertragen werden, der bei jeder Anforderung nach dem NTLM-Hash jedes Clients sucht. Ich benutze dafür Cntlm und es funktioniert nur zur Hälfte. Es funktioniert gut für HTTP-basierte Verbindungen, aber es funktioniert nicht für SSH-Verbindungen. Ich weiß das , weil, ich kann eine Verbindung Sublime Text ‚s Package Control Plugin Plugins zu erhalten und zu aktualisieren. Ich kann es jedoch nicht verwenden, um mithilfe der Tunnelkonfiguration von Cntlm SSH auf meinen Server zu übertragen.

Wenn ich in die Protokolle von Cntlm schaue, sehe ich Folgendes ...

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

Lesen der PROXY-Authentifizierungsantwort ...

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 schließlich 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 Verbindungen von Port 443 akzeptiert werden.

Das Problem, das ich sehe, ist, dass nach dem Versuch einer SSH-Verbindung die Verbindung als Verbindungszeitlimit von Sublime Text gemeldet wird, wenn das SFTP-Plugin verwendet wird . Die Verwendung von PuTTY führt sofort 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

Dies ist, was ich für die PuTTY-Verbindung verwende.

Erhabener Text

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

Irgendeine Idee, was ich tun kann, um dies zu beheben? Ich möchte SSH in meinen Server einbinden. 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.

Mark Tomlin
quelle

Antworten:

1

Ich habe die Antwort 407 erhalten, als ich versucht habe, über CNTLM mit Putty eine Verbindung zu einem SSH-Server herzustellen. Der Forefront TMG-Proxy lehnte DNS-Suchvorgänge von PuTTY ab, nicht den SSH-Verkehr selbst. Sie müssen die Suche nach DNS-Namen am Proxy-Ende auf der Proxy- Seite der PuTTY-Konfiguration deaktivieren. Die Einstellung Nein funktioniert. Auto oder Ja führen zur Antwort 407.

Rubinho
quelle
0

Anstatt die Protokolle zu lesen, können Sie cntlm mit der Option -v aufrufen, die es im Vordergrund hält und in dem Moment, in dem es generiert wird, eine Diagnoseausgabe auf dem Terminal ausgibt.

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

Ich habe gerade die SSH-Weiterleitung getestet (für den einfachen Fall, dass tatsächlich keine Benutzerauthentifizierung erforderlich ist) - hier ist, was Sie nach dem Ausgeben des Befehls vergleichen können

$ cntlm -L 443: remotehost: 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
user640811
quelle
Ich werde es versuchen, sobald ich wieder hinter ihrem Stellvertreter bin. Sollte ein paar Tage bis (Montag) sein.
Mark Tomlin
Dies hatte leider 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 externen Server herstellen.
Mark Tomlin