당신은 프록시를 구입하고 login:password@host:port 형식의 문자열을 받았지만 프로그램은 "주소와 포트"만 요청합니다. 익숙한 상황입니다: --proxy-server 플래그가 있는 Chrome, Windows 및 Android의 시스템 설정, 오래된 파서, Selenium 그리드, 비밀번호 입력란이 없는 유틸리티. 해결책은 수년 동안 동일합니다 — 로컬 게이트웨이: 비밀번호 없이 연결을 수락하고 실제 프록시에 연결할 때 로그인 정보를 자동으로 삽입하는 작은 프록시입니다. 네 가지 검증된 도구, 각 도구에 대한 명령어 및 일반적으로 시간과 돈을 낭비하는 오류를 살펴보겠습니다.
왜 프로그램은 비밀번호가 있는 프록시를 "이해하지 못할까요"
프록시 제공업체에 인증하는 두 가지 방법이 있습니다: 로그인과 비밀번호(Basic Auth) 또는 IP 화이트리스트. 두 번째 옵션은 문제를 해결하지만, 고정된 외부 IP가 있는 경우에만 작동합니다 — 가정용 인터넷과 모바일 네트워크에서는 자주 없고, 클라우드 기능은 매번 실행할 때마다 변경됩니다. 두 방법을 자세히 비교한 내용은 프록시 인증 가이드에서 확인할 수 있습니다.
로그인과 비밀번호를 사용할 경우, 프로그램 자체의 제한에 부딪힙니다:
- Chrome 및 Chromium.
--proxy-server플래그는 Chromium 문서에 따르면 스킴, 호스트 및 포트를 수락합니다(예:--proxy-server="foopy:8080") — 이 구문에는 자격 증명 필드가 없습니다. 일반 브라우저 창에서는 비밀번호 입력 대화 상자가 표시되지만, 헤드리스 모드와 자동 테스트에서는 이를 입력할 사람이 없습니다. - 시스템 설정. Windows의 수동 프록시 설정과 대부분의 Android 펌웨어의 Wi-Fi 설정에는 호스트와 포트만 있습니다. 비밀번호는 특정 애플리케이션에서 요청하거나 어디에도 입력할 수 없습니다.
- 오래된 및 사용자 정의 소프트웨어. 많은 유틸리티와 라이브러리가 프록시를 지원하지만 인증 없이 지원하거나 비밀번호의 특수 문자에서 오류가 발생합니다.
- 프록시를 전혀 지원하지 않는 프로그램. 환경 변수를 읽지 않거나 설정을 인식하지 않는 콘솔 유틸리티입니다.
로컬 게이트웨이는 이 네 가지 경우를 모두 해결합니다: 프로그램은 비밀번호 없이 프록시 127.0.0.1:8080을 보고, 게이트웨이는 로그인 정보를 포함하여 제공업체로 트래픽을 전달합니다.
스킴이 작동하는 방식
- 당신의 컴퓨터(또는 파서가 작동하는 VPS)에서 경량 프록시 서버가 시작되어 로컬 포트, 예를 들어
127.0.0.1:8080를 수신 대기합니다. - 게이트웨이의 구성 파일에는 "부모" (upstream) 프록시 — 제공업체의 주소, 로그인 및 비밀번호가 명시되어 있습니다.
- 프로그램은 인증 없이 로컬 포트에 연결합니다.
- 게이트웨이는 제공업체에 연결을 열고 인증을 통과한 후 트래픽을 계속 전달합니다. 사이트에 대해서는 제공업체의 IP 주소로 보입니다.
이때 HTTPS는 해독되지 않습니다: HTTP 프록시를 통해 브라우저는 CONNECT 방법으로 터널을 설정하고, 게이트웨이는 단순히 암호화된 바이트를 전달합니다.
옵션 1: gost — 하나의 명령어, 구성 파일 없음
gost (GO Simple Tunnel) — Windows, macOS 및 Linux용 Go로 작성된 단일 실행 파일입니다. 게이트웨이를 설정하는 가장 빠른 방법입니다. gost에서 -L 플래그는 로컬 서비스를 설정하고, -F는 트래픽을 전달할 노드를 지정합니다. 자격 증명은 노드 주소에 직접 명시됩니다:
gost -L http://127.0.0.1:8080 -F socks5://LOGIN:PASSWORD@HOST:PORT
이제 어떤 프로그램이든 비밀번호 없이 HTTP 프록시 127.0.0.1:8080을 사용할 수 있습니다. 비밀번호에 특수 문자가 포함되어 있는 경우(@, :, #), gost 문서에서는 이를 base64의 auth 매개변수를 통해 전달할 것을 제안합니다:
echo -n LOGIN:PASSWORD | base64
gost -L http://127.0.0.1:8080 -F socks5://HOST:PORT?auth=<결과_base64>
유의할 점: auth가 지정되면, 주소에 직접 기록된 로그인과 비밀번호는 gost에서 무시됩니다. 여러 개의 -F 플래그를 연속으로 사용하면 여러 프록시의 체인이 형성됩니다.
언제 사용하나요: 하나의 브라우저나 스크립트를 프록시와 빠르게 연결해야 할 때, 패키지를 설치하거나 구성 파일을 수정할 필요 없이.
옵션 2: 3proxy — 하나의 머신에서 여러 포트
3proxy — 하나의 파일로 구성된 컴팩트한 프록시 서버입니다. 주요 지시어는 parent; 문서에 따르면 그 구문은 parent <weight> <type> <ip> <port> <username> <password>이며, allow 규칙 다음에 위치해야 합니다. 게이트웨이의 최소 구성:
auth iponly
allow * 127.0.0.1
parent 1000 http HOST PORT LOGIN PASSWORD
proxy -p8080 -i127.0.0.1
여기서 중요한 점:
auth iponly— 비밀번호 없이 ACL로 확인합니다; 규칙allow * 127.0.0.1는 로컬 연결만 허용합니다.- 가중치
1000은 "항상 이 부모를 통해"를 의미합니다. 1000 미만의 가중치는 3proxy가 임의의 체인을 수집하는 데 사용됩니다. - 부모의 유형:
http,connect,socks4,socks5등 — 제공업체가 제공한 프로토콜을 선택하세요. -i127.0.0.1는 서비스를 로컬 인터페이스에 바인딩합니다. 기본적으로 3proxy는 모든 인터페이스에서 연결을 수락합니다.
편리한 방법: 서로 다른 포트와 제공업체의 서로 다른 계정으로 allow / parent / proxy 블록을 여러 번 반복합니다. 이렇게 하면 "포트 = 개별 프록시"가 생성됩니다: 127.0.0.1:8081 — 미국, :8082 — 독일 등. 이 형식은 프록시를 "호스트:포트" 목록으로 입력하는 소프트웨어에서도 거의 모든 소프트웨어에서 이해됩니다.
언제 사용하나요: 수십 개의 프로필이나 스트림이 필요하고, 각 프로필에 고유한 출구가 필요할 때.
옵션 3: Squid — 캐시와 로그가 필요할 때
Squid는 더 무겁지만, 캐싱, 상세한 로그 및 유연한 ACL을 제공합니다. 제공업체는 cache_peer를 통해 부모 노드로 설정되며, never_direct allow all 지시어는 Squid가 부모를 우회하여 직접 인터넷에 접속하는 것을 금지합니다:
http_port 127.0.0.1:3128
cache_peer HOST parent PORT 0 no-query default login=LOGIN:PASSWORD
never_direct allow all
Squid 문서의 주의 사항:
- 부모가 ICP를 지원하지 않는 경우
0을 설정합니다 — 상업용 프록시에는 없습니다. login=에는 URL-escape 시퀀스(예: 공백에 대한%20)가 허용되므로, 비밀번호에 있는%기호는%%로 작성해야 합니다.never_direct가 없으면 Squid는 사이트에 직접 접속하는 것이 더 유리하다고 판단할 수 있으며, 요청이 실제 IP로 전송됩니다. 파싱 및 멀티 계정 관리에는 최악의 시나리오입니다.
언제 사용하나요: 누가 어디로 갔는지 기록이 필요하거나 동일한 리소스에 대한 반복 요청이 필요한 사무실이나 팀.
옵션 4: proxychains-ng — 프록시 지원이 없는 프로그램을 위한
프록시를 전혀 지원하지 않는 프로그램에는 proxychains-ng (Linux 및 macOS)가 도움이 됩니다. 이 도구는 프로그램의 네트워크 호출을 가로채고 TCP 연결을 프록시로 감쌉니다. SOCKS4a, SOCKS5 및 HTTP를 지원하며, SOCKS 및 HTTP에 대한 인증은 로그인과 비밀번호입니다. [ProxyList] 섹션의 형식은 유형 ip 포트 [로그인 비밀번호]입니다:
strict_chain
proxy_dns
tcp_read_time_out 15000
tcp_connect_time_out 8000
[ProxyList]
http HOST PORT LOGIN PASSWORD
실행: proxychains4 curl https://api.ipify.org — 응답에는 당신의 IP가 아닌 제공업체의 IP가 표시됩니다.
strict_chain— 목록의 모든 프록시가 순서대로 사용되며, 하나가 사용할 수 없으면 연결이 이루어지지 않습니다.dynamic_chain보다 안전합니다, 후자는 죽은 노드를 пропуска합니다.proxy_dns— DNS 요청도 프록시를 통해 전송됩니다. 이 옵션이 없으면 인터넷 제공업체가 요청하는 도메인을 볼 수 있으며, 사이트는 DNS와 IP의 지리적 위치 불일치를 감지할 수 있습니다.- 구성 파일은 순서대로 검색됩니다:
-f의 파일 또는PROXYCHAINS_CONF_FILE변수, 그 다음./proxychains.conf,~/.proxychains/proxychains.conf및/etc/proxychains.conf.
제한 사항, 저자들이 언급하는 내용: TCP만 지원(UDP 및 ICMP는 프록시되지 않음), 많은 프로세스를 생성하는 프로그램에서 오류가 발생할 수 있으며, macOS에서는 SIP 보호가 시스템 프로그램을 가로채는 것을 허용하지 않습니다.
어떤 도구를 선택할까: 짧은 요약
- 하나의 브라우저 또는 스크립트, "지금 당장" 필요 — gost.
- 많은 프로필, 각기 다른 IP 또는 국가 — 3proxy와 각 계정에 대한 개별 포트.
- 팀, 요청 로그, 캐시 — Squid.
- 프록시 설정이 전혀 없는 프로그램 — proxychains-ng.
가장 비싼 다섯 가지 실수
- 게이트웨이가 모든 인터페이스를 수신 대기합니다. VPS에서
-L http://:8080으로 gost를 실행하면 — 당신의 기가바이트로 인터넷 전체에 공개된 프록시를 얻게 됩니다. 공개 프록시는 스캐너에 의해 빠르게 발견됩니다. 항상127.0.0.1를 지정하고, 다른 머신이 게이트웨이를 사용하는 경우 방화벽으로 포트를 차단하세요. 봇넷이 파서가 있는 서버에서 공개 포트를 얼마나 빨리 찾는지에 대한 내용은 CARBONATO 웜 분석에서 다루었습니다. - 게이트웨이를 우회하는 유출.
never_direct가 없는 Squid,proxy_dns가 없는 proxychains, WebRTC/UDP를 통해 직접 연결하는 브라우저 — 모두 실제 IP를 노출합니다. IP 확인 서비스와 DNS 유출 테스트에서 결과를 확인하세요. - 모든 계정에 하나의 게이트웨이. 30개의 안티 감지 프로필이 하나의 포트를 통해 하나의 스티키 세션을 공유하면 모두 동일한 IP를 가지게 됩니다 — 이는 계정 연결의 직접적인 경로입니다. 프로필을 포트별로 분리하거나 제공업체의 세션 매개변수를 사용하세요.
- 비밀번호의 특수 문자.
@및:는login:pass@host형식의 주소 분석을 방해합니다. gost에서 base64 매개변수를 사용하거나 Squid에서 이스케이프 처리하거나 특수 문자가 없는 비밀번호를 생성하세요. - 게이트웨이는 불필요한 홉과 실패 지점입니다. 로컬 머신에서는 지연이 거의 없지만, 게이트웨이가 다른 데이터 센터에 있으면 각 요청에 네트워크 지연이 추가됩니다. 게이트웨이를 프로그램 가까이에 두고 자동 시작을 설정하세요 (systemd, Windows 서비스), 그렇지 않으면 서버가 재부팅된 후 파서가 조용히 사라질 수 있습니다.
게이트웨이 뒤에 어떤 프록시를 설정할까
게이트웨이는 뒤에 어떤 유형의 프록시가 있는지 상관하지 않습니다 — 선택은 작업에 따라 다릅니다:
- 주거용 프록시 — 보호된 사이트, 마켓플레이스 및 안티 감지 프로필을 파싱하기 위해: 가정 사용자의 IP는 안티봇에게 덜 의심을 받습니다.
- 모바일 프록시 — 소셜 미디어 및 애플리케이션에서 가장 엄격한 검사를 위해: 하나의 모바일 운영자 IP( CGNAT를 통해)로 여러 실제 가입자가 네트워크에 접속하는 경우가 많아 이를 차단하는 것은 플랫폼에 위험할 수 있습니다.
- 데이터 센터 프록시 — 엄격한 보호 없이 대량 작업을 위해: 가용성 검사, API, 테스트. 기가바이트당 가장 저렴합니다.
회전 프록시의 경우, IP 변경 로직은 일반적으로 제공업체가 로그인 매개변수나 대시보드 설정을 통해 설정합니다. 게이트웨이는 이를 변경하지 않습니다: 로그인 정보를 그대로 전달합니다. 따라서 서로 다른 세션 매개변수로 여러 포트를 설정하는 것이 편리합니다 — 하나는 각 요청에 대해 새로운 IP를, 다른 하나는 30분 동안 고정된 IP를 사용합니다.
결론
로그인과 비밀번호가 있는 프록시는 로컬 게이트웨이를 두면 모든 프로그램에 적합합니다. gost는 하나의 명령어로 문제를 해결하고, 3proxy는 "포트 = 프로필"에 유용하며, Squid는 로그가 필요한 팀에 적합하고, proxychains-ng는 프록시에 대해 아무것도 모르는 소프트웨어도 연결할 수 있습니다. 주요 규칙은: 127.0.0.1만 수신 대기하고, 부모를 우회하는 직접 연결을 금지하며, 사이트가 당신의 IP가 아닌 제공업체의 IP를 보는지 확인하는 것입니다.
