Exo-brain

Parce que j'ai un cerveau, mais pas trop.

Outils pour utilisateurs

Outils du site


it:auto-hebergement:bind

Bind

Config type

ACLs qui vont bien

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
    };

Options

    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

    dnssec-enable yes;                
    key-directory "/var/named/keys";          # Répertoire contenant les clés des zones

DNSSEC signé par bind

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;
        };

Logging

/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; };
    };

Types de Zones configurables

/etc/bind/named.conf.local

Master simple

zone "domain.tld" in {
    type master;
    file "domain.tld.named";
    allow-query { any; }
    };

Master reverse IPv4

zone "0.168.192.in-addr.arpa" {
    type master;
    file "domain.tld.reverse.named";
    allow-query { locals; }
    };

Master reverse IPv6

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; }
    };

Slave

zone "domain.tld" {
  type slave;
  masters { 8.8.8.8; };
  file "domain.tld.named";
  allow-query { any; }
};

Faire tourner les clés DNSSEC

A faire !

Valider automatiquement un certificat Let's Encrypt en dns-01

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.

Etape 1 : créer un accès a bind

  • D'abord on génère une nouvelle clé (si possible dans le répertoire qui va bien /var/cache/bind/keys) :
dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST letsencrypt
  • Ensuite on va récupérer le contenu de la clé dans l'un des fichiers : letsencrypt. IN KEY 512 3 165 6kB<bla bla pleins de trucs>aCA==
  • On va le coller dans le fichier que va utiliser certbot pour accéder a la zone 1) :
/etc/letsencrypt/rfc2136.ini
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
  • Et on va aussi le coller dans la config de bind :
/etc/bind/named.conf.local
key "letsencrypt" {
    algorithm hmac-sha512;
    secret "6kB<bla bla pleins de trucs>aCA==";
    };
  • Dans le même fichier de config, rajouter l'accès à la zone elle-même :
/etc/bind/named.conf.local
zone "domain.tld" in {
    type master;
    file "domain.tld.named";
    ...
    ...
    update-policy { grant letsencrypt name _acme-challenge.domain.tld. txt; };
    };
  • Et on restart :
    service bind9 restart

Etape 2 : On teste à vide

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.)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Etape 3 : On génère vraiment

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 !

Installer un serveur DNS over HTTPS

C'est par ici !

1)
Ici, le serveur bind est local (127.0.0.1), mais on peut mettre autre chose si besoin.
it/auto-hebergement/bind.txt · Dernière modification: 26 Jan 2021 :: 14:04 de CgX