Conectando-se a um servidor SSH do Cliente atrás de um Proxy NTLM


9

Estou tentando acessar meu servidor SSH na Internet a partir de uma rede corporativa. Todas as conexões com a Internet externa devem ser submetidas a proxy através de um servidor que verifica o hash NTLM de cada cliente em cada solicitação. Estou usando o Cntlm para isso, e é apenas metade do trabalho. Está funcionando bem para conexões baseadas em HTTP, mas não está funcionando para conexões no estilo SSH. Eu sei disso porque, eu posso ligar para Sublime Texto 's Pacote de Controle Plugin para obter e plugins de atualização. No entanto, não posso usá-lo para SSH no meu servidor usando a configuração de túnel do Cntlm.

Analisando os logs do Cntlm, posso ver o seguinte ...

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 (Tipo 1)

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

Lendo a resposta de autenticação 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 entendi ...

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

Como o firewall permite apenas conexões com a Internet externa através do servidor proxy da porta 80 e 443, reconfigurei meu servidor SSH para aceitar conexões da porta 443.

O problema que estou vendo é que, quando tento uma conexão SSH, a conexão é reportada como tempo limite de conexão do Sublime Text ao usar o plug-in SFTP . O uso do PuTTY resulta em um instante PuTTY Fatal Error: Server unexpectedly closed network connection. O Shell Seguro da Extensão do Google Chrome fornece um erro mais detalhado dessh_exchange_identification: Connection closed by remote host NaCl plugin exited with status code 255.


Configuração do 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 é a seção de configuração que estou usando para o túnel no Cntlm.

Configuração PuTTY

IP:PORT     localhost:1443

É isso que estou usando para a conexão PuTTY.

Texto sublime

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

Alguma idéia é o que posso fazer para corrigir isso? Gostaria de fazer o SSH no meu servidor, deve haver uma maneira de fazer isso usando apenas o recurso de encapsulamento do Cntlm, apenas não sei o que estou fazendo de errado.

Posso garantir que posso me conectar ao meu servidor SSH usando a porta 443 de fora da rede corporativa.

Respostas:


1

Eu estava recebendo a resposta 407 ao tentar conectar-me a um servidor SSH por meio do CNTLM com Putty. O proxy do Forefront TMG estava fazendo objeções às pesquisas de DNS do PuTTY e não do tráfego SSH. Você precisa desativar as pesquisas de nome DNS no final do proxy na página Proxy da Configuração PuTTY. A configuração Não funciona, Automático ou Sim resultará na resposta 407.


0

Em vez de ler os logs, você pode chamar cntlm com a opção -v, que o mantém em primeiro plano e emite uma saída de diagnóstico no terminal no momento em que é gerado.

Sua autenticação e sua configuração de túnel parecem funcionar corretamente. Portanto, não tenho uma explicação sobre por que sua conexão não funciona (exceto que talvez 'localhost' não tenha sido resolvido corretamente para 127.0.0.1).

Acabei de testar o encaminhamento SSH (no caso simples de que nenhuma autenticação de usuário é realmente necessária) - eis o que eu tenho para você comparar, depois de emitir o comando

$ 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

(ao emitir 'ssh -p 443 localhost' em um 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

Vou tentar, assim que voltar atrás do proxy deles. Deve demorar alguns dias (segunda-feira).
precisa

Infelizmente isso não teve efeito. Ele me forneceu as mesmas informações que eu tinha antes, mas nos arquivos de log ... Como tal, não consegui me conectar ao servidor externo usando esse sinalizador.
Mark Tomlin
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.