DNS primario+secondario & TSIG

Configurazione server DNS Bind9 per l'uso con un server primario (Fedora 21, hostname fedprim, IP 192.168.1.10) e uno secondario (Debian 8.0 Jessie, hostname debsec, IP 192.168.1.1).

Lo scambio dei file di zona tra i due server avviene attraverso un canale criptato e previa autenticazione tramite meccanismo TSIG (Transaction SIGnature).

Questo meccanismo è altra cosa rispetto al DNSSEC:

TSIG e DNSSEC sono aspetti diversi e indipendenti del funzionamento di un server DNS.  Per evitare ogni fraintendimento, dubbio o confusione, nel seguito è omesso ogni riferimento al DNSSEC sia quando sono riportati i contenuti dei file di configurazione che nell'esposizione.

I due server DNS gestiscono entrambi la zona lumen.drbl.invalid.

Il file di configurazione del server primario conterrà sia la definizione della zona che l'indicazione della chiave che dovrà essere usata ogni volta che un server DNS secondario chieda un trasferimento di zona per sincronizzare la sua copia con l'originale del primario.  Questo si fa con due sezioni:

Estratto dal file di configurazione principale del server DNS secondario debsec /etc/bind/named.conf.local:
server 192.168.1.10 {
       keys { lumen.drbl.invalid-debsec-fedprim. ;};
};

key lumen.drbl.invalid-debsec-fedprim. {
       algorithm hmac-sha512;
       secret
"dvfLJlnOr7kSXim2Ggg1j9tNYJUt8kYmARtAXk1tqUs0VWZeJcCLKMUnlSWGM65shfqdvjvWJZcgamdnbh8rMQ==";
};

zone "lumen.drbl.invalid" {
       type slave;
       file "/etc/bind/db.lumen.drbl.invalid";
       masters { 192.168.1.10; };
};

Estratto dal file di configurazione delle opzioni del server DNS secondario debsec /etc/bind/named.conf.options:
acl localifs { 127.0.0.0/8; 172.16.0.0/12; 192.168.1.0/24; };

options {
        directory "/var/cache/bind";
        forwarders { 192.168.1.254; };
        listen-on { localifs; };
        allow-query { localifs; };
        auth-nxdomain no;    # conform to RFC1035
};


Estratto dal file principale di configurazione del server DNS primario fedprim /etc/named.conf:
acl mynets { 127.0.0.1/8; 192.168.1.0/24; };

options {
        listen-on port 53 { mynets; };

        allow-query { mynets; };

        notify yes;
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};


Generazione della chiave condivisa dai due server:
[alessandro@debsec ~]$ dnssec-keygen -a hmac-sha512 -b 512 -n HOST lumen.drbl.invalid-debsec-fedprim
Klumen.drbl.invalid-debsec-fedprim.+165+57529
[alessandro@debsec ~]$ loh -tr Klumen.drbl.invalid-debsec-fedprim*
-rw-r--r-- 1 root 140 dic  8 18:44 Klumen.drbl.invalid-
debsec-fedprim.+165+57529.key
-rw------- 1 root 232 dic  8 18:44 Klumen.drbl.invalid-
debsec-fedprim.+165+57529.private
[alessandro@debsec ~]$ file Klumen.drbl.invalid-debsec-fedprim.+165+57529.*
Klumen.drbl.invalid-debsec-fedprim.+165+57529.key:     ASCII text
Klumen.drbl.invalid-debsec-fedprim.+165+57529.private: ASCII text

[alessandro@debsec ~]$ cat Klumen.drbl.invalid-debsec-fedprim.+165+57529.key
lumen.drbl.invalid-debsec-fedprim. IN KEY 512 3 165
dvfLJlnOr7kSXim2Ggg1j9tNYJUt8kYmARtAXk1tqUs0VWZeJcCLKMUnlSWGM65shfqdvjvWJZcgamdnbh8rMQ==
[alessandro@debsec ~]$ cat Klumen.drbl.invalid-debsec-fedprim.+165+57529.private
Private-key-format: v1.3
Algorithm: 165 (HMAC_SHA512)
Key:
dvfLJlnOr7kSXim2Ggg1j9tNYJUt8kYmARtAXk1tqUs0VWZeJcCLKMUnlSWGM65shfqdvjvWJZcgamdnbh8rMQ==
Bits: AAA=
Created: 20141208174455
Publish: 20141208174455
Activate: 20141208174455

[alessandro@debsec ~]$

Il file generato non è usato, ad esserne usato è solo il campo Key, una codifica base64, che è copiato nei file di configurazione dei due server, il primario e il secondario.  La chiave si sarebbe infatti potuta generare anche con il comando:

[alessandro@debsec ~]$ dd if=/dev/urandom bs=1 count=64 | base64
64+0 record dentro
64+0 record fuori
64 byte (64 B) copiati, 0,000274971 s, 233 kB/s
3dg/LrkRS3S1u0bV0ukQnGQCkwqi8PSi/XjXyz0sbf2FuJrli9Y9bwaJH3Z6Tgtria5pWwNXGk/nPMABveQFdw==

[alessandro@debsec ~]$

Il nome della chiave condivisa, lumen.drbl.invalid-debsec-fedprim, è arbitrario ma deve essere uguale nei due file di configurazione.

Del server primario sono importanti queste voci di configurazione:
Estratto dal file di configurazione delle zone del server DNS primario fedprim /etc/named.authority.zones:
server 192.168.1.1 {
       keys { lumen.drbl.invalid-debsec-fedprim.; };
       provide-ixfr yes;
};

key lumen.drbl.invalid-debsec-fedprim. {
       algorithm hmac-sha512;
       secret "dvfLJlnOr7kSXim2Ggg1j9tNYJUt8kYmARtAXk1tqUs0VWZeJcCLKMUnlSWGM65shfqdvjvWJZcgamdnbh8rMQ==";
};

zone "lumen.drbl.invalid" {
       type master;
       file "/var/named/db.lumen.drbl.invalid";

      
allow-update { key lumen.drbl.invalid-debsec-fedprim.; };
};

Per verificare che il trasferimento di zona funzioni da debsecfedprim, si può eseguire su depsec:
[alessandro@debsec ~]$ tail -6 /var/log/daemon.log
Dic 8 16:49:09 debsec named[6546]: client 192.168.1.10#17745/key lumen.drbl.invalid-debsec-fedprim: received notify for zone 'lumen.drbl.invalid': TSIG 'lumen.drbl.invalid-debsec-fedprim'
Dic 8 16:49:09 debsec named[6546]: zone lumen.drbl.invalid/IN: Transfer started.
Dic 8 16:49:09 debsec named[6546]: transfer of 'lumen.drbl.invalid/IN' from 192.168.1.10#53: connected using 192.168.1.1#43944
Dic 8 16:49:09 debsec named[6546]: zone lumen.drbl.invalid/IN: transferred serial 2015042502: TSIG 'lumen.drbl.invalid-debsec-fedprim'
Dic 8 16:49:09 debsec named[6546]: transfer of 'lumen.drbl.invalid/IN' from 192.168.1.10#53: Transfer completed: 1 messages, 267 records, 7380 bytes, 0.052 secs (141923 bytes/sec)
Dic 8 16:49:09 debsec named[6546]: zone lumen.drbl.invalid/IN: sending notifies (serial 2015042502)

[alessandro@debsec ~]$

[alessandro@debsec ~]$ tail -2 /var/log/daemon.log
Dic 8 21:09:10 debsec named[2505]: client 192.168.1.10#31664/key lumen.drbl.invalid-debsec-fedprim: received notify for zone 'lumen.drbl.invalid': TSIG 'lumen.drbl.invalid-
debsec-fedprim'
Dic 8 21:09:10 debsec named[2505]: zone lumen.drbl.invalid/IN: notify from 192.168.1.10#31664: zone is up to date

[alessandro@debsec ~]$


Testo coperto dalla licenza
Creative Commons versione 4.0 Attribuzione - Non commerciale - Condivisibile alle stesse condizioni
http://creativecommons.org/licenses/by-nc-sa/4.0/


< Torna al livello superiore <
<< Torna alla pagina iniziale <<