Nawet jeśli korzystamy z VPN-a ze względu na naszą prywatność (np. ProtonVPN), to nie ustrzeże on nas przed niechcianymi reklamami (takimi, że dorosłemu robi się niedobrze, a co dopiero dziecku) czy treściami w Internecie nie odpowiednimi dla dzieci.
Jak rozwiązać taki problem systemowo?
Z pomocą przychodzi nam usługa/aplikacja Pi-hole. Pewnie czytając „Pi-hole” od razu pomyśleliście o Raspberry Pi? Słusznie, ponieważ usługa została zaprojektowana z myślą, aby działać na małych urządzeniach, ale można go uruchomić na każdej dystrybucji Linuksa.
Potrzeba wynikła jak zawsze z życia. Jedno z dzieci grało w grę Idle Theme Park Tycoon – budujesz park rozrywki, ale co jakiś czas wyskakuje komunikat, że aby zwiększyć 2x zarobki należy obejrzeć reklamę i dziecko naciska ładny zielony guzik automatycznie. OK, można wykupić brak reklam – problem rozwiązany.
Kilka tygodni później była inna gra – prymitywne budowanie miasta, ale liczył się spryt (City Takeover). Nie ma krwi, nie wiadomo jakich rzeczy w grze. Zainstalowałem. Dziecko gra obok.. aż tu nagle, w trakcie gry reklama na pełny ekran jakiś żywych trupów, nagle bez zapowiedzi. Tego było za dużo. I postanowiłem znów wdrożyć Pi-hole.
Instalacja
Pi-hole służy do blokowania możliwości śledzenia nas oraz blokowania reklam w Internecie, szczególnie tych uciążliwych np. w Smart TV czy w aplikacjach mobilnych (jak w przykładzie powyżej). Działa na zasadzie zapory sieciowej, dlatego niechciana zawartość nie trafia w żaden sposób na docelowe urządzenie użytkownika, ponieważ jest blokowana na poziomie sieci (tym samym powoduje mniejsze obciążenie naszego łącza internetowego).
Osoby chcące zobaczyć jak dokładnie działa ten mechanizm u podstaw (FTLDNS, cURL, lighttpd, PHP) mogą pobrać kod źródłowy usługi z GitHub.
Mamy niesamowite możliwości wyboru sposobu instalacji Pi-hole. Ja korzystam z gotowego kontenera Docker. Na stronie DockerHub jest przykład konfiguracji docker-compose.yml , jedyne co musimy zrobić przed uruchomieniem to skonfigurować parametr z hasłem do panelu zarządzania (WEBPASSWORD).
Jeśli macie dedykowane urządzenie na Pi-hole (np. malinę lub inne urządzenie z dystrybucją Linuksa) możecie użyć jednolinijkowej komendy do instalacji:
1 |
curl -sSL https://install.pi-hole.net | bash |
Konfiguracja
Po instalacji możemy już korzystać z Pi.hole, ponieważ działa jako serwer DNS dla sieci prywatnej (domowej/firmowej), zastępując jakikolwiek wcześniej skonfigurowany serwer DNS w komunikacji do użytkownika.
Pozostaje nam na routerze (lub innym urządzeniu, który robi za serwer DHCP) skonfigurować, aby serwer DNS wskazywał na adres IP maszynki, gdzie zainstalowaliśmy Pi-hole.
Ja zawsze jedyną rzeczą jaką ustawiam na Pi.hole to konkretny serwer macierzysty DNS, z którego usługa ma korzystać.
Możecie po prostu zaznaczyć w Ustawieniach odpowiednio predefiniowany serwer (Google, OpenDNS, Cloudfare itp.) lub podać samodzielnie odpowiedni adres IP. Panel administracyjny dostępny jest pod adresem:
- http://pi.hole/admin/ – w przypadku gdy korzystamy już z Pi-hole jako serwer DNS
- http://ADRES_IP_GDZIE_JEST_PIHOLE/admin/
W przypadku, gdy korzystamy już z ProtonVPN (w wersji premium) powinniśmy ustawić następujący jeden adres IP:
- 10.8.8.1 – gdy korzystamy z konfiguracji UDP
- 10.7.7.1 – gdy korzystamy z konfiguracji TCP
to umożliwi uniknięcia wykrycia np. przez serwisy VOD, że nie jesteśmy u siebie. Jak również poprawi nasze ukrycie za VPN-em.
Bezpieczeństwo dzieci i innych
Pi-hole to można powiedzieć cały system do sterowania ruchem domenowym w naszej sieci. W panelu sterowania mamy możliwość skonfigurowania masy rzeczy (blokowanie poszczególnych domen, wprowadzenie własnych domen, kierujące na podany adres IP). I często to nam już wystarczy.
Ale zdarza się, że sama blokada niechcianych reklam jest niewystarczająca, szczególnie gdy w domu są dzieci. Pi-hole umożliwia nam bezpośrednio z panelu zarządzania dodać kolejne linki z listami reguł, które na bieżąco są sprawdzane, importowane i wdrażane umożliwiając automatyczne blokowanie nowych nieodpowiednich serwisów.
W Internecie można znaleźć ich naprawdę dużo (blokady reklam, crypto, drugs, fraud, malware, scam tracking itp.). Przykładowy zestaw znajdziecie chociażby na PiHoleLists.
Ale to nie wszystko. Bardzo dużo firm pozwala na tzw. bezpieczne wyszukiwanie (np. Google, Bing, DuckDuckGo, Youtube). Dzieci wtedy nie zobaczą nieodpowiedniej zawartości na YouTube, albo będzie ona naprawdę w znikomej ilości. Jak z tego skorzystać?
Robi się to w bardzo prosty sposób – ustawiając CNAME z restrict (restrict.youtube.com zamiast www.youtube.com). Ale nie musimy sami wprowadzać dziesiątek nazw, ponieważ Jayke Peters stworzył prosty skrypt, który zrobi odpowiednie zmiany w Pi-hole automatycznie:
1 2 3 4 |
wget https://raw.githubusercontent.com/jaykepeters/Scripts/Deployment/Pi-hole_SafeSearch.sh mv ./Pi-hole_SafeSearch.sh /usr/local/bin/ chmod a+x /usr/local/bin/Pi-hole_SafeSearch.sh Pi-hole_SafeSearch.sh --enable |
Oczywiście musimy taką zmianę wykonać jako użytkownik root (ostatnie polecenie). W moim przypadku zawsze na świeżej instalacji muszę ostatnie polecenie uruchomić 2x, bo jest problem ze zdublowanymi wpisami w pobranej konfiguracji. Czy skrypt zadziałał wystarczy zobaczyć czy istnienie plik 05-*.conf w katalogu /etc/dnsmasq.d/ .
Cały projekt dostępny jest na GitHub.
Ja posiadam jedną instancję Pi-hole dla każdej podsieci, aby móc lepiej sterować regułami (dzieci, goście, praca). Na RaspberryPi zainstalowałem Dockera, skonfigurowałem obsługę dodatkowych podsieci, a następnie w każdym docker-compose.yml ustawiłem przekierowanie portu wewnętrznego na konkretny adres IP, oraz dodatkowo konfigurację trzymam po NFS na Synology:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
version: "2" services: pihole: container_name: pihole-vlan100 hostname: pi-vlan100 domainname: local image: pihole/pihole:latest ports: - "192.168.100.70:443:443/tcp" - "192.168.100.70:53:53/tcp" - "192.168.100.70:53:53/udp" - "192.168.100.70:67:67/udp" - "192.168.100.70:80:80/tcp" environment: VIRTUAL_HOST: 'pi-vlan100.hole' DNSMASQ_LISTENING: 'all' ServerIP: '192.168.100.70' TZ: 'Europe/Warsaw' WEBPASSWORD: 'HASLO_JAKIE_MA_BYC_DO_PANELU' # Volumes store your data between container upgrades volumes: - 'nfs-pihole-vlan100-etc:/etc/pihole/' - 'nfs-pihole-vlan100-dnsmasq:/etc/dnsmasq.d/' cap_add: - NET_ADMIN restart: always volumes: nfs-pihole-vlan100-etc: driver: local driver_opts: type: nfs o: nfsvers=4,addr=IP_SYNOLOGY,rw device: ":/volume1/rpi/docker/pihole-vlan100/" nfs-pihole-vlan100-dnsmasq: driver: local driver_opts: type: nfs o: nfsvers=4,addr=IP_SYNOLOGY,rw device: ":/volume1/rpi/docker/pihole-vlan100/dnsmasq.d/" |
PS: CERT Polska udostępniła listę ostrzeżeń przed niebezpiecznymi stronami. Aby ją dodać, to w menu „Group Management” wybieramy opcję „Adlists”. W polu „Address” wpisujemy: http://hole.cert.pl/domains/domains_hosts.txt