Conexión a un servidor SSH desde el cliente detrás de un proxy NTLM

9

Estoy tratando de acceder a mi servidor SSH en Internet desde una red corporativa. Todas las conexiones a Internet externo se deben enviar a través de un servidor que verifique el hash NTLM de cada cliente en cada solicitud. Estoy usando Cntlm para eso, y solo funciona a medias. Funciona bien para conexiones basadas en HTTP, pero no funciona para conexiones de estilo SSH. Lo sé porque, me puedo conectar a Sublime Texto 's paquete Control Plugin para obtener y plugins de actualización. Sin embargo, no puedo usarlo para SSH en mi servidor usando la configuración del túnel de Cntlm.

Mirando los registros de Cntlm, puedo ver lo siguiente ...

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

Apretón de manos NTLM (Tipo 1)

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

Leyendo la respuesta de autenticación 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]

Y finalmente consigo esto ...

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

Debido a que el firewall solo permite conexiones a internet externo a través del servidor proxy desde el puerto 80 y el puerto 443, reconfiguré mi servidor SSH para aceptar conexiones desde el puerto 443.

El problema que veo es que una vez que intento una conexión SSH, la conexión informa como tiempo de espera de conexión de Sublime Text cuando uso el complemento SFTP . Usar PuTTY resulta en un instante PuTTY Fatal Error: Server unexpectedly closed network connection. Google Chrome Extension Secure Shell me da un error más detallado dessh_exchange_identification: Connection closed by remote host NaCl plugin exited with status code 255.


Configuración de 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

Esta es la sección de configuración que estoy usando para el Túnel dentro de Cntlm.

Configuración de PuTTY

IP:PORT     localhost:1443

Esto es lo que estoy usando para la conexión PuTTY.

Texto sublime

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

¿Alguna idea de lo que puedo hacer para arreglar esto? Me gustaría ingresar SSH a mi servidor, debe haber una manera de hacerlo usando solo la función de túnel de Cntlm, simplemente no sé qué estoy haciendo mal.

Puedo decirle que puedo conectarme a mi servidor SSH usando el puerto 443 desde fuera de la red corporativa.

Mark Tomlin
fuente

Respuestas:

1

Estaba recibiendo la respuesta 407 cuando intentaba conectarme a un servidor SSH a través de CNTLM con Putty. El proxy de Forefront TMG se oponía a las búsquedas de DNS desde PuTTY, no el tráfico SSH en sí. Debe desactivar las búsquedas de nombre DNS al final del proxy en la página Proxy de Configuración PuTTY. La configuración No funciona, Auto o dará como resultado la respuesta 407.

rubinho
fuente
0

En lugar de leer los registros, puede llamar a cntlm con la opción -v, que lo mantiene en primer plano y emite una salida de diagnóstico en el terminal en el momento en que se genera.

Tanto su autenticación como la configuración de su túnel parecen funcionar correctamente. Por lo tanto, tampoco tengo una explicación de por qué su conexión no funciona (excepto que tal vez 'localhost' no se resuelve correctamente a 127.0.0.1).

Acabo de probar el reenvío SSH (por el simple caso de que en realidad no se necesita autenticación de usuario): esto es lo que tengo para que compares, después de emitir el 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 emitir 'ssh -p 443 localhost' en un terminal diferente):

   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
usuario640811
fuente
Daré una oportunidad a esto, una vez que regrese detrás de su proxy. Debería ser unos días (lunes).
Mark Tomlin
Lamentablemente esto no tuvo ningún efecto. Me dio la misma información que tenía antes, pero en los archivos de registro ... Como tal, no pude conectarme al servidor externo usando esta bandera.
Mark Tomlin