Questo tutorial ti mostrerà come sovrascrivere i record DNS pubblici nel tuo risolutore DNS BIND con zona di policy di risposta (RPZ) su Debian/Ubuntu.
Cos'è la Response Policy Zone?
Zona politica di risposta (RPZ) consente a un resolver DNS di modificare i record DNS. È stato originariamente sviluppato come un modo per bloccare l'accesso a siti Web pericolosi. Ad esempio, se un computer interroga l'indirizzo IP di un noto sito pericoloso che diffonde malware, il risolutore DNS può restituire 127.0.0.1
come risposta DNS, quindi il computer non può connettersi al sito pericoloso. Questo è il caso d'uso originale. In quanto tale, la zona dei criteri di risposta è anche nota come firewall DNS .
Puoi usare RPZ in altri modi. Ad esempio,
- Se disponi di servizi self-hosted come Nextcloud nella rete locale, puoi utilizzare RPZ per indirizzare il tuo dominio Nextcloud (nextcloud.your-domain.com) all'indirizzo IP locale, quindi non devi uscire a Internet e poi torna alla tua rete locale per accedere al server Nextcloud.
- I genitori possono utilizzare RPZ per impedire ai propri figli di accedere a siti porno.
- Puoi bloccare gli annunci indesiderati.
- Installo molte applicazioni web sul mio VPS. Quando l'app Web non è destinata all'accesso pubblico, aggiungo il record DNS solo in BIND RPZ e non pubblico il record DNS presso il mio registrar di domini per prevenire l'hacking.
Sì, puoi creare una voce DNS in /etc/hosts
file sul computer locale per sovrascrivere i record DNS pubblici, ma non si adatta bene. Inoltre, iOS e Android non consentono di creare voci DNS locali. Non sarebbe bello se il resolver DNS BIND sovrascrive il record DNS pubblico, quindi tutti i dispositivi nella rete che utilizzano il resolver BIND possono utilizzare il record DNS personalizzato?
Prerequisiti
Per seguire questo tutorial, si presume che tu abbia un resolver DNS BIND in esecuzione sul tuo server Debian/Ubuntu. In caso contrario, leggi uno dei seguenti tutorial per configurare il risolutore BIND.
- Configura il tuo risolutore DNS BIND9 su Debian 10 Buster
- Configura il tuo risolutore DNS BIND9 su Ubuntu 16.04/18.04
- Configura il tuo risolutore DNS BIND9 su Ubuntu 20.04
Una volta che il tuo BIND Resolver è attivo e funzionante, segui le istruzioni seguenti.
Come configurare BIND Response Policy Zone su Debian/Ubuntu Server
Per prima cosa, modifica named.conf.options
file.
sudo nano /etc/bind/named.conf.options
Aggiungi le seguenti righe nelle options {...}
clausola per abilitare la zona della politica di risposta. (La prima riga è un commento.)
//enable response policy zone. response-policy { zone "rpz.local"; };
Salva e chiudi il file. Quindi apri il named.conf.local
file.
sudo nano /etc/bind/named.conf.local
Aggiungi una zona RPZ in questo file.
zone "rpz.local" { type master; file "/etc/bind/db.rpz.local"; allow-query { localhost; }; allow-transfer { 12.34.56.78; }; };
Note:
- È importante utilizzare un percorso assoluto invece di un semplice nome file nel
file
o BIND presuppone che il file sia in/var/cache/bind/
. - Le zone RPZ dovrebbero consentire le query solo da localhost. Non è necessario aggiungere client di rete locale.
- Sostituisci
12.34.56.78
con l'indirizzo IP del resolver DNS BIND slave, a cui è consentito il trasferimento di zona. Se è presente un solo resolver DNS, puoi utilizzarelocalhost
in questo modo:allow-transfer { localhost; };
Salva e chiudi il file. Quindi dobbiamo creare il file di zona. Invece di creare un file di zona da zero, possiamo utilizzare un file modello di zona. Copia il contenuto di db.empty
in un nuovo file.
sudo cp /etc/bind/db.empty /etc/bind/db.rpz.local
Quindi modifica il db.rpz
file.
sudo nano /etc/bind/db.rpz.local
Non è necessario modificare il contenuto esistente. Aggiungiamo semplicemente i nostri record DNS personalizzati. Ad esempio, se hai un server Nextcloud sulla rete locale con un indirizzo IP 192.168.0.103, aggiungi il seguente record DNS, in modo che i client Nextcloud non debbano uscire su Internet per connettersi al server Nextcloud .
nextcloud.your-domain.com A 192.168.0.103
Se non vuoi che i tuoi figli visitino siti porno come pornhub.com, aggiungi la seguente riga in questo file per bloccare l'intero dominio pornhub.com.
*.pornhub.com CNAME .
Se non ti piace vedere gli annunci di Google Adsense sulle pagine web, puoi aggiungere la seguente riga per bloccare doubleclick.net
dominio, utilizzato per fornire annunci Adsense.
*.doubleclick.net CNAME .
Ecco alcuni altri domini dell'ad server che puoi bloccare.
*.pubmatic.com CNAME . *.mopub.com CNAME . *.eskimi.com CNAME . *.adcolony.xyz CNAME . *.adsrvr.org CNAME . *.adsymptotic.com CNAME . *.servedby-buysellads.com CNAME . srv.buysellads.com CNAME . *.powerinboxedge.com CNAME . *.defof.com CNAME . *.licasd.com CNAME . *.liadm.com CNAME .
Per sovrascrivere il record MX per un nome di dominio, aggiungi una riga come di seguito.
example.com MX 0 mail.example.com.
Nota che tutti i nomi di sinistra NON devono terminare con un punto e tutti i nomi di destra devono terminare con un punto.
Se è necessario il bilanciamento del carico per un nome host, creare un record con più valori come di seguito. I client DNS utilizzeranno i due indirizzi IP in modo casuale e il traffico verrà distribuito tra di loro.
host.example.com A 12.34.56.78 A 12.34.56.79
Salva e chiudi il file. Si consiglia di utilizzare un file di registro separato per RPZ per analizzare meglio il registro. Per configurare, modificare il file di configurazione principale di BIND.
sudo nano /etc/bind/named.conf
Aggiungi le seguenti righe al file.
logging { channel rpzlog { file "/var/log/named/rpz.log" versions unlimited size 100m; print-time yes; print-category yes; print-severity yes; severity info; }; category rpz { rpzlog; }; };
Salva e chiudi il file. Quindi crea il /var/log/named/
directory e fare bind
come proprietario.
sudo mkdir /var/log/named/ sudo chown bind:bind /var/log/named/ -R
Quindi, esegui il comando seguente per verificare se sono presenti errori di sintassi nel file di configurazione principale. Un output silenzioso indica che non sono stati trovati errori.
sudo named-checkconf
Quindi controlla la sintassi dei file di zona RPZ.
sudo named-checkzone rpz /etc/bind/db.rpz.local
Se non vengono rilevati errori, riavvia BIND9.
sudo systemctl restart bind9
Ora puoi eseguire dig
comando sul server BIND per vedere se RPZ funziona. Ad esempio, eseguire una query su un record DNS di un nome di dominio incluso nella zona dei criteri di risposta.
dig A nextcloud.your-domain.com @127.0.0.1
Dovresti vedere qualcosa come di seguito nell'output del comando, che indica che la risposta DNS è stata servita da RPZ locale.
;; AUTHORITY SECTION: rpz.local 86400 IN NS localhost.
Puoi anche controllare il registro delle query BIND9.
sudo tail /var/log/named/rpz.log
Vedresti qualcosa di simile sotto, il che significa che la risposta è stata fornita da RPZ locale.
(example.com): rpz QNAME Local-Data rewrite example.com via example.com.rpz.local
Il client Fedora non utilizza RPZ?
Per impostazione predefinita, Fedora non utilizza RPZ. Puoi usare il dig
utilità della riga di comando per trovare l'indirizzo IP di un nome host nella zona RPZ, ma se esegui il ping del nome host, non riesce a trovare l'indirizzo IP.
Per risolvere questo problema, devi cambiare il parametro hosts in /etc/nsswitch.conf
file sul client Fedora.
sudo nano /etc/nsswitch.conf
Per impostazione predefinita, il parametro hosts è definito come:
hosts: files myhostname mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns
Cambialo in:
hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname mymachines
Salva e chiudi il file. RPZ dovrebbe funzionare ora.
Utilizzo di RPZ con gli spedizionieri
Se aggiungi un fowarders
direttiva come di seguito nelle options
clausola nel /etc/bind/named.conf.options
file, il tuo resolver BIND diventa un forwarder, che inoltrerà le richieste DNS a un resolver DNS upstream come 8.8.8.8
.
options { directory "/var/cache/bind"; // If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple // ports to talk. See http://www.kb.cert.org/vuls/id/800113 // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing // the all-0's placeholder. forwarders { 8.8.8.8; 8.8.4.4; }; ... };
La zona della politica di risposta funziona con questa configurazione del forwarder. Bind interrogherà prima la zona della politica di risposta locale. Se il record DNS non viene trovato nell'RPZ, la richiesta verrà inoltrata a un risolutore DNS a monte. Potresti voler utilizzare un forwarder per accelerare la risoluzione DNS quando il tuo resolver BIND impiega troppo tempo a risolvere i nomi DNS.
Configura Trasferimento Zona
Se disponi di un altro resolver DNS BIND, puoi configurarlo come resolver slave per ricevere automaticamente gli aggiornamenti dal resolver DNS master.
Per prima cosa, devi modificare il /etc/bind/named.conf.local
nel risolutore DNS principale .
sudo nano /etc/bind/named.conf.local
Aggiungi l'indirizzo IP del resolver DNS slave a allow-transfer
direttiva.
zone "rpz.local" { type master; file "/etc/bind/db.rpz.local"; allow-query { localhost; }; allow-transfer { 12.34.56.78; }; also-notify { 12.34.56.78; }; };
Se hai più resolver DNS slave, aggiungi più indirizzi IP come di seguito.
allow-transfer { 12.34.56.78; 12.34.56.79; };
La also-notify
La direttiva farà in modo che il resolver DNS master invii un messaggio di notifica al resolver slave quando la zona RPZ viene modificata. Salva e chiudi il file. Riavvia BIND per rendere effettive le modifiche.
sudo systemctl restart bind9
Se è presente un firewall in esecuzione sul resolver DNS master, devi consentire al resolver DNS slave di connettersi alla porta 53. Ad esempio, se utilizzi il firewall UFW, esegui il comando seguente.
sudo ufw insert 1 allow in from 12.34.56.78 to any port 53
Quindi, modifica named.conf.options
sul risolutore DNS slave .
sudo nano /etc/bind/named.conf.options
Aggiungi le seguenti righe nelle options {...}
clausola per abilitare la zona della politica di risposta. (La prima riga è un commento.)
//enable response policy zone. response-policy { zone "rpz.local"; };
Salva e chiudi il file. Quindi modifica il named.conf.local
file.
sudo nano /etc/bind/named.conf.local
Aggiungi una zona RPZ slave in questo file. Sostituisci 11.22.33.44 con l'indirizzo IP del resolver DNS master.
zone "rpz.local" { type slave; file "db.rpz.local"; masters { 11.22.33.44;}; allow-notify { 11.22.33.44; }; allow-transfer { none; }; allow-query { localhost; }; };
Salva e chiudi il file.
È inoltre necessario configurare il firewall del resolver slave per consentire al resolver DNS principale di inviare notify
messaggi.
sudo ufw insert 1 allow in from 11.22.33.44 to any port 53
Quindi, esegui il comando seguente per verificare se sono presenti errori di sintassi nel file di configurazione principale. Un output silenzioso indica che non sono stati trovati errori.
sudo named-checkconf
Se non vengono rilevati errori, riavvia BIND9.
sudo systemctl restart bind9
Dopo il riavvio di BIND9, il trasferimento di zona inizierà immediatamente. Controlla il log di BIND9 con il seguente comando.
sudo journalctl -eu bind9
o
sudo journalctl -eu named
Puoi vedere messaggi come di seguito, che indicano che il trasferimento della zona è riuscito.
transfer of 'rpz.local/IN' from xx.xx.xx.xx#53: Transfer status: success transfer of 'rpz.local/IN' from xx.xx.xx.xx#53: Transfer completed: 1 messages, 34 records, 899 bytes, 0.248 secs (3625 bytes/sec)
Nota: Ogni volta che si modifica la zona RPZ sul resolver master, è necessario aggiornare il numero di serie. Rendilo più grande, in modo che i resolver slave sappiano che la zona RPZ è cambiata.
Creazione di più zone RPZ
A volte potresti non voler trasferire determinati record DNS a risolutori slave. È possibile creare una zona RPZ separata. Modifica le named.conf.options
file.
sudo nano /etc/bind/named.conf.options
Aggiungi una nuova zona RPZ.
//enable response policy zone. response-policy { zone "rpz.local"; zone "rpz.local.notransfer"; };
Nota :Se le due zone RPZ hanno record DNS in conflitto, la prima voce avrà la precedenza. Se vuoi invertire la precedenza, cambia la loro posizione, come di seguito:
//enable response policy zone. response-policy { zone "rpz.local.notransfer"; zone "rpz.local"; };
Salva e chiudi il file. Quindi apri il named.conf.local
file.
sudo nano /etc/bind/named.conf.local
Aggiungi una definizione per la nuova zona in questo file.
zone "rpz.local.notransfer" { type master; file "/etc/bind/db.rpz.local.notransfer"; allow-query { localhost; }; allow-transfer { localhost; }; };
Salva e chiudi il file. Quindi dobbiamo creare il file di zona. Invece di creare un file di zona da zero, possiamo utilizzare un file modello di zona. Copia il contenuto di db.empty
in un nuovo file.
sudo cp /etc/bind/db.empty /etc/bind/db.rpz.local.notransfer
Quindi modifica il db.rpz
file e aggiungi record DNS personalizzati.
sudo nano /etc/bind/db.rpz.local.transfer
Suggerimenti per la risoluzione dei problemi
Se il resolver DNS secondario non riesce a replicare i record RPZ dal resolver DNS primario, è possibile che sul resolver DNS secondario:
- La regola del firewall è sbagliata.
- Il risolutore BIND non è in esecuzione.
- BIND non è in ascolto sull'interfaccia di rete richiesta.
Come utilizzare RPZ con le viste in BIND
Se desideri rendere la tua RPZ accessibile solo a reti interne attendibili, puoi utilizzare le visualizzazioni in BIND per farlo. Questa configurazione sarà compatibile con il trasferimento della zona master-slave.
Per prima cosa, modifica named.conf.options
file.
sudo nano /etc/bind/named.conf.options
Definisci una rete interna e una rete ospite con acl
direttiva.
options { ..... ..... } acl internal { 10.10.10.0/24; }; acl guest { 10.10.20.0/24; };
Qui il 10.10.10.0/24
rete è la rete interna affidabile. 10.10.20.0/24
è la rete ospite. Inoltre, elimina le seguenti righe da questo file.
response-policy { zone "rpz.local"; };
Salva e chiudi il file.
Quindi, modifica il named.conf.local
file.
sudo nano /etc/bind/named.conf.local
Devi inserire la definizione della zona all'interno di una view
clausola come di seguito. Tieni presente che è necessario abilitare la zona della politica di risposta all'interno della view
clausola.
view "internal" { match-clients { internal; }; //enable the response policy zone. response-policy { zone "rpz.local"; }; zone "rpz.local" { type master; file "/etc/bind/db.rpz.local"; allow-query { localhost; }; allow-transfer { 12.34.56.78; }; }; };
Salva e chiudi il file. Quindi modifica il named.conf
file.
sudo nano /etc/bind/named.conf.default-zones
Inserisci le zone predefinite nel guest
visualizza.
view guest { match-clients { guest; }; allow-recursion { any; }; zone "." { type hint; file "/usr/share/dns/root.hints"; }; zone "localhost" { type master; file "/etc/bind/db.local"; }; ..... ..... };
Salva e chiudi il file. Eseguire il comando seguente per verificare se sono presenti errori di sintassi nel file di configurazione. Un output silenzioso indica che non sono stati trovati errori.
sudo named-checkconf
Se non vengono rilevati errori, riavvia BIND9 per rendere effettive le modifiche.
sudo systemctl restart bind9