Protocols

HTTP, HTTPS, SOCKS4 및 SOCKS5 프록시 중 선택하기

3 min read Published Updated 540 words

'프록시'라는 이름이 붙은 네 가지 프로토콜은 이름 외에는 공통점이 거의 없습니다. HTTP 프록시는 레이어 7을 파싱하고 헤더를 재작성하는 반면, SOCKS 프록시는 트래픽을 전혀 읽지 않습니다. 이러한 차이에 따라 브라우징, 스크래핑, 원시 터널링에 적합한 프록시가 결정됩니다.

HTTP 프록시

HTTP 프록시는 HTTP 의미론을 기대합니다. 요청을 열고 URL을 읽으며 Via 또는 X-Forwarded-For 같은 헤더를 첨부할 수 있고, 유효한 HTTP 요청이 아닌 것은 거부합니다. 브라우저, curl 및 대부분의 스크래핑 라이브러리는 구성이 사실상 무료이기 때문에 HTTP 프록시를 기본으로 사용합니다. 단일 환경 변수를 설정하거나 플래그를 전달하면 됩니다.

이러한 단순함의 대가는 가시성입니다. 프록시는 경로와 쿼리 문자열을 포함한 전체 URL을 볼 수 있으며, 평문 HTTP에서는 본문도 볼 수 있습니다. 캐싱 프록시는 응답을 재작성할 수 있고, 투명 프록시는 쿠키를 제거할 수 있습니다. 모든 HTTP 프록시를 완전한 권한을 가진 중개자로 취급하고 평문으로 자격 증명을 절대 보내지 마십시오.

HTTPS 프록시와 CONNECT 메서드

"HTTPS 프록시"는 다소 오해의 소지가 있는 명칭입니다. 이는 CONNECT 메서드를 추가로 구현한 HTTP 프록시를 의미합니다. CONNECT는 프록시에 대상 호스트로의 원시 TCP 터널을 열고 양방향으로 바이트를 전달하도록 지시합니다. 그러면 클라이언트와 대상은 프록시가 없는 것처럼 TLS를 협상합니다. 프록시는 대상 호스트와 포트, 바이트 양은 볼 수 있지만 페이로드는 볼 수 없습니다.

따라서 "HTTPS 지원" 프록시는 자체적으로 TLS 위에서 실행되는 프록시가 아니라 TLS 터널링을 지원하는 프록시입니다. 사용자 머신에서 프록시까지의 링크는 독립적으로 평문 또는 암호화될 수 있습니다. 해당 링크가 보호되기를 원한다면 SOCKS5-over-TLS 구현체나 TLS 엔드포인트를 공개하는 유료 상용 프록시를 사용하십시오.

SOCKS4

SOCKS4는 1994년의 최소 사양입니다: TCP 전용, IPv4 전용, UDP 없음, IPv6 없음, 인증 없음, 프록시에서의 호스트명 확인 없음. 핸드셰이크는 6바이트와 1바이트 응답 코드로 구성됩니다. 이 프로토콜은 매우 작아서 거의 모든 TCP 인식 도구가 올바르게 구현할 수 있기 때문에 현장에서 여전히 사용됩니다. 목록에 SOCKS4가 광고되어 있다면 IPv4 주소로의 원시 TCP 포워딩만 기대하십시오. 그 외에는 없습니다.

SOCKS5

RFC 1928(1996)에 정의된 SOCKS5는 대부분의 현대 도구가 사용하는 버전입니다. UDP 포워딩, IPv6 주소, GSSAPI 인증, 그리고 클라이언트 대신 프록시에서 호스트명을 확인하는 옵션을 추가합니다. SOCKS5는 상위 애플리케이션 계층에 대해 어떤 가정도 하지 않기 때문에 SSH, IRC, BitTorrent, 사용자 정의 RPC와 같은 비HTTP 워크로드에 가장 유연한 선택입니다.

성능 및 오버헤드

SOCKS 프록시는 아무것도 파싱하지 않기 때문에 요청당 오버헤드가 낮습니다. HTTP 및 HTTPS 프록시는 모든 연결에서 전체 요청 파싱 비용을 지불합니다. CONNECT 내부의 단일 장기 TLS 세션의 경우 차이는 무시할 수 있습니다. 프록시가 매번 새 연결을 여는 수천 개의 짧은 요청의 경우 SOCKS5가 확실히 우세합니다. 일반적으로 파싱 경로에서 요청당 2~5ms입니다.

익명성, 실제로는

헤더를 제거하지 않는 HTTP 프록시는 Via, X-Forwarded-For 또는 Forwarded를 통해 클라이언트 IP를 유출할 수 있습니다. SOCKS 프록시는 헤더 개념이 없기 때문에 그러한 헤더가 없습니다. 이는 익명성 기능이라기보다는 유출 표면이 없다는 것에 가깝습니다. CONNECT 터널링된 HTTPS 내부에서는 대상이 TLS 핸드셰이크만 볼 수 있으므로 프록시에서의 HTTP 수준 유출은 무의미합니다.

포트 규칙

이 디렉토리에서 다음과 같은 포트를 볼 수 있습니다: HTTP의 경우 80, 8080, 3128, 8888; CONNECT을 명시적으로 지원하는 엔드포인트의 경우 443; SOCKS의 경우 1080. 많은 제공업체는 우연한 포트 스캐닝을 피하기 위해 비표준 상위 포트(10,000 이상)를 노출합니다. 포트 번호는 품질에 대해 아무것도 말해주지 않습니다. 단지 운영자가 노출하기로 선택한 것을 나타낼 뿐입니다.