
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.
|