
Cloudish - anonymný mrak
Pri surfovaní internetom, sme si už akosi zvykli, že záznamy o prístupoch k informáciám prostredníctvom HTTP protokolu sú vyhodnocované, často však nie kvôli administratívnym účelom, ale z dôvodov marketingových. Používaním cookiesov vznikajú snahy o čiastočnú identifikáciu klientov a sledovanie ich návratu na stránky, cieľov záujmu a podobne.
K dispozícii máme množstvo filtrovacích prostriedkov, ktoré čiastočne zastrú niektoré nežiadúce informácie o klientoch ich vyfiltrovaním z http trafficu, aj tak však zostáva naďalej možné sledovať jednotlivé sessions z logových súborov prideľovaním ich identifikátorov apachom a ich následným vyhodnotením. Existuje viacero projektov zaoberajúcich sa anonymizáciou klientov, či už komerčných alebo zdarma. My si dnes ukážeme, ako je možné pomocou nástroja cloudish vytvoriť svoj anonymný mrak pre uzavretú alebo otvorenú skupinu užívateľov a to jednoduchým a efektívnym spôsobom.
1. Predstavenie
Projekt s názvom cloudish vznikol pre možnosť vytvorenia siete špecializovaných proxyserverov, ktorých účelom je vytvoriť anonymný mrak. Základný princíp spočíva vo vybudovaní istej infraštruktúry s plošnou distribúciou jednotlivých serverov, kde jednotlivé servery plnia viaceré funkcie. Prvou môže byť preberanie http požiadaviek od klientov, následné odfiltrovanie identifikujúcich súčastí a uspokojenie požiadavky či už priamym requestom, alebo forwardom na lokálny proxyserver. V tomto prípade sú z http requestu odfiltrované nasledujúce súčasti
User-Agent:
Referer:
Cookie:
Proxy-Connection:
If-Modified-Since:
If-None-Match:
Keep-Alive:
a analogicky z odpovedí
ETag:
X-Cache:
Set-Cookie:
P3P:
Tým docielime odstránenie citlivých informácií, ktoré by mohli pomáhať v identifikácii klienta, cesty, ktorou sa dostal k dokumentu, existenciu lokálnej cachovanej kópie označujúcou návrat, ako aj jednoznačnú identifikáciu hostov pomocou cookies. V takomto jednoúrovňovom nasadení sa vlastne jedná o klasický filter, ktorý nám poskytujú mnohé proxyservery.
Za pomoci cloudish serverov je však možné vytvoriť distribuovanú sieť, v ktorej jednotlivé servery komunikujú vzájomne pomocou SSL zabezpečených kanálov a na základe definovaných pravidiel a počtu hopov uspokojujú požiadavky jednotlivých klientov distribuovane z celej anonymizačnej infraštruktúry, čím sa možnosť identifikácie klientov znižuje na minimum.
2. Inštalácia
Domovskú stránku projektu nájdete na adrese http://www.vanheusden.com/cloudish/, kde je v súčasnosti k dispozícii aktuálna verzia s označením 1.2. Pristúpime teda ako vždy k dekomprimácii
tar xzvf cloudish-1.2.tgz
cd cloudish
Hlavným predpokladom je existencia nainštalovaných SSL knižníc pre podporu krytpovanej komunikácie. V prípade, že chceme zmeniť umiestnenie a názov implicitného konfiguračného súboru, uskutočníme to modifikáciou main.cpp
40: char *ini_file="/etc/cloudish.conf";
a uskutočníme samotnú kompiláciu netypicky pomocou
./c
Výsledkom je binárka s názvom cloudish, ktorú si umiestnime do /usr/sbin
cp cloudish /usr/sbin/cloudish
3. Konfigurácia
Prvou úlohou je vytvorenie si vlastného ssl certifikátu pre tvorbu vlastných anonymizačných infraštruktúr, napríklad pomocou
openssl req -new -x509 -nodes -days 386 -out mycloud.pem \
-keyout mycloud.pem
pre testovanie vám však postačí využiť štandardný certifikát s názvom server.pem, ktorý je súčasťou distribúcie. Vytvoríme si teda základný konfiguračný súbor pre lokálny cloudish server
debug=1
http_proxy_listen_port=5000
s_proxy_listen_port=5001
fork_retries=3
Pre diagnostiku si povolíme vypisovanie hlásení a špecifikujeme priradenie portov. Prvý určuje port, na ktorom budú prijímané http requesty, druhý určuje port pre SSL komunikáciu s okolitými cloudish servermi. V prípade, že bude požiadavka nesplnená, budú vykonané 2 opätovné pokusy.
allow_local_gets=0
cloudish_proxies=cloudisha:15001,cloudishb:25001
V prípade, že chceme zachovať svoju anonymitu, zakážeme uspokojovanie http požiadaviek, čo spôsobí nútené uspokojenie okolitými cloudish servermi z definovaného zoznamu.
initial_redirect_level=1
server_certificate=server.pem
server_certificate_password=password
Pre uspokojenie jednotlivých požiadaviek bude v našom prípade dostatočné odovzdanie ľubovoľnému z nasledujúcich cloudish serverov, v prípade rozsiahlejších štruktúr je možné vyžadovať posunutie požiadavky viac ako jeden krát pri zabezpečení príslušným certifikátom.
deny_access_to=192.168.0.0/255.255.0.0,10.0.0.0/255.0.0.0
http_access_list=192.168.10.192/255.255.255.192,\
127.0.0.1/255.255.255.255
s_access_list=cloudisha,cloudishb
Finálne špecifikujeme prístupové práva pre zakázanie prístupu cloudish serveru k lokálnemu intranetu a špecifikujeme hosty, ktoré môžu http požiadavky posielať na uspokojenie, ako aj cloudish servery, ktoré sú oprávnené umiestniť svoje požiadavky.
Tým by sme mali uskutočnenú konfiguráciu lokálneho cloudish servera alebo cloudish forwardera. Jednotlivé cloudish servery v infraštruktúre však musia mať povolenú možnosť prístupu k žiadaným http dokumentom, čo umožníme nasledovne
allow_local_gets=1
use_local_proxy=1
local_proxies=mojlokalnyproxy:3128
Povolíme lokálne uspokojovanie požiadaviek, pre zabezpečenie vyššej efektívnosti môžeme použiť lokálny proxyserver. Toto nastavenie by malo byť na každom člene skupiny cloudish serverov, aby bolo možné požadované http requesty realizovať, na rozdiel od lokálnych cloudish serverov, ktoré majú vstupovať v úlohe lokálnej brány k infraštruktúre, jednotlivé implementácie však závisia na rozsahu a šírke plošného nasadenia.
Podľa týchto informácií si pripravíme konfiguračné súbory pre jednotlivé dielčie hosty, nezabudneme pritom správne určiť na každom z hostov parametre claudish_proxies a s_access_list, aby výsledná infraštruktúra bola logicky funkčná.
4. Použitie a implementácia
Samotné spustenie realizujeme execom danej binárky. V tom prípade bude bežať na popredí a na STDERR budú vypisované všetky informácie o prevádzkových parametroch a o behu a spracovávaní jednotlivých requestov.
debug: 1
http_proxy_listen_port: 5000
s_proxy_listen_port: 5001
fork_retries: 3
allow_local_gets: 0
use_local_proxy: 1
local_proxies:
192.168.0.10:3128
cloudish_proxies:
111.111.111.1:15001
111.111.222.1:25001
initial_redirect_level: 1
max_n_connect_retries: 3
server_certificate: localcloud.pem
server_certificate_password: password
incoming_s_request(): Connection from 111.111.111.101:41092
do_incoming_s_request(): redirect-level=1
ccess_list::verify_host(): copied 2 entries
access_list::verify_host(): trying 194.228.3.226
do_http_request(): connecting plain-text to lokalproxy:3128 \
for a GET-request
Po doladení použijeme parameter -d, ktorý spôsobí spustenie v daemon móde, v prípade špecifikácie alternatívneho konfiguračného súboru ako implicitného použijeme parameter -f. Automatické zavedenie pri inicializácii systému realizujeme modifikáciou inicializačného skriptu /etc/rc.d/rc.local napríklad nasledovne
/usr/sbin/cloudish -f /etc/cloudish.1.conf -d
5. Záver
Cloudish je veľmi zaujímavý projekt, ktorý má predpoklady pre rozšírenie sa vo forme verejných anonymizačných sietí, čomu svedčí aj plánované verejné nasadenie. Aj keď v súčasnosti neponúka možnosti cieleného toku dát a koordinácie jednotlivých tokov, je vhodným prostriedkom pre tvorbu malých privátnych anonymizačných infraštruktúr, zabezpečujúcich distribúciu http požiadaviek na jednotlivé "koncové" hosty prostredníctvom zabezpečených kanálov, takže je prakticky nemožné nielen lokalizovať host vysielajúci požiadavku, ale ani z logových súborov servera pri vhodnej infraštruktúre zrekonštruovať priebeh session samotnej. Projekt je neustále v štádiu vývoja a zdokonaľovania, takže čoskoro sa iste dočkáme novej rozšírenej verzie.
|