Sécuriser les échanges entre deux serveurs DNS (maitre/esclave)
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 !