Własna strona w sieci Tor

Za sprawą normalnych tradycyjnych stron w sieci Tor zrobiło się ostatnio głośno z powodu Facebooka. Nie dość, że Facebook wystawił stronę oficjalnie do sieci Tor pod adresem .onion, to adres był ciekawy, a całość jest dostępna po HTTPS, czyli w wersji szyfrowanej[1]. Mniejsza o powody, dla których to uczynili. Wydaje się, że nie tyle chodziło im o anonimowość użytkowników (nie miejcie złudzeń), co o ich prywatność i bezpieczeństwo (ukrycie lokalizacji). Plus przy okazji rozwiązali sobie problem false positives przy wykrywaniu włamań, które mieli przy użytkownikach korzystających z tradycyjnych exit node[2]. Będzie zatem o własnej stronie w sieci Tor.

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

Tak czy inaczej, wygląda, że Tor został dostrzeżony przez dużych w z właściwej perspektywy, czyli po prostu jako medium transmisji, a nie odrębna sieć, używana przez złoczyńców[3]. Myślę, że można spodziewać się kolejnych naśladowców.

Warto zauważyć, że to co zrobił Facebook to nie jest typowy hidden service w sieci Tor. W typowym chodzi o ukrycie tożsamości właściciela, miejsca hostowania itp. Czyli masa pracy poświęcona uszczelnianiu systemu i serwera WWW, która nie jest przedmiotem tego wpisu. Na stronie projektu Tor też się tym nie zajmują, ale zainteresowani znajdą tam ogólne wskazówki. Tu przeciwnie – wszystko jest dostępne, a tożsamość jest potwierdzona certyfikatem SSL, czyli wersja znacznie łatwiejsza w wykonaniu.

I właśnie takim przypadkiem zajmę się w tym wpisie. Całość opisana jest dokładnie na stronie projektu Tor. Widzę jednak, że pojawiają się pytania jak to zrobić, więc zamieszczę wersję skróconą i uproszczoną. Tak naprawdę całość sprowadza się do dwóch linii w pliku konfiguracyjnym. Zakładam, że Tor jest już skonfigurowany jako relay node lub bridge node. I nawet nie do napisania, tylko do odhashowania/edycji.

Przede wszystkim w pliku konfiguracyjnym[4] szukamy sekcji dotyczącej hidden services, zaczynającej się od linii:

############### This section is just for location-hidden services ###

Następnie odhashowujemy/edytujemy dwie linie:

HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 IP_SERWERA_WWW:80

Pierwsza musi wskazywać na katalog, który musi mieć prawa odczytu i zapisu dla użytkownika na którym działa demon Tor. W Debianie wystarczy odhashować.

Druga to wskazanie który port chcemy przekierowywać i na jaki adres oraz port. IPv4 działa na pewno, IPv6 nie udało mi się skłonić do działania. Jedyna zmiana, czy też wymóg konfiguracji po stronie serwera WWW, jest taki, że musi on pozwalać na dostęp do zasobów po IP, bez podania domeny (vhosta)[5].

Następnie należy zrestartować demona Tor i… gotowe. Pozostało jeszcze tylko sprawdzić, jaki adres ma nasz hidden service:

cat /var/lib/tor/hidden_service/hostname

Potem można już tylko zweryfikować działania serwisu za pośrednictwem adresu .onion. Jeśli nie mamy pod ręką normalnego dostępu do Tora, można posiłkować się bramką Tor2web.

[1] I całe szczęście, bo przypominam, że Tor nie szyfruje użycie Tora nie oznacza automatycznie szyfrowania danych. Co więcej, każdy węzeł, ma możliwość przechwycenia całej (co prawda zaszyfrowanej) transmisji. A exit node, jest w stanie podsłuchać nieszyfrowaną transmisję do końcowego hosta.

[2] Więcej w tym wpisie (ANG).

[3] Nie ukrywajmy, typowy użytkownik Tora kojarzył się do tej pory z nielegalnymi działaniami.

[4] W Debianie jest to /etc/tor/torrc, pewnie w Ubuntu i innych pochodnych jest analogicznie.

[5] Tu uwaga dla chcących stawiać bramki hidden service – z punktu widzenia zewnętrznego serwisu (i tylko jego, i tylko w przypadku połączeń poprzez adres .onion) mój klient Tor IP jest teraz exit node! W przypadku nadużyć za pośrednictwem sieci Tor i adresu .onion może się to skończyć wizytą policji. W przypadku serwisów, których nie jesteśmy właścicielami bezwzględnie należy mieć zgodę właściciela serwisu.

Piwik 2.6.0 i problemy z upgrade

Od jakiegoś czasu korzystam ze statystyk Piwik na większości moich stron ii generalnie jestem zadowolony. Do tej pory aktualizacje wersji były totalnie bezproblemowe (klikalne), ale aktualizacja wersji do 2.6.0 zakończyła się niepowodzeniem.

Od początku wyglądało dziwnie, bo kliknięcie w changelog w mojej instalacji Piwika nie pokazywało listy zmian dla wersji 2.6.0, a w dziale download najnowsza wersja opisana była jako 2.5.0 (choć faktycznie archiwum zawierało 2.6.0).

Automatyczny upgrade zakończył się klęską i pokazywaniem białej strony, postanowiłem zrobić aktualizację ręcznie, jak opisano na stronie. Okazało się, że pobrany plik piwik.zip rozpakowuje się w ślimaczym tempie (ok. 20kB/s). Także na innej, szybszej maszynie, z nowszym Debianem (unstable). Ostatecznie rozpakowałem na tej szybszej, przepakowałem do tar.gz. Przy okazji rozmiar spadł do 8MB w porównaniu z 11MB oryginalnego zip, a rozpakowanie odbyło się w normalnym tempie, czyli parę MB/s. Następnie przeprowadziłem aktualizację ręcznie.

Niewiele to pomogło, bo nadal była biała strona. Ręczne wywołanie pliku piwik.php dało więcej informacji:

PHP Warning:  require(/var/www/piwik/vendor/facebook/xhprof/xhprof_lib/utils/xhprof_lib.php): failed to open stream: No such file or directory in /var/www/piwik/vendor/composer/autoload_real.php on line 58
PHP Fatal error:  require(): Failed opening required '/var/www/piwik/vendor/facebook/xhprof/xhprof_lib/utils/xhprof_lib.php' (include_path='/var/www/piwik/vendor/phpunit/php-text-template:/var/www/piwik/vendor/phpunit/phpunit-mock-objects:/var/www/piwik/vendor/phpunit/php-timer:/var/www/piwik/vendor/phpunit/php-file-iterator:/var/www/piwik/vendor/phpunit/php-code-coverage:/var/www/piwik/vendor/phpunit/phpunit:/var/www/piwik/vendor/symfony/yaml:.:/usr/share/php:/usr/share/pear') in /var/www/piwik/vendor/composer/autoload_real.php on line 58

Szybki debug i znalazł się winny. W pliku /var/www/piwik/vendor/composer/autoload_files.php należy zakomentować odwołania do nieistniejących plików:

#    $vendorDir . '/facebook/xhprof/xhprof_lib/utils/xhprof_lib.php',
#    $vendorDir . '/facebook/xhprof/xhprof_lib/utils/xhprof_runs.php'

Po tej operacji wszystko działa poprawnie. HTH

http://pastebin.com/S4Hxjw6B

UPDATE: Szybcy są i czytają Twittera, już (podobno) poprawili wydając 2.6.1. 🙂

Rowery miejskie w Szczecinie

Niedawno Szczecin uruchomił SRM, czyli Szczeciński Rower Miejski i dołączył do grupy polskich miast umożliwiających wypożyczanie rowerów miejskich ze stacji na ulicach. W przeciwieństwie do miast takich jak Poznań, Wrocław, Kraków czy Warszawa, nie jest to system obsługiwany przez firmę Nextbike, o którym na przykładzie Poznania pisałem (nawet dwa razy[1]), tylko przez zupełnie inną firmę.

Rozwiązanie takie ma zalety, ma też wady. Pierwsza, najważniejsza i najbardziej oczywista wada to brak wspólnego systemu. Mając konto w SRM nie skorzystamy z możliwości wypożyczenia roweru w innych miastach. Jako użytkownik PRM mam – przynajmniej teoretycznie, bo w praktyce nie zdarzyło mi się korzystać – możliwość wypożyczenia roweru w innych miastach kraju. Tak przynajmniej sugeruje strona Nextbike, bo informacji wprost nie znalazłem.

Kolejna wada – tym razem z mojego punktu widzenia – to format udostępnianych danych nt. dostępności rowerów miejskich na poszczególnych stacjach. SRM, podobnie jak Nextbike, udostępnia dane publicznie, ale robi to w tej chwili w sposób mocno kulawy. Zamiast ładnego XML z danymi o stacji (nazwa, położenie, ilość rowerów) mamy… HTML do samodzielnego parsowania. Mam nadzieję, że zmienią to do początku następnego sezonu, bo chciałem dodać Szczecin do strony z dostępnością rowerów miejskimi w Polsce[2].

Pora na zalety. Niewątpliwie zaletą SRM jest cena przy krótkich wypożyczeniach. Podobnie jak w Poznaniu, pierwsze 20 minut jest za darmo, ale za godzinę (łącznie) wypożyczenia w Szczecinie zapłacimy 1 zł (Poznań 2 zł), za 2h (łącznie) zapłacimy 4 zł (Poznań 6 zł). 3h w Szczecinie to 9 zł, w Poznaniu 10 zł. Potem już niestety Szczecin wypada gorzej, bo każda następna godzina w Sz-nie to aż 7 zł, w Poznaniu 4 zł. Chociaż traktując wypożyczane rowery miejskie jako alternatywę dla komunikacji zbiorowej liczą się IMO głównie krótkie okresy wypożyczenia (20 min, 1h, góra 2h), a tu Szczecin wypada lepiej[3].

Za zaletę uważam również powstanie konkurencji[4] – co prawda raczej w istniejących miastach niewiele to zmieni, przynajmniej w najbliższym czasie, ale wygląda, że kolejne miasta mają jakiś wybór operatora.

UPDATE W zasadzie wpis przestał być aktualny, bo od niedawna SRM jest częścią Nextbike. Z tego co mówią znajomi, jest wspólne konto, czyli pełna integracja z innymi miastami. A dane dotyczące ilości rowerów na stacjach w Szczecinie dostępne są już na stronie.

[1] Dość stare, trochę się pozmieniało, w szczególności wzrosła liczba stacji w Poznaniu, a ja nie bardzo korzystam – dorobiłem się własnego roweru, więcej chodzę pieszo i mam (miałem) sieciówkę.

[2] No i pewnie nazwę strony musiałbym zmienić, a koniec sezonu (słabo sobie IMHO wybrali termin startu w Sz-nie, chociaż może takie opóźnienie w przyswojeniu przez ludność faktycznie jest…) i używalność będzie nikła, więc trochę nie chce mi się.

[3] Ogólnie Poznań ma w tej chwili beznadziejne ceny transportu miejskiego. Najtańszy bilet to 3 zł (10 minut). W Szczecinie jest 2 zł za minut 15. A pamiętam, że gdy się przeprowadzałem do Poznania parę lat temu, było dokładnie odwrotnie – bilety w Poznaniu kosztowały 1 zł (też chyba 10 minut) przy IIRC 1,8 zł za 15 minut w Szczecinie.

[4] Trochę na wyrost wniosek, bo powiązań osobowych i finansowych nie sprawdzałem jeszcze.