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 CentOS/RHEL.
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 CentOS/RHEL. Si ce n'est pas le cas, veuillez lire le didacticiel suivant pour configurer le résolveur BIND.
- Configurez votre propre résolveur DNS BIND9 sur CentOS 8/RHEL 8
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 CentOS/RHEL
Tout d'abord, modifiez le named.conf
fichier avec un éditeur de texte en ligne de commande comme Nano.
sudo nano /etc/named.conf
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"; };
Ensuite, faites défiler vers le bas de ce fichier et ajoutez la zone RPZ dans ce fichier.
zone "rpz.local" { type master; file "rpz.local"; allow-query { localhost; }; allow-transfer { 12.34.56.78; }; };
Remarques :
- Vous pouvez utiliser un chemin absolu au lieu d'un simple nom de fichier dans le
file
directif. BIND supposerait que le fichier est dans/var/named/
. - 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 utiliserlocalhost
comme ceci :allow-transfer { localhost; };
Il est recommandé d'utiliser un fichier journal séparé pour RPZ afin de mieux analyser le journal, ajoutez donc les lignes suivantes dans le logging {...};
clause.
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 named
en tant que propriétaire.
sudo mkdir /var/log/named/ sudo chown named:named /var/log/named/ -R
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 named.empty
dans un nouveau fichier.
sudo cp /var/named/named.empty /var/named/rpz.local
Modifiez le fichier de zone.
sudo nano /var/named/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 .
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.
Enregistrez et fermez le fichier. Ensuite, nous devrions définir named
en tant que propriétaire du groupe /var/named/rpz.local
file, ou named ne pourra pas charger cette zone.
sudo chown root:named /var/named/rpz.local
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 /var/named/rpz.local
Si aucune erreur n'est détectée, redémarrez BIND.
sudo systemctl restart named
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/named.conf
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 { // 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 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/named.conf
fichier sur le résolveur DNS maître .
sudo nano /etc/named.conf
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 named
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.
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="12.34.56.78" accept' sudo systemctl reload firewalld
Ensuite, modifiez le /etc/named.conf
fichier sur le résolveur DNS esclave .
sudo nano /etc/named.conf
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"; };
Ajoutez ensuite une zone RPZ esclave à la fin de ce fichier. Remplacer 11.22.33.44
avec l'adresse IP du résolveur DNS maître.
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; }; };
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 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="11.22.33.44" accept' sudo systemctl reload firewalld
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 détectée, redémarrez BIND.
sudo systemctl restart named
Après le redémarrage de BIND, le transfert de zone commencera immédiatement. Vérifiez le journal BIND9 avec la commande suivante.
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)
Le fichier de zone sera enregistré sous /var/named/rpz.local
sur le résolveur esclave.
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 /etc/named.conf
fichier.
sudo nano /etcnamed.conf
Ajouter une nouvelle zone RPZ.
//enable response policy zone. response-policy { zone "rpz.local"; zone "rpz.local.notransfer"; };
Ajoutez une définition pour la nouvelle zone au bas de ce fichier.
zone "rpz.local.notransfer" { type master; file "/var/named/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 named.empty
dans un nouveau fichier.
sudo cp /var/named/named.empty /var/named/rpz.local.notransfer
Modifiez le fichier de zone.
sudo nano /var/named/rpz.local.notransfer