GNU/Linux >> Linux Esercitazione >  >> Debian

Imposta Response Policy Zone (RPZ) in BIND Resolver su Debian/Ubuntu

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 utilizzare localhost 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

Debian
  1. Come impostare i server dei nomi DNS su Ubuntu 18.04

  2. Come installare e configurare il server DNS (Bind 9) su Ubuntu / Debian

  3. Come configurare server DNS privati ​​con BIND su CentOS 8

  4. Come configurare un risolutore DNS non legato su Ubuntu 20.04

  5. Configura un vhost Apache su Ubuntu 20.04 e Debian 10

Configura il server DNS autorevole BIND su Ubuntu 18.04, 16.04

Configura il risolutore DNS su HTTPS (DoH) su Ubuntu con DNSdist

Come configurare facilmente un DNS su TLS Resolver con Nginx su Ubuntu

Configura un risolutore DNS locale su Ubuntu 18.04, 16.04 con BIND9

Configura il risolutore DNS locale su Ubuntu 20.04 con BIND9

Imposta un risolutore DNS non legato sul server Ubuntu 20.04