Projekt Bezpieczne i wolne od reklam przeglądanie stron Web (Internet - Filtrowanie treści) [piszę...]

Silas Mariusz

rm -rf /
Help us, GOD!
5 Kwiecień 2008
10 167
31
2 243
153
39
Nowy Sącz
forum.qnap.net.pl
QNAP
TS-x77
Ethernet
1 GbE
Bezpieczne i wolne od reklam przeglądanie stron Internetowych - Filtrowanie treści
Autor: Silas Mariusz


Spis treści

1. Filtrowanie internetu

1a. Instalacja maszyny wirtualnej z Pi-Hole - filtrowanie Internetu
... lub ;
1b. Instalacja z repo qnapclub.eu -> AdGuard Home

2. Konfiguracja list.

2a. Konfiguracja list w Pi-Hole

2b. Konfiguracja AdGuard Home

(Dla posiadaczy Mikrotik)
3. Automatyczny skrypt przywracający DNS'y dostawcy internetu w przypadku braku połączenia z serwerem filtrującym internet

BONUS
4. Proxy Server na dysku SSD (rekomendowany min. SSD SATA lub dla lepszej wydajności NVMe)

________________________________________________________________________________________________________

1. Filtrowanie internetu

1a.
  • Utworzyć maszyne wirtualną dla Pi-Hole z ustawieniami:
    • 1 vCPU,
    • 1GB RAM,
    • dysk twardy VirtIO,
    • karta sieciowa VirtIO,
    • włączyć virtio-serial
  • W Ubuntu przełączyć użytkownika na root poleceniem: su

  • Zainstalować qemu-guest-agent i podstawowe narzędzia...
    Bash:
    apt-get update
    apt-get install qemu-guest-agent htop mc iotop iperf aptitude

  • Zmień w ustawieniach interfejsu sieciowego adres IP z przydzielania dynamicznego przez DHCP na adres IP statyczny. Edytuj plik: /etc/network/interfaces
    Bash:
    mcedit /etc/network/interfaces

    Zmień ustawienie:
    Kod:
    ....
    auto ens3
    iface ens3 inet dhcp
    ....

    Na:
    Kod:
    .....
    auto ens3
    iface ens3 inet static
       address 192.168.1.15
       netmask 255.255.255.0
       gateway 192.168.1.1
       dns-nameservers 8.8.8.8 8.8.4.4
    .....

  • Aby zastosować ustawienia, zrestartuj serwer:
    Bash:
    reboot

  • TIP:

    upload_2019-3-1_11-37-0.png


    Dla zwiększenia wydajności zapytań DNS użyj Cloudflare DNS zamiast tych, które dotychczasowo używasz.
    IPv4: 1.1.1.1, 1.0.0.1
    IPv6: 2606:4700:4700::1111, 2606:4700:4700::1001

    Pamiętaj, że jeśli Twój operator oferuje Ci swój własny serwer DNS, to nie musimy on być szybszy niż inne DNS'y. Większość nie pomyśli i porównanie prędkości DNS zrobi w ten sposób:
    PHP:
    ping 1.1.1.1
    ping <isp_dns_ip>
    ... Nie! Błąd! :nonono:

    To, że odpowiedź ping w milisekundach będzie szybsza serwera DNS od Twojego ISP nie oznacza, to, że pozyskuje on już tak szybko adresy IP dla zapytań o domeny internetowe.

    Tu jest poprawny przykład:
    (Przed wykonaniem pomiaru wyłącz DNS cache w routerze.)
    Bash:
    dig domena.pl @8.8.8.8  | grep "Query time"

    Poniżej skrypt automatycznie testujący wiele serwerów DNS:
    File: dns_query_lookup_compare.sh
    Bash:
    #!/bin/sh
    
    # Compare DNS lookup query time (c) QNAP Club, Silas Mariusz 2019
    
    domain_target="forum.qnap.net.pl"
    [ ! -z "$1" ] && domain_target="$1"
    
    # Sample List of DNS providers:
    # - Cloudflare DNS,
    # - TPSA DNS,
    # - OpenDNS,
    # - Norton ConnectSafe,
    # - Zaklad Efektywnych Technik Obliczeniowych - ZETO z Tarnowa
    # - Comodo Secure DNS
    # - Quad9
    # - Level3
    # - Verisign
    # - SafeDNS
    dns_serv="1.1.1.1 1.0.0.1 8.8.8.8 8.8.4.4 194.204.159.1 194.204.152.34 208.67.222.222 208.67.220.220 199.85.126.10 199.85.127.10 80.85.224.2 80.85.224.50 8.26.56.26 8.20.247.20 9.9.9.9 149.112.112.112 209.244.0.3 209.244.0.4 64.6.64.6 64.6.65.6 195.46.39.39 195.46.39.40"
    
    
    # Cache executables before...
    sync
    usleep 100000 2>/dev/null 1>/dev/null || sleep 1
    dig --help 2>/dev/null 1>/dev/null
    grep --help 2>/dev/null 1>/dev/null
    
    
    # Measure query time
    for i in $dns_serv
    do
    	echo "Sending [${domain_target}.] dns lookup query to [$i] dns host. `dig ${domain_target} @$i | grep 'Query time'`"
    done
    Gotowy skrypt można pobrać i uruchomić na QNAP z:
    Bash:
    cd /share/Public
    wget http://pool.qnapclub.pl/projects/tools/dns_query_lookup_compare/dns_query_lookup_compare.sh
    chmod +x dns_query_lookup_compare.sh
    
    # test
    sh dns_query_lookup_compare.sh
    sh dns_query_lookup_compare.sh google.com
    sh dns_query_lookup_compare.sh qnap.com

    Przykładowe wyniki:
    Sending [google.com.] dns lookup query to [1.1.1.1] dns host. ;; Query time: 35 msec
    Sending [google.com.] dns lookup query to [1.0.0.1] dns host. ;; Query time: 34 msec
    Sending [google.com.] dns lookup query to [8.8.8.8] dns host. ;; Query time: 31 msec
    Sending [google.com.] dns lookup query to [8.8.4.4] dns host. ;; Query time: 31 msec
    Sending [google.com.] dns lookup query to [194.204.159.1] dns host. ;; Query time: 14 msec
    Sending [google.com.] dns lookup query to [194.204.152.34] dns host. ;; Query time: 15 msec
    Sending [google.com.] dns lookup query to [208.67.222.222] dns host. ;; Query time: 29 msec
    Sending [google.com.] dns lookup query to [208.67.220.220] dns host. ;; Query time: 29 msec
    Sending [google.com.] dns lookup query to [199.85.126.10] dns host. ;; Query time: 41 msec
    Sending [google.com.] dns lookup query to [199.85.127.10] dns host. ;; Query time: 34 msec
    Sending [google.com.] dns lookup query to [80.85.224.2] dns host. ;; Query time: 16 msec
    Sending [google.com.] dns lookup query to [80.85.224.50] dns host. ;; Query time: 7 msec
    Sending [google.com.] dns lookup query to [8.26.56.26] dns host. ;; Query time: 62 msec
    Sending [google.com.] dns lookup query to [8.20.247.20] dns host. ;; Query time: 62 msec
    Sending [google.com.] dns lookup query to [9.9.9.9] dns host. ;; Query time: 13 msec
    Sending [google.com.] dns lookup query to [149.112.112.112] dns host. ;; Query time: 13 msec
    Sending [google.com.] dns lookup query to [209.244.0.3] dns host. ;; Query time: 27 msec
    Sending [google.com.] dns lookup query to [209.244.0.4] dns host. ;; Query time: 27 msec
    Sending [google.com.] dns lookup query to [64.6.64.6] dns host. ;; Query time: 40 msec
    Sending [google.com.] dns lookup query to [64.6.65.6] dns host. ;; Query time: 37 msec
    Sending [google.com.] dns lookup query to [195.46.39.39] dns host. ;; Query time: 49 msec
    Sending [google.com.] dns lookup query to [195.46.39.40] dns host. ;; Query time: 36 msec
    PS. Ja nie powiedizalem, ze Cloudflare DNS jest najszybszy ;)

  • Po ponownym uruchomieniu zainstaluj Pi-hole z repo git:
    Bash:
    apt install bash git
    cd
    
    git clone --depth 1 https://github.com/pi-hole/pi-hole.git Pi-hole
    
    cd Pi-hole/automated\ install/
    bash basic-install.sh

    NOTE: Podczas instalacji dawałem cały czas dalej, dalej, tylko DNS'y podalem :)
    upload_2019-3-1_12-24-42.png


    awww.ubuntuboss.com_content_images_2017_11_step2.png awww.ubuntuboss.com_content_images_2017_11_step3.png awww.ubuntuboss.com_content_images_2017_11_step4.png awww.ubuntuboss.com_content_images_2017_11_step5.png awww.ubuntuboss.com_content_images_2017_11_step6.png awww.ubuntuboss.com_content_images_2017_11_step7.png awww.ubuntuboss.com_content_images_2017_11_step8.png

    upload_2019-3-1_12-26-13.png

  • Dobrym pomysłem będzie zmiana hasła admina :)
    Bash:
    pihole -a -p
  • Wyłącz firewall...
    Bash:
    ufw allow http
    ufw allow 53
  • Zacznij używać Pi-Hole do filtrowania internetu i w ustawieniach routera w DHCP (lub DNS serwerze jeśli dostępny) usuń poprzednie ustawienia i DNS i zastąp je jednym serwerem, Pi-Hole, którego adres to adres IP maszyny wirtualnej z Pi-Hole (ustalony podczas zmiany VM z DHCP na statyczny).
  • Zaloguj się do panelu zarządzania Pi-Hole na adres:
    Bash:
    http://pi-hole/admin
    http://srv.pihole.ip.addr/admin
1b. Instalacja z repo qnapclub.eu -> AdGuard Home
  • Zainstaluj AdGaurd Home

  • Edytuj plik: /opt/AdGuard/AdGuardHome.yaml

  • Zmień domyślny login i hasło:
    Kod:
    auth_name: qnap
    auth_pass: qnap

  • Zrestartuj AdGuard Home

  • Zaloguj się do AdGuard: http://IP_Twojego_serwera_NAS:9638

  • Dodaj listę:
    name: pl ad domains dns list
    url: https://raw.githubusercontent.com/xxcriticxx/.pl-host-file/master/hosts.txt

    [TODO] Poszukać więcej list ...
Podpowiedź: Aby zacząć korzystać z filtrowania treści wystarczy w ustawieniach routera w sekcji serwera DHCP (lub DNS jeśli dostępny) wprowadzić zamiast serwerów DNS od ISP adres DNS serwera NAS.


3. Mikrotik - skrypt automatycznie przelaczajacy v2
  • Dodajemy 4 linijki, wymuszające korzystanie z innego serwera DNS niż ten przydzielony przez DHCP dla adresów IP z zakresu 192.168.0.20-192.168.0.249

    NOTKA: Ważne, aby serwer Pi-Hole był z po za zakresu puli tych adresów, w przeciwnym wypadku reguła ta zablokuje samego Pi-Hole w odpytywaniu główne serwery DNS.
    A więc dobrze jest skonfigurować adresacje w ten sposób:
    - x.x.x.1 - router
    - x.x.x.5 - VM (Pi-hole)
    - x.x.x.10 - QNAP NAS
    - x.x.x.20-249 - pula adresów DHCP

    Kod:
    /ip firewall nat
    add action=dst-nat chain=dstnat comment=pihole-redirect-dns-query dst-port=53 \
        protocol=tcp src-address=192.168.0.20-192.168.0.249 to-addresses=\
        192.168.0.5 to-ports=53
    add action=dst-nat chain=dstnat comment=pihole-redirect-dns-query dst-port=53 \
        protocol=udp src-address=192.168.0.20-192.168.0.249 to-addresses=\
        192.168.0.5 to-ports=53
    add action=dst-nat chain=dstnat comment=pihole-redirect-dns-query \
        dst-address=192.168.0.20-192.168.0.249 dst-port=53 protocol=tcp \
        to-addresses=192.168.0.5 to-ports=53
    add action=dst-nat chain=dstnat comment=pihole-redirect-dns-query \
        dst-address=192.168.0.20-192.168.0.249 dst-port=53 protocol=udp \
        to-addresses=192.168.0.5 to-ports=53
    - Zamienić: 192.168.0.5 na adres IP serwera Pi-Hole
    - a także pule adresową 192.168.0.20-192.168.0.249 na pule adresów przydzielanych przez DHCP

  • Dodać watchdog włączający lub wyłączający tą regułę względem dostępności na ping serwera z pi-hole:
    Kod:
    /tool netwatch
    add comment="DNS Failover Script" down-script=\
        "/ip firewall nat disable [find comment=pihole-redirect-dns-query]" host=\
        192.168.0.9 interval=3s up-script=\
        "/ip firewall nat enable [find comment=pihole-redirect-dns-query]"
 
statyczne adresy ip powinny być poza pulą DHCP - ergo od zarządzania adresami w puli jest DHCP i dzierżawy - kwestia przemyślenia sprawy

PS: z mojej strony , pro forma dodałem sobie drugą sieć bezprzewodową z inną pulą , która nie jest filtrowana przez pi-hole. Przydaje się do testowania, co się popsuło od momentu kiedy dodałem pi-hole :)
 
Tak z czystej ciekawości.
Jakie są zalety instalacji Pi-Hole na VM, w porównaniu do kontenera?
Tym bardziej, że jest gotowiec:
Docker Hub
wystarczy dodać polskie listy.
Teoretycznie docker powinien być lżejszy.
 
dobre pytanie - nie używam dockera ..
ktoś machnie testy ? obciążenie z dockerem przez tydzień (niby długo ale dobrze oddaje przeciętność pracy DNS w domu) a przez tydzień z VMką.
 
Bawiłem się jakieś 3-4 miesiące, ale max 1 miesiąc ciągłej pracy, bez restartów. Nie miałem powodów do narzekań.
Jedyne na co warto zwrócić uwagę, to żeby pi-hole zrobić też serwerem DHCP, bo inaczej wszystkie statystyki i dane z ruchu są widoczne jako jedno IP. Pokazywane są jako całość danych przechodzących przez pi-hole, nie rozróżnia ruchu na poszczególne komputery w sieci lokalnej.
Obecnie, mam 1 dniowy system (nowa karta QM2-2P10GT1 + dysk) i jeszcze nie instalowałem wszystkiego. Ale pewnie w weekend postawię ponownie pi-hole na dokerze. Teraz pojawił się ten wątek i zacząłem się zastanawiać, czy może lepiej na vm.
 
Jedyne na co warto zwrócić uwagę, to żeby pi-hole zrobić też serwerem DHCP, bo inaczej wszystkie statystyki i dane z ruchu są widoczne jako jedno IP.
Moje zalecenie jest wręcz odwrotne. Robienie z Pi-Hole'a serwera DHCP to proszenie się o kłopot w przypadku jego padnięcia. Brak DHCP = brak możliwości uzyskania adresu = brak internetów. U mnie rolę DHCPa pełni router, który dystrybuuje adres VM z Pi-Hole jako pierwszy DNS. Pi-Hole nie ma problemu z rozpoznaniem poszczególnych klientów.
upload_2019-3-1_23-1-10.png
 
O to widzę, że będę miał z czym powalczyć, bo za diabła nie mogłem tego ustawić bez DHCP.
A co do padnięcia dokera, to ma kompach mam powpisywane stałe IP jako alternatywne.
 
Tip: Jak ktoś używa statycznych adresów to polecam dopisać je do pliku z hostami - Pi-Hole z nich skorzysta. Nic to nie "kosztuje" a zwiększa czytelność logów i statystyk (zrzut od @pigers i mój z poprzedniej odpowiedzi).
 
@LEVY będziesz takim moim przyjacielem chociaż przez chwilę i zaktualizujesz sobie model serwera w profilu?
Pytasz co lepsze VM czy docker? Zdecydowanie docker, ale... Dla łatwiejszego uruchomienia dla początkujących lepszy jest VM. No i łatwiej przywrócić VM z backup,
 
Na dzień dobry, coś już chyba jest nie tak, internet na pewno jest
Kod:
root@pihole:~# apt-get update
Błąd:1 http://archive.ubuntu.com/ubuntu cosmic InRelease
  Tymczasowy błąd przy tłumaczeniu "archive.ubuntu.com"
Błąd:2 http://archive.ubuntu.com/ubuntu cosmic-updates InRelease
  Tymczasowy błąd przy tłumaczeniu "archive.ubuntu.com"
Błąd:3 http://archive.ubuntu.com/ubuntu cosmic-backports InRelease
  Tymczasowy błąd przy tłumaczeniu "archive.ubuntu.com"
Błąd:4 http://archive.ubuntu.com/ubuntu cosmic-security InRelease
  Tymczasowy błąd przy tłumaczeniu "archive.ubuntu.com"
Czytanie list pakietów... Gotowe
W: Nie udało się pobrać http://archive.ubuntu.com/ubuntu/dists/cosmic/InRelease  Tymczasowy błąd przy tłumaczeniu "archive.ubuntu.com"
W: Nie udało się pobrać http://archive.ubuntu.com/ubuntu/dists/cosmic-updates/InRelease  Tymczasowy błąd przy tłumaczeniu "archive.ubuntu.com"
W: Nie udało się pobrać http://archive.ubuntu.com/ubuntu/dists/cosmic-backports/InRelease  Tymczasowy błąd przy tłumaczeniu "archive.ubuntu.com"
W: Nie udało się pobrać http://archive.ubuntu.com/ubuntu/dists/cosmic-security/InRelease  Tymczasowy błąd przy tłumaczeniu "archive.ubuntu.com"
W: Nie udało się pobrać niektórych plików indeksu, zostały one zignorowane lub użyto ich starszej wersji.
root@pihole:~# apt-get install qemu-guest-agent htop mc iotop iperf aptitude
Czytanie list pakietów... Gotowe
Budowanie drzewa zależności
Odczyt informacji o stanie... Gotowe
Pakiet aptitude nie ma dostępnej wersji, ale odnosi się do niego inny pakiet.
Zazwyczaj oznacza to, że pakietu brakuje, został zastąpiony przez inny
pakiet lub nie jest dostępny przy pomocy obecnie ustawionych źródeł.

Pakiet mc nie ma dostępnej wersji, ale odnosi się do niego inny pakiet.
Zazwyczaj oznacza to, że pakietu brakuje, został zastąpiony przez inny
pakiet lub nie jest dostępny przy pomocy obecnie ustawionych źródeł.

E: Nie udało się odnaleźć pakietu qemu-guest-agent
E: Pakiet mc nie ma kandydata do instalacji
E: Nie udało się odnaleźć pakietu iperf
E: Pakiet aptitude nie ma kandydata do instalacji
root@pihole:~#
 
Do 8.8.8.8 był, archive nie chce mi pingować , ale co ciekawe w Container Station wyszukałem "pihole/pihole" Nadałem podczas tworzenia IP i cała reszta zrobiła się sama :p , czyli tak naprawdę jeszcze łatwiej.
W container station, wszystko ładnie śmiga, do momentu wyłączenia, gdy wyłączę kontener z pihole, już się nie uruchamia z powrotem. :-(
Kod:
Added ENV to php:                                                                                                                                                                                                                                                             
                        "PHP_ERROR_LOG" => "/var/log/lighttpd/error.log",                                                                                                                                                                                                     
                        "ServerIP" => "192.168.1.222",                                                                                                                                                                                                                         
                        "VIRTUAL_HOST" => "192.168.1.222",                                                                                                                                                                                                                     
Using IPv4 and IPv6                                                                                                                                                                                                                                                           
::: Preexisting ad list /etc/pihole/adlists.list detected ((exiting setup_blocklists early))                                                                                                                                                                                   
https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts                                                                                                                                                                                                               
https://mirror1.malwaredomains.com/files/justdomains                                                                                                                                                                                                                           
http://sysctl.org/cameleon/hosts                                                                                                                                                                                                                                               
https://zeustracker.abuse.ch/blocklist.php?download=domainblocklist                                                                                                                                                                                                           
https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt                                                                                                                                                                                                               
https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt                                                                                                                                                                                                                     
https://hosts-file.net/ad_servers.txt                                                                                                                                                                                                                                         
::: Testing pihole-FTL DNS: FTL started!                                                                                                                                                                                                                                       
::: Testing lighttpd config: Syntax OK                                                                                                                                                                                                                                         
::: All config checks passed, cleared for startup ...                                                                                                                                                                                                                         
::: Docker start setup complete                                                                                                                                                                                                                                               
  [i] Pi-hole blocking is enabled                                                                                                                                                                                                                                             
  [✗] DNS resolution is currently unavailable                                                                                                                                                                                                                                 
  [i] Time until retry: 10
 
Postawiłem już pi-hole wersja na dokera. Nawet udało si się uzyskać wygląd statystyk taki jak ma pigers (po IP).

2. wpis w hostach ? nie, ma być w DHCP i DNS (statiic).
Chodziło mi o coś innego - o zdefiniowanie hostów w środowisku, na którym działa Pi-Hole....

I tu mam pytanie. Czy jest jakiś pantent, żeby nazwy sprzętów były pobierane z routera, a nie pliku host? Czy potrzebny byłby osobny serwer WINS?
 
Spróbuję z tymi ustawieniami powalczyć.

Niestety rozwiązanie z edycją pliku hosts ma wadę. Po restarcie kontenera jest on przywracany do stanu domyślnego. Niby można stworzyć osobny plik i po restarcie automatycznie nadpisywać, ale i tak to rozwiązanie powoduje, że trzeba osobno poprawiać liste sprzętów na routerze i w pi-hole, w przypadku dodania nawet jednego urządzenia do sieci.

Dopisane później
Niestety nie udało mi się odpalić opcji:
Use Conditional Forwarding - niby proste jak budowa cepa, wystarczy podac IP routera, oraz nazwę jego domeny (można znaleźć w ustawieniach routera), ale z tego co wyczytałem nie z każdym routerem to działa.

Ciekawe też jest, że jak odpalę debug to wywala mi 2 błędy:
*** [ DIAGNOSING ]: Pi-hole processes
[✗] lighttpd daemon is inactive
[✗] pihole-FTL daemon is inactive

Ale wszystko śmiga. A podobno pojawiają się przy braku filtrowania, albo niewyświetlaniu statystyk w oknie Dashboard.
 
Hej, bardzo ale to bardzo zastanawiam się nad wdrożeniem tego w moim domu. Ponieważ uważam to za rewelacyjne rozwiązanie.

Zanim w ogóle zajmę się za instalację chciałbym wiedzieć czy technicznie w ogóle mogę to zrobić?

Mam internet w technologi PPPoE gdzie muszę w routerze podać login i hasło.

Co w przypadku gdy Qnap zawiedzie? Czy internet dalej będzie działał?
Czy wystarczy ze z Wasza pomocą postawie Kontener, a w ruterze dodam jakiś parametr?
Czy muszę najpierw dostawcę internetu podpiąć do Qnapa a później z Qnapa dalej do routera?
Czy mozna zrobić tak aby kazda nowa osoba łącząca korzystała z dobrodziejstwa PiHole?
 

Użytkownicy znaleźli tą stronę używając tych słów:

  1. adguardhome
  2. htop instalacja
  3. pi hole mikrotik
  4. Adguard
  5. pihole statyczny adres
  6. pi-hole
  7. konfiguracja firewall