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
9 870
36
2 988
153
40
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]"
 
Co w przypadku gdy Qnap zawiedzie? Czy internet dalej będzie działał?
Nie będzie działało rozwiązywanie nowych nazw DNS (stare masz w cache).

Czy wystarczy ze z Wasza pomocą postawie Kontener, a w ruterze dodam jakiś parametr?
W routerze masz zmienić serwer DNS dla DHCP na adres IP kontenera PIHOLE.

Czy muszę najpierw dostawcę internetu podpiąć do Qnapa a później z Qnapa dalej do routera?
Nie. Nic nie zmienasz.

Czy mozna zrobić tak aby kazda nowa osoba łącząca korzystała z dobrodziejstwa PiHole?
W routerze masz zmienić serwer DNS dla DHCP na adres IP kontenera PIHOLE.
 
A nie masz Mikrotika? Wgralbys sobie te listy do DNS w MT.
http://nas.devspark.pl/mikrotik_ad_block_dns/dns_block_2020.rsc
Niestety poszedłem po kiju fest bo chciałem być gejmingowy i mam Asusa.

Nie będzie działało rozwiązywanie nowych nazw DNS (stare masz w cache).
Mógłbyś rozwinąć myśl? Mam rozumieć że Qnap padnie i nikt nie będzie mógł korzystać z internetu?

W routerze masz zmienić serwer DNS dla DHCP na adres IP kontenera PIHOLE.
Sądząc po tej odpowiedzi rozumiem że instalować i się nie zastanawiać. Jedyna zmiana to w routerze wpisać IP DNS.

W takim wypadku to pozycja obowiązkowa dla Qnapa.

Aż dziwi mnie że nie ma QPK żadnego z gotowym rozwiązaniem PiHole skoro to na Linuxie jest Qnap.
A moze wystarczyło by to?

Jakie macie doświadczenie z tym narzędziem?
 
Mógłbyś rozwinąć myśl? Mam rozumieć że Qnap padnie i nikt nie będzie mógł korzystać z internetu?
Internet bedzie działał - tylko jak np nie korzystasz z wp.pl a qnap padnie , to nie będzie w stanie rozwiązać adresu IP dla wp.pl.
A inne (chociaż raz użyte) adresy system/przeglądarka ma w cache'u - więc powinno działać bez problemu.

Jedyna zmiana to w routerze wpisać IP DNS.
Tak.

Aż dziwi mnie że nie ma QPK żadnego z gotowym rozwiązaniem PiHole skoro to na Linuxie jest Qnap.
Marzenia - ciekawe kto miałby to serwisować ? :p

W takim wypadku to pozycja obowiązkowa dla Qnapa.
Nie zbawiajmy Internetów ;)
 
Też polecam MT ale ważny punkt w którym wprowadzacie dezinformację:
Jeśli padnie QNAP z pihole to nadal internet będzie normalnie wszystkim działał pod warunkiem, że twój router i jego usługa DHCP pozwala na wpisanie co najmniej 2 serwerów DNS dla klientów. Wtedy jako pierwszy podajesz adres pihole, a jako drugi adres routera lub słynne 8.8.8.8 od Google. Wtedy w razie wyłączenia pihole klienci automatycznie będą korzystać z drugiego DNSa.

W załączeniu przykład jak to jest na Mikrotiku, gdzie pihole jest pod adresem 192.168.1.2 a gateway/router pod 192.168.1.1
 

Załączniki

  • dnsy.jpg
    dnsy.jpg
    35,4 KB · Wyświetleń: 80
  • Sad
Reakcje: Silas Mariusz
Moje doświadczenia sugerują co innego: jeśli klient ma dwa DNSy to zawsze rozwiąże nazwę, bo zapyta jednego lub drugiego, przy czym u mnie działa tak, że póki pierwszy DNS na pihole działa to reklam brak, a jak nie działa, to różnica jest taka że reklamy zaczynają się pojawiać (po wygaśnięciu cache).
Stąd czasem wiem, że mi się coś wywaliło, kiedy nagle na telefonie zaczynam widzieć reklamy.

A jak powinno być implementowane poprawnie to trzeba by w RFC poszukać.
 
Z tego co mi wiadomo, drugi i kolejny DNS są odpytywane dopiero gdy:
1. pierwszy sypnie timeoutem
2. adres nierutowalny
Każda inna odpowiedź nie spowoduje zapytania do kolejnego serwera DNS.

Trzeba wziąć pod uwagę że jest to jednak specyficzne per system.

co pasuje do ostatniej wypowiedzi @Kingu ...
Best Practices : RFC 2182 - Selection and Operation of Secondary DNS Servers
 
Kod:
# set variables
:local fallbackDNS 1.1.1.1,1.0.0.1
:local pihole 192.XXX.XX.XXX;
:local currentDNS
:set $currentDNS [/ip dns get servers];

:do {
  :put [resolve google.com server=$pihole];
  if ($currentDNS!=pihole) do={
   :log info "DNS Failover: Switching to Pi-Hole";
   ip dns set servers $pihole
  } else={}
} on-error={ :set $currentDNS [/ip dns get servers];
  if ($currentDNS!=$fallbackDNS) do={
   :log info "DNS Failover: Switching to FallbackDNS";
   ip dns set servers $fallbackDNS;
  } else={:log info "DNS Failover: Pi-Hole Unavailable"}
}

#try to reach google through the pi-hole
#if it works and we are on a different DNS, set the DNS server to the pi-hole
#if it works and we are already on the pi-hole, do nothing
#if we can't reach google and we aren't already on our FallbackDNS, switch to fallback
#if we can't reach google through pi-hole and we are on the fallback, log that pi-hole is unavailable
To nie działa. Przerabiałem w praktyce kilka lat temu i zawsze bierze randomowo.
 
Ciekawe bo nie mam jak dodać portu do DNS:
upload_2020-2-19_21-20-5.png


Zgodnie z instrukcją:
Skonfiguruj swoje urządzenia
Aby usługa AdGuard Home mogła zacząć działać, musisz skonfigurować urządzenia, aby z niej korzystać.
Serwer DNS AdGuard Home używa następujących adresów:
  • 127.0.0.1:63
  • 192.168.50.123:63
  • 10.0.5.1:63
  • 10.0.3.1:63
To chyba powinienem tutaj:
upload_2020-2-19_21-32-57.png
 
Tylko ze port 53 był zajęty w Qnapie przez co innego:
upload_2020-2-20_8-34-6.png


Więc muszę zwolnić jakoś ten port?

///Edycja.

Udało się. Trzeba wybrać Interfejs sieciowy IP NAS.

P.S. Podpunkt 1b w tutku jest już nie aktualny.

///Edit 2. Jedyne co mnie gryzie to że AdGuard domyślnie działa na porcie 3000 a z tego portu korzystam do Flood z rTorrent.
 

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

  1. adguardhome
  2. AdGuard Home
  3. htop instalacja
  4. pi hole mikrotik
  5. Adguard
  6. adresy serwerów qnap update
  7. pihole statyczny adres
  8. pi-hole
  9. konfiguracja firewall
  10. Polskie Filtry Pi-Hole