DS416j, DSM 6 i Pi‑hole, czyli czarna dziura na reklamy
Pi‑Hole, chroot, dnsmasq, lighttpd, blokowanie reklam i... serwer NAS DS416j
[img=banner id=238439 alt=https://pi-hole.net/]Pi-Hole na DS416j
Z projektem Pi‑Hole zapewne zetknęli się już entuzjaści minikomputera spod znaku malinki oraz jej fork'ów. Zadaniem oprogramowania ma być blokowanie niechcianych treści, zgłaszanych przez społeczność jako śmieci. Całość odbywa się przez filtrowanie ruchu po DNS w odniesieniu do regularnie pobieranych z bazy projektu hostów szkodliwych. Czyli adresów serwerów nachalnych reklam. Podczas testowania Pi‑Hole'a dziennie blokował około 1/2 tysiąca zapytań, a do pełni szczęścia uzupełniłem konfigurację ręcznie o wredne hosty, propagujące nachalne reklamy na lokalnym serwisie informacyjnym, którego społeczność Pi‑Hole'a po prostu nie zna. Całość wraz ze statystykami funkcjonuje obłędnie, odfiltrowując zbędne treści. Podczas gdy dostałem do dyspozycji NAS firmy Synology na cztery dyski - postanowiłem sprawdzić czy jego 512‑ramu poradzi sobie z udźwignięciem kilku niekonwencjonalnych usług oprócz działających już standardowych, obecnych w systemie "na gotowe". Postanowiłem zainstalować Pi‑Hole'a na serwerze NAS.chroot
Jak już pisałem w jednym z wpisów na temat DS416j - dostajemy DSM. Tylko i aż. Jest to poniekąd okrojony system i nie wszystko sobie tam zainstalujemy. Tu z pomocą przychodzi chroot. Jest to twór dostępny z repozytorium społeczności skupionej przy Synology i systemie DSM, a pobrać pakiet możemy z repozytorium tejże społeczności po dodaniu w panelu sterowania urządzenia DS416j. Chroot to nic innego jak pewnego rodzaju podsystem, który daje nam możliwość rozszerzenia funkcjonalności DSM'u o atrakcje oferowane przez pełnego Debiana. Działa yum i apt-get, możemy dorzucić curl'a a (mając na uwadze ograniczone sprzętowo zasoby) lekki serwer www lighttpd czy coś do pomieszania DNSem - dnsmasq. Właśnie sama się napisała swojego rodzaju recepta na doposażenie NAS'a w prywatny serwer DNS blokujący reklamy. Pi‑hole. Dedykowany dla malinek projekt mający za zadanie odfiltrowywać niechciane treści na etapie DNS. W końcu bądź co bądź Raspbian to też taki Debian... i postanowiłem sprawdzić czy zadziała na DS416j. Nie dam sobie uciąć głowy czy będzie działać na każdym NAS'ie, gdyż zarówno specyfikacje sprzętowe jak i wersje DSM znacząco odbiegają od siebie w miarę oddalania się wzajemnie konfiguracji sprzętowej i ich wzajemnej zbieżności. Tak myślę. Chcę zainspirować Was do poeksperymentowania z różnymi urządzaniami i być może po jakimś czasie wyrysują się wnioski dające informacje na temat tego na jakim sprzęcie i systemie można w/w projektu używać.
od czego zacząć?
Na pewno zabawę zaczniemy od zainstalowanie i przygotowania chroot'a. W tym celu udajemy się do panelu sterowania, centrum pakietów, zakładka społeczności (o ile dodano wcześniej repozytorium w źródłach pakietów).
Klikamy instaluj, a następnie uruchom. Logujemy się do serwera NAS przez SSH i wydajemy ciąg następujących poleceń:
sudo su (podnosimy uprawnienia do root'a na DSM)
/var/packages/debian-chroot/scripts/start-stop-status start
/var/packages/debian-chroot/scripts/start-stop-status chroot
w tym miejscu mogą pojawić się błędy, ale nie mają żadnego znaczenia, przy ponownym uruchomieniu NAS'a i chroot'a już ich nie będzie. Wydajemy następny ciąg poleceń:
apt-get update
apt-get upgrde
apt‑get install locales
dpkg-reconfigure locales
wybieramy kodowanie UTF8 i języki polski oraz najbezpieczniej wszystkie rodziny En_en, En_us. Zatwierdzamy i czekamy na re konfigurację lokalizacji. Może to chwilę potrwać. Mi zajęło jakieś pięć minut. Postęp jest widoczny wyraźnie i nic nie wskazuje ani nie sugeruje tego, że coś się zawiesiło. Także bez stresu. Dodać należy też, że sam chroot jest tworem nieingerującym w system plików natywnego DSM'a, także nie musimy obawiać się o to, że namiesza nam w oryginalnej konfiguracji. Oczywiście jest jasne, że przed każdą modyfikacją czegokolwiek w serwerze wykonujemy kopię zapasową konfiguracji do pliku, ale uważam to za standard i specjalnie nie będę pisał gdzie i jak w DSM'ie to zrobić bo jest na tyle intuicyjny, że po minucie każdy znajdzie.
Po zakończonej konfiguracji pakietów językowych:
dpkg-reconfigure tzdata
apt‑get install curl
mount /proc
cat /proc/mounts > /etc/mtab
Instalacja Pi-Hole'a
W celu właściwej instalacji oprogramowania Pi‑Hole posługujemy się curl'em:
curl -L https://install.pi-hole.net | bash
podążamy za wyświetlanymi na ekranie komunikatami, dopasowując program do swojego systemu i sieci. Konfiguracja jest prosta i w miarę intuicyjna. Nie należy bać się tego, że odbywa się w konsoli.
Ważną rzeczą po zakończonej instalacji jest nadanie nowego hasła do panelu administracyjnego strony web usługi. (wygenerowane podczas instalacji również można sobie zapisać, ale jest przypadkowo generowane i można zapomnieć) W tym celu wydajemy komendę:
pihole -a -p
zostaniemy poproszeni o podanie nowego hasła i jego ponowne wpisanie.
Serwer web (lighttpd) dla Pi‑Hole domyślnie działa na porcie 80. Ale ponieważ na naszym NAS'ie już działa usługa wykorzystująca tenże port - musimy wybrać inny - aczkolwiek wyższy niż port 1023. Na przykład 8888. W tym celu musimy sobie wyedytować plik konfiguracyjny serwera lighttpd w miejscu server.port-xxxx. Znajduje się on w lokalizacji:
/etc/lighttpd/ i nazywa się lighttpd.conf.
Możemy użyć nano, doinstalować Midnight Commander'a (apt-get install mc), lub po prostu wkleić w terminal poniższą linijkę:
nano /etc/lighttpd/lighttpd.conf
wyszukujemy frazę server.port= poprzez wciśnięcie CTRL+W (wyszukiwanie w nano). Natomiast po skończonej edycji numeru portu CTRL+X i na pytanie czy zapisać zmiany odpowiadamy wciśnięciem klawisza Y.
Kolejną czynnością, którą należy dodać jest dodanie Pi‑Hole'a do Cron'a. W tym celu klepiemy:
crontab /etc/cron.d/pihole
crontab -l
fonetycznie będzie tak: krontab minus EL - małe EL - piszę o tym bo często małe Ly lubi wyglądać jak jedynka abo jeszcze co innego, na przykład duże i. Swoją drogą przypomniały mi się kiedyś omawiane na łamach portalu podróbki i tam właśnie można było się spotkać z przebiegłym wykorzystaniem tej umyślnej literówki (ktoś pokazywał screeny z podróbkami telefonów nokia, na których była oferowana nokLa. (NOKIA NOKlA - przez el) oraz nokia nokla - przez el. ;‑)
następnie restartujemy działające usługi celem sprawdzenia występowania ewentualnych błędów i konfliktów:
sudo service cron restart sudo service lighttpd restart sudo service dnsmasq restart
teraz powinno być możliwe dostanie się do panelu administracyjnego Pi‑Hole'a: http://192.168.1.2:8888/admin
czyli :
http://twój-wewnętrzny-adres-ip-serwera-nas : wybrany port/admin
Pozostaje dodać jeszcze manewry z chroot'em do automatycznego uruchomienia. Wychodzi z chroot'a poleceniem exit, wydajemy następujące:
cd;wget https://gist.githubusercontent.com/bakman2/dcfe3fdfd02c9ff8326bbf35da539f27/raw/c177d818b878ab2ee5c7de54af35116e0ded2a37/gistfile1.txt
mv gistfile1.txt /usr/local/etc/rc.d/S99pihole.sh
chmod +x /usr/local/etc/rc.d/S99pihole.sh
i testujemy skrypt:
/usr/local/etc/rc.d/S99pihole.sh restart
Od tego momentu Pi‑Hole powinien działać i zgłosić stronę administracyjną.
I tu ważna uwaga. Próbowałem wcześniej instalować Pi‑Hole'a na VPS'ie od Aruby. Niestety. Mimo, że instalacja przebiegła bezproblemowo i wszystko hulało aż miło, to serwer DNS z publicznym IP nie jest dobrym pomysłem. Można przypadkiem stać się ofiarą (albo raczej współsprawcą) ataków DoS. Także rozwiązanie oparte na Raspberry Pi lub jego zamiennikach czy jeśli jest się szczęśliwym posiadaczem NAS'a wydaje się idealną opcją. Oczywiście Pi‑Hole na VPS też będzie działał ale bezpieczni będziemy tylko wtedy, gdy postawimy tam VPN'a i ograniczymy połączenia przychodzące dla serwera DNS (Pi‑Hole) tylko do lokalnego adresu. Tak jest bezpiecznie. Jest to jednak już trudniejsze niż (zwłaszcza mając w domu NAS czy Pi) umieścić lokalnie przed routerem. Szczerze polecam. Zabawka pięknie odfiltrowuje reklamy, bannery i efekty proponowane przez śledzące ciastka. Jeśli ktoś ma w domu NAS'a lub Pi to powinien spróbować.
konfiguracja klientów
Pozostaje skonfigurowanie routerów pod nowy adres IP serwera DNS z Pi‑Hole. Chodzi o to, aby zamiast np. 8.8.8.8 i 4.4.4.4 ustawić sobie lokalny adres IP NAS'a z działającą instancją Pi‑Hole. W tym przypadku wszystkie urządzenia za ruterem z nowym DNS'em będą odfiltrowywały reklamy.
Inna opcja jest taka, że możemy ręcznie na każdym urządzeniu ustawić te same DNS'y dla Pi‑Hole. Robimy tak wtedy gdy chcemy decydować, które urządzenia ma odfiltrowywać, a które nie. W tym przypadku odfiltrowywanie będzie odbywało się z osobna dla każdego, wybranego urządzenia.
Jest to jedno z alternatywnych, komplementarnych uzupełnień funkcjonalności serwerów NAS (obecności Linux'a i odrobiny kombinatoryki). Pokazuje, że oprócz przeglądarkowych Ad‑Block'ów istnieją inne narzędzia zwalczające coraz bardziej powszechny w internecie Syf. Pi‑Hole jest dedykowany dla Maliny, ale uniwersalność Linux'a (z DSM jest trudniej, ale nie niemożliwe) pokazuje, że można korzystać z niego na każdej maszynce, w której żyje jakiś Pingwin.
alternatywa alternatywy czyli nie masz NASa, ani Pi? ... To nic! I tak się da.
Posiadam w domu urządzenie na kształt Intel Compute Stick - oryginał po półtora roku umarł i zastąpiłem go Modecom'em Free z procesorem obsługującym wirtualizację. Wyżej pokazane rozwiązanie testowałem również na maszynie wirtualnej pod takim patykiem. Jego wydajność jest jak najbardziej zadowalająca, ale to już temat na zupełnie inny wpis.