acl locals { localhost; 192.168.0/24; // LAN fe80::/10; // LAN v6 82.64.195.232; // Moi 2a01:0e0a:0462:1130::/64; // Moi v6 }; acl secondaires { 217.70.177.40; // ns6.gandi.net };
auth-nxdomain no; # conform to RFC1035 version "SECRET"; # Cacher son identité listen-on-v6 { any; }; # Utile si le serveur tourne en IPv6 // statistics-file "/var/cache/bind/data/named_stats.txt"; allow-transfer { locals; secondaires; }; # Si le serveur est master allow-query { locals; questers; }; # Si le serveur est résolveur local allow-recursion { locals; questers; }; # Si le serveur est autoritaire, ne pas autoriser la récursion
dnssec-enable yes; key-directory "/var/named/keys"; # Répertoire contenant les clés des zones
Au niveau de la zone (named.local) :
zone "domain.tld" in { type master; file "domain.tld.named"; allow-query { any; }; auto-dnssec maintain; inline-signing yes; };
/etc/bind/named.conf.logs
logging { category lame-servers { null; }; category edns-disabled { null; }; category security { null; }; category resolver { null; }; channel namedlog { syslog local4; severity info; print-category yes; }; category default { namedlog; }; // category queries { namedlog; }; };
/etc/bind/named.conf.local
zone "domain.tld" in { type master; file "domain.tld.named"; allow-query { any; } };
zone "0.168.192.in-addr.arpa" { type master; file "domain.tld.reverse.named"; allow-query { locals; } };
L'IPv6 doit être écrite de droite à gauche.
zone "a.0.9.8.7.6.5.4.3.2.1.0.1.0.a.2.ip6.arpa" { type master; file "domain.tld.reverse6.named"; allow-query { locals; } };
zone "domain.tld" { type slave; masters { 8.8.8.8; }; file "domain.tld.named"; allow-query { any; } };
A faire !
Postulat : On veut créer un certificat wildcard *.domain.tld avec letsencrypt. On a un serveur bind autoritaire sous la main, en local sur la machine.
dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST letsencrypt
6kB<bla bla pleins de trucs>aCA==
dns_rfc2136_server = 127.0.0.1 dns_rfc2136_name = letsencrypt dns_rfc2136_secret = 6kB<bla bla pleins de trucs>aCA== dns_rfc2136_algorithm = HMAC-SHA512
key "letsencrypt" { algorithm hmac-sha512; secret "6kB<bla bla pleins de trucs>aCA=="; };
zone "domain.tld" in { type master; file "domain.tld.named"; ... ... update-policy { grant letsencrypt name _acme-challenge.domain.tld. txt; }; };
service bind9 restart
Ici, on souhaite générer un certificat pour *.domain.tld mais également pour domain.tld, car il n'est pas compris par défaut dans le wildcard !
On teste une première génération en dry-run :
certbot certonly --dns-rfc2136 --dns-rfc2136-credentials /etc/letsencrypt/rfc2136.ini --preferred-challenges=dns --email=letsencrypt@domain.tld --agree-tos -d *.domain.tld -d domain.tld --dry-run
Attention : Le fichier de zone étant modifié directement par bind pour ajouter puis retirer l'enregistrement TXT, il a tendance a mettre le bazar dans la syntaxe du fichier ! Pensez à faire une sauvegarde de votre zone “propre” avant de lancer ces commandes
Ce qui devrait donner à peu près ça :
Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /usr/local/etc/letsencrypt/renewal/domain.tld.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cert not due for renewal, but simulating renewal for dry run Plugins selected: Authenticator dns-rfc2136, Installer None Renewing an existing certificate Performing the following challenges: dns-01 challenge for domain.tld Waiting 5 seconds for DNS changes to propagate Waiting for verification... Cleaning up challenges - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - new certificate deployed without reload, fullchain is /usr/local/etc/letsencrypt/live/domain.tld/fullchain.pem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates below have not been saved.) Congratulations, all renewals succeeded. The following certs have been renewed: /usr/local/etc/letsencrypt/live/domain.tld.com/fullchain.pem (success) ** DRY RUN: simulating 'certbot renew' close to cert expiry ** (The test certificates above have not been saved.) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Même commande que précédemment, mais sans le dry-run :
certbot certonly --dns-rfc2136 --dns-rfc2136-credentials /etc/letsencrypt/rfc2136.ini --preferred-challenges=dns --email=letsencrypt@domain.tld --agree-tos -d *.domain.tld -d domain.tld
Si tout se passe bien, vous aurez généré votre certificat wildcard !
C'est par ici !