Menu Fermer

Configurer Bind9 sur Ubuntu, Debian

BIND ou BIND 9 est une implémentation open source du DNS, disponible pour presque toutes les distributions Linux. BIND est l’acronyme de Berkeley Internet Name Domain et permet de publier des informations DNS sur Internet ainsi que de résoudre les requêtes DNS des utilisateurs. BIND est de loin le logiciel DNS le plus utilisé sur Internet.

Le DNS ou système de nom de domaine, comme nous le savons, est un service internet qui est utilisé pour traduire le domaine convivial en adresses IP conviviales pour les ordinateurs. Non seulement nous pouvons traduire les noms de domaine en adresses IP, mais nous pouvons également effectuer la traduction inverse, c’est-à-dire la traduction des adresses IP en noms de domaine.

Dans ce tutoriel, nous allons apprendre à configurer un serveur DNS privé en implémentant BIND 9 sur Ubuntu 22.04 ou Debian 11.

Configurer Bind9 sur Ubuntu, Debian

Comment installer Bind9 sur Ubuntu, Debian

Voici la commande APT pour installer Bind9 :

sudo apt update
sudo apt install -y bind9 bind9utils bind9-doc dnsutils
Comment installer Bind9 sur Ubuntu, Debian

On peut maintenant passer à la configuration du serveur DNS.

Configurer Bind9 en master/primaire (Serveurs de noms faisant autorité) sur Ubuntu, Debian

Bind9 possède énormément d’options qui peuvent parfois être déclarées dans la configuration globale ou dans la déclaration de la zone DNS.
Vous trouverez la liste des options dans la documentation officielle : BIND9 Configuration Reference

Configurer les options de Bind9

Un des fichiers de configuration importants pour bind est /etc/bind/named.conf.options, à partir de ce fichier nous pouvons définir les paramètres suivants :

  • Editez le fichier /etc/bind/named.conf.options
  • Définissez le réseau local (LAN) via un ACL. Seuls les systèmes de votre réseau privé peuvent interroger le serveur DNS pour la traduction nom/IP et vice-versa
acl internal-network {
    10.0.0.0/24;
};
  • Activez le forward/transfert DNS avec l’adresse IP d’un serveur DNS (Google, CloudFlare, FAI). Les requêtes DNS reçues par BIND9 et qui ne correspondent à aucune zone DNS seront transférées à ces serveurs DNS
forwarders {
	 	1.1.1.1;
                8.8.8.8;
	 };
  • Ajoutez les options suivantes :
listen-on port 53 {localhost; 10.0.0.254;};
dnssec-validation auto;
allow-recursion { 127.0.0.1; };
auth-nxdomain no;    # conform to RFC1035
listen-on-v6 { any; };
  • Les options sont facultatives, toutefois, pour la sécurité, il convient parfois de les configurer :
    • listen-on port : permet de définir le port d’écoute et les adresses IP à bind
    • dnssec-validation : Activation de la validation DNSSEC
    • allow-recursion : Ce paramètre indique quels hôtes sont autorisés à effectuer des requêtes récursives via ce serveur. BIND vérifie si les paramètres suivants sont définis, dans l’ordre : allow-query-cache et allow-query. Si aucun de ces paramètres n’est défini, la valeur par défaut (localnets ; localhost 😉 est utilisée.
    • auth-nxdomain : si yes est défini, les réponses NXDOMAIN, même si le serveur ne fait pas réellement autorité
  • Puis si vous souhaitez mettre en place des journaux (log) :

Enfin voici un exemple complet de configuration Bind9.
Vous avez une section logging facultative en exemple. Pensez à créer le répertoire avec les bonnes permissions.

acl internal-network {
    10.0.0.0/24;
};

logging {
  channel exemple_log {
    file "/var/log/named/exemple.log" versions 3 size 250k;
    severity info;
  };
  category default {
    exemple_log;
  };
};

options {
    directory "/var/cache/bind";
    additional-from-auth no;
    additional-from-cache no;
    version "Bind Server";
 
     forwarders {
        8.8.8.8;
        8.8.4.4;
     };

    listen-on port 53 {localhost; 10.0.0.254;};
    dnssec-validation auto;
    allow-recursion { 127.0.0.1; };
    auth-nxdomain no;    # conform to RFC1035
    listen-on-v6 { any; };
};
Configurer Bind9 en master/primaire (Serveurs de noms faisant autorité) sur Ubuntu, Debian

Ajouter une nouvelle zone DNS dans Bind9

Une fois la configuration globale terminée, on peut ajouter la zone DNS.

  • Editez le fichier /etc/bind/named.conf.local et ajoutez la zone DNS
  • Par exemple ici, la zone est makdomaine.local.
zone "makdomaine.local" {
    type master;
    file "/etc/bind/db.makdomaine.local";
    notify no;
    allow-update { none; };
    allow-transfer { 10.0.0.1; };
    also-notify { 10.0.0.1; };
};
  • Les options type et file sont obligatoires, le reste est facultative :
    • type : Le mot clé type est obligatoire pour la configuration de la zone, sauf s’il s’agit d’une configuration in-view. Les valeurs acceptables sont les suivantes : primary (oumaster), secondary (ouslave), mirror, delegation-only, forward, hint, redirect, static-stub, et stub
    • file : l’emplacement du fichier de la zone
    • notify : Si la valeur définie est yes (par défaut), des messages DNS NOTIFY sont envoyés lorsqu’une zone pour laquelle le serveur fait autorité est modifiée. Les messages sont envoyés aux serveurs répertoriés dans les enregistrements NS de la zone (à l’exception du serveur primaire identifié dans le champ SOA MNAME), et à tous les serveurs répertoriés dans l’option also-notify
    • allow-transfert : Ceci indique quels hôtes sont autorisés à recevoir des transferts de zone du serveur
    • also-notify : Cette option n’a de sens que si notify est actif pour cette zone. L’ensemble des machines qui reçoivent un message DNS NOTIFY pour cette zone est constitué de tous les serveurs de noms listés (autres que le primaire) pour la zone, plus toute adresse IP spécifiée avec also-notify
Ajouter une nouvelle zone DNS dans Bind9
  • Créez le fichier de la zone /etc/bind/db.makdomaine.local
  • Inspirez vous du contenu suivant à personnaliser :
;
; Zone file for makdomaine.local
;
; The full zone file
;
$TTL 3D
@       IN      SOA     ns.makdomaine.local. dc1.makdomaine.local. (
                        200608081       ; serial, todays date + todays serial # 
                        8H              ; refresh, seconds
                        2H              ; retry, seconds
                        4W              ; expire, seconds
                        1D )            ; minimum, seconds
;
                NS      ns              ; Inet Address of name server
                MX      10 mail         ; Primary Mail Exchanger
                MX      20 mail2        ; Secondary Mail Exchanger
;
ns              A       10.0.0.254
primary         A       10.0.0.254
Ajouter une nouvelle zone DNS dans Bind9
  • Répétez l’opération pour chaque zone DNS auquel Bind9 fait autorité
  • Pensez à incrémenter serial lorsque vous mettez à jour les entrées de la zone DNS

Démarrez BIND9

  • Enfin relancez le service bind9 avec systemctl pour prendre en compte les modifications :
sudo systemctl restart named
  • Pour vérifier que le service BIND9 DNS est actif
sudo systemctl status named
Démarrez BIND9 sur Debian, Ubuntu
  • Maintenant le serveur BIND9 est actif et fonctionnel
  • Si vous utilisez un firewall, il faut ouvrir et autoriser le port 53. Pour ouvrir le port avec ufw :
sudo ufw allow 53
  • Pour iptables, on créé les règles pour autoriser la connexion vers et depuis le port 53 :
iptables -A INPUT -i <interface réseau> -m state --state NEW,ESTABLISHED,RELATED -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -o <interface réseau> -m state --state ESTABLISHED,RELATED -p udp --sport 53 -j ACCEPT
sudo vi /etc/resolv.conf
  • Modifiez la ligne avec nameserver en mettant l’adresse IP :
nameserver 10.0.0.254

Tester le serveur DNS avec dig & nslookup

Nous allons maintenant utiliser un outil CLI appelé commande dig, qui est utilisé pour trouver le DNS et ses informations connexes.

  • Exécutez la commande suivante à partir du terminal :
dig primary.makdomaine.local
  • Pour tester une requête de recherche DNS inversée (PTR) :
dig -x 10.0.0.254
Tester le serveur DNS avec dig & nslookup

Configurer Bind9 en slave/secondaire sur Ubuntu, Debian

La configuration globale est identique.
La différence se fait dans la déclaration de la zone DNS où le type est slave (ou secondary).

zone "makdomaine.local" {
    type slave;
    file "/etc/bind/db.makdomaine.local";
    notify no;
};