Post

Configurare Pi-Hole per la Privacy e Performance

Puoi configurare il PiHole in molti modi, questa guida incentrerà l’attenzione sulla privacy e le performance.

Requisiti

Ho già trattato in questi meandri cosè Pi-Hole e cosa ti occorre per poterlo far funziona (puoi trovare il tutto qui.)

Iniziamo

Flash su una micro sd card (assicuratevi che sia vuota) il Rasbian Lite. Ci sono numerosi modi anche per questo e soprattutto i software, sta a voi quindi scegliete il vostro metodo preferito (Etcher, Raspberry Pi Imager, dd, etc.) quando completato questo processo, create l’ssh file sulla partizione di boot della mini sd card con il comando:

1
touch ssh

o da Windows PowerShell:

1
$Null | Out-File .\ssh

o tasto destro del mouse Nuovo > Documento di Testo, rinominatelo ssh e rimuovete l’estensione .txt.

Inserite la vostra Micro SD Card nel vostro Pi e accendetelo. Trovate l’ip assegnato nella vostra rete e autenticatevi in SSH. Eseguite nella shell:

1
sudo raspi-config 

per configurare la localizzazione, Fuso Orario, GPU memory split (per quello che ci occorre in questo caso è possibile diminuirla e portarla a 8MB), e espandere i file system. Configurate anche l’hostname. Consiglio di non configurare il wi-fi e collegarlo tramite un cavo ethernet alla rete.

dopo il reboot aggiornate il sistema.

1
sudo apt-get update && sudo apt-get upgrade -y

Installate dnsutils

1
sudo apt install dnsutils

Installate git

1
sudo apt install git

Configurate ora il sistema per un IP statico nel seguente .conf:

/etc/dhcpcd.conf

Decommentare i valori seguenti al “Example static IP configuration” è configurate con i vostri. Come indirizzi DNS impostate quelli usati dai voi, ma questo saranno usati per la ricerca da parte del sistema di pacchetti, git, etc.

Salvate e riavviate. Autenticatevi e verificate l’ip statico configurato e il DNS.

Configurate l’NTP (Network Time Protocol). Controllate la configurazione corrente sul sistema:

1
timedatectl status

per modificare/controllare le configurazioni:

/etc/systemd/timesyncd.conf

Commentate l’ultima riga e configurate i time servers. è possibile usare quello di cloudflare time.cloudflare.com come NTP e come failback, se non dovesse essere disponibile quest’ultimo, quello del sistema debian.pool.ntp.org. se vuoi saperne di più riguardo il time service offerto da CloudFlare, c’è una pagine al seguente indirizzo: blog cloudflare

Uscite e salvate il file.

assicuratevi che il servizio del time synchronize è abilitato:

1
sudo timedatectl set-ntp true

Installata il pacchetto degli unattended upgrades se desiderate automatizzare l’update dove girerà il nostro pi-hole:

1
sudo apt install unattended-upgrades

Controllare il file di configurazione:

/etc/apt/apt.conf.d/50unattended-upgrades

magari vorrete modificare/correggere dei parametri, raccomando di decommentare e cambiare il parametro “Unattended-Upgrade::Remove-Unused-Dependencies” a “true”.

Uscite e salvate il file.

Create il file per definire gli upgrade periodici:

1
sudo vi /etc/apt/apt.conf.d/02periodic

Dovrebbe essere vuoto, copiate il seguente come contenuto:

1
2
3
4
5
6
APT::Periodic::Enable “1”;
APT::Periodic::Update-Package-Lists “1”;
APT::Periodic::Download-Upgradeable-Packages “1”;
APT::Periodic::Unattended-Upgrade “1”;
APT::Periodic::AutocleanInterval “1”;
APT::Periodic::Verbose “2”;

salvate il file.

Per Controllare i unattended upgrades potete eseguire il seguente comando anche come debug per la vostra configurazione:

1
sudo unattended-upgrades -d

Cambiate la password di default per il vostro utente Pi e cercate di salvarla in un posto sicuro magari nel vostro password manager.

1
passwd

Create un Nuovo Utente

1
sudo adduser <username>

e aggiungetelo nel gruppo sudo.

1
sudo adduser <username> sudo

è probabile che hai bisogno di aggiungere il nuovo utente al gruppo video per alcune applicazioni di monitoring, quindi aggiungetelo al gruppo.

1
sudo adduser <username> video

Uscite e autenticatevi con il nuovo user. Verificate che il sudo funzioni e bloccate l’utente di default Pi:

1
sudo passwd –l pi

Modificate il file di configurazione dell’SSH.

/etc/ssh/sshd_config

Decommentate questa entry:

PermitRootLogin no

e la seguente, suggerendo di mettere a 3 i tentativi di autenticazione massime:

MaxAuthTries 3

Raccomando di creare delle Authentication key pair, (qui come crearla) una volta create, potete cambiare la seguente entry a no:

PasswordAuthentication no

Salvate e uscite e fate ripartire il servizio ssh:

1
sudo service ssh restart

Installate ora Fail2Ban.

Fail2Ban e Firewall

1
sudo apt install fail2ban

Fail2ban bloccherà ogni tentativo malevolo (definito con delle particolari regole chiamate jail) effettuate esclusivamente su determinate porte, in questo caso bloccherà ogni login fallito dopo 5 tentativi per 10 minuti sulla porta ssh. (i tempi di ban sono definiti sempre nelle jail)

Fail2Ban installato dal repository provvede sicurezza esclusivamente al protocollo IPv4. Prossimamente cercherò di approfondire l’argomento anche aggiungendo qualcosa per il supporto IPv6. Fail2ban bloccherà l’ip dove è trovata l’eccezione definita nelle jails ed esclusivamente su quella porta e NON su tutta la macchina e le altre porte.

il file di configurazione di fail2ban è il seguente:

/etc/fail2ban/jail.conf

Ogni cambiamento di configurazione apportato necessita del riavvio del servizio:

1
sudo service fail2ban restart

Installate il firewall.

Cercate di non chiudervi fuori dal server abilitandolo senza prima dichiarare le policy che ci permetteranno di passare.

Installate il pacchetto ufw:

1
sudo apt install ufw

e definite e personalizzate le vostre policy, qui un esempio di quelle necessarie al nostro caso:

1
2
3
4
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow 53
sudo ufw allow 22

Consiglio di dichiarare la porta SSH con regole restrittive, esempio accedere dalla porta 22/ssh esclusivamente da un altro vostro dispositivo sulla rete locale:

1
sudo ufw allow from 192.168.1.120 proto tcp to any port 22

Abilitate il firewall:

1
sudo ufw enable

per vedere le regole attive, eseguite il seguente comando:

1
sudo ufw status verbose

Log2ram

Log2ram è stato creato per il Raspberry Pi. Dato che quest’ultimo si avvale di micro SD card per lo storage, dove il continuo scrivere dei log crea parecchio IOPS (operazioni di input/output) cosa che può degradare con il tempo la nostra SD card. Log2ram crea una directory /var/log/ virtuale in memoria e la sincronizza periodicamente sullo storage fisico. Questo Riduce IOPS sulla micro SD Card, l’unica complicanza è che i log sono stoccati in memoria e non vengono scritti su disco (quindi a causa di un reboot ad esempio) può rendere più difficile il rintracciare vari problemi o azioni di debug da analizzare. è consigliato usarla su questa configurazione per il PiHole perchè saremo comunque avvisati di ogni possibile segnalazione.

Installate log2ram.

1
2
3
4
echo "deb [signed-by=/usr/share/keyrings/azlux-archive-keyring.gpg] http://packages.azlux.fr/debian/ bookworm main" | sudo tee /etc/apt/sources.list.d/azlux.list
sudo wget -O /usr/share/keyrings/azlux-archive-keyring.gpg  https://azlux.fr/repo.gpg
sudo apt update
sudo apt install log2ram

Reboot.

1
sudo reboot

Configurate log2ram:

/etc/log2ram.conf

impostate il size a 100MB e il LOG_DISK_SIZE a 200M. Uscite, salvate e restart del servizio log2ram.

1
sudo service log2ram restart

Controllare che log2ram sta girando.

1
df -h

Installate e configurate Pi-Hole

Ora che il nostro Raspbian è configurato e messo in sicurezza potete trovare il necessario per configurare il pihole qui.

Migliorare la sicurezza di Pi-Hole

Adesso abbiamo un Pi-Hole funzionante sulla nostra rete, ma con blocchi minimi (ricordatevi di aggiungere nuove blocklist oltre a quelle presenti e configurate di default) e che manda la ricerca dei DNS al servizio scelto nelle configurazioni. Ora possiamo configurare il nostro upstream DNS provider, ma questo cambierà esclusivamente a chi ci affidiano per la ricerca dei DNS. E se noi non ci fidassimo di nessuno? Possiamo installare quindi Unbound e risolvere i DNS noi stessi usando dei root servers che ricorsivamente risolvono i nomi DNS. Info maggiori e dettagliate su come funziona potete trovarle nelle guide del pihole. In pratica Unbound cercherà una query DNS chiedendo ai TLD (Top-level domain) servers un DNS in maniera ricorsiva. Tra i benifici in primis maggior sicurezza; non hai bisogno di affidarti ad un provider upstream per il tuo traffico DNS. L’inconveniente sarà sicuro la performance per le ricerche iniziali. PiHole e Unbound possono tutte e due essere configurati con dei caching, che aiuterà a risolvere la sotto sequenza di ricerca.

Installate Unbound.

1
sudo apt install unbound

per i root hints eseguite:

1
wget https://www.internic.net/domain/named.root -qO- | sudo tee /var/lib/unbound/root.hints

Create la configurazione per Pi-Hole:

/etc/unbound/unbound.conf.d/pi-hole.conf

Copiate nel file la configurazione di seguito. Questa è differente da quella presente nella documentazione del PiHole. Include anche le conffigurazioni di caching che miglioreranno le performance spiegate poco sopra.

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
    server:
    # If no logfile is specified, syslog is used
    # logfile: "/var/log/unbound/unbound.log"
    verbosity: 0

    interface: 127.0.0.1
    port: 5335
    do-ip4: yes
    do-udp: yes
    do-tcp: yes
    
    # May be set to yes if you have IPv6 connectivity
    do-ip6: no

    # You want to leave this to no unless you have *native* IPv6. With 6to4 and
    # Terredo tunnels your web browser should favor IPv4 for the same reasons

    prefer-ip6: no
    
    # Use this only when you downloaded the list of primary root servers!
    # If you use the default dns-root-data package, unbound will find it automatically

    root-hints: "/var/lib/unbound/root.hints"

    # Trust glue only if it is within the server's authority
    harden-glue: yes
    
    # Require DNSSEC data for trust-anchored zones, if such data is absent, the zone becomes BOGUS
    harden-dnssec-stripped: yes
    
    # Don't use Capitalization randomization as it known to cause DNSSEC issues sometimes
    # see https://discourse.pi-hole.net/t/unbound-stubby-or-dnscrypt-proxy/9378 for further details
    use-caps-for-id: no
    
    # Reduce EDNS reassembly buffer size.
    # Suggested by the unbound man page to reduce fragmentation reassembly problems
    edns-buffer-size: 1472
    
    # Perform prefetching of close to expired message cache entries
    # This only applies to domains that have been frequently queried
    prefetch: yes
    cache-min-ttl: 0
    serve-expired: yes
    msg-cache-size: 128m
    rrset-cache-size: 256m
    
    # One thread should be sufficient, can be increased on beefy machines. In reality for most users running on small networks or on a single machine, it should be unnecessary to seek performance enhancement by increasing num-threads above 1.
    num-threads: 1
    
    # Ensure kernel buffer is large enough to not lose messages in traffic spikes
    so-rcvbuf: 1m
    
    # Ensure privacy of local IP ranges
    private-address: 192.168.0.0/16
    private-address: 169.254.0.0/16
    private-address: 172.16.0.0/12
    private-address: 10.0.0.0/8
    private-address: fd00::/8
    private-address: fe80::/10

Restart Unbound:

1
sudo service unbound restart

Testate Unbound

1
dig pi-hole.net @127.0.0.1 -p 5335

OPZIONALE Configuriamo ora qualche job schedulato su cron per tenere il server aggiornato, incluso Pi-Hole e Unbound.

1
sudo crontab –e

Copia le seguenti schedulazioni:

1
2
30 2 * * SUN  pihole -up
05 01 15 */3 * wget -O /var/lib/unbound/root.hints https://www.internic.net/domain/named.root

Uscite e Salvate

Il Team di PiHole NON raccomanda l’aggiornamento via job cron (pihole -up). Fate attenzione che con le attuale configurazioni il vostro attuale DNS server (pihole) si aggiornerà ogni Domenica via cron, cercate di rimanere aggiornati per quanto riguarda le future patch notes dei rilasci se avete intenzione di configurarlo in questa maniera. Se ci sarà una Major Release e volete far verificare ad altri prima di aggiornare, commentate nel crontab la prima riga usando un #

Autenticatevi sulla vostra admin page http://pi.hole/admin da browser, con la password precedentemente configurata. Navigate nei Settings, e cliccate sul tab DNS. Togliete la spunta a Google (se in precedenza durante la configurazione l’avevate scelto come DNS provider) e mettere la spunta su custom e inserire 127.0.0.1#5335. cliccate save per far puntare Pihole ad Unbound.

Desktop View

le performance sulle ricerche iniziali saranno lente ma miglioreranno rapidamente grazie al caching del PiHole e alle cache impostate su Unbound.

Qualè il Vantaggio?

Una volta che tutto è configurato, avrai un Server DNS sicuro e privato, veloce e robusto sulla tua rete locale, oltre ad avere le tue informazione DNS più private e non dovrai affidarti a nessun servizio di terzi per il tuo traffico DNS.

Questo post è sotto licenza CC BY 4.0 a nome dell'autore.

DISCLAIMER: Questo blog non rappresenta una testata giornalistica in quanto viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge N°62 del 07/03/2001. Leggi di più

© Cybertome. Alcuni diritti riservati.

Servizio offerto da Jekyll con tema Chirpy