GNU/Linux >> Tutoriales Linux >  >> Debian

Configure la Zona de política de respuesta (RPZ) en BIND Resolver en Debian/Ubuntu

Este tutorial le mostrará cómo anular registros DNS públicos en su sistema de resolución de DNS BIND con zona de política de respuesta (RPZ) en Debian/Ubuntu.

¿Qué es la Zona de política de respuesta?

Zona de política de respuesta (RPZ) permite que un solucionador de DNS modifique los registros de DNS. Originalmente fue desarrollado como una forma de bloquear el acceso a sitios web peligrosos. Por ejemplo, si una computadora consulta la dirección IP de un sitio peligroso conocido que propaga malware, la resolución de DNS puede devolver 127.0.0.1 como la respuesta DNS, por lo que la computadora no puede conectarse al sitio peligroso. Este es el caso de uso original. Como tal, la zona de política de respuesta también se conoce como cortafuegos de DNS. .

Puede utilizar RPZ de otras formas. Por ejemplo,

  • Si tiene servicios autohospedados como Nextcloud en la red local, puede usar RPZ para apuntar su dominio de Nextcloud (nextcloud.your-domain.com) a la dirección IP local, para que no tenga que salir a Internet y luego regrese a su red local para acceder al servidor Nextcloud.
  • Los padres pueden usar RPZ para impedir que sus hijos accedan a sitios pornográficos.
  • Puede bloquear los anuncios no deseados.
  • Instalo muchas aplicaciones web en mi VPS. Cuando la aplicación web no está diseñada para el acceso público, agrego un registro DNS solo en BIND RPZ y no publico un registro DNS en mi registrador de dominio para evitar la piratería.

Sí, puede crear una entrada de DNS en /etc/hosts archivo en la computadora local para anular los registros DNS públicos, pero no escala bien. Además, iOS y Android no le permiten crear entradas DNS locales. ¿No sería bueno si el sistema de resolución de BIND DNS anula el registro de DNS público, de modo que todos los dispositivos de la red que utilicen el sistema de resolución de BIND puedan utilizar el registro de DNS personalizado?

Requisitos

Para seguir este tutorial, se supone que tiene un sistema de resolución de DNS BIND ejecutándose en su servidor Debian/Ubuntu. De lo contrario, lea uno de los siguientes tutoriales para configurar la resolución BIND.

  • Configure su propio solucionador de DNS BIND9 en Debian 10 Buster
  • Configure su propio solucionador de DNS BIND9 en Ubuntu 16.04/18.04
  • Configure su propio solucionador de DNS BIND9 en Ubuntu 20.04

Una vez que su BIND Resolver esté funcionando, siga las instrucciones a continuación.

Cómo configurar la zona de política de respuesta BIND en el servidor Debian/Ubuntu

Primero, edite named.conf.options archivo.

sudo nano /etc/bind/named.conf.options

Agregue las siguientes líneas en las opciones options {...} cláusula para habilitar la zona de política de respuesta. (La primera línea es un comentario).

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

Guarde y cierre el archivo. Luego abra el named.conf.local archivo.

sudo nano /etc/bind/named.conf.local

Agregue una zona RPZ en este archivo.

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

Notas:

  • Es importante que utilice una ruta absoluta en lugar de un nombre de archivo simple en el file directiva, o BIND asumiría que el archivo está en /var/cache/bind/ .
  • Las zonas RPZ deben permitir consultas solo desde localhost. No necesita agregar clientes de red local.
  • Reemplazar 12.34.56.78 con la dirección IP del resolutor de DNS BIND esclavo, que puede realizar transferencias de zona. Si solo hay una resolución de DNS, puede usar localhost así:allow-transfer { localhost; };

Guarde y cierre el archivo. Luego necesitamos crear el archivo de zona. En lugar de crear un archivo de zona desde cero, podemos usar un archivo de plantilla de zona. Copie el contenido de db.empty a un archivo nuevo.

sudo cp /etc/bind/db.empty /etc/bind/db.rpz.local

Luego edite el db.rpz archivo.

sudo nano /etc/bind/db.rpz.local

No hay necesidad de cambiar el contenido existente. Simplemente agregamos nuestros registros DNS personalizados. Por ejemplo, si tiene un servidor Nextcloud en la red local con una dirección IP 192.168.0.103, agregue el siguiente registro DNS, para que los clientes de Nextcloud no tengan que salir a Internet para conectarse al servidor Nextcloud. .

nextcloud.your-domain.com      A   192.168.0.103

Si no desea que sus hijos visiten sitios de pornografía como pornhub.com, agregue la siguiente línea en este archivo para bloquear todo el dominio de pornhub.com.

*.pornhub.com          CNAME  .

Si no desea ver anuncios de Google Adsense en las páginas web, puede agregar la siguiente línea para bloquear doubleclick.net dominio, que se utiliza para publicar anuncios de Adsense.

*.doubleclick.net      CNAME   .

Estos son algunos dominios de servidores de anuncios más que puede bloquear.

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

Para anular el registro MX de un nombre de dominio, agregue una línea como la siguiente.

example.com         MX     0    mail.example.com.

Nota que todos los nombres de la mano izquierda NO deben terminar con un punto y todos los nombres de la mano derecha deben terminar con un punto.

Si necesita equilibrar la carga para un nombre de host, cree un registro con varios valores como se muestra a continuación. Los clientes DNS utilizarán las dos direcciones IP de forma aleatoria y el tráfico se distribuirá entre ellas.

host.example.com         A              12.34.56.78
                         A              12.34.56.79

Guarde y cierre el archivo. Se recomienda usar un archivo de registro separado para RPZ para analizar mejor el registro. Para configurar, edite el archivo de configuración principal de BIND.

sudo nano /etc/bind/named.conf

Agregue las siguientes líneas al archivo.

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

Guarde y cierre el archivo. Luego crea el /var/log/named/ directorio y hacer bind como propietario.

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

A continuación, ejecute el siguiente comando para verificar si hay errores de sintaxis en el archivo de configuración principal. Una salida silenciosa indica que no se encontraron errores.

sudo named-checkconf

Luego verifique la sintaxis de los archivos de zona RPZ.

sudo named-checkzone rpz /etc/bind/db.rpz.local

Si no se encuentran errores, reinicie BIND9.

sudo systemctl restart bind9

Ahora puedes ejecutar dig Comando en el servidor BIND para ver si RPZ está funcionando. Por ejemplo, consulte un registro DNS de un nombre de dominio que se incluye en la zona de política de respuesta.

dig A nextcloud.your-domain.com @127.0.0.1

Debería ver algo como a continuación en la salida del comando, lo que indica que la respuesta de DNS se envió desde RPZ local.

;; AUTHORITY SECTION:
rpz.local			86400	IN	NS	localhost.

También puede consultar el registro de consultas de BIND9.

sudo tail /var/log/named/rpz.log

Vería algo como a continuación, lo que significa que la respuesta se envió desde RPZ local.

(example.com): rpz QNAME Local-Data rewrite example.com via example.com.rpz.local

¿El cliente de Fedora no usa RPZ?

De forma predeterminada, Fedora no utiliza RPZ. Puedes usar el dig utilidad de línea de comandos para encontrar la dirección IP de un nombre de host en la zona RPZ, pero si hace ping al nombre de host, no puede encontrar la dirección IP.

Para resolver este problema, debe cambiar el parámetro hosts en /etc/nsswitch.conf archivo en el cliente de Fedora.

sudo nano /etc/nsswitch.conf

De forma predeterminada, el parámetro hosts se define como:

hosts:   files myhostname mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns

Cámbialo por:

hosts:   files mdns4_minimal [NOTFOUND=return] dns myhostname mymachines

Guarde y cierre el archivo. RPZ debería estar funcionando ahora.

Uso de RPZ con reenviadores

Si agrega un fowarders directiva como a continuación en las options cláusula en /etc/bind/named.conf.options entonces su resolución BIND se convierte en un reenviador, que reenviará las solicitudes de DNS a una resolución de DNS ascendente como 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 de política de respuesta funciona con esta configuración de reenviador. Bind consultará primero la zona de política de respuesta local. Si no se encuentra el registro DNS en la RPZ, la solicitud se reenviará a un solucionador de DNS ascendente. Es posible que desee utilizar un reenviador para acelerar la resolución de DNS cuando su propio sistema de resolución de BIND tarda demasiado en resolver los nombres de DNS.

Configurar transferencia de zona

Si tiene otro solucionador de DNS BIND, puede configurarlo como un solucionador esclavo para recibir automáticamente actualizaciones del solucionador de DNS maestro.

Primero, debe editar el /etc/bind/named.conf.local archivo en el resolvedor de DNS maestro .

sudo nano /etc/bind/named.conf.local

Agregue la dirección IP del solucionador de DNS esclavo a allow-transfer directiva.

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

Si tiene varios solucionadores de DNS esclavos, agregue varias direcciones IP como se muestra a continuación.

 allow-transfer { 12.34.56.78; 12.34.56.79; };

El also-notify La directiva hará que el solucionador de DNS maestro envíe un mensaje de notificación al solucionador de esclavos cuando se cambie la zona RPZ. Guarde y cierre el archivo. Reinicie BIND para que los cambios surtan efecto.

sudo systemctl restart bind9

Si hay un cortafuegos ejecutándose en el solucionador de DNS maestro, debe permitir que el solucionador de DNS esclavo se conecte al puerto 53. Por ejemplo, si usa un cortafuegos UFW, ejecute el siguiente comando.

sudo ufw insert 1 allow in from 12.34.56.78 to any port 53

A continuación, edite named.conf.options archivo en el resolutor de DNS esclavo .

sudo nano /etc/bind/named.conf.options

Agregue las siguientes líneas en las opciones options {...} cláusula para habilitar la zona de política de respuesta. (La primera línea es un comentario).

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

Guarde y cierre el archivo. Luego edite el named.conf.local archivo.

sudo nano /etc/bind/named.conf.local

Agregue una zona RPZ esclava en este archivo. Reemplace 11.22.33.44 con la dirección IP del solucionador de DNS maestro.

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

Guarde y cierre el archivo.

También debe configurar el cortafuegos del resolutor esclavo para permitir que el resolutor DNS maestro envíe notify mensajes.

sudo ufw insert 1 allow in from 11.22.33.44 to any port 53

A continuación, ejecute el siguiente comando para verificar si hay errores de sintaxis en el archivo de configuración principal. Una salida silenciosa indica que no se encontraron errores.

sudo named-checkconf

Si no se encuentran errores, reinicie BIND9.

sudo systemctl restart bind9

Después de que BIND9 se reinicie, la transferencia de zona comenzará de inmediato. Verifique el registro de BIND9 con el siguiente comando.

sudo journalctl -eu bind9

o

sudo journalctl -eu named

Puede ver mensajes como los siguientes, que indican que la transferencia de zona se realizó correctamente.

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: Siempre que modifique la zona RPZ en el resolver maestro, debe actualizar el número de serie. Hazlo más grande, para que los resolutores esclavos sepan que la zona RPZ ha cambiado.

Creación de múltiples zonas RPZ

A veces, es posible que no desee que ciertos registros DNS se transfieran a los resolutores esclavos. Puede crear una zona RPZ independiente. Edite las named.conf.options archivo.

sudo nano /etc/bind/named.conf.options

Agregue una nueva zona RPZ.

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

Nota :Si las dos zonas RPZ tienen registros DNS en conflicto, la primera entrada tendrá prioridad. Si desea invertir la precedencia, cambie su posición, como se muestra a continuación:

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

Guarde y cierre el archivo. Luego abra el named.conf.local archivo.

sudo nano /etc/bind/named.conf.local

Agregue una definición para la nueva zona en este archivo.

zone "rpz.local.notransfer" {
    type master;
    file "/etc/bind/db.rpz.local.notransfer";
    allow-query { localhost; };
    allow-transfer { localhost; };
};

Guarde y cierre el archivo. Luego necesitamos crear el archivo de zona. En lugar de crear un archivo de zona desde cero, podemos usar un archivo de plantilla de zona. Copie el contenido de db.empty a un archivo nuevo.

sudo cp /etc/bind/db.empty /etc/bind/db.rpz.local.notransfer

Luego edite el db.rpz archivo y agregue registros DNS personalizados.

sudo nano /etc/bind/db.rpz.local.transfer

Consejos para solucionar problemas

Si el sistema de resolución de DNS secundario no puede replicar los registros RPZ del sistema de resolución de DNS principal, es posible que en el sistema de resolución de DNS secundario:

  • La regla del cortafuegos es incorrecta.
  • La resolución BIND no se está ejecutando.
  • BIND no está escuchando en la interfaz de red requerida.

Cómo usar RPZ con vistas en BIND

Si desea que su RPZ sea accesible solo para redes internas de confianza, puede usar vistas en BIND para lograrlo. Esta configuración será compatible con la transferencia de zona maestro-esclavo.

Primero, edite named.conf.options archivo.

sudo nano /etc/bind/named.conf.options

Defina una red interna y una red de invitados con acl directiva.

options {
     .....
     .....
}

acl internal {
    10.10.10.0/24;
};

acl guest { 
   10.10.20.0/24;
};

Aquí el 10.10.10.0/24 network es la red de confianza interna. 10.10.20.0/24 es la red de invitados. Además, elimine las siguientes líneas de este archivo.

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

Guarde y cierre el archivo.

A continuación, edite el named.conf.local archivo.

sudo nano /etc/bind/named.conf.local

Debe colocar la definición de la zona dentro de una view cláusula como la siguiente. Tenga en cuenta que debemos habilitar la zona de política de respuesta dentro de la view cláusula.

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

};

Guarde y cierre el archivo. Luego edite el named.conf archivo.

sudo nano /etc/bind/named.conf.default-zones

Ponga las zonas por defecto en el guest ver.

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

    .....
    .....
};

Guarde y cierre el archivo. Ejecute el siguiente comando para verificar si hay errores de sintaxis en el archivo de configuración. Una salida silenciosa indica que no se encontraron errores.

sudo named-checkconf

Si no se encuentran errores, reinicie BIND9 para que los cambios surtan efecto.

sudo systemctl restart bind9

Debian
  1. Cómo configurar servidores de nombres DNS en Ubuntu 18.04

  2. Cómo instalar y configurar el servidor DNS (Bind 9) en Ubuntu / Debian

  3. Cómo configurar servidores DNS privados con BIND en CentOS 8

  4. Cómo configurar el solucionador de DNS no vinculado en Ubuntu 20.04

  5. Configure un vhost de Apache en Ubuntu 20.04 y Debian 10

Configure el servidor DNS autorizado BIND en Ubuntu 18.04, 16.04

Configurar DNS sobre HTTPS (DoH) Resolver en Ubuntu con DNSdist

Cómo configurar fácilmente un DNS sobre TLS Resolver con Nginx en Ubuntu

Configurar un solucionador de DNS local en Ubuntu 18.04, 16.04 con BIND9

Configurar el solucionador de DNS local en Ubuntu 20.04 con BIND9

Configurar el solucionador de DNS independiente en el servidor Ubuntu 20.04