Che cos'è un proxy SOCKS5 nel nostro articolo abbiamo introdotto il concetto. Qui guardiamo dentro il protocollo: quali byte vengono scambiati tra client e server, come viene specificato l'indirizzo e perché questo design produce uno strumento più generico di un proxy HTTP.
SOCKS5 è un protocollo piuttosto semplice, definito nella RFC 1928. La sua semplicità è la fonte della sua forza: non interpreta in alcun modo i dati a livello applicativo, si limita a trasportare traffico TCP (e, facoltativamente, UDP).
Un handshake in tre fasi
Se non è richiesta l'autenticazione, i round trip scendono da tre a due. Rispetto al metodo CONNECT dei proxy HTTP richiede qualche round trip in più, ma i byte sono molto più piccoli.
Fase 1 — Saluto
Nel primo pacchetto il client comunica la versione del protocollo e i metodi di autenticazione che supporta:
Il server comunica la propria scelta con una risposta di un solo byte: 0x00 (nessuna autenticazione richiesta), 0x02 (utente/password) oppure 0xFF (nessun metodo accettabile).
Il server 0xFF se lo restituisce e chiude la connessione, significa che il tuo client non propone il metodo di autenticazione atteso dal server. È la causa più comune della lamentela "la connessione si è chiusa silenziosamente".
Fase 2 — Autenticazione
Se viene selezionato il metodo 0x02 si esegue la sotto-negoziazione definita nella RFC 1929: byte di versione, lunghezza del nome utente e nome utente, lunghezza della password e password. Il server restituisce un singolo byte di successo/insuccesso.
Per un confronto dettagliato e la configurazione pratica il nostro articolo sull'autenticazione SOCKS5 puoi consultarlo.
Fase 3 — Richiesta CONNECT
Superata l'autenticazione, il client comunica la destinazione. È qui che entra in gioco la decisione di design più importante di SOCKS5: l'indirizzo può essere fornito in tre formati diversi.
ATYP=0x03 significa nome di dominio; in questo caso la risoluzione DNS la esegue il proxy. Questo singolo byte è la chiave per prevenire il DNS leak.
Perché è più generico di un proxy HTTP?
Il proxy HTTP legge e interpreta la richiesta; SOCKS5 si limita a trasportarla. Per questo su SOCKS5 possono passare contemporaneamente e-mail, gaming, trasferimento file e traffico del browser.
| Caratteristica | Parametro | SOCKS5 |
|---|---|---|
| Livello di funzionamento | Applicazione (7) | Sessione (5) |
| Supporto dei protocolli | Solo HTTP(S) | Qualsiasi TCP, facoltativamente UDP |
| Interpretazione del contenuto | Sì | No |
| Aggiunta di header | Può farlo | Non può farlo |
| Cache | Possibile | Non possibile |
| Risoluzione DNS | Lato proxy | Selezionabile (ATYP) |
| Round trip dell'handshake | 1 (CONNECT) | 2–3 |
Per un confronto dettagliato differenza tra proxy HTTP e SOCKS5 il nostro articolo dedicato.
SOCKS5 esegue la cifratura?
No. È l'equivoco più diffuso. SOCKS5 è un protocollo di trasporto; non offre cifratura. La sicurezza del tuo traffico dipende dalla cifratura propria del contenuto trasportato:
- Se passa tramite HTTPS: il TLS protegge end-to-end; il proxy non può vedere il contenuto.
- Se è HTTP in chiaro: l'operatore del proxy può leggere il contenuto.
- Credenziali: nome utente e password SOCKS5 vengono inviati in chiaro.
Le credenziali di SOCKS5 vengono trasmesse senza cifratura. Se usi un proxy SOCKS5 su una rete non affidabile, le tue credenziali possono essere lette da un osservatore intermedio. In questo scenario è più sicuro usare SOCKS5 attraverso un tunnel SSH: il metodo è descritto in un articolo a parte del nostro blog.
Uso pratico
socks5h nello schema h significa "hostname" e fa sì che la risoluzione DNS avvenga lato proxy. Per prevenire le fughe di dati preferisci sempre questa opzione.
Quando scegliere SOCKS5?
Scegli SOCKS5
- Se devi trasportare protocolli diversi da HTTP (e-mail, FTP, gaming).
- Se vuoi che la risoluzione DNS avvenga lato proxy.
- Se ti serve traffico UDP.
- Se non vuoi che il proxy tocchi i tuoi header.
- Se l'applicazione supporta solo SOCKS.
Basta un proxy HTTP
- Se devi trasportare solo traffico web.
- Se vuoi il caching.
- Se il tuo strumento supporta solo i proxy HTTP.
- Se conta avere il minor numero di round trip nell'handshake.
- Se servono regole di filtraggio aziendali.
Riepilogo
SOCKS5 è un semplice protocollo di livello sessione che trasporta traffico TCP e UDP senza mai guardare i dati applicativi. Grazie all'handshake in tre fasi, al supporto di tre diversi tipi di indirizzo e all'opzione del nome di dominio, offre la possibilità di prevenire il DNS leak. Non fornisce cifratura; la sicurezza dipende dalla cifratura propria del contenuto trasportato. Se devi trasportare traffico non web, è lo strumento giusto. Per i dettagli sul prodotto la nostra pagina sui proxy SOCKS5, per i test il nostro strumento di controllo proxy puoi consultarlo.