Module de politique DNS (v2)
Cet exemple Linux d’ABI C v2 montre comment contrôler les requêtes DNS et remplacer les réponses. Il utilise libresolv pour analyser les messages et conserve la réponse modifiée dans un tampon appartenant au module.
Comportement de l’exemple
| Nom demandé | Résultat |
|---|---|
allow.test | Termine la chaîne de hooks de requête et poursuit la résolution DNS normale. |
block.test | Renvoie REFUSED sans interroger le serveur amont. |
drop.test | Abandonne la requête sans interrogation amont ni réponse DNS. |
redirect.test | Renvoie 192.0.2.42 pour A et 2001:db8::42 pour AAAA, avec un TTL de 60 secondes. |
rewrite.test | Remplace l’adresse des enregistrements A d’une réponse non signée par 203.0.113.7 et fixe le TTL à 60 secondes. |
| Autres noms | Poursuit avec le module suivant et le traitement normal. |
Configurez votre serveur DNS de test pour qu’il fournisse des réponses à allow.test et rewrite.test. L’exemple ne crée pas d’enregistrements amont. Si la réponse à rewrite.test ne contient aucun enregistrement A concerné ou contient des signatures, elle est renvoyée sans modification.
ALLOW termine uniquement la chaîne courante. Il ne contourne pas les règles de domaine ni les contrôles de transport ; les hooks de réponse peuvent encore modifier le résultat. Consultez les règles des actions DNS.
Téléchargement et compilation
Téléchargez policy.c et mudfish_dns_module.h dans le même dossier. La page de l’en-tête permet de lire son contenu complet dans le navigateur.
Sous Linux, installez un compilateur C et les en-têtes de développement de la bibliothèque C standard et de libresolv. Exécutez la commande suivante dans le dossier de téléchargement :
cc -std=c11 -shared -fPIC -Wall -Wextra -Werror -I. \
policy.c -lresolv -o policy.so
Installez policy.so selon les instructions de chargement des modules, puis redémarrez le service. Démarrez le DNS depuis l’application avant les tests.
Pour un test local utilisant l’adresse d’écoute DNS par défaut, vérifiez le blocage et la génération de réponses avec les requêtes suivantes. dig doit être installé.
dig @127.0.0.1 block.test A
dig @127.0.0.1 redirect.test A
dig @127.0.0.1 redirect.test AAAA
La première requête doit renvoyer REFUSED et les deux suivantes les adresses du tableau. Adaptez les commandes si vous avez changé l’adresse ou le port d’écoute. Une requête drop.test expire volontairement, puisqu’aucune réponse n’est envoyée.