Protocols

Kiezen tussen HTTP-, HTTPS-, SOCKS4- en SOCKS5-proxy's

3 min read Published Updated 540 words

De vier protocollen die met 'proxy' worden aangeduid, hebben weinig gemeen behalve de naam. HTTP-proxy's parsen laag 7 en herschrijven headers; SOCKS-proxy's lezen uw verkeer helemaal niet. Het onderscheid bepaalt welke proxy geschikt is voor surfen, scrapen en ruwe tunneling.

HTTP-proxy

Een HTTP-proxy verwacht HTTP-semantiek. Hij opent het verzoek, leest de URL, kan headers zoals Via of X-Forwarded-For toevoegen en weigert alles wat geen geldig HTTP-verzoek is. Browsers, curl en de meeste scraping-bibliotheken gebruiken standaard HTTP-proxy's omdat de configuratie vrijwel gratis is – stel een enkele omgevingsvariabele in of geef een vlag mee.

De prijs van die eenvoud is zichtbaarheid. De proxy ziet de volledige URL, inclusief het pad en de query-string, en bij plaintext HTTP ook de body. Caching-proxy's kunnen antwoorden herschrijven; transparante proxy's kunnen cookies verwijderen. Beschouw elke HTTP-proxy als een volledig bevoegde tussenpersoon en stuur nooit inloggegevens over plaintext.

HTTPS-proxy en de CONNECT-methode

'HTTPS-proxy' is een enigszins misleidende term. Het verwijst naar een HTTP-proxy die daarnaast de CONNECT-methode implementeert. CONNECT vertelt de proxy om een rauwe TCP-tunnel naar een doelhost te openen en bytes in beide richtingen heen en weer te sturen; de client en de bestemming onderhandelen vervolgens over TLS alsof de proxy er niet is. De proxy ziet de doelhost en -poort, en de hoeveelheid bytes, maar niet de payload.

Een 'HTTPS-ondersteunende' proxy is dus een proxy die tunneling van TLS ondersteunt, niet een proxy die zelf via TLS draait. De verbinding van uw machine naar de proxy kan onafhankelijk plaintext of versleuteld zijn. Als u erom geeft dat die verbinding wordt beschermd, gebruik dan een SOCKS5-over-TLS-implementatie of een betaalde commerciële proxy die zijn TLS-eindpunt publiceert.

SOCKS4

SOCKS4 is het minimum uit 1994: alleen TCP, alleen IPv4, geen UDP, geen IPv6, geen authenticatie, geen hostname-resolutie bij de proxy. De handshake bestaat uit zes bytes plus een een-byte responscode. Het overleeft in het wild omdat het protocol zo klein is dat bijna elk TCP-bewust hulpmiddel het correct kan implementeren. Als een lijst SOCKS4 adverteert, verwacht dan rauwe TCP-doorsturing naar een IPv4-adres – en niets anders.

SOCKS5

SOCKS5, gedefinieerd in RFC 1928 (1996), is de versie waar de meeste moderne tools mee werken. Het voegt UDP-doorsturing, IPv6-adressen, GSSAPI-authenticatie en de optie toe om hostnamen bij de proxy op te lossen in plaats van bij de client. Omdat SOCKS5 geen aannames doet over de applicatielaag die erbovenop rijdt, is het de meest flexibele keuze voor niet-HTTP-workloads: SSH, IRC, BitTorrent, aangepaste RPC.

Prestaties en overhead

SOCKS-proxy's hebben een lagere overhead per verzoek omdat ze niets parsen. HTTP- en HTTPS-proxy's betalen voor volledige parsing van het verzoek bij elke verbinding. Voor een enkele langlevende TLS-sessie binnen CONNECT is het verschil verwaarloosbaar. Voor duizenden korte verzoeken waarbij de proxy elke keer een nieuwe verbinding opent, wint SOCKS5 meetbaar – typisch 2–5 ms per verzoek voor het parsingpad.

Anonimiteit in de praktijk

Een HTTP-proxy die uw headers niet verwijdert, kan uw client-IP lekken via Via, X-Forwarded-For of Forwarded. SOCKS-proxy's hebben dergelijke headers niet omdat ze geen concept van headers hebben. Dat is niet zozeer een anonimiteitsfunctie als wel de afwezigheid van een lek-oppervlak. Binnen CONNECT-getunneld HTTPS ziet de bestemming alleen de TLS-handshake, dus elk HTTP-niveau lek bij de proxy is irrelevant.

Poortconventies

U zult deze in deze directory tegenkomen: 80, 8080, 3128, 8888 voor HTTP; 443 voor eindpunten die expliciet CONNECT ondersteunen; 1080 voor SOCKS. Veel aanbieders stellen niet-standaard hoge poorten (boven 10.000) beschikbaar om oppervlakkig poortscannen te omzeilen. Het poortnummer zegt niets over kwaliteit – het geeft alleen aan wat de operator heeft gekozen om bloot te stellen.