NTLM 프록시를 통한 Perl 패키지 관리자

NTLM 프록시를 통한 Perl 패키지 관리자

ActivePerl과 PPM 포함을 직장에 설치했지만 프록시를 통해 모듈 저장소에 연결할 수 없습니다. 환경변수를 설정했어요

HTTP_PROXY = http://user:[email protected]:port

하지만 PPM에는 여전히 407 오류가 표시됩니다.프록시 인증 필요. NTLM 프록시인 것 같은데 확실하지 않습니다.

하고 난 후이것, 나는오류 500: 잘못된 호스트 이름~을 위한pm4.activestate.com. PPM은 내 DNS 서버에 해당 이름을 확인하도록 요청했지만 내 로컬 DNS 서버는 이러한 외부 도메인 이름을 확인할 수 없습니다. 오직 프록시만이 그러한 일을 하며 HTTP 트래픽에 대해서만...

다음은 Wireshark(동일한 Windows XP 상자의 BackTrack VM에서 실행)가 보여주는 스크린샷입니다.

내 Windows 상자는10.75.82.221 DNS 서버는10.7.3.110

Wireshark 스니핑

TraceRoute가 Windows에서 표시하는 내용은 다음과 같습니다.

G:\>tracert ppm4.activestate.com
No se puede resolver el nombre de destino ppm4.activestate.com.

이는 다음을 의미합니다.

pm4.activestate.com을 확인할 수 없습니다

예상대로.

댓글에서 말했듯이 브라우저는 DNS 쿼리를 실행하지 않는 것 같습니다. 다음은 Firefox(WXP)에서 www.google.es에 대한 액세스를 보여주는 Wireshark 스크린샷(BT)입니다.

내 Windows 상자는10.75.82.221 프록시는10.7.8.46

Wireshark 스니핑

보시다시피 브라우저를 통해 액세스할 때 DNS 쿼리가 전혀 없습니다...

나에게 그것은 단지 보안 기능인 것 같고 ActiveState의 PPM 도구를 사용하려면 허가를 요청해야 할 것입니다... 여기서 작성한 스크립트의 대부분(99%)이 과속을 위한 것임에도 불구하고 이는 그럴듯하지 않습니다. 작품.

답변1

오류 407 해결 방법은 perl.org에 설명되어 있습니다.질문과 답변:

큐:적절한 자격 증명을 사용하여 http_proxy가 올바른 서버로 설정된 경우에도(사용자 이름 규칙 사용:[이메일 보호됨]:port) 여전히 cpan을 통해 패키지를 설치할 수 없습니다. "LWP가 코드[407] 메시지와 함께 실패했습니다.[프록시 인증 필요(ISA Server는 요청을 이행하려면 인증이 필요합니다. 웹 프록시 서비스에 대한 액세스가 거부되었습니다.)]"

ㅏ:CPAN은 NTLM 인증을 지원하지 않으며 Authen::NTLM을 CPAN과 함께 작동시키는 것이 어렵습니다. 결국 NTLM 인증을 위한 로컬 프록시로 ntlmaps를 사용하게 되었습니다.

가장 먼저 해야 할 일은 svn 저장소에서 최신 버전의 NTLMAPS를 가져와서 어딘가에 추출하는 것입니다. 다음으로 최신 버전의 Python을 다운로드하여 설치해야 합니다. NTLMAPS의 server.cfg를 열고 PARENT_PROXY를 프록시 주소 또는 IP로 설정하고, PARENT_PROXY_PORT를 프록시가 실행되는 포트(보통 80 또는 8080)로, NT_DOMAIN을 도메인으로, USER를 사용자 이름으로 설정합니다.

runserver.bat를 실행합니다. 비밀번호를 묻는 메시지가 나타나면 비밀번호를 입력하고 Enter를 누르세요. 다음으로 NTTLMAPS를 프록시로 사용하도록 cpan을 구성해야 합니다. 딸기\perl\lib\CPAN으로 이동하여 Config.pm을 엽니다. http_proxy를 다음으로 설정하세요. http://localhost:5865. CPAN을 실행하고 평소처럼 사용하세요. 이제 CPAN을 실행하기 전에 NTTLMAPS를 시작하기만 하면 제대로 실행됩니다.

간단히 말해서 LM 대신 LM + NT 인증을 강제해야 할 수도 있습니다. 이렇게 하려면 NTLMAPS server.cfg를 열고 NT_PART를 1로 설정하고 NTLM_FLAGS를 07820000으로 설정합니다.

HTTP_PROXY를 제거하고 명시된 대로 CPAN/Config.pm을 수정하면 문제가 해결될 수 있습니다.

아래 댓글 요약:

Wireshark 덤프 연구에 따르면 ActivePerl은 DNS 서버에서 알 수 없는 것으로 반환되는 DNS 요청을 발행하는 것으로 나타났습니다. 가능한 해결책은 다음과 같습니다.

  1. DNS 서버 재구성 (포스터에서는 불가능)
  2. 에서 요청 실행ActiveState 커뮤니티 사이트이러한 쓸데없는 요청을 중단하기 위해(빠른 구제가 보장되지 않음)
  3. 수동으로 다운로드하고설치하다모듈(실용적인 솔루션만 남음)

답변2

NTLM인 경우 NTLMPerl 모듈이 필요합니다. ActiveState PPM 문서에는 ppmx다음에서 패키지를 얻을 수 있다고 나와 있습니다.저장소, 그러나 그러한 링크를 찾을 수 없습니다. 그러나 여전히 다운로드할 수 있습니다.ppd그리고tar.gz파일을 다운로드하고 설치합니다.

wget http://ppm4.activestate.com/MSWin32-x86/5.12/1205/N/NB/NBEBOUT/NTLM-1.09.ppd
wget http://ppm4.activestate.com/MSWin32-x86/5.12/1205/N/NB/NBEBOUT/NTLM-1.09.tar.gz
ppm install NTLM-1.09.ppd

또한 컴퓨터가 Windows 도메인에 속하는 경우 자격 증명을 명시적으로 제공할 필요가 없습니다. http://proxy.full.name:portNTLM/Kerberos에 충분할 뿐만 아니라 보안도 더 높아야 합니다.


최근 Microsoft 소프트웨어는 NTLM에서 Kerberos로 전환하고 있습니다. 일반적으로 프록시는 두 가지를 모두 지원하지만~할 수 있다NTLM이 비활성화됩니다. PPM을 사용하는 Kerberos 프록시에 대한 문서는 많지 않지만 HTTP-NegotiateNTLM을 작동시킬 수 없다면 시도해 볼 가치가 있습니다.

답변3

이것은 어둠 속의 장면입니다... 아무도 이것을 시도한다고 언급하지 않았지만 모두가 아이디어가 없는 것처럼 들립니다... 이것이 사실이라면:

"Turns out PPM asks my DNS server to resolve that name, but my local DNS server cannot resolve such external domain names."

그런 다음 편집하십시오.

C:\Windows\System32\Drivers\etc\hosts

다음 줄을 추가하세요:

204.244.102.19  ppm4.activestate.com

차이가 있는지 확인하세요.


NTLMAP 문제를 해결하려면 다음을 수행하세요.

server.cfg DEBUG 및 BIN_DEBUG에는 두 가지 옵션이 있습니다. 서버에 문제가 있는 경우 문제 페이지(또는 리소스)를 요청하기 직전에 이러한 옵션을 DEBUG:1 및 BIN_DEBUG:1로 설정하세요. server.cfg를 다시 읽으려면 프록시 서버를 다시 시작해야 합니다. 이렇게 하면 127.0.0.1-1048, 127.0.0.1-1048.bin.client 및 127.0.0.1-1048.bin.rserver와 같이 http 요청당(정확히는 연결당) 3개의 로그 파일이 제공됩니다. 첫 번째에는 APS가 수행한 작업에 대한 정보가 있고 다른 두 개에는 클라이언트와 프록시의 원시 트래픽이 포함되어 있습니다.

http://ntlmaps.sourceforge.net/

답변4

set http_proxy =를 수행하는 대신http://사용자:[이메일 보호됨]:포트, 사용자 이름과 비밀번호 없이 프록시를 설정해 보세요.

그냥 해:

http_proxy = 설정http://proxy.full.name:포트

이유: 최신 버전의 Perl 5.22에서는 프록시 인증이 필요하지 않다는 내용을 어딘가에서 읽었습니다. 그것은 마술처럼 나에게 효과가 있었습니다.

문제가 해결되기를 바랍니다.

관련 정보