GNU/Linux >> Tutoriels Linux >  >> Linux

Comment :Serveur DNS BIND9 faisant autorité sur CentOS 7 :Installation et configuration

Présentation

Dans cet article pratique, nous vous guiderons dans l'installation d'un serveur DNS faisant autorité BIND9 sécurisé sur CentOS 7

Qu'est-ce que BIND ?

BIND est un logiciel open source qui implémente les protocoles DNS (Domain Name System) pour Internet. Il s'agit d'une implémentation de référence de ces protocoles, mais il s'agit également d'un logiciel de production, adapté à une utilisation dans des applications à haut volume et à haute fiabilité.
– ISC (Internet Systems Consortium)

Aperçu des étapes de configuration

  1. Préparation de base du serveur.
  2. Installation des progiciels BIND.
  3. Configuration des progiciels BIND.
  4. Ajout d'une zone de test (domaine)
  5. Test de votre serveur DNS

Prérequis

Avant de commencer cet article pratique, vous devez d'abord vous assurer que ces conditions préalables sont remplies.

– Serveur CentOS 7 – Si vous n'avez pas de serveur disponible, vous pouvez en créer un via notre page de services d'hébergement VPS.
– Votre éditeur de texte préféré installé – Nous utiliserons nano dans ce tutoriel.

.

1 – Préparation de base du serveur

Tout d'abord, assurez-vous que vous êtes connecté en tant que compte d'utilisateur root.

sudo su -

Ensuite, nous allons nous assurer que le système d'exploitation principal est entièrement mis à jour.

yum update -y

Maintenant que votre système est entièrement mis à jour, nous allons mettre à jour le pare-feu (activé par défaut ) pour permettre au DNS (Port TCP 53 / Port UDP 53) d'accéder à votre serveur.

firewall-cmd --permanent --zone public --add-port 53/tcp
firewall-cmd --permanent --zone public --add-port 53/udp 
firewall-cmd --reload

2 - Installation des packages logiciels DNS BIND

Nous sommes maintenant prêts à installer les packages logiciels BIND sur votre serveur.

yum install -y bind bind-utils bind-chroot
  • lier  : Le serveur DNS (Domain Name System) de Berkeley Internet Name Domain (BIND)
  • bind-utils  : Utilitaires pour interroger les serveurs de noms DNS
  • lier-chroot  : Un environnement d'exécution chroot pour le serveur DNS ISC BIND

Maintenant que vous avez installé les packages logiciels BIND requis, nous sommes prêts à démarrer les services BIND et à les configurer pour qu'ils démarrent automatiquement lors du redémarrage du serveur.

systemctl start named
systemctl enable named

.

3 - Configuration du serveur DNS BIND

Au démarrage du serveur DNS BIND, le paquet chroot monte automatiquement tous les fichiers de configuration dans le /var/named/chroot répertoire de votre serveur. Lorsque vous exécutez BIND (ou tout autre processus) dans une prison chroot, le processus est tout simplement incapable de voir une partie du système de fichiers en dehors de la prison.

Pour référence, le répertoire de base dans lequel vous travaillerez pour toutes les configurations BIND est /var/named/chroot

Passons d'abord à ce répertoire pour le reste de ces étapes.

cd /var/named/chroot

Maintenant, créons des répertoires et un fichier de paramètres de configuration pour votre nouveau serveur et définissons la propriété. Ces répertoires seront utilisés pour stocker les fichiers de zone avant et arrière pour votre serveur DNS.

mkdir var/named/fwd-zones
mkdir var/named/rev-zones

chown -R named:named var/named/fwd-zones
chown -R named:named var/named/rev-zones

touch etc/zones.conf
chown root:named etc/zones.conf

Ensuite, nous allons modifier le etc/named.conf fichier de configuration. Nous vous guiderons tout au long de la configuration afin que vous compreniez ce que chaque option fait pour votre serveur.

nano etc/named.conf

Lors de l'installation initiale, le fichier de configuration par défaut sera celui ci-dessous (si vous souhaitez passer au dernier etc/named.conf , vous pouvez le trouver ci-dessous):

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
        listen-on port 53 { 127.0.0.1; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        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";
        allow-query     { localhost; };
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

Les paramètres de configuration et les options disponibles dans BIND sont très étendus. Dans cet article, nous ne couvrirons que les options permettant de configurer votre serveur en tant que serveur DNS faisant autorité et de sécuriser votre serveur contre les attaques d'amplification DNS récursives.

Pour une explication plus approfondie de toutes ces options, nous vous recommandons les gens de Zytrax.com.

Options d'écoute

La première option de configuration que nous allons changer concerne les options d'écoute de votre serveur. Par défaut, le serveur est configuré pour écouter uniquement sur l'adresse de bouclage locale (127.0.0.1). Nous allons changer cela pour écouter sur toutes les interfaces de votre serveur. Remplacez les lignes suivantes à l'intérieur des options { } clause du fichier de configuration.

        listen-on port 53 { any; };
        listen-on-v6 port 53 { any; };

ACL (listes de contrôle d'accès)

Nous allons maintenant ajouter quelques règles ACL (Access Control List) à la configuration. Ces ACL seront utilisées pour étendre les paramètres de sécurité pour les options de recherche de requête ainsi que les options de requête récursive. La première règle - que nous appellerons "requêtes autorisées" - sera utilisée pour autoriser n'importe quelle adresse source à interroger votre serveur DNS. La deuxième règle - nous l'appellerons "récursion autorisée" - sera utilisée pour limiter la recherche récursive à l'adresse localhost uniquement.

Ajoutez les règles de stratégie ACL ci-dessous juste au-dessus des options { } clause.

// ACL - Allow queries from ANY source address
acl "allowed-queries" {
     any;
};

// ACL - Allow recursion from LOCALHOST only.
acl "allowed-recursion" {
    127.0.0.1;
     ::1;
};

options {
    ...
};

Ensuite, nous allons changer la valeur de configuration du allow-query variable d'instruction pour utiliser la nouvelle ACL que nous venons de créer. Le allow-query définit qui (c'est-à-dire les réseaux sources) est autorisé à interroger votre serveur DNS. Remplacez la ligne suivante à l'intérieur des options { } clause du fichier de configuration.

     allow-query     { "allowed-queries"; };

Restreindre la récursivité

Nous devons maintenant sécuriser l'autorisation de recherche de récursivité sur votre serveur. La récursivité est une technique dans laquelle un serveur DNS interroge d'autres serveurs DNS au nom du client demandeur pour résoudre complètement le nom, puis renvoie une réponse au client. Les attaquants peuvent utiliser cette technique pour amener les serveurs DNS avec la récursivité ouverte activée à participer involontairement à une attaque DDoS (Distributed Denial of Service). Par conséquent, si un serveur DNS de votre réseau n'est pas destiné à recevoir des requêtes récursives, la récursivité doit être désactivée sur ce serveur ou sécurisée pour ne pas permettre à des sources non autorisées d'utiliser cette technique.

     recursion yes;
     allow-recursion { "allowed-recursion"; };

Nous allons maintenant ajouter une instruction include au fichier de configuration. Cette déclaration sera utilisée pour inclure les données de zone faisant autorité (domaines) auxquelles votre serveur sera configuré pour répondre. Ajoutez la ligne suivante sous la fin de l'option { } clause, juste après la dernière instruction include.

include "/etc/zones.conf";

Nous avons maintenant terminé les changements de configuration dans le etc/named.conf fichier de configuration. Vous pouvez maintenant enregistrer et quitter vos modifications.

.

Nouveau fichier named.conf

Pour examen, votre etc/named.conf le fichier de configuration devrait maintenant ressembler à ce qui suit :

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

// ACL - Allow queries from ANY source address
acl "allowed-queries" {
     any;
};

// ACL - Allow recursion from LOCALHOST only.
acl "allowed-recursion" {
    127.0.0.1;
    ::1;
};

options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { any; };
        directory       "/var/named";
        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";
        allow-query     { "allowed-queries"; };
        recursion yes;
        allow-recursion { "allowed-recursion"; };

        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
include "/etc/zones.conf";

.

4 – Ajouter votre première zone (domaine)

Nous allons maintenant ajouter votre première zone pour laquelle votre serveur DNS fera autorité. Nous allons utiliser un domaine de test (example.tld ) pour cette étape comme exemple.

Tout d'abord, nous allons créer un nouveau fichier dans le répertoire var/named/fwd-zones que nous avons créé précédemment.

touch var/named/fwd-zones/example.tld.zone;
chown named:named var/named/fwd-zones/example.tld.zone;

Ensuite, nous allons ajouter l'exemple de données d'enregistrement de zone pour ce domaine. Modifiez le nouveau fichier que nous venons de créer et ajoutez les données de zone au fichier de configuration.

nano var/named/fwd-zones/example.tld.zone

Données de zone

; zone file for example.tld
$TTL 14400     ; 4 hours - default TTL for zone
$ORIGIN example.tld.

;; SOA Resource Record
@             IN      SOA   ns1.example.tld. hostmaster.example.tld. (
                        2015010100 ; se = serial number
                        12h        ; ref = refresh
                        15m        ; ret = update retry
                        3w         ; ex = expiry
                        3h         ; min = minimum
                        )

;; Name Servers
              IN      NS      ns1.example.com.
ns1           IN      A       192.0.2.3

;; Mail Exchange Resource Records
@             IN      MX  10  mail.example.tld.

;; Web Server Resource Records
@             IN      A       192.0.2.3
www           IN      CNAME   @

;; FTP Server Resource Records
ftp           IN      A       192.0.2.3

Une fois que vous avez effectué toutes les modifications nécessaires, enregistrez et quittez.

Nous allons maintenant éditer le etc/zones.conf fichier de configuration pour inclure le nouveau domaine que nous venons de créer.

nano etc/zones.conf

Ajoutez maintenant les paramètres ci-dessous au fichier de configuration.

zone "example.tld" in {
     type master;
     file "fwd-zones/example.tld.zone";
     allow-transfer { none; };
};

Une fois cela fait, enregistrez et quittez ce fichier.

Nous sommes maintenant prêts à redémarrer vos services DNS afin que toutes les nouvelles configurations se chargent.

systemctl restart named

Si tout a redémarré avec succès, sans aucune erreur, vous devriez recevoir la réponse suivante :

Stopping named: .                                          [  OK  ]
Starting named:                                            [  OK  ]

.

5 – Tester votre serveur DNS

Nous sommes maintenant prêts à tester la fonctionnalité de votre nouveau serveur DNS. Tout d'abord, nous allons vérifier que votre serveur DNS répond pour la zone (domaine) que nous venons de créer. Exécutez la commande suivante :

dig example.tld -t ANY @localhost

Vous devriez voir la sortie de réponse similaire ci-dessous de votre serveur. Les valeurs de réponse clés à rechercher sont ;; ANSWER SECTION: valeurs. Cette sortie vous permet de savoir que le serveur a répondu à votre demande avec les données d'enregistrement que vous avez entrées dans les étapes précédentes.

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.2 <<>> example.tld -t ANY @localhost
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61421
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;example.tld.                   IN      ANY

;; ANSWER SECTION:
example.tld.            14400   IN      SOA     ns1.example.tld. hostmaster.example.tld. 2015010100 43200 900 1814400 10800
example.tld.            14400   IN      NS      ns1.example.tld.
example.tld.            14400   IN      MX      10 mail.example.tld.
example.tld.            14400   IN      A       192.0.2.3

;; ADDITIONAL SECTION:
ns1.example.tld.        14400   IN      A       192.0.2.3

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: 
;; MSG SIZE  rcvd: 147

Le deuxième test que nous allons faire est de vérifier que votre serveur répond aux recherches récursives de l'hôte local. Exécutez la commande ci-dessous pour commencer le test :

dig google.com -t ANY @localhost

Si le serveur est configuré comme prévu, vous devriez recevoir un ;; ANSWER SECTION: réponse.

;; ANSWER SECTION:
google.com.             86400   IN      SOA     ns1.google.com. dns-admin.google.com. 4294967295 7200 1800 1209600 300
google.com.             600     IN      MX      50 alt4.aspmx.l.google.com.
google.com.             600     IN      MX      40 alt3.aspmx.l.google.com.
google.com.             600     IN      MX      10 aspmx.l.google.com.
google.com.             600     IN      MX      20 alt1.aspmx.l.google.com.
google.com.             600     IN      MX      30 alt2.aspmx.l.google.com.
google.com.             3600    IN      TXT     "v=spf1 include:_spf.google.com ~all"
google.com.             86400   IN      TYPE257 \# 19 0005697373756573796D616E7465632E636F6D
google.com.             300     IN      AAAA    2607:f8b0:4008:804::200e
google.com.             300     IN      A       216.58.219.78
google.com.             172800  IN      NS      ns1.google.com.
google.com.             172800  IN      NS      ns3.google.com.
google.com.             172800  IN      NS      ns4.google.com.
google.com.             172800  IN      NS      ns2.google.com.

;; AUTHORITY SECTION:
google.com.             172800  IN      NS      ns4.google.com.
google.com.             172800  IN      NS      ns1.google.com.
google.com.             172800  IN      NS      ns3.google.com.
google.com.             172800  IN      NS      ns2.google.com.

;; ADDITIONAL SECTION:
ns2.google.com.         172800  IN      A       216.239.34.10
ns1.google.com.         172800  IN      A       216.239.32.10
ns4.google.com.         172800  IN      A       216.239.38.10
ns3.google.com.         172800  IN      A       216.239.36.10

Le dernier test que nous allons faire est de valider que votre serveur n'est PAS ouvert à une attaque par amplification DNS. Les gens d'openresolver.com ont mis en place un test simple que vous pouvez utiliser avec dig :

dig +short test.openresolver.com TXT @1.2.3.4

      (replace 1.2.3.4 with the IP address or domain name of the DNS server you are testing)

Une réponse de "open-resolver-detected" indique que la récursivité est activée. Aucune réponse, dans ce cas, est une bonne chose .

Le site openresolver.com dispose également d'un outil basé sur un navigateur disponible pour tester cette vulnérabilité.

Lors du test avec votre adresse IP publique, vous devriez recevoir la réponse similaire suivante :

Test de résolveur DNS récursif ouvert réussi

Félicitations !

Vous avez maintenant un serveur DNS faisant autorité configuré et en cours d'exécution. Merci pour la lecture! Consultez certains des articles connexes ci-dessous et merci d'avoir essayé nos solutions d'hébergement VPS fiables sur Atlantic.Net.


Linux
  1. Comment installer le serveur DNS sur RHEL 8 / CentOS 8 Linux

  2. Comment vérifier les fichiers de configuration de bind9 (serveur DNS)

  3. Comment installer DenyHost sur CentOS 6.7

  4. Comment installer Redis sur CentOS 7

  5. Comment migrer un serveur DNS BIND vers un nouveau matériel ?

Comment installer Nginx sur CentOS 7

Comment installer Webmin sur CentOS 7

Comment installer ownCloud sur CentOS 7

Comment installer MyWebSQL sur CentOS 8

Comment installer Relic Server Monitoring sur CentOS 8

Comment installer WordPress sur un serveur CentOS 8