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

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-ddomain-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 ;-)
sysadmin/tsig.1413654474.txt.gz · Dernière modification: 2014/10/18 19:47 par james
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0