Hlavní navigace

Bittorent pod útokem amerických ISP

4. 7. 2008
Doba čtení: 6 minut

Sdílet

Tento týden jsme vás informovali o omezování přenosu dat některými poskytovateli připojení v USA a Kanadě. Tito poskytovatelé blokovali sdílení dat přes protokol bittorrent. Pojďme se blíže podívat na způsob, jakým je možné bittorrent nenápadně omezit a ukažme si jak se tomu bránit.

Historie Bittorrentu

Bittorrent je tu s námi už sedm let. První zpráva o funkční verzi se objevila 2.7.2001 na Yahoo groups. Vývojář Bram Cohen skromě prohlásil, že jeho nový program pro sdílení je připraven k použití. Během krátké doby si našel spousty příznivců a v roce 2004 měl už 15–20 milionů uživatelů. Během svého působení mezi uživateli si získal i spousty nepřátel, a to hlavně u filmových studií a nahrávacích společností. Bittorrent totiž začalo používat velké množství lidí pro sdílení obsahu chráněného autorským zákonem. Největším trnem v oku jim je The Pirate Bay. To je velký tzv. tracker, který poskytuje poskytuje torrenty na hudbu, filmy, software, knihy a další.

Používáte Bittorrent?

Jak Bittorent funguje

Bittorent vznikl za účelem vytvoření nástroje pro sdílení velkého množství dat tak, aby většina zátěže nebyla na jednom serveru a tím pádem závislá na jednom připojení do internetu. Vznikl tak návrh pro vytvoření protokolu, který by s hlavním serverem komunikoval pouze kvůli informacím o stahovaných datech. Například pokud se dokončí nové vydání Ubuntu, vývojáři kromě umístění odkazů na novou verzi na svých serverech umístí na své stránky i malý soubor s metadaty pro stahování. Pokud se někdo rozhodne ho použít, dostane se mu pravděpodobně mnohem lepší rychlosti než při použití různých zrcadel na internetu.

Postup je jednoduchý. Pokud Bittorrent klientovi dáte .torrent soubor, tak ten si z něj vyčte metadata, což jsou například hashe jednotlivých souborů, také jejich velikost a hlavně adresu trackeru. V dalším kroku se klient připojí k trackeru přes HTTP protokol a začne hledat další uživatele, kteří stahují tento torrent. Tracker krom udržování informací o stahujících uživatelích může vytvářet i různé statistiky nebo nabízet vyhledávací funkce na webu. Tracker má přehled o stavu všech uživatelů a tedy i jejich IP adresy. Torrent tedy neni anonymní služba a IP adresy jsou na většině trackerů logovány.

Pokud klient nalezl další uživatele, začíná navazování spojení a samotná výměna dat. Každý soubor, který torrent obsahuje, se rozděluje do malých částí (tzv. bloků) přibližně kolem 250 kB (hodnota se nastavuje při vytváření torrentu). Klient se nejprve dotazuje ostatních, jestli by mu něco neposlali. Pokud už má klient něco staženo, začne to používat pro výměnu za další kousky. Klienti v bittorrent síti upřednostňují výměnu bloků formou něco za něco. To znamená, že pokud máte staženou jednu půlku a nějaký jiný uživatel druhou, tak si v ideálním stavu obě půlky mezi sebou vyměníte. Proto při omezení sdílení klesá i rychlost stahování. Je to forma boje proti uživatelům, kteří sice stahují, ale nesdílí stažené bloky dál.

Bittorent protokol odlišuje dva stavy torrentů připojených uživatelů. Pokud torrent ještě není stažený, tak se jeho stav nazývá leech (pijavice), pokud je stažen, tak seed (osivo). Když se klient dostane s torrentem do stavu, kdy jsou všechny bloky kompletně staženy, je ostatními brán za seeda a začíná posílat bloky i těm, kteří mu předtím nic neposlali. Slušností je nechat torrent ještě chvíli běžet a sdílet bloky aspoň do poměru upload:download 1,5.

Bittorent je založen jak na TCP, tak na UDP komunikaci. TCP se využívá hlavně pro komunikaci s trackerem (HTTP protokol) a UDP zase pro samotný přenos dat. Ochrana dat před poškozením je zajištěna pomocí hashů souborů, které najdeme v .torrent souboru.

Kauza Comcast

V srpnu minulého roku Comcast začal blokovat sdílení dat přes bittorent. Šel na to velmi chytrým způsobem, protože „pouze“ narušoval funkci protokolu a dlouho nikdo netušil, co se děje. Nakonec se přišlo na to, že Comcast pomocí nástroje Sandvine monitoruje činnost uživatele a pokud se k uživateli někdo připojí, tak mu tento nástroj po pár vteřinách ukončí spojení.

Spojení, při svém vzniku, prochází několika stavy. Pokud se rozhodneme například kliknout na odkaz, prohlížeč předá požadavek jádru s adresou, portem a daty a jádro pak pomocí TCP začne s takzvaným třícestným handshakem. Ten spočívá ve vytvoření stabilního „mostu“ mezi klientem a vzdáleným strojem. Jako první jádro posílá paket se značkou SYN a jako odpověď se mu vrací ACK a taktéž SYN. Druhá strana pošle ACK a spojení je vytvořeno. Pokud jsou data přenesena, pošle jedna ze stran paket FIN, a to je znamení pro druhou stranu, že nemusí odesílat další data a pošle také FIN. Pokud ovšem při spojení nastala nějaká chyba, jako třeba že jedna strana o spojení ví a druhá ne nebo chce jedna ze stran spojení ihned ukončit, potom posílá paket se značkou RST (RESET). Blokování bittorrentu pomocí Sandvine spočívá v narušení tohoto mechanismu. Pokud Sandvine zachytí vytvoření spojení mezi dvěma body za účelem sdílení přes bittorent (ze strany providera), tak sám odesílá RST paket maskující se jako paket stahující strany. Druhá strana si myslí, že další data nemá posílat a spojení se rozpadne. Tím Sandvine jednoduchým způsobem zabraňuje seedování dat a díky férovosti celého bittorentu částečně zabraňuje i stahování, protože pokud jedna strana nic nenabídne, druhá ji nic nepošle.

O celé kauze informoval torrentfreak.com, kde se v diskusi objevilo několik providerů, kteří vidí celou věc trochu jinak.

Faktem je, že P2P sítě jsou mor - rakovina, která si vezme celou šířku pásma, kterou můžu nabídnout.

P2P aplikace mohou zmrzačit síť, jsou jako pijavice. Jenom protože si zaplatíte $49.99 za 1.5-3 Mbit/s, tak to neznamená, že máte nárok použít na síti vašeho ISP jakýkoli protokol chcete, aniž by ISP byl schopen zajistit stejnou kvalitu sítě pro všechny.

Řešení problému

iptables

Tento týden se na slashdot objevila zpráva o řešení v podobě jednoduchého pravidla do firewallu, které zachytí RST paket od providera a spojení tedy může pokračovat. Bohužel řešení není úplně čisté a pravidlo v iptables zahodí veškeré RST pakety přicházející na port bittorentu. Bohužel ani „správné“ pakety se do cíle nedostanou, a tak zůstává zbytečně otevřeno mnoho spojení, které musela jedna strana z nějakého důvodu přerušit. Příklad pravidla může vypadat takto:

@%&@
#port bittorentu
$BT_PORT=6883
iptables -A INPUT -p tcp --dport $BT_PORT --tcp-flags RST RST -j DROP

@%&@

OpenVPN

OpenVPN je nástroj pro vytváření šifrovaných point-to-point tunelů. Podporuje autorizaci a je k dispozici na velké množství platforem. Umí komunikovat jak přes TCP, tak UDP. Důležité je, že umí kompletně schovat komunikaci uvnitř tunelu a tím obejít ochranu v Sandvine. Bohužel ne každý uživatel má přístup k takové VPN nebo server, který by mohl použít.

CS24_early

Bittorent over SSH

Druhou a podobnou možnosti je vytvořit tunel přes ssh na vzdálený stroj a stahovat data přes něj. Toto řešení nevyžaduje mít vlastní vzdálený stroj, stačí SSH účet. Jednoduchým napsáním „ssh uzivatel@server -D port“ se nám vytvoří SSH spojení chovající se jako SOCKS proxy na nastaveném portu. Poté stačí nastavit našeho bittorent klienta, aby tohoto socketu využíval, tunel dopraví šifrovaně data na druhou stranu tunelu a odtamtud do požadovaného cíle.

Závěr

Pravdou je, že Bittorrent je technologie, která je schopná síť zatížit tisíci spojení a zaplavovat linku velkým množstvím malých paketů. Na druhou stranu pokud si zaplatíme určité parametry připojení, neměli bychom by být omezováni pravidly jako je toto. ISP by měl odhadnout, co je jeho linka schopna zvládnout, a podle toho nabízet služby.

Byl pro vás článek přínosný?

Autor článku

Adam Štrauch je redaktorem serveru Root.cz a svobodný software nasazuje jak na desktopech tak i na routerech a serverech. Ve svém volném čase se stará o komunitní síť, ve které je již přes 100 členů.