Connexion à un serveur SSH à partir du client derrière un proxy NTLM


9

J'essaie d'accéder à mon serveur SSH sur Internet à partir d'un réseau d'entreprise. Toutes les connexions à Internet extérieur doivent être mandatées via un serveur qui vérifie le hachage NTLM de chaque client à chaque demande. J'utilise Cntlm pour cela, et cela ne fonctionne qu'à moitié. Cela fonctionne bien pour les connexions HTTP, mais cela ne fonctionne pas pour les connexions de style SSH. Je sais cela parce que, je peux me connecter à Sublime Text de » Control Package Plugin pour obtenir et plugins de mise à jour. Cependant, je ne peux pas l'utiliser pour SSH sur mon serveur en utilisant la configuration Tunnel de Cntlm.

En regardant dans les journaux de Cntlm, je peux voir ce qui suit ...

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

Poignée de main NTLM (Type 1)

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

Lecture de la réponse d'authentification 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]

Et enfin je reçois ceci ...

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

Étant donné que le pare-feu autorise uniquement les connexions à Internet via le serveur proxy à partir du port 80 et du port 443, j'ai reconfiguré mon serveur SSH pour accepter les connexions à partir du port 443.

Le problème que je vois est qu'une fois que j'essaie une connexion SSH, la connexion signale le délai d'expiration de la connexion depuis Sublime Text lors de l'utilisation du plug-in SFTP . L'utilisation de PuTTY résulte en un instant PuTTY Fatal Error: Server unexpectedly closed network connection. Google Chrome Extension Secure Shell me donne une erreur plus détaillée dessh_exchange_identification: Connection closed by remote host NaCl plugin exited with status code 255.


Configuration 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

Ceci est la section de configuration que j'utilise pour le tunnel dans Cntlm.

Configuration de PuTTY

IP:PORT     localhost:1443

C'est ce que j'utilise pour la connexion PuTTY.

Texte sublime

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

Une idée de ce que je peux faire pour résoudre ce problème? Je voudrais SSH dans mon serveur, il doit y avoir un moyen de le faire en utilisant uniquement la fonctionnalité de tunneling de Cntlm, je ne sais tout simplement pas ce que je fais mal.

Je peux vous dire que je peux me connecter à mon serveur SSH en utilisant le port 443 depuis l'extérieur du réseau d'entreprise.

Réponses:


1

J'obtenais la réponse 407 lorsque j'essayais de me connecter à un serveur SSH via CNTLM avec Putty. Le proxy Forefront TMG s'opposait aux recherches DNS à partir de PuTTY et non au trafic SSH lui-même. Vous devez désactiver les recherches de nom DNS à la fin du proxy dans la page Proxy de la configuration PuTTY. Le paramètre Non fonctionne, Auto ou Oui entraînera la réponse 407.


0

Au lieu de lire les journaux, vous pouvez appeler cntlm avec l'option -v, qui le maintient au premier plan et émet une sortie de diagnostic sur le terminal au moment même où il est généré.

Votre authentification et votre configuration de tunnel semblent fonctionner correctement. Je n'ai donc pas d'explication non plus sur la raison pour laquelle votre connexion ne fonctionne pas (sauf que peut-être que «localhost» n'est pas correctement résolu en 127.0.0.1).

Je viens de tester le transfert SSH (pour le cas simple où aucune authentification utilisateur n'est réellement nécessaire) - voici ce que j'ai obtenu pour que vous puissiez comparer, après avoir lancé la commande

$ 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

(lors de l'émission de 'ssh -p 443 localhost' sur un autre 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

Je vais essayer ça une fois que je serai de retour derrière leur proxy. Devrait être de quelques jours (lundi).
Mark Tomlin

Malheureusement, cela n'a eu aucun effet. Il m'a donné les mêmes informations que j'avais auparavant, mais dans les fichiers journaux ... En tant que tel, je n'ai pas pu me connecter au serveur extérieur à l'aide de cet indicateur.
Mark Tomlin
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.