Connessione a un server SSH dal client dietro un proxy NTLM


9

Sto cercando di accedere al mio server SSH su Internet da una rete aziendale. Tutte le connessioni a Internet esterno devono essere sottoposte a proxy tramite un server che controlla l'hash NTLM di ciascun client su ogni richiesta. Sto usando Cntlm per quello, e funziona solo a metà. Funziona bene per le connessioni basate su HTTP, ma non funziona per le connessioni in stile SSH. Lo so perché, posso collegarmi al Sublime Text 's Plugin di controllo del pacchetto per ottenere e plugin di aggiornamento. Tuttavia, non posso usarlo per SSH nel mio server usando la configurazione del tunnel di Cntlm.

Guardando nei registri di Cntlm, posso vedere quanto segue ...

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

Stretta di mano NTLM (tipo 1)

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

Lettura della risposta di autenticazione PROXY ...

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]

E finalmente ho capito ...

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

Poiché il firewall consente solo connessioni a Internet esterno tramite il server proxy dalla porta 80 e 443, ho riconfigurato il mio server SSH per accettare le connessioni dalla porta 443.

Il problema che vedo è che quando provo una connessione SSH la connessione viene segnalata come timeout della connessione da Sublime Text quando utilizzo il plug-in SFTP . L'uso di PuTTY si traduce in un istante PuTTY Fatal Error: Server unexpectedly closed network connection. Estensione di Google Chrome Secure Shell mi dà un errore più dettagliato dissh_exchange_identification: Connection closed by remote host NaCl plugin exited with status code 255.


Configurazione Cntlm

# 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

Questa è la sezione di configurazione che sto usando per il tunnel all'interno di Cntlm.

Configurazione PuTTY

IP:PORT     localhost:1443

Questo è quello che sto usando per la connessione PuTTY.

Testo sublime

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

Qualche idea su cosa posso fare per risolvere questo problema? Vorrei SSH nel mio server, ci deve essere un modo per farlo usando solo la funzione di tunneling di Cntlm, semplicemente non so cosa sto facendo di sbagliato.

Posso dirti che posso collegarmi al mio server SSH usando la porta 443 dall'esterno della rete aziendale.

Risposte:


1

Stavo ottenendo la risposta 407 quando provavo a connettermi a un server SSH tramite CNTLM con Putty. Il proxy Forefront TMG si opponeva alle ricerche DNS da PuTTY e non al traffico SSH stesso. È necessario disattivare Esegui ricerche di nomi DNS alla fine del proxy nella pagina Proxy di Configurazione PuTTY. L' impostazione No funziona, Auto o genererà la risposta 407.


0

Invece di leggere i log, è possibile chiamare cntlm con l'opzione -v, che lo mantiene in primo piano ed emette l'output di diagnosi sul terminale nel momento stesso in cui viene generato.

Sia l'autenticazione che la configurazione del tunnel sembrano funzionare correttamente. Quindi non ho una spiegazione del perché la tua connessione non funziona (tranne che forse 'localhost' non è stato risolto correttamente in 127.0.0.1).

Ho appena testato l'inoltro SSH (per il semplice caso in cui non è necessaria l'autenticazione dell'utente): ecco cosa ho potuto confrontare, dopo aver emesso il comando

$ cntlm -L 443: host remoto: 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

(al rilascio di 'ssh -p 443 localhost' su un altro terminale):

   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

Ci proverò, una volta tornato dietro il loro delegato. Dovrebbero essere alcuni giorni (lunedì).
Mark Tomlin

Purtroppo questo non ha avuto effetto. Mi ha dato le stesse informazioni che avevo prima, ma nei file di registro ... In quanto tale, non ero in grado di connettermi al server esterno usando questo flag.
Mark Tomlin
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.