Tecnologia di proxy/tunneling/VPN

Recentemente ho iniziato a guardare varie opzioni di proxy/tunneling che non possano essere facilmente rilevate dai firewall.

Ho trovato un sacco di cose, ma faccio fatica a capire come funziona tutto. Ho trovato dozzine di protocolli diversi, alcuni aperti, altri proprietari; alcuni hanno più nomi mentre alcuni si riferiscono a più protocolli… La maggior parte dei progetti open source che ho trovato ha una descrizione vaga, non tecnica di cosa siano e cosa facciano. E la maggior parte dei “proxy gratuiti” che posso trovare che usano questi protocolli, non forniscono abbastanza dettagli per configurare il mio endpoint locale (wtf?).

Sono un ingegnere del software / sysadmin Linux e ho una comprensione decente di reti (protocolli: IP, TCP, UDP, HTTP(S)… software: SSH, OpenVPN, WireGuard, iptables, Nginx, Apache… crittografia: simmetrica, asimmetrica, certificati… instradamento, NAT, e così via).
Vorrei capire come funzionano le tecnologie legate ai proxy; non in modo molto dettagliato, solo abbastanza per capire che tipo di dati invia il mio endpoint proxy: sono incapsulati in qualche altro protocollo di livello applicativo? incapsula dati di altri protocolli all’interno del suo payload? come gestisce l’instradamento?

Potrebbe qualcuno darmi una panoramica dei vari protocolli, come: Shadowsocks (AFAIK è solo una implementazione SOCKSv5 che invia i suoi dati nel payload di una connessione HTTP?), ShadowsocksR, V2Ray, XRay, XTLS, VMess, VLess, Trojan, Naive, Hysteria, Mieru, Psiphon, Eclipse, StealthVPN ecc? Ce ne sono altri di cui dovrei essere a conoscenza?

E infine, perché questa roba è così complicata? I vari protocolli sono notevolmente diversi tra loro, o questa è solo una questione di persone diverse che implementano cose simili in modi diversi, portando ad una situazione tipo XKCD 927?

Prima di tutto, l’idea che uno sviluppatore software e sysadmin chieda su Reddit di diversi protocolli arcani proxy/trasporto/hacker/esperimentali mi fa alzare le sopracciglia. Vedo che la fonte della maggior parte (tutte?) di quello che elenchi è facilmente reperibile.

In un ambiente commerciale, l’unico momento in cui vedresti la maggior parte di questi è se fossi stato rootato e l’attaccante avesse impostato un tunneling dentro/fuori dalla tua rete. Alcuni sono stati usati per aggirare il firewall cinese.

Stealth VPN è un servizio commerciale. ShadowsockR è un progetto morto.

Quindi non sono sicuro di quale informazione tu stia cercando? Penso che la maggior parte degli ingegneri che possono rispondere a questa domanda ti indirizzerebbero al codice sorgente e basta.

Imparerai molto su come appare il protocollo trascorrendo qualche ora, configurandoli e osservando le catture di pacchetti per vedere la struttura dei pacchetti. Il processo di configurazione ti aiuterà a capire l’incapsulamento e le opzioni di crittografia.

Sto esplorando questa roba perché ne ho bisogno per uso personale: ho bisogno di connettermi a internet attraverso una rete con un firewall molto rigido, desideroso di bloccare qualsiasi connessione non autorizzata. Ho configurato un server shadowsocks (+ plugin v2ray + nginx) sul mio VPS e lo sto usando per tunnelare parte del mio traffico. Funziona, ma temo che se scambio troppo dati (o dati sospetti) con esso, potrebbero interrompere la connessione.

Il codice sorgente della maggior parte di queste cose è disponibile, ma non è qualcosa che posso esaminare in 5 minuti. Anche solo trovare il nome di una dozzina di protocolli che ho elencato mi ha preso diverse ore. Per ognuno di questi progetti, dovrei passare decine di ore a scavare nel loro codice sorgente C/Java (se sono fortunato), eseguendoli in un debugger, cercando di capire COSA fanno. Costruire una comprensione di tutta questa cosa richiederebbe circa 1000 ore…

Quello che vorrei trovare è una panoramica/riepilogo scritto da qualcuno che è già entrato in quel mondo e ha sviluppato una buona comprensione di tutto questo, che posso consumare in mezz’ora. Onestamente, non sono sicuro del motivo per cui una panoramica simile non esiste, o almeno perché non sono riuscito a trovarla: è facilmente accessibile per la maggior parte delle altre tecnologie (ad esempio: codec, filesystem, algoritmi di compressione ecc); perché il mondo dei proxy è meno documentato?

Sì, ho paura che se scambio troppo traffico con il proxy che sto usando attualmente, potrebbero interrompere la connessione.

Tuttavia, il problema può avere soluzioni: tunnelare solo il traffico che realmente necessita di essere tunnellato, e distribuirlo attraverso dozzine di proxy in diversi intervalli IP… Per ottenere la perfezione, addestra il demultiplexere a trasmettere i dati per farli sembrare traffico normale.

Sfortunatamente, non ho decine di server sparsi in tutto il mondo, né l’esperienza per implementare qualcosa del genere. Il mio obiettivo è capire se esiste qualcosa di non rilevabile, e come ottenerne l’accesso.

Come ho detto ad un altro commentatore, sì, ispezionare i pacchetti, guardare il codice sorgente e eseguirli in un debugger potrebbe aiutarmi a capire molto bene questa roba.

Ma non ho abbastanza tempo per studiare decine di protocolli in dettaglio. Sto cercando una panoramica rapida per capire cosa esiste e avere un’idea di come funziona e come si differenzia dagli altri… La documentazione di questo tipo non esiste?

Nel caso di wireguard, ad esempio, il server non risponderà nemmeno a meno che la firma della chiave non corrisponda. Un firewall non sarebbe necessario. Forse l’ultimo pezzo che ti manca è la gestione delle chiavi?