System-Linux

Aller au contenu | Aller au menu | Aller à la recherche

Sécuriser les échanges entre deux serveurs DNS (maitre/esclave)

bind9 jpg

Avec TSIG

Vous le savez les transferts entre maitre et esclave au niveau DNS avec Bind9 est assez facile a mettre en place, nous en avions parler dans cet article.

Cette façon de faire n'étant pas très sécurisé généralement quand j'avais à mettre en place ce genre de chose j'installais aussi un OpenVpn entre les deux serveurs pour crypter les échanges.

Oui mais voila il existe une vrai technique pour faire cela : TSIG pour Transaction Signature.

Pré-requis :

Il faut absolument que vos deux serveurs soient synchronisés au niveau de l'heure, regardez du coté de NTP.

Mettez les sur les mêmes serveurs et vérifiez bien avec la commande date.

Configuration TSIG :

Création du secret partagé :

imaginons deux serveurs, un maitre : osirixa.system-linux.eu et une esclave osirixb.system-linux.eu.

dnssec-keygen -a HMAC-MD5 -b 512 -n HOST tsig-osirixa.system-linux.eu-osirixb.system-linux.eu
Ktsig-osirixa.system-linux.eu-osirixb.system-linux.eu.+157+24873

Cette commande vous créera deux fichiers :

ls -1
Ktsig-osirixa.system-linux.eu-osirixb.system-linux.eu.+157+24873.key 
Ktsig-osirixa.system-linux.eu-osirixb.system-linux.eu.+157+24873.private

Sur le serveur maitre :

Rajoutez ceci au fond de votre named.conf :

// * Tsig *

key tsig-osirixa.system-linux.eu-osirixb.system-linux.eu. {
        algorithm hmac-md5;
        secret "aJW4gQ2gxefysTeOBhIu+DbwdkH8xxCcnRHFM67fmvqn43tZoito0cPusYFUJC6FmGxMfDU2dtSBrMRw==";
};

et modifiez comme ceci :

allow-transfer {
        key tsig-osirixa.system-linux.eu-osirixb.system-linux.eu.;
        };

ou vous deviez, sans tsig, avoir l'adresse ip de votre serveur esclave.

Faites un cat sur le fichier .private crée plus haut pour remplir le secret.

Sur le serveur esclave :

// * Tsig *

key tsig-osirixa.system-linux.eu-osirixb.system-linux.eu. {
        algorithm hmac-md5;
        secret "aJW4gQ2gxefysTeOBhIu+DbwdkH8xxCcnRHFM67fmvqn43tZoito0cPusYFUJC6FmGxMfDU2dtSBrMRw==";
        };

server 88.191.124.100 {
        keys {
        tsig-osirixa.system-linux.eu-osirixb.system-linux.eu.;
        };

L'adresse ip est l'adresse du serveur maitre biensur.

Arrivez ici redémarrez vos deux serveurs pour qu'ils prennent ces modifications en compte, l'esclave puis le maitre.

Pensez a regarder vos logs bind9 pour voir si les transferts de zone fonctionnent.

Test avec dig :

dig -y hmac-md5:tsig-osirixa.system-linux.eu-osirixb.system-linux.eu:aW4gQ2gxefysTeOBhIu+DbwdkH8xxCcnRHFM67fmvqn43tZoito0cPusYFUJC6FmGxMfD
U2dtSBrMRw== @88.191.124.100 AXFR system-linux.org

Ce qui devrait vous afficher quelque chose comme ça :

; <<>> DiG 9.7.1 <<>> -y hmac-md5 @88.191.124.100 AXFR system-linux.org
; (1 server found)
;; global options: +cmd
system-linux.org.       600     IN      SOA     osirixa.system-linux.eu. root.system-linux.eu. 2010101201 3600 900 1209600 43200
system-linux.org.       600     IN      NS      osirixa.system-linux.eu.
system-linux.org.       600     IN      NS      osirixb.system-linux.eu.
system-linux.org.       600     IN      A       88.191.124.100
system-linux.org.       600     IN      MX      10 maila.system-linux.eu.
system-linux.org.       600     IN      MX      20 mailb.system-linux.eu.
maila.system-linux.org.  600     IN      A       88.191.124.100
mailb.system-linux.org. 600     IN      A       87.98.21.222
osirixa.system-linux.org. 600    IN      A       88.191.12.100
osirixb.system-linux.org. 600   IN      A       87.98.21.222
www.system-linux.org.   600     IN      CNAME   osirixa.system-linux.org.
system-linux.org.       600     IN      SOA     osirixa.system-linux.eu. root.system-linux.eu. 2010101201 3600 900 1209600 43200
tsig-osirixa.system-linux.eu-osirixb.system-linux.eu. 0 ANY TSIG hmac-md5.sig-alg.reg.int. 1286894068 300 16 uO7HwM5u/I45Le6VzZ+VKQ== 52313 NOERROR 0
;; Query time: 6 msec
;; SERVER: 88.191.124.100#53(88.191.124.100)
;; WHEN: Tue Oct 12 16:34:28 2010
;; XFR size: 13 records (messages 1, bytes 461)

ça fonctionne :)

Si vous obtenez ceci :

;; Couldn't create key tsig-osirixa.system-linux.eu-osirixb.system-linux.eu: bad base64 encoding

; <<>> DiG 9.7.1 <<>> -y hmac-md5 @88.191.124.100 AXFR system-linux.org
; (1 server found)
;; global options: +cmd
; Transfer failed.

c'est que ça ne fonctionne pas...

Pensez à bien garder les horloges synchronisées sinon vous aurez des problèmes ! :

request has invalid signature: [...]: tsig verify failure (BADTIME)

Allez on met ça en place rapidement s'il vous plait la sécurité c'est important !

Par GanGan | le jeudi, octobre 14 2010 07:00

Commentaires

1. Dju

jeudi, octobre 14 2010 | 15:30

ha merci pour l'article, je cherchais comment sécuriser les transferts de zone sans pour autant avoir un openvpn à installer :p
curieusement, si je tape la commande depuis un ubuntu server, ca ne me rend pas la main, et ca ne fait rien.... donc ctrl+c pour interrompre.
par contre, sur une debian, ça se fait instantanément, quelle que soit la taille de la clé.
ubuntu n'aime pas les dnssec ? :o

2. Dju

samedi, octobre 16 2010 | 00:15

bon, pas moyen de générer une clé dnssec sous ubuntu-server, malgré que le paquet bind9utils soit bien installé, sur un 9.04, 9.10 et 10.04 ... groumf !
bref, après un lancement d'une lenny en virtualbox et génération d'une clé, tout marche bien, le transfert est sécurisé, et sans la clé ça marche pas. donc c'est parfait :)