GNU/Linux >> Linux Esercitazione >  >> Cent OS

Imposta la Response Policy Zone (RPZ) in BIND Resolver su CentOS/RHEL

Questo tutorial ti mostrerà come sovrascrivere i record DNS pubblici nel tuo risolutore DNS BIND con zona di policy di risposta (RPZ) su CentOS/RHEL.

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 risolutore DNS BIND in esecuzione sul tuo server CentOS/RHEL. In caso contrario, leggi il seguente tutorial per configurare il risolutore BIND.

  • Configura il tuo risolutore DNS BIND9 su CentOS 8/RHEL 8

Una volta che il tuo BIND Resolver è attivo e funzionante, segui le istruzioni seguenti.

Come configurare BIND Response Policy Zone su CentOS/RHEL Server

Per prima cosa, modifica il named.conf file con un editor di testo a riga di comando come Nano.

sudo nano /etc/named.conf

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"; 
};

Quindi scorri fino alla fine di questo file e aggiungi la zona RPZ in questo file.

zone "rpz.local" {
    type master;
    file "rpz.local";
    allow-query { localhost; };
    allow-transfer { 12.34.56.78; };
};

Note:

  • Puoi usare un percorso assoluto invece di un semplice nome di file nel file direttiva. BIND presuppone che il file sia in /var/named/ .
  • 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; };

Si consiglia di utilizzare un file di registro separato per RPZ per analizzare meglio il registro, quindi aggiungere le seguenti righe in logging {...}; clausola.

    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 crea named come proprietario.

sudo mkdir /var/log/named/
sudo chown named:named /var/log/named/ -R

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 named.empty in un nuovo file.

sudo cp /var/named/named.empty /var/named/rpz.local

Modifica il file della zona.

sudo nano /var/named/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   .

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.


Salva e chiudi il file. Successivamente, dovremmo impostare named come proprietario del gruppo del /var/named/rpz.local file o named non sarà in grado di caricare questa zona.

sudo chown root:named /var/named/rpz.local

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 /var/named/rpz.local

Se non vengono rilevati errori, riavvia BIND.

sudo systemctl restart named

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/named.conf file, il tuo resolver BIND diventa un forwarder, che inoltrerà le richieste DNS a un resolver DNS upstream come 8.8.8.8 .

options {
//      listen-on port 53 { 127.0.0.1; };
//      listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        max-cache-size 100m;
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";
        allow-query     { localhost; 10.10.60.0/24;};

        //enable response policy zone. 
        response-policy { 
           zone "rpz.local"; 
        };

        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/named.conf nel risolutore DNS principale .

sudo nano /etc/named.conf

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 named

Se è presente un firewall in esecuzione sul resolver DNS principale, è necessario consentire al resolver DNS slave di connettersi alla porta 53.

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="12.34.56.78" accept'
sudo systemctl reload firewalld

Quindi, modifica il /etc/named.conf sul risolutore DNS slave .

sudo nano /etc/named.conf

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"; 
};

Quindi aggiungi una zona RPZ slave alla fine di questo file. Sostituisci 11.22.33.44 con l'indirizzo IP del resolver DNS master.

zone "rpz.local" {
    type slave;
    file "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 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="11.22.33.44" accept'
sudo systemctl reload firewalld

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 BIND.

sudo systemctl restart named

Dopo il riavvio di BIND, il trasferimento di zona inizierà immediatamente. Controlla il log di BIND9 con il seguente comando.

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)

Il file di zona verrà salvato come /var/named/rpz.local sul resolver slave.

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 il /etc/named.conf file.

sudo nano /etcnamed.conf

Aggiungi una nuova zona RPZ.

//enable response policy zone. 
response-policy { 
    zone "rpz.local";
    zone "rpz.local.notransfer"; 
};

Aggiungi una definizione per la nuova zona in fondo a questo file.

zone "rpz.local.notransfer" {
    type master;
    file "/var/named/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 named.empty in un nuovo file.

sudo cp /var/named/named.empty /var/named/rpz.local.notransfer

Modifica il file della zona.

sudo nano /var/named/rpz.local.notransfer

Cent OS
  1. Configura DNS su CentOS 5 / RHEL 5 con chroot

  2. Come configurare il server DNS su CentOS 5 / RHEL 5

  3. Come impostare o modificare il nome host in CentOS 7 / RHEL 7

  4. Come configurare il server DNS (Bind) su CentOS/RHEL 7/6/5

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

Come configurare il server DNS (BIND) su CentOS 8 / RHEL 8

Come modificare il fuso orario in CentOS 8 / RHEL 8

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

Configura SpamAssassin su CentOS/RHEL per bloccare la posta indesiderata

Come configurare una VPN basata su IPsec con Strongswan su CentOS/RHEL 8

Come configurare FirewallD in RHEL, CentOS e Fedora