NTLM 프록시 뒤의 클라이언트에서 SSH 서버에 연결


9

회사 네트워크에서 인터넷으로 SSH 서버에 접속하려고합니다. 외부 인터넷에 대한 모든 연결은 각 요청에서 각 클라이언트의 NTLM 해시를 확인하는 서버를 통해 프록시되어야합니다. 나는 그것을 위해 Cntlm 을 사용 하고 있으며 절반 만 작동합니다. HTTP 기반 연결에서는 제대로 작동하지만 SSH 스타일 연결에서는 작동하지 않습니다. Sublime TextPackage Control Plugin 에 연결하여 플러그인 을 가져오고 업데이트 할 수 있기 때문에 이것을 알고 있습니다. 그러나 Cntlm의 터널 구성을 사용하여 서버에 SSH로 연결할 수는 없습니다.

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에서 프록시 서버를 통한 외부 인터넷 연결 만 허용하므로 포트 443에서의 연결을 허용하도록 SSH 서버를 재구성했습니다.

내가보고있는 문제는 일단 SSH 연결을 시도하면 SFTP 플러그인을 사용할 때 Sublime Text에서 연결 시간 초과로 연결이보고된다는 것입니다 . PuTTY를 사용하면 즉시 결과가 나타납니다 PuTTY Fatal Error: Server unexpectedly closed network connection. Chrome 확장 프로그램 보안 셸을 사용하면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의 터널링 기능 만 사용 하여이 작업을 수행 할 수있는 방법이 있어야합니다. 내가 잘못하고있는 것을 모르겠습니다.

회사 네트워크 외부에서 포트 443을 사용하여 SSH 서버에 연결할 수 있다고 말할 수 있습니다.

답변:


1

Putty와 함께 CNTLM을 통해 SSH 서버에 연결하려고 할 때 407 응답이 발생했습니다. Forefront TMG 프록시는 SSH 트래픽 자체가 아닌 PuTTY의 DNS 조회에 반대했습니다. PuTTY 구성 의 프록시 페이지 에서 프록시 끝 에서 DNS 이름 조회 수행을 해제해야합니다 . 없음 설정은 작동 자동 또는 407 응답 발생합니다.


0

로그를 읽는 대신 -v 옵션을 사용하여 cntlm을 호출하면 포 그라운드에 유지되고 생성되는 즉시 터미널에서 진단 출력을 내 보냅니다.

인증 및 터널 설정이 모두 올바르게 작동하는 것으로 보입니다. 따라서 연결이 작동하지 않는 이유에 대한 설명이 없습니다 ( '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

불행히도 이것은 효과가 없었습니다. 이전과 동일한 정보를 제공했지만 로그 파일에는 ...이 플래그를 사용하여 외부 서버에 연결할 수 없었습니다.
Mark Tomlin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.