GNU/Linux >> Tutoriels Linux >  >> Debian

Configurer la zone de stratégie de réponse (RPZ) dans BIND Resolver sur Debian/Ubuntu

Ce didacticiel vous montrera comment remplacer les enregistrements DNS publics dans votre résolveur DNS BIND avec zone de stratégie de réponse (RPZ) sur Debian/Ubuntu.

Qu'est-ce que la zone de politique de réponse ?

Zone de politique de réponse (RPZ) permet à un résolveur DNS de modifier les enregistrements DNS. Il a été développé à l'origine pour bloquer l'accès aux sites Web dangereux. Par exemple, si un ordinateur interroge l'adresse IP d'un site dangereux connu qui propage des logiciels malveillants, le résolveur DNS peut renvoyer 127.0.0.1 comme réponse DNS, de sorte que l'ordinateur ne puisse pas se connecter au site dangereux. C'est le cas d'utilisation d'origine. En tant que telle, la zone de stratégie de réponse est également connue sous le nom de pare-feu DNS .

Vous pouvez utiliser RPZ d'autres manières. Par exemple,

  • Si vous avez des services auto-hébergés comme Nextcloud sur le réseau local, vous pouvez utiliser RPZ pour faire pointer votre domaine Nextcloud (nextcloud.votre-domaine.com) vers l'adresse IP locale, vous n'avez donc pas à vous déplacer sur Internet, puis revenez sur votre réseau local pour accéder au serveur Nextcloud.
  • Les parents peuvent utiliser RPZ pour empêcher leurs enfants d'accéder à des sites pornographiques.
  • Vous pouvez bloquer les publicités indésirables.
  • J'installe de nombreuses applications Web sur mon VPS. Lorsque l'application Web n'est pas destinée à un accès public, j'ajoute un enregistrement DNS dans BIND RPZ uniquement et je ne publie pas d'enregistrement DNS sur mon bureau d'enregistrement de domaine pour empêcher le piratage.

Oui, vous pouvez créer une entrée DNS dans le /etc/hosts fichier sur l'ordinateur local pour remplacer les enregistrements DNS publics, mais il ne s'adapte pas bien. De plus, iOS et Android ne vous permettent pas de créer des entrées DNS locales. Ne serait-il pas agréable que le résolveur DNS BIND remplace l'enregistrement DNS public, afin que tous les appareils du réseau utilisant le résolveur BIND puissent utiliser l'enregistrement DNS personnalisé ?

Prérequis

Pour suivre ce tutoriel, on suppose que vous avez un résolveur DNS BIND en cours d'exécution sur votre serveur Debian/Ubuntu. Si ce n'est pas le cas, veuillez lire l'un des didacticiels suivants pour configurer le résolveur BIND.

  • Configurez votre propre résolveur DNS BIND9 sur Debian 10 Buster
  • Configurez votre propre résolveur DNS BIND9 sur Ubuntu 16.04/18.04
  • Configurez votre propre résolveur DNS BIND9 sur Ubuntu 20.04

Une fois que votre BIND Resolver est opérationnel, suivez les instructions ci-dessous.

Comment configurer la zone de stratégie de réponse BIND sur le serveur Debian/Ubuntu

Tout d'abord, modifiez le named.conf.options fichier.

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

Ajoutez les lignes suivantes dans les options {...} clause pour activer la zone de stratégie de réponse. (La première ligne est un commentaire.)

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

Enregistrez et fermez le fichier. Ouvrez ensuite le named.conf.local fichier.

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

Ajoutez une zone RPZ dans ce fichier.

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

Remarques :

  • Il est important que vous utilisiez un chemin absolu au lieu d'un simple nom de fichier dans le file directive, ou BIND supposerait que le fichier est dans /var/cache/bind/ .
  • Les zones RPZ doivent autoriser les requêtes de localhost uniquement. Vous n'avez pas besoin d'ajouter des clients de réseau local.
  • Remplacer 12.34.56.78 avec l'adresse IP du résolveur DNS BIND esclave, qui est autorisé à effectuer un transfert de zone. S'il n'y a qu'un seul résolveur DNS, vous pouvez utiliser localhost comme ceci :allow-transfer { localhost; };

Enregistrez et fermez le fichier. Ensuite, nous devons créer le fichier de zone. Au lieu de créer un fichier de zone à partir de zéro, nous pouvons utiliser un fichier de modèle de zone. Copiez le contenu de db.empty dans un nouveau fichier.

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

Modifiez ensuite le db.rpz fichier.

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

Il n'est pas nécessaire de modifier le contenu existant. Nous ajoutons simplement nos enregistrements DNS personnalisés. Par exemple, si vous avez un serveur Nextcloud sur le réseau local avec une adresse IP 192.168.0.103, alors vous ajoutez l'enregistrement DNS suivant, ainsi les clients Nextcloud n'ont pas besoin d'aller sur Internet pour se connecter au serveur Nextcloud .

nextcloud.your-domain.com      A   192.168.0.103

Si vous ne voulez pas que vos enfants visitent des sites pornographiques comme pornhub.com, ajoutez la ligne suivante dans ce fichier pour bloquer tout le domaine pornhub.com.

*.pornhub.com          CNAME  .

Si vous n'aimez pas voir les publicités Google Adsense sur les pages Web, vous pouvez ajouter la ligne suivante pour bloquer le doubleclick.net domaine, qui est utilisé pour diffuser des annonces Adsense.

*.doubleclick.net      CNAME   .

Voici d'autres domaines de serveurs publicitaires que vous pouvez bloquer.

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

Pour remplacer l'enregistrement MX d'un nom de domaine, ajoutez une ligne comme ci-dessous.

example.com         MX     0    mail.example.com.

Remarque que tous les noms de gauche ne doivent PAS se terminer par un point et que tous les noms de droite doivent se terminer par un point.

Si vous avez besoin d'un équilibrage de charge pour un nom d'hôte, créez un enregistrement avec plusieurs valeurs comme ci-dessous. Les clients DNS utiliseront les deux adresses IP de manière aléatoire et le trafic sera réparti entre eux.

host.example.com         A              12.34.56.78
                         A              12.34.56.79

Enregistrez et fermez le fichier. Il est recommandé d'utiliser un fichier journal séparé pour RPZ afin de mieux analyser le journal. Pour configurer, modifiez le fichier de configuration principal de BIND.

sudo nano /etc/bind/named.conf

Ajoutez les lignes suivantes au fichier.

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

Enregistrez et fermez le fichier. Créez ensuite le /var/log/named/ répertoire et faites bind en tant que propriétaire.

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

Ensuite, exécutez la commande suivante pour vérifier s'il y a des erreurs de syntaxe dans le fichier de configuration principal. Une sortie silencieuse indique qu'aucune erreur n'a été trouvée.

sudo named-checkconf

Vérifiez ensuite la syntaxe des fichiers de zone RPZ.

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

Si aucune erreur n'est trouvée, redémarrez BIND9.

sudo systemctl restart bind9

Vous pouvez maintenant exécuter le dig commande sur le serveur BIND pour voir si RPZ fonctionne. Par exemple, interrogez un enregistrement DNS d'un nom de domaine inclus dans la zone de stratégie de réponse.

dig A nextcloud.your-domain.com @127.0.0.1

Vous devriez voir quelque chose comme ci-dessous dans la sortie de la commande, qui indique que la réponse DNS a été servie à partir du RPZ local.

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

Vous pouvez également consulter le journal des requêtes BIND9.

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

Vous verrez quelque chose comme ci-dessous, ce qui signifie que la réponse a été servie à partir du RPZ local.

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

Le client Fedora n'utilise pas RPZ ?

Par défaut, Fedora n'utilise pas RPZ. Vous pouvez utiliser le dig utilitaire de ligne de commande pour trouver l'adresse IP d'un nom d'hôte dans la zone RPZ, mais si vous envoyez un ping au nom d'hôte, il ne peut pas trouver l'adresse IP.

Pour résoudre ce problème, vous devez modifier le paramètre hosts dans le /etc/nsswitch.conf fichier sur le client Fedora.

sudo nano /etc/nsswitch.conf

Par défaut, le paramètre hosts est défini comme :

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

Changez-le en :

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

Enregistrez et fermez le fichier. RPZ devrait fonctionner maintenant.

Utiliser RPZ avec les transitaires

Si vous ajoutez un fowarders directive comme ci-dessous dans les options clause dans /etc/bind/named.conf.options fichier, alors votre résolveur BIND devient un redirecteur, qui transmettra les requêtes DNS à un résolveur DNS en amont comme 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 zone de stratégie de réponse fonctionne avec cette configuration de redirecteur. Bind interrogera d'abord la zone de stratégie de réponse locale. Si l'enregistrement DNS n'est pas trouvé dans la RPZ, la demande sera transmise à un résolveur DNS en amont. Vous pouvez utiliser un redirecteur pour accélérer la résolution DNS lorsque votre propre résolveur BIND prend trop de temps à résoudre les noms DNS.

Configurer le transfert de zone

Si vous avez un autre résolveur DNS BIND, vous pouvez le configurer en tant que résolveur esclave pour recevoir automatiquement les mises à jour du résolveur DNS maître.

Tout d'abord, vous devez modifier le /etc/bind/named.conf.local fichier sur le résolveur DNS maître .

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

Ajoutez l'adresse IP du résolveur DNS esclave au allow-transfer directives.

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 vous avez plusieurs résolveurs DNS esclaves, ajoutez plusieurs adresses IP comme ci-dessous.

 allow-transfer { 12.34.56.78; 12.34.56.79; };

Le also-notify obligera le résolveur DNS maître à envoyer un message de notification au résolveur esclave lorsque la zone RPZ est modifiée. Enregistrez et fermez le fichier. Redémarrez BIND pour que les modifications prennent effet.

sudo systemctl restart bind9

Si un pare-feu s'exécute sur le résolveur DNS maître, vous devez autoriser le résolveur DNS esclave à se connecter au port 53. Par exemple, si vous utilisez un pare-feu UFW, exécutez la commande suivante.

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

Ensuite, modifiez le named.conf.options fichier sur le résolveur DNS esclave .

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

Ajoutez les lignes suivantes dans les options {...} clause pour activer la zone de stratégie de réponse. (La première ligne est un commentaire.)

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

Enregistrez et fermez le fichier. Modifiez ensuite le named.conf.local fichier.

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

Ajoutez une zone RPZ esclave dans ce fichier. Remplacez 11.22.33.44 par l'adresse IP du résolveur DNS maître.

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

Enregistrez et fermez le fichier.

Vous devez également configurer le pare-feu du résolveur esclave pour permettre au résolveur DNS maître d'envoyer une notify messages.

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

Ensuite, exécutez la commande suivante pour vérifier s'il y a des erreurs de syntaxe dans le fichier de configuration principal. Une sortie silencieuse indique qu'aucune erreur n'a été trouvée.

sudo named-checkconf

Si aucune erreur n'est trouvée, redémarrez BIND9.

sudo systemctl restart bind9

Après le redémarrage de BIND9, le transfert de zone commencera immédiatement. Vérifiez le journal BIND9 avec la commande suivante.

sudo journalctl -eu bind9

ou

sudo journalctl -eu named

Vous pouvez voir des messages comme ci-dessous, qui indiquent que le transfert de zone a réussi.

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)

Remarque : Chaque fois que vous modifiez la zone RPZ sur le résolveur maître, vous devez mettre à jour le numéro de série. Agrandissez-le, afin que les résolveurs esclaves sachent que la zone RPZ est modifiée.

Création de plusieurs zones RPZ

Parfois, vous ne souhaitez pas que certains enregistrements DNS soient transférés vers des résolveurs esclaves. Vous pouvez créer une zone RPZ distincte. Modifiez le named.conf.options fichier.

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

Ajouter une nouvelle zone RPZ.

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

Remarque :Si les deux zones RPZ ont des enregistrements DNS en conflit, la première entrée prévaudra. Si vous souhaitez inverser la priorité, changez leur position, comme ci-dessous :

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

Enregistrez et fermez le fichier. Ouvrez ensuite le named.conf.local fichier.

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

Ajoutez une définition pour la nouvelle zone dans ce fichier.

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

Enregistrez et fermez le fichier. Ensuite, nous devons créer le fichier de zone. Au lieu de créer un fichier de zone à partir de zéro, nous pouvons utiliser un fichier de modèle de zone. Copiez le contenu de db.empty dans un nouveau fichier.

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

Modifiez ensuite le db.rpz fichier et ajoutez des enregistrements DNS personnalisés.

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

Conseils de dépannage

Si le résolveur DNS secondaire ne parvient pas à répliquer les enregistrements RPZ du résolveur DNS principal, il est possible que sur le résolveur DNS secondaire :

  • La règle de pare-feu est erronée.
  • Le résolveur BIND ne fonctionne pas.
  • BIND n'écoute pas sur l'interface réseau requise.

Comment utiliser RPZ avec des vues dans BIND

Si vous souhaitez rendre votre RPZ accessible uniquement aux réseaux internes de confiance, vous pouvez utiliser des vues dans BIND pour y parvenir. Cette configuration sera compatible avec le transfert de zone maître-esclave.

Tout d'abord, modifiez le named.conf.options fichier.

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

Définissez un réseau interne et un réseau invité avec le acl directives.

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

acl internal {
    10.10.10.0/24;
};

acl guest { 
   10.10.20.0/24;
};

Ici le 10.10.10.0/24 network est le réseau de confiance interne. 10.10.20.0/24 est le réseau invité. Supprimez également les lignes suivantes de ce fichier.

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

Enregistrez et fermez le fichier.

Ensuite, modifiez le named.conf.local fichier.

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

Vous devez placer la définition de zone dans une view clause comme ci-dessous. Notez que nous devons activer la zone de stratégie de réponse dans la view clause.

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

};

Enregistrez et fermez le fichier. Modifiez ensuite le named.conf fichier.

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

Mettez les zones par défaut dans le guest vue.

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

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

Enregistrez et fermez le fichier. Exécutez la commande suivante pour vérifier s'il y a des erreurs de syntaxe dans le fichier de configuration. Une sortie silencieuse indique qu'aucune erreur n'a été trouvée.

sudo named-checkconf

Si aucune erreur n'est trouvée, redémarrez BIND9 pour que les modifications prennent effet.

sudo systemctl restart bind9

Debian
  1. Comment définir des serveurs de noms DNS sur Ubuntu 18.04

  2. Comment installer et configurer le serveur DNS (Bind 9) sur Ubuntu / Debian

  3. Comment configurer des serveurs DNS privés avec BIND sur CentOS 8

  4. Comment configurer un résolveur DNS non lié sur Ubuntu 20.04

  5. Configurer un vhost Apache sur Ubuntu 20.04 et Debian 10

Configurer le serveur DNS faisant autorité BIND sur Ubuntu 18.04, 16.04

Configurer le résolveur DNS sur HTTPS (DoH) sur Ubuntu avec DNSdist

Comment configurer facilement un résolveur DNS sur TLS avec Nginx sur Ubuntu

Configurer un résolveur DNS local sur Ubuntu 18.04, 16.04 avec BIND9

Configurer le résolveur DNS local sur Ubuntu 20.04 avec BIND9

Configurer un résolveur DNS non lié sur le serveur Ubuntu 20.04