Table des matières

, , , , , ,

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

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

Recopier cette clef dans notre configuration Bind

Il vaut mieux déclarer ces directives “server” en haut du fichier, ou en tous cas avant la declaration de la zone correspondante
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 ;-)

Il ne reste plus qu'a redémarrer votre bind :

/etc/init.d/bind9 restart

A partir de ce moment la les esclaves ne pourront plus se mettre a jour : vous obtiendrez sur l'esclave des erreurs comme cela :

Oct 18 20:23:54 dsnslave1 named[8064]: client 192.168.1.24#59985: request has invalid signature: TSIG tsig-domain-com: tsig verify failure (BADKEY)

ce qui est normal vu que nous n'avons pas encore configuré les esclaves, ce que l'on va faire de ce pas.

Les fichiers .key et .private que nous avons généré tout a l'heure ne sont plus nécessaires et peuvent être supprimés du serveur pour plus de sécurité

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

Comme pour le maitre il faut :

après un petit redémarrage du service :

# /etc/init.d/bind9 restart

vous devriez voir quelque chose ressemblant à ça dans les logs de votre serveur maitre :

client 192.168.2.42#46795: received notify for zone 'domain.com': TSIG 'tsig-domain-com'

Il faut bien sur répéter cette opération sur tous vos serveurs secondaires si vous en avez plusieurs.

Et voila

Et voila nous disposons maintenant d'un transfert de zone sécurisé entre notre serveur DNS maître et nos serveurs DNS secondaires.

Si on veut tester les transfert avec et sans clef depuis un DNS secondaire:

dig @{ip-dns-principal} domain.com axfr

ce qui avec un peu de chance doit vous renvoyer une erreur ressemblant à ça (sinon il y a un problème dans la conf de votre serveur DNS primaire :

$ dig @192.128.2.1 domain.com axfr

; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> @192.128.2.1 domain.com axfr
; (1 server found)
;; global options: +cmd
; Transfer failed.

Alors qu'en utilisant la clef vous devriez voir le transfert s'effectuer (lancer en root ou en utilisant sudo pour avoir le droit de lire le fichier contenant la clef) :

# dig @192.128.2.1 domain.com axfr -k /etc/bind/named.conf.tsigkeys

Références