Wybór kraju w sieci Tor

Dawno nie było notki. W sumie to chyba jeszcze nie było tak długiej przerwy między wpisami. Nie dlatego, że nic się nie dzieje, bo się dzieje aż za dużo, ale po pierwsze jakaś blokada przed jakimkolwiek pisaniem (nie tylko na blogu), po drugie, jakiś taki wypompowany z pracy przychodzę, że mi się nie chce już pisać, nawet jak są ciekawe tematy. No to może na przełamanie o wyborze kraju podczas korzystania z sieci Tor…

Logo Tor

Źródło: https://media.torproject.org/image/official-images/2011-tor-logo-flat.svg

Ostatnio jeden z czytelników przysłał maila z pytaniem: czy jest możliwość zmodyfikowania TOR-a tak by zawsze przydzielał polski adres IP? Już zacząłem odpisywać, że byłoby to bez sensu, bo przecież wybór exit node tylko z jednego kraju znacznie zmniejsza poziom anonimowości (nie rozwijając: i łatwiej podsłuchać, i łatwiej namierzyć korzystającego), ale… coś mnie tknęło i zacząłem drążyć temat. Bo patrząc na to z drugiej strony, do pewnych usług dostęp może być tylko z pewnych lokalizacji geograficznych, więc funkcjonalność w postaci możliwości wyboru kraju w sieci Tor miałaby sens.

Podrążyłem nieco temat i – ku memu niewielkiemu zdziwieniu – okazuje się, że można wybrać kraj.  Oznacza to, że można na przykład użyć sieci Tor do obejścia blokady regionalnej. Co lepsze, można wybrać zarówno konkretny exit node, z którego chcemy korzystać, jak i sam kraj. W obu przypadkach może to być zbiór, nie pojedyncza wartość.

Wybór konkretnego exit node wygląda następująco:

ExitNodes server1, server2, server3
StrictExitNodes 1

Natomiast wybór kraju (lub krajów) w sieci Tor:

ExitNodes {pl}, {de}
StrictNodes 1

Za każdym razem zmiany należy wprowadzić w pliku torrc (pod Debian/Ubuntu: /etc/tor/torrc) i przeładować konfigurację demona Tor. Podobno działa, ale nie testowałem, bo wykorzystując dystrybucję TAILS nie udało się wyedytować konfiga i uruchomić ponownie Tora. Nie drążyłem specjalnie, bo nie zależało mi i nie mam powodu nie wierzyć dokumentacji.

Źródła, czyli więcej informacji, w tym lista kodów krajów:

  1. wybór serwera w sieci Tor [en]
  2. wybór kraju w sieci Tor, lista kodówkrajów [en]

NLNOG RING – zdiagnozuj sobie sieć

Odwieczny problem administratorów sieci to mogę sprawdzić trasę od siebie do danego hosta, ale jak wygląda w drugą stronę? Próbą rozwiązania tego zagadnienia były looking glass, pozwalające na wykonanie od określonego operatora ping czy traceroute. Czasem potrzeba jednak czegoś więcej – sprawdzenia resolvowania DNS, zbadanie stabilności transferu itp. Ogólnie przydałby się shell.

Projekt NLNOG RING jest odpowiedzią na to zapotrzebowanie. Opiera się na prostej zasadzie wzajemności: udostępniamy maszynę wirtualną (administrowaną przez opiekunów projektu) dla projektu, w zamian otrzymujemy dostęp do pozostałych maszyn projektu, w różnych częściach świata i – co ważniejsze – w wielu różnych ASN.

Wymagania co do maszyny są naprawdę niewielkie – 1 GB RAM, 20 GB dysku, 1 core 64bit procesora, adresy IPv4 oraz IPv6. Musi stać w naszym AS i na naszej adresacji. Myślę, że w tej chwili większość operatorów, nawet niewielkich sieci radiowych jest w stanie sprostać. Pozostałe wymagania stawiane organizacji (usługa jest kierowana do firm) to m.in.: bycie operatorem sieciowym, własne ASN, prefiksy IPv4 i IPv6, zgoda organizacji na uczestnictwo w projekcie.

Możliwe jest zarówno połączenie po SSH do wybranej maszyny, jak i wykonywanie, przy pomocy dostępnych narzędzi, operacji na wszystkich maszynach projektu jednocześnie. Generalnie potrafi bardzo pomóc w diagnostyce.

Projekt działa od wielu lat, ale dziś dowiedziałem się, że nawet w środowisku sieciowym niekoniecznie jest znany, więc uważam, że warto przypomnieć o jego istnieniu. Teoretycznie istnieje ryzyko nadużyć, ale użytkownikami są administratorzy sieci, polityka to zero tolerancji dla nadużyć i nie kojarzę jakichkolwiek problemów związanych z udostępnianiem maszyny. Korzystałem, polecam.

HTTP czy HTTPS?

Wszystko zaczęło się od tego, że Wampiryczny blog zmienił sposób dostępu, wymuszając HTTPS. Skomentowałem pół żartem, pół serio. Dostałem odpowiedź w komentarzu, przeczytałem i trochę mi się włos zjeżył na głowie. Bo zdecydowanie o zużyciu energii ktoś nie pomyślał. Jak jestem zwolennikiem udostępniania treści po HTTPS i bardzo sobie ostrzę zęby na projekt letsencrypt.org, tak uważam, że wybór powinien być po stronie odbiorcy, a jedynie miejsca, gdzie są przesyłane wrażliwe dane (np. hasła) powinny mieć wymuszony HTTPS.

Postanowiłem zrobić mały test, czyli pobrać stronę po HTTP i zobaczyć, ile zostało pobranych bajtów (i w jakim czasie), a następnie to samo dla HTTPS. Jako system został użyty base system Debiana, uruchomiony w wirtualce (KVM), uruchomionej na laptopie. Jako stronę serwującą dokładnie to samo po HTTP i HTTPS dobrzy ludzie podrzucili stronę OVH. Google.com na ten przykład serwowało wgetowi nieidentyczną zawartość.

HTTP

$ ifconfig eth0 | grep "RX bytes" ; time for NUM in {1..20}; do wget --no-check-certificate -qO - http://ovh.pl/ >> out_http.txt; done ; ifconfig eth0 | grep "RX bytes"RX bytes:11251203 (10.7 MiB)  TX bytes:495042 (483.4 KiB)real    0m9.471suser    0m0.000ssys     0m0.772sRX bytes:14173253 (13.5 MiB)  TX bytes:583042 (569.3 KiB)

Jak widać wysłano 88000 bajtów, odebrano 2922050.

HTTPS

$ ifconfig eth0 | grep "RX bytes" ; time for NUM in {1..20}; do wget --no-check-certificate -qO - https://ovh.pl/ >> out_https.txt; done ; ifconfig eth0 | grep "RX bytes"RX bytes:14173313 (13.5 MiB)  TX bytes:583102 (569.4 KiB)real    0m13.938suser    0m0.000ssys     0m0.904sRX bytes:17387531 (16.5 MiB)  TX bytes:739702 (722.3 KiB)

Z kolei tutaj wysłano 156600 bajtów, a odebrano 3214218.

Podsumowując: HTTPS w tym teście był wolniejszy o 46%, przy korzystaniu z niego wysłane zostało o 78% więcej danych, a odebrano o blisko 10% więcej danych. Efekt, czyli pobrana zawartość jest dokładnie taka sama. Oczywiście ww. narzut procentowy będzie się różnił w zależności od rozmiaru pliku wynikowego, ale jak widać narzuty są spore.

Do prędkości bym się zbytnio nie przywiązywał, bo o ile za brak ruchu na wirtualce ręczę, to na lapku różne rzeczy się dzieją, choć generalnie idluje, a sam lapek zapięty po wifi. Niemniej, pomiarów było kilka, także dla mojej strony ze stanem rowerów na stacjach Nextbike. Wyniki podobne – wolniej i więcej przesłanych danych po HTTPS.

Dlatego przerażają mnie zmiany planowane zmiany w Chromium powodujące, że strony po odwiedzane po HTTP będą oznaczone jako niezaufane. Podobnie robi Mozilla. Rozumiem, że jeśli wysyłamy dane, zwł. z kamery czy mikrofonu, ba, jeśli cokolwiek wprowadzamy na stronie czy wysyłamy pliki. Ale sam odbiór? Trochę przesada. Tym bardziej, że istnieją narzędzia, do wymuszania HTTPS, jeśli ktoś ma taką potrzebę – choćby HTTPS Everywhere.

Zupełnie nie rozumiem podejścia Google do wykorzystania HTTPS jako sygnału rankingowego. Zdobycie certyfikatu nie jest problemem, a jak ruszy Let’s Encrypt, to już w ogóle. Znaczy rozumiem ideę, ale do sprawdzenia autentyczności, wystarczyłoby np. pobierać po HTTPS sitemap.xml. Czy tam robots.txt. Czy stronę główną.

Trochę zastanawiam się, po co ta nagonka. I mam wrażenie, że nie tyle o bezpieczeństwo chodzi (dobry pretekst, fakt), a o pieniądze. O ile certyfikaty tanieją i będą za darmo (ale czy wszystkie?), o tyle pewnie jest to pretekst do kolejnego wzrostu narzutu na ruch, nowych usług (terminowanie SSL na proxy czy CDN), wymiany pudełek itp. Nawiasem, jest nawet strona zachwalająca, jaki to TSL jest szybki, na współczesnych procesorach i nowym oprogramowaniu. Tyle, że nie. Ale nie omieszkam sprawdzić (na najnowszym Debianie), jak tylko Let’s Encrypt ruszy…

Zachęcam do polemiki. Polecenia podałem wyżej, można samemu sprawdzić, podać kontrprzykłady, pochwalić się konfiguracją z minimalnym narzutem na wersję szyfrowaną.

UPDATE: Poprawione polecenia (było dwa razy HTTP, zamiast raz HTTP i raz HTTPS). Bug przy przeklejaniu, wyniki są i były prawidłowe. W sumie jestem rozczarowany, że tak długo nikt tego nie zauważył.