
Uno strumento di elusione della censura per evitare il rilevamento da parte di avversari statali autoritari
Cloak è un trasporto collegabile che migliora strumenti proxy tradizionali come OpenVPN per eludere la censura sofisticata e la discriminazione dei dati.
Cloak non è un programma proxy autonomo. Piuttosto, funziona mascherando il traffico proxy come normali attività di navigazione web. A differenza degli strumenti tradizionali, che hanno impronte di traffico molto evidenti e possono essere bloccati da semplici regole di filtraggio, è molto difficile colpire Cloak con precisione con pochi falsi positivi. Questo aumenta il danno collaterale delle azioni di censura, poiché i tentativi di bloccare Cloak potrebbero danneggiare anche i servizi da cui lo Stato censore dipende.
Per qualsiasi osservatore terzo, un host che esegue il server Cloak è indistinguibile da un server web innocuo. Sia durante l'osservazione passiva del flusso di traffico verso e dal server, sia durante il probing attivo dei comportamenti di un server Cloak. Ciò è ottenuto attraverso l'uso di una serie di tecniche di steganografia crittografica.
Cloak può essere utilizzato insieme a qualsiasi programma proxy che tunnelizza il traffico tramite TCP o UDP, come Shadowsocks, OpenVPN e Tor. Più server proxy possono essere eseguiti sullo stesso host server e il server Cloak agirà come proxy inverso, collegando i client con il loro proxy finale desiderato.
Cloak multiplexa il traffico attraverso più connessioni TCP sottostanti, riducendo il blocco di testa di linea ed eliminando l'overhead dell'handshake TCP. Questo rende anche il modello di traffico più simile a quello dei siti web reali.
Cloak fornisce supporto multiutente, permettendo a più client di connettersi al server proxy sulla stessa porta (443 di default). Fornisce anche funzionalità di gestione del traffico come il credito di utilizzo e il controllo della larghezza di banda. Ciò permette a un server proxy di servire più utenti anche se il software proxy sottostante non è stato progettato per più utenti.
Cloak supporta anche il tunneling attraverso un server CDN intermedio come Amazon Cloudfront. Tali servizi sono così ampiamente utilizzati che i tentativi di interrompere il traffico verso di essi possono causare danni collaterali molto elevati per il censore.
Per distribuire rapidamente Cloak con Shadowsocks su un server, puoi eseguire questo script scritto da @HirbodBehnam
git clone https://github.com/cbeuw/Cloak
cd Cloak
go get ./...
make
I binari compilati si troveranno nella cartella build.
Esempi di file di configurazione si trovano nella cartella example_config.
RedirAddr è l'indirizzo di reindirizzamento quando il traffico in entrata non proviene da un client Cloak. Idealmente dovrebbe essere impostato su
un sito web importante consentito dal censore (ad es. www.bing.com)
BindAddr è un elenco di indirizzi a cui Cloak si legherà e ascolterà (ad es. [":443",":80"] per ascoltare sulla porta 443 e 80 su
tutte le interfacce)
ProxyBook è un oggetto la cui chiave è il nome del ProxyMethod utilizzato lato client (case-sensitive). Il suo valore è
un array il cui primo elemento è il protocollo e il secondo elemento è una stringa IP:PORT del server proxy upstream
a cui Cloak inoltrerà il traffico.
Esempio:
{
"ProxyBook": {
"shadowsocks": [
"tcp",
"localhost:51443"
],
"openvpn": [
"tcp",
"localhost:12345"
]
}
}
PrivateKey è la chiave privata Diffie-Hellman statica curve25519 codificata in base64.
BypassUID è un elenco di UID autorizzati senza limiti di larghezza di banda o credito.
AdminUID è l'UID dell'utente amministratore in base64. Puoi lasciarlo vuoto se aggiungi solo utenti a BypassUID.
DatabasePath è il percorso di userinfo.db, usato per memorizzare le informazioni sull'utilizzo degli utenti e le restrizioni. Cloak creerà
il file automaticamente se non esiste. Puoi lasciarlo vuoto se aggiungi solo utenti a BypassUID.
Questo campo non ha effetto nemmeno se AdminUID non è un UID valido o è vuoto.
KeepAlive è il numero di secondi da indicare al sistema operativo di attendere dopo nessuna attività prima di inviare sonde TCP KeepAlive al
server proxy upstream. Un valore zero o negativo lo disabilita. Il default è 0 (disabilitato).
UID è il tuo UID in base64.
Transport può essere direct o CDN. Se l'host server desidera che tu ti connetta direttamente, usa direct. Se invece
viene usato un CDN, usa CDN.
PublicKey è la chiave pubblica curve25519 statica in base64, fornita dall'amministratore del server.
ProxyMethod è il nome del metodo proxy che stai utilizzando. Deve corrispondere esattamente a una delle voci in
ProxyBook del server.
EncryptionMethod è il nome dell'algoritmo di crittografia che vuoi utilizzare per Cloak. Le opzioni sono plain, aes-256-gcm (
sinonimo di aes-gcm), aes-128-gcm e chacha20-poly1305. Nota: Cloak non è pensato per fornire sicurezza del trasporto.
Lo scopo della crittografia è nascondere le impronte dei protocolli proxy e rendere il carico utile statisticamente simile a casuale.
Puoi lasciarlo su plain solo se sei certo che il tuo strumento proxy sottostante fornisca già sia crittografia che autenticazione (tramite AEAD o tecniche simili).
ServerName è il dominio che vuoi far credere al tuo ISP o firewall che stai visitando. Idealmente dovrebbe corrispondere
a RedirAddr nella configurazione del server, un sito importante che il censore permette, ma non è obbligatorio. Usa random per randomizzare il nome del server per ogni connessione effettuata.
AlternativeNames è un array usato insieme a ServerName per mescolare diversi ServerNames per ogni nuova
connessione. Questo potrebbe essere in conflitto con la modalità di trasporto CDN se il provider CDN proibisce il domain fronting e rifiuta
i domini alternativi.
Esempio:
{
"ServerName": "bing.com",
"AlternativeNames": ["cloudflare.com", "github.com"]
}
CDNOriginHost è il nome di dominio del server di origine (cioè il server che esegue Cloak) in modalità CDN. Questo ha
effetto solo quando Transport è impostato su CDN. Se non impostato, verrà utilizzato di default il nome host remoto fornito tramite
l'argomento della riga di comando (in modalità standalone) o da Shadowsocks (in modalità plugin). Dopo aver stabilito una sessione TLS con
il server CDN, questo nome di dominio verrà utilizzato nell'intestazione Host della richiesta HTTP per chiedere al server CDN di
stabilire una connessione WebSocket con questo host.
CDNWsUrlPath è il percorso URL utilizzato per costruire la richiesta websocket inviata in modalità CDN, e ha effetto solo
quando Transport è impostato su CDN. Se non impostato, verrà utilizzato di default "/". Questa opzione viene utilizzata per costruire la prima riga della
richiesta HTTP dopo aver stabilito una sessione TLS. Serve principalmente per un server Cloak dietro un proxy inverso, dove vengono inoltrate solo
le richieste con un percorso URL specifico.
NumConn è il numero di connessioni TCP sottostanti che vuoi utilizzare. Il valore predefinito di 4 dovrebbe essere appropriato per la maggior parte
delle persone. Impostarlo troppo alto può ostacolare le prestazioni. Impostarlo a 0 disabiliterà il multiplexing delle connessioni e ogni
connessione TCP genererà una sessione separata di breve durata che verrà chiusa dopo la sua terminazione. Questo la fa
comportare come GoQuiet. Può essere utile per persone con connessioni instabili.
BrowserSig è il browser che vuoi far apparire di utilizzare. Non è rilevante per il browser che stai effettivamente usando.
Attualmente, chrome, firefox e safari sono supportati.
KeepAlive è il numero di secondi da indicare al sistema operativo di attendere dopo nessuna attività prima di inviare sonde TCP KeepAlive al
server Cloak. Un valore zero o negativo lo disabilita. Il default è 0 (disabilitato). Attenzione: abilitarlo potrebbe rendere il tuo server
più rilevabile come proxy, ma farà sì che il client Cloak rilevi un'interruzione di Internet più rapidamente.
StreamTimeout è il numero di secondi che Cloak attende per una connessione in entrata da un programma proxy per inviare
dati, dopo i quali la connessione verrà chiusa da Cloak. Cloak non imporrà alcun timeout sulle connessioni TCP dopo la
loro creazione.
ck-server -key. La chiave pubblica deve essere data agli utenti, la privata deve rimanere segreta.ck-server -uid. Il nuovo UID verrà usato come AdminUID.PrivateKey con la chiave privata appena ottenuta;
cambia AdminUID con l'UID appena ottenuto.ProxyBook nel file di configurazione
di conseguenza.sudo ck-server -c <percorso di ckserver.json>. ck-server necessita dei privilegi di root perché si lega a una
porta con numero basso (443). In alternativa puoi seguire https://superuser.com/a/892391 per evitare di concedere a ck-server privilegi di root
inutilmente.Esegui ck-server -uid e aggiungi l'UID nel campo BypassUID in ckserver.json.
AdminUID in ckserver.json, insieme a un percorso per userinfo.db
in DatabasePath (Cloak creerà questo file per te se non esiste già).ck-client -s <IP del server> -l <Una porta locale> -a <AdminUID> -c <percorso di ckclient.json> per
entrare in modalità amministratore.index.html in un browser. Non è richiesto alcun
server web).127.0.0.1:<la porta inserita nel passo 1> come Base API e clicca su Elenco.+.Nota: il database degli utenti è persistente poiché memorizzato su disco. Non devi aggiungere nuovamente gli utenti ogni volta che avvii ck-server.
Il client Android è disponibile qui: https://github.com/cbeuw/Cloak-android
example_config/ckclient.json in una posizione a tua scelta. Inserisci UID e PublicKey che hai
ottenuto. Imposta ProxyMethod in modo che corrisponda esattamente alla voce corrispondente in ProxyBook lato server.ck-client -c <percorso di ckclient.json> -s <ip del tuo server>.Se trovi utile questo progetto, puoi visitare il mio negozio di merchandising; in alternativa puoi donare direttamente a me
BTC: bc1q59yvpnh0356qq9vf0j2y7hx36t9ysap30spx9h
ETH: 0x8effF29a8F9bD38A367580527AC303972c92b60c