Подключение к серверу SSH с клиента за прокси-сервером NTLM

14335
Mark Tomlin

Я пытаюсь получить доступ к своему SSH-серверу в Интернете из корпоративной сети. Все соединения с внешним интернетом должны быть проксированы через сервер, который проверяет хэш NTLM каждого клиента при каждом запросе. Я использую Cntlm для этого, и он работает только наполовину. Он работает нормально для соединений на основе HTTP, но не работает для соединений в стиле SSH. Я знаю, что это потому, что я могу подключиться к Sublime Text «s Package Control Plugin для получения и обновления плагинов. Я, однако, не могу использовать его для SSH на моем сервере с помощью туннельной конфигурации Cntlm.

Просматривая логи Cntlm, я вижу следующее ...

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 Рукопожатие (Тип 1)

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

Чтение ответа PROXY auth ...

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] 

И наконец я понял это ...

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 

Поскольку брандмауэр разрешает подключения только к внешнему Интернету через прокси-сервер через порт 80 и порт 443, я перенастроил свой SSH-сервер на прием соединений из порта 443.

Проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь установить SSH-соединение, оно сообщает об истечении времени ожидания соединения из Sublime Text при использовании плагина SFTP . Использование PuTTY мгновенно PuTTY Fatal Error: Server unexpectedly closed network connection. Google Chrome Extension Secure Shell дает мне более подробную ошибкуssh_exchange_identification: Connection closed by remote host NaCl plugin exited with status code 255.


Конфигурация 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 

Это раздел конфигурации, который я использую для туннеля в Cntlm.

Конфигурация PuTTY

IP:PORT localhost:1443 

Это то, что я использую для подключения PuTTY.

Возвышенный текст

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

Есть идеи, что я могу сделать, чтобы это исправить? Я хотел бы подключить SSH к моему серверу, должен быть способ сделать это, используя только функцию туннелирования Cntlm, я просто не знаю, что я делаю неправильно.

Я могу сказать вам, что я могу подключиться к своему SSH-серверу, используя порт 443 из-за пределов корпоративной сети.

8

2 ответа на вопрос

1
rubinho

I was getting the 407 response when trying to connect to an SSH server through CNTLM with Putty. The Forefront TMG proxy was objecting to DNS lookups from PuTTY not the SSH traffic itself. You need to turn off Do DNS name lookups at proxy end in the Proxy page of PuTTY Configuration. The No setting works, Auto or Yes will result in the 407 response.

0
user640811

Вместо чтения журналов вы можете вызвать cntlm с опцией -v, которая сохраняет его на переднем плане и выдает диагностический вывод на терминал в тот момент, когда он генерируется.

И ваша аутентификация, и настройки туннеля работают правильно. Поэтому у меня нет объяснения, почему ваше соединение не работает (за исключением того, что, возможно, 'localhost' не правильно разрешен до 127.0.0.1).

Я только что проверил переадресацию SSH (для простого случая, когда на самом деле не требуется аутентификация пользователя) - вот что я получил для сравнения после выполнения команды

$ cntlm -L 443: удаленный хост: 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 

(при выдаче 'ssh -p 443 localhost' на другом терминале):

 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 
Я сделаю это, как только вернусь за их прокси. Должно быть несколько дней (понедельник). Mark Tomlin 11 лет назад 0
К сожалению, это не имело никакого эффекта. Он дал мне ту же информацию, что и раньше, но в файлах журналов ... Поэтому я не смог подключиться к внешнему серверу, используя этот флаг. Mark Tomlin 11 лет назад 0

Похожие вопросы