Pi-hole (Italiano)
Il progetto Pi-hole è un DNS sinkhole che compila una lista nera di domini attingendo da diverse sorgenti di terze parti. Pi-hole usa pi-hole-ftlAUR (un fork di dnsmasq) per filtrare tutte le richieste di domini nella sua blocklist. L'esecuzione distribuisce efficacemente il blocco degli annunci a livello di rete senza la necessità di configurare i singoli client. Il pacchetto viene fornito con un'interfaccia di amministrazione web opzionale.
Panoramica
Sono disponibili due versioni per Arch Linux:
- #Pi-hole server – Questo è il server Pi-hole predefinito e noto che la maggior parte degli utenti sta cercando. Fornisce un server DNS per altri dispositivi sulla LAN.
- #Pi-hole standalone – Questa è un'installazione Pi-hole leggera alternativa, progettata per un contesto mobile. È progettato per essere utilizzato sullo stesso dispositivo (ad esempio un laptop), dove non è disponibile un server Pi-hole esterno e centralizzato. Non ha interfaccia web e si aggiorna automaticamente.
Pi-hole server
Installazione
Installa il pacchetto pi-hole-serverAUR.
Configuratione
FTL (Faster Than Light)
Pi-hole-FTL è un resolver/forwarder DNS e un wrapper/API simile a un database che fornisce l'archiviazione a lungo termine delle richieste che gli utenti possono interrogare attraverso la sezione "long-term data" della WebGUI. I dati sono raccolti e conservati in due luoghi:
- I dati giornalieri vengono archiviati nella RAM e acquisiti in tempo reale all'interno di
/run/log/pihole/pihole.log
- I dati storici (diversi giorni/settimane/mesi) sono archiviati nel file system
/etc/pihole/pihole-FTL.db
e scritti a intervalli specificati dall'utente.
pihole-FTL.service
è abilitato staticamente; riavviarlo/avviarlo. Per la configurazione FTL, vedere la documentazione ufficiale.
pihole-FTL.service
potrebbe non riuscire. Vedi #Impossibile avviare il motore Pi-hole FTLDNS.Interfaccia web
Pi-hole ha un'interfaccia web potente, facile da usare, ma completamente opzionale. Oltre a modificare le impostazioni, l'utente può analizzare e visualizzare le query DNS gestite da Pi-hole.
Configurazione PHP
Installa php-sqlite (php verrà installato automaticamente) e abilita le estensioni pertinenti descritte qui:
/etc/php/php.ini
[...] extension=pdo_sqlite [...] extension=sockets [...] extension=sqlite3 [...]
Opzionale: permessi in lettura per PHP
In php 7.0 e versioni successive, la direttiva PHP open_basedir è vuota, il che significa che PHP può accedere a ogni directory e file che può essere letto dall'id utente del server web. Per una maggiore sicurezza, decommenta open_basedir in /etc/php/php.ini
e aggiungi l'elenco di directory e file a cui si accede dall'interfaccia web di amministrazione di Pi-hole. L'elenco è piuttosto lungo:
/srv/http/pihole /run/pihole-ftl/pihole-FTL.port /run/log/pihole/pihole.log /run/log/pihole-ftl/pihole-FTL.log /etc/pihole /etc/hosts /etc/hostname /etc/dnsmasq.d/02-pihole-dhcp.conf /etc/dnsmasq.d/03-pihole-wildcard.conf /etc/dnsmasq.d/04-pihole-static-dhcp.conf /var/log/lighttpd/error-pihole.log /proc/cpuinfo /proc/loadavg /proc/meminfo /sys/class/thermal/thermal_zone0/temp /tmp
La direttiva open_basedir prevede un elenco separato da due punti:
/etc/php/php.ini
open_basedir = /srv/http/pihole:/run/pihole-ftl/pihole-FTL.port:/run/log/pihole/pihole.log:/run/log/pihole-ftl/pihole-FTL.log:/etc/pihole:/etc/hosts:/etc/hostname:/etc/dnsmasq.d/02-pihole-dhcp.conf:/etc/dnsmasq.d/03-pihole-wildcard.conf:/etc/dnsmasq.d/04-pihole-static-dhcp.conf:/var/log/lighttpd/error.log:/proc/loadavg:/proc/meminfo:/proc/cpuinfo:/sys/class/thermal/thermal_zone0/temp:/tmp
Configurare lighttpd
Copia la configurazione predefinita fornita dal pacchetto per Pi-hole:
# cp /usr/share/pihole/configs/lighttpd.example.conf /etc/lighttpd/lighttpd.conf
Abilita lighttpd.service
e avvialo.
Aggiornare il file hosts
filesystem fornisce un file /etc/hosts
vuoto che è noto per impedire a Pi-hole il recupero delle blocklist. È necessario aggiungere quanto segue al file per garantirne il corretto funzionamento, notando che ip.address.of.pihole dovrebbe essere l'indirizzo IP effettivo della macchina che esegue Pi-hole (ad es. 192.168.1.250) e myhostname dovrebbe essere il nome host effettivo della macchina che esegue Pi-hole:
/etc/hosts
127.0.0.1 localhost ip.address.of.pihole pi.hole myhostname
Per ulteriori informazioni, vedere Issue#1800.
Configurare i dispositivi per l'uso di Pi-hole
Per utilizzare Pi-hole, i dispositivi all'interno della rete devono utilizzare l'indirizzo IP di Pi-hole come unico server DNS. Per fare questo, ci sono generalmente due metodi:
- Nelle impostazioni DHCP della LAN del router, impostare l'indirizzo IP di Pi-hole come unico server DNS disponibile per i dispositivi collegati.
- Configura manualmente ogni dispositivo per utilizzare l'indirizzo IP di Pi-hole come unico server DNS.
Maggiori informazioni su come utilizzare Pi-hole per altri dispositivi sono disponibili all'indirizzo documentazione a monte.
127.0.0.1
.Pi-hole standalone
Installazione
Installa il pacchetto pi-hole-standaloneAUR.
Configuratione
Timer
Il pacchetto standalone Pi-hole installa un timer abilitato staticamente (e relativo servizio) che aggiornerà settimanalmente l'elenco dei server nella lista nera di Pi-hole.
I valori predefiniti possono essere modificati tramite una modifica nel servizio o può essere impedita l'esecuzione impostando un masking su di esso.
Ricordarsi di avviare manualmente pi-hole-gravity.timer
o semplicemente riavviare dopo la modifica.
FTL
Vedi #FTL (Faster Than Light).
Usage
Modifica le impostazioni di rete del computer in modo che l'unico server DNS in uso sia 127.0.0.1
.
Se si utilizza il DHCP da un router esterno per ottenere indirizzi IP, aggiungere bind-interfaces
a /etc/dnsmasq.conf
per la risoluzione delle query DNS.
Testare le query DNS indipendentemente dal server dei nomi configurato in /etc/resolv.conf
utilizzando drill @127.0.0.1 archlinux.org
.
Usage
Sia la versione standalone che quella server possono essere controllate tramite CLI, ma solo la versione server può essere controllata tramite interfaccia web.
Uso dell'interfaccia web
Vai su pi.hole o <Pi-hole IP address>/admin/
per accedere all'interfaccia web.
Uso della linea di comando (CLI)
Gestione dei DNS di Pi-hole
Per impostazione predefinita, Pi-hole utilizza il server DNS di Google. Modifica i server DNS utilizzati da Pi-hole con:
$ pihole -a setdns server
Specifica più server DNS separando i loro indirizzi con virgole.
Aggiornamento forzato dell'elenco dei domini della blocklist
Per aggiornare l'elenco dei domini bloccati, eseguire:
$ pihole -g
Disattiva temporaneamente Pi-hole
Pi-hole può essere messo in pausa tramite CLI eseguendo:
$ pihole disable [time]
Lasciando vuoto il valore per time
, la disabilitazione sarà permanente fino alla successiva riattivazione manuale.
time
può essere espresso in secondi o minuti con la sintassi #s e #m. Ad esempio, per disabilitare Pi-hole per 5 minuti:
$ pihole disable 5m
In qualsiasi momento, riattiva Pi-hole eseguendo:
$ pihole enable
Suggerimenti e trucchi
Interfaccia web protetta da password
Per proteggere con password l'interfaccia Web Pi-hole, eseguire il comando seguente e immettere la password:
$ pihole -a -p
Per disabilitare la protezione con password, impostare una password vuota.
Cloudflare DoH
Pi-hole può essere configurato per utilizzare Cloudflared per ottenere la funzionalità DNS over HTTPS.
Per far funzionare Cloudflared con Pi-hole, modifica il file cloudflared.yml
e modifica le impostazioni come di seguito:
/etc/cloudflared/cloudflared.yml
... proxy-dns-port: 53000 proxy-dns-address: 127.0.0.1
Quindi riavvia cloudflared@cloudflared.service
. Ora usa 127.0.0.1#53000
come unica voce del server DNS in Pi-hole.
Ottimizzazione per unità a stato solido
Se Pi-hole è in esecuzione su un solid state drive (scheda SD, SSD ecc..) si consiglia di rimuovere il commento dal valore DBINTERVAL
e cambiarlo almeno in 60.0
per ridurre al minimo le scritture nel database:
/etc/pihole/pihole-FTL.conf
... ## Database Interval ## How often do we store queries in FTL's database -minutes-? ## See: https://docs.pi-hole.net/ftldns/database/ ## Options: number of minutes DBINTERVAL=60.0 ...
Dopo aver eseguito le modifiche, riavvia pihole-FTL.service
.
Disabilita la registrazione delle query
Sia i dati giornalieri che quelli storici raccolti per impostazione predefinita contengono dati di query che potrebbero essere considerati sensibili.
Per disabilitare il salvataggio su database dei dati storici delle query, impostare il massimo livello di privacy Anonymous mode nell'amministrazione web (Settings > Privacy) o nel file di configurazione /etc/pihole/pihole-FTL.conf
modificandolo alla linea:
PRIVACYLEVEL=3
Per disabilitare anche la registrazione per i dati giornalieri, utilizzare il comando seguente:
$ pihole logging off
Utilizzo con server VPN
Pi-hole può essere utilizzato dai client VPN connessi.
OpenVPN
Un server OpenVPN può essere configurato per utilizzare un'istanza Pi-hole verso i suoi client. Aggiungi le seguenti due righe a /etc/openvpn/server/server.conf
:
push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS Pi-hole-IP"
Se ancora non funziona, prova a creare un file /etc/dnsmasq.d/00-openvpn.conf
con il seguente contenuto:
interface=tun0
Potrebbe essere necessario fare in modo che dnsmasq
ascolti su tun0
.
WireGuard
I client WireGuard possono essere configurati per utilizzare il server DNS Pi-hole. Nel file di configurazione del client, specificare la riga seguente:
DNS = Pi-hole-IP
Affinché il DNS sia funzionante dalla VPN, Pi-hole deve ascoltare tutte le interfacce locali:
pihole -a -i local
Vedere ulteriori informazioni in WireGuard#Client configuration.
Nginx al posto di Lighttpd
Questa è configurazione non ufficiale supportata dalla comunità. Assicurati che PHP sia impostato (vedi #Configurazione PHP) e che il server lighttpd sia inattivo.
Installa nginx-mainline e php-fpm.
Modifica /etc/nginx/nginx.conf
per contenere quanto segue nella sezione http:
gzip on; gzip_min_length 1000; gzip_proxied expired no-cache no-store private auth; gzip_types text/plain application/xml application/json application/javascript application/octet-stream text/css; include /etc/nginx/conf.d/*.conf;
Copia la configurazione predefinita fornita dal pacchetto per Pi-hole:
# mkdir /etc/nginx/conf.d # cp /usr/share/pihole/configs/nginx.example.conf /etc/nginx/conf.d/pihole.conf
Modifica /etc/nginx/conf.d/pihole.conf
e cambia la direttiva fastcgi_pass
come segue:
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
Facoltativamente, imposta VIRTUAL_HOST
sul CNAME di Pi-hole se l'intenzione è di eseguire più host virtuali su Nginx.
fastcgi_param VIRTUAL_HOST "pihole.example.com";
Dalla versione 7.4 php-fpm è protetto per impostazione predefinita e revoca l'accesso in lettura/scrittura su /usr
(e sottodirectory).
Crea un drop-in file per php-fpm
con il seguente contenuto:
/etc/systemd/system/php-fpm.service.d/pihole.conf
[Service] ReadWritePaths = /srv/http/pihole ReadWritePaths = /run/pihole-ftl/pihole-FTL.port ReadWritePaths = /run/log/pihole/pihole.log ReadWritePaths = /run/log/pihole-ftl/pihole-FTL.log ReadWritePaths = /etc/pihole ReadWritePaths = /etc/hosts ReadWritePaths = /etc/hostname ReadWritePaths = /etc/dnsmasq.d/01-pihole.conf ReadWritePaths = /proc/meminfo ReadWritePaths = /proc/cpuinfo ReadWritePaths = /sys/class/thermal/thermal_zone0/temp ReadWritePaths = /tmp
Quindi avvia e abilita nginx.service
e php-fpm.service
.
Blocklists addizionali
Pi-hole è inteso con lo scopo di bloccare gli annunci, ma può anche essere utilizzato per bloccare altri contenuti indesiderati:
- Domini traccianti
- Domini malware
- Siti di pirateria
- Siti di notizie false
- Siti di phishing
Ci sono molte fonti che forniscono queste liste di blocco. Alcuni esempi: firebog.net e oisd.nl.
Usare Unbound come server DNS a monte
Per impostazione predefinita, Pi-hole inoltra le richieste ai server DNS a monte, il che potrebbe causare problemi di privacy. Vedere la documentatione per una guida sull'impostazione di Unbound in locale per risolvere le richieste DNS.
Risoluzione dei problemi
Comportamento strano nell'interfaccia web dopo un aggiornamento
Alcuni problemi di rendering strani / inspiegabili nella GUI Web possono spesso essere risolti svuotando la cache del browser.
Perdita di dati al riavvio
I sistemi senza un RTC come alcuni dispositivi ARM probabilmente subiranno la perdita di dati nel registro delle query al riavvio. Quando i sistemi non dispongono di un avvio RTC, l'ora viene impostata dopo che la rete e il resolver si sono attivati. Alcune parti di Pi-hole possono essere avviati prima che ciò accada portando alla perdita di dati. Anche un RTC impostato in modo errato può causare problemi. Vedere: Guida all'installazione#Fuso orario e System time.
Per i dispositivi privi di RTC:
Una soluzione fantasiosa per questo è usare un drop-in file su pihole-FTL.service
in cui viene aggiunto un ritardo nella chiamata /usr/bin/sleep x
in un'istruzione ExecStartPre
. Si noti che il valore di "x" nel tempo di sospensione dipende dal tempo impiegato dall'hardware specifico per stabilire la sincronizzazione dell'ora.
Issue#11008 su systemd-timesyncd che sta attualmente impedendo l'uso di time-sync.target per automatizzare questa operazione.
Impossibile avviare il motore Pi-hole FTLDNS
# lsof -i :53
.Potrebbe essere che systemd-resolved.service
occupi già la porta 53, richiesta per pihole-FTL.service
.
Per risolvere questo problema, disabilitare lo stub listener modificando il file di configurazione systemd-resolved:
/etc/systemd/resolved.conf
[Resolve] DNSStubListener=no
Quindi riavvia systemd-resolved.service
e pihole-FTL.service
.
Per ulteriori informazioni, vedere resolved.conf(5).
In alternativa, indicare a dnsmasq di collegarsi a ciascuna interfaccia in modo esplicito, invece del carattere jolly 0.0.0.0:53
, decommentando la riga bind-interfaces
in /etc/dnsmasq.conf
. Ciò eviterà conflitti con systemd-resolved
che è in ascolto su 127.0.0.53:53
.
Conflitto con il pacchetto DNSMasq
A partire da Pi-hole-FTL 4.0, un fork privato di dnsmasq è integrato nel sottoprogetto FTL. Il pacchetto originale dnsmasq è ora in conflitto con pi-hole-ftlAUR e verrà disinstallato durante l'aggiornamento da una versione precedente. È ancora possibile utilizzare i file di configurazione di dnsmasq precedenti, assicurati solo che conf-dir=/etc/dnsmasq.d/,*.conf
nell'originale /etc/dnsmasq.conf
non sia commentato.
Stato sconosciuto e modifiche non salvate
Il problema, come visto in FS#63704, riguarda l'utente creato da systemd-sysusers http
, che viene creato in uno stato scaduto. Per risolverlo, esegui:
# chage --expiredate -1 http
Tempi di caricamento lenti
Se i browser segnalano "Risoluzione host" o semplicemente impiegano più tempo del solito per caricare le pagine, assicurati che /etc/resolv.conf
appaia esattamente come questo:
/etc/resolv.conf
nameserver 127.0.0.1
Se ci vuole molto tempo per caricare le pagine, può essere un problema con l'esecuzione di lsof
nello script di pihole (/usr/bin/pihole)
chiamato tramite php. Verificalo durante il caricamento della pagina con: ps -ef | grep lsof
. Terminalo e se la pagina viene visualizzata, sostituisci la chiamata di lsof
nello script di pihole (ce n'è solo una) con:
ss -lnp '( sport = 53 )'
Associa il servizio DNS di Pihole-FTL all'indirizzo IP effettivo del Pi-hole (invece di 0.0.0.0) per evitare problemi di risoluzione DNS per altri host virtuali
In maniera predefinita, il servizio DNS (pihole-FTL) viene associato all'indirizzo IP 0.0.0.0:
# netstat -ltnp | grep 53 tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 2196/pihole-FTL tcp6 0 0 :::53 :::* LISTEN 2196/pihole-FTL
Ciò potrebbe impedire a qualsiasi altro host virtuale sulla stessa macchina che ospita l'istanza pihole (come i contenitori docker) di ottenere le risoluzioni DNS.
Approfondimenti qui e qui.
Per risolvere questo problema, devi creare un file di configurazione in /etc/dnsmasq.d/ con il seguente contenuto (dove X.X.X.X è l'indirizzo IP del tuo pi-hole):
# cat /etc/dnsmasq.d/99-dns-bind.conf listen-address=X.X.X.X bind-interfaces
Quindi, è necessario riavviare il servizio pihole-FTL per applicare le modifiche
# systemctl restart pihole-FTL