Подключение к серверу SSH с клиента за прокси-сервером NTLM
Я пытаюсь получить доступ к своему SSH-серверу в Интернете из корпоративной сети. Все соединения с внешним интернетом должны быть проксированы через сервер, который проверяет хэш NTLM каждого клиента при каждом запросе. Я использую Cntlm для этого, и он работает только наполовину. Он работает нормально для соединений на основе HTTP, но не работает для соединений в стиле SSH. Я знаю это, потому что я могу подключиться к плагину управления пакетами SublimeText, чтобы получать и обновлять плагины. Я, однако, не могу использовать его для 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...
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, соединение сообщает о превышении времени ожидания соединения из SublimeText при использовании плагина 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 из-за пределов корпоративной сети.
2 ответа
Я получал ответ 407 при попытке подключиться к SSH-серверу через CNTLM с Putty. Прокси-сервер Forefront TMG возражал против поиска DNS из PuTTY, а не самого трафика SSH. Вам необходимо отключить поиск DNS-имен в конце прокси на странице Proxy в конфигурации PuTTY. Настройка Нет работает, Авто или Да приведет к ответу 407.
Вместо чтения журналов вы можете вызвать 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