Ojciec wie lepiej...

Posted on Sat 13 February 2021 in Automatyczny dom, Wirtualizacja • 3 min read

...kiedy odciąć pewnego rodzaju, internetową aktywność swych dzieci. Koniec, kropka.

Nadeszła właśnie TA chwila, a że nie zanosi się na szybki powrót do szkoły, zaś po wielu rozmowach i ustaleniach NIC się nie zmienia, więc od PERSWAZJI czas przejść do PREWENCJI.

Pi-hole to oprogramowanie, które jest pośrednikiem pomiędzy serwerem DNS, a naszą, domową siecią. Na podstawie samodzielnie stworzonych białych i czarnych list decyduje czy dać dostęp do danej strony www czy też dostępu odmówić. Tej właściwości, domowy oczywiście, postanowiłem użyć we własnym domu.

Na RaspberryPi postawiłem kontener Pi-hole , robi się to naprawdę w 2 minuty (włącznie z pobraniem obrazu). Na Malince używam HyperiotOS więc mam na niej Dockera. Tworzę plik docker-compose.yml z następującą zawartością:

version: "3"

# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "67:67/udp"
      - "80:80/tcp"
      - "443:443/tcp"
    environment:
      TZ: 'Europe/Warsaw'
      # WEBPASSWORD: 'set a secure password here or it will be random'
    # Volumes store your data between container upgrades
    volumes:
      - './etc-pihole/:/etc/pihole/'
      - './etc-dnsmasq.d/:/etc/dnsmasq.d/'
    # Recommended but not required (DHCP needs NET_ADMIN)
    #   https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
    cap_add:
      - NET_ADMIN
    restart: unless-stopped

Do ustawienia są 2 linijki, ta ze strefą czasową, oraz następna gdzie można ustawić stałe hasło do interfejsu www.

Po zapisaniu pliku opdaliłem komendę:

docker-compose up --detach

Uwaga! Należy sprawdzić czy na tym samym hoście jakiś serwis już nie blokuje portów: 53, 67, 80 i 443.

No i już! Na Malince działa Pi-hole!

Aby to sprawdzić, wystarczy w przeglądarce wejść pod adres http://IP-MALINKI/admin/, gdzie IP-MALINKI to adres IP RaspberryPi na którym zainstalowane jest Pi-hole.

Nie będę opisywał tu szczegołów posługiwania się Pi-hole, wystarczy poczytać dokumentację, ale tak na szybko dodam:

najciekawsze było dla mnie samo blokowanie niepożądanych stron www. Można skorzystać z dziesiątków istniejących blacklist ale jeszcze fajniejsza była próba, której efekt uzyskałem niemal natychmiast.

W interfejsie Pi-hole włazłem w sekcję Blacklist (w menu po lewej):

image1

wpisałem "youtube.com", zaznaczyłem opcję "Add domain as wildcard" i kliknąłem "Add to Blacklist". Spróbowałem wejść na youtube.com i... wszedłem! Kicha! Nie działa!

No, nie. Tak głupi nie jestem. Pewnie, że nie zadziała. Ale dlaczego?

Każdy komputer, ten w domowej sieci, ma przypisany numer IP. Może mieć ustawiony na stałe, może też mieć pobierany automatcznie z serwera DHCP. Wraz z tym numerem ma też, a raczej powinien mieć ustawiony adres serwera DNS. Może nie mieć, ale wtedy wszędzie trzeba wchodzić po numerze IP. Kto to spamięta? (można sobie zrobić plik hosts - ktoś doda)

Co stało gdy wszedłem na stronę youtube.com? Moja przeglądarka wysłała, po cichu, zapytanie do serwera DNS: jaki adres IP ma youtube.com? Serwer DNS jej odpowiedział, że taki a taki i przeglądarka połaczyła się z serwerem youtube.

Skoro Pi-hole jest pośrednikiem pomiędzy serwerem DNS to powinien się pojawić w powyższym opisie, powinien ale go nie ma. Dlaczego? Dlatego, że jeszcze czegoś zabrakło w powyższym opisie.

Przeglądarka zna adres IP serwera DNS ale komunikuje się z nim poprzez bramę na świat jaką w każdym domu jest router. Tak, to małe pudełko które zostawiają instalatorzy Orange, Netii czy innego tzw. providera. Router przesyła dalej zapytanie z przeglądarki, a to oznacza że to właśnie jego trzeba zmusić by każde zapytanie DNS najpierw przesyłał przez pośrednika jakim jest Pi-hole.

Mój router to Mikrotik i żeby przechwytywać każde zapytanie DNS muszę do jego konfiguracji dopisać dwie dyrektywy, w moim przypadku wyglądają tak:

/ip firewall nat add chain=dstnat action=dst-nat to-addresses=192.168.1.3 protocol=udp src-address=!192.168.1.3 dst-address=!192.168.1.3 dst-port=53 in-interface=bridge

/ip firewall nat add chain=srcnat action=masquerade protocol=udp src-address=192.168.1.0/24 dst-address=192.168.1.3 dst-port=53

Adres 192.168.1.3 to adres Malinki z Pi-holem.

W skrócie: cokolwiek przyjdzie do routera z sieci wewnętrznej i jest zapytaniem DNS, przekieruj to zapytanie na adres 192.168.1.3, a resztą zajmie się Pi-hole.

Proces jeszcze się nie zakończył, teraz dopiero zaczęła się ciężka harówa - trzeba całość dopieścić tak, żeby technologia pomagała, a nie przeszkadzała. Uczyła, a nie deprawowała.

dePRAWOwać, pasuje mi to słowo, oznacza likwidację naturalnych praw człowieka, a prawa to obowiązki. Człowiek zdeprawowany jest zlewicowany, nieodpowiedzialny i samolubny.

I tym filozoficznym akcentem kończę ten radosny wpis.