Ceci est une ancienne révision du document !


Sécuriser ses transferts de zone DNS avec TSIG

Nous allons voir comment sécuriser ses transferts de zone DNS avec TSIG.

Comme d'habitude cette configuration se fera sur une debian stable à jour (wheezy a l'heure actuelle), mais doit être adaptée facilement à n'importe quelle distribution

Prérequis

  • des serveurs DNS deja configurés ;-) : un maître et un ou plusieurs esclaves pour une zone donnée
  • pour éviter les attaques par rejeu, ces serveurs doivent être a la même heure : utilisation de ntpdate ou mieux d'un démon NTP sur chacun
Dans un monde ideal il faudrait générer non pas une clef par zone mais bel et bien une clef par couple de serveurs DNS effectuant des transferts : on peut alors nommer ces clefs en utilisant par exemple les noms des machines en relation : “tsig-dnsmaster-dnsslave1” par exemple. Dans ce cas adaptez la suite, mais dans notre monde de bisounours une clef par zone nous suffira (ie : clef partagée entre tous les serveurs secondaires)

Sur le serveur maître

Générer la clef partagée

dans l'exemple suivant on utilise le domaine factice “domain.com” : adaptez a vos besoins
  • Création du repertoire servant a contenir la clef :
    mkdir /etc/bind/keys ; chmod o-rx /etc/bind/keys ; cd /etc/bind/keys
  • Génération de la clef :
    dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST -r /dev/random transfer-domain-com

    Apres un court instant vous devriez voir quelque chose comme :

    masterdns:/etc/bind/keys# dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST -r /dev/random transfer-domain-com
    Ktransfer-domain-com.+165+52920

    Un rapide ls -l nous montre bien la création des 2 fichiers de clef privée (.fichier .private) et publique (fichier .key):

    masterdns:/etc/bind/keys# ls -l
    total 8
    -rw-r--r-- 1 root bind 127 oct.  18 18:51 Ktransfer-domain-com.+165+52920.key
    -rw------- 1 root bind 232 oct.  18 18:51 Ktransfer-domain-com.+165+52920.private

    <note>Le lecteur averti aura vu qu'en fait les clef de type “HOST” que nous avons utilisé sont des clef symétriques et non un couple privée/publique comme énoncé, et donc que les 2 fichiers .key et .private contiennent bien la même clef ;-)</note>

Recopier cette clef dans notre configuration Bind

  • Deja pour voir a quoi ressemble cette clef :
    # cat Ktransfer-domain-com.*.private

    qui devrait donner un résultat semblable à :

    # cat Ktransfer-domain-com.*.private
    Private-key-format: v1.3
    Algorithm: 165 (HMAC_SHA512)
    Key: dmomqcrOT7otZJdoyKRbDMhkii1a3ZdD4SvTdlMUSRga5O8WHeyW0nO1f1HnPDYuf8xV3rc8rBLs/sIvxoor8Q==
    Bits: AAA=
    Created: 20141018165729
    Publish: 20141018165729
    Activate: 20141018165729
  • Recopier cette clef dans notre fichier de clefs (que l'on peut créer par la même occasion s'il nexiste pas deja) :
    • vi /etc/bind/named.conf.tsigkeys
    • Puis ajouter ce contenu :
      key "tsig-domain-com" {
       algorithm HMAC-SHA512;
       secret "dmomqcrOT7otZJdoyKRbDMhkii1a3ZdD4SvTdlMUSRga5O8WHeyW0nO1f1HnPDYuf8xV3rc8rBLs/sIvxoor8Q==";
      };

      ou vous remplacez “dmomqcrOT7otZJdoyKRbDMhkii1a3ZdD4SvTdlMUSRga5O8WHeyW0nO1f1HnPDYuf8xV3rc8rBLs/sIvxoor8Q==” par votre clef. bien sur vous pourrez ajouter vos futures clefs dans ce même fichier en utilisant un nom différent pour chaque.

  • Limiter l'accès à ce fichier :
    chown root:bind /etc/bind/named.conf.tsigkeys
    chmod 640 /etc/bind/named.conf.tsigkeys
  • Dire a bind d'utiliser ce fichier de clefs :
    # cat << EOF >> /etc/bind/named.conf
    include "/etc/bind/named.conf.tsigkeys";
    EOF
  • Configurer cette clef dans notre zone “domain.com” , dans le fichier /etc/bind/named.conf.local ou elle est déclarée : ajouter la directive
    allow-transfer { key "tsig-domain-com"; };

    ou il faut noter la directive “key” comme dans l'exemple ci dessous :

     zone "domain.com" {
            type master;
            file "/etc/bind/domain.com.zone";
            allow-query { any; };
            notify yes;
            // transfert vers *n'importe quel serveur* qui presente la clef "tsig-domain-com"
            // transfert *sans clef* vers  192.168.3.1
            allow-transfer { key "tsig-domain-com"; 192.168.3.1; };
            also-notify { 192.168.3.1; };
    };
Dans ce cas les transferts seront autorisés vers n'importe quel serveur présentant la bonne clef.
Il faut aussi noter qu'il ne faut pas lister les IPs des serveurs secondaires ici : les IPs ajoutées dans la directive allow-transfert sont les IPs que vous voulez autoriser justement à effectuer un transfert de zone sans avoir à utiliser la clef : donc en général vous ne voulez pas faire ca ;-)

Sur le(s) serveur(s) esclave(s)

sysadmin/tsig.1413655804.txt.gz · Dernière modification: 2014/10/18 20:10 par james
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0