Configurazioni di BIND relative alla sicurezza

Le precauzioni di massima per evitare abusi comuni su un server DNS non sono molte e soprattutto non comportano particolari complicazioni per cui vale la pena implementarle appena possibile.
Elenchiamo alcune configurazioni e accorgimenti raccomandabili quando si configura BIND.

NEGARE LO ZONE TRANSFER
Il trasferimento di zona avviene esclusivamente fra due server DNS (può farlo anche un client, ma solo per raccogliere informazioni non necessarie) quando viene aggiornata una zona sul master e trasferita agli slave.
Si può configurare BIND per limitare gli zone transfer solo ai server autorizzati. In /etc/named.conf ci dovrebbero essere righe come:
options {
        directory "/var/named";
        allow-transfer {
                192.168.0.0 / 24 ; Si permette uno zone transfer a tutta la rete 192.168.0.0/24
                172.16.1.6 ; Si permette uno zone transfer all'host 172.16.1.6
        };
};

In caso di richieste di zone transfer non autorizzate, sul file di log, generalmente /var/log/messages si trovano entry del tipo:
Mar  4 11:48:31 ns named[2762]: client 193.0.0.63#46935: zone transfer 'openskills.info/IN' denied
Mar  4 11:48:54 ns named[2762]: client 193.0.0.63#47815: zone transfer 'openskill.info/IN' denied
.
Fondamentalmente su un server DNS slave non è necessario permettere lo zone transfer ad alcun IP, su un server DNS master è necessario permetterlo a tutti gli indirizzi dei server slave.

LIMITARE LE POSSIBILITA' DI QUERY
Quando si imposta un server DNS come resolver su un client, ogni richiesta fatta dal client al server viene completamente processata dal server stesso, se il server non ha la risposta nella sua cache o fra le zone di cui è autoritativo, il server DNS richiede per conto del client, le informazioni ai server DNS autoritativi. Questa operazione si definisce Query Ricorsiva e viene generalmente permessa sui server DNS che forniscono il loro servizio come resolver ad un dato range di client.
Se il proprio server DNS funge solo da resolver e non è autoritativo per alcun dominio (quindi non deve ricevere query da altri server DNS) è può configurare Bind per limitare query solo da dati IP:
acl "trusted" {
    213.198.151.0/24; 10.0.0.0/8; Definisce una acl, chiamata "trusted"
};
options {
    directory "/var/named";
    allow-query { "trusted"; }; Permette le query solo agli IP indicati nella acl "trsuted"
};


Se invece il proprio server è autoritativo per alcune zone ma non viene utilizzato come resolver è opportuno disabilitare la possibilità di fare query-ricorsive e si deve lasciare aperta la possibilità di eseguire query da ogni parte di Internet, almeno per i domini di cui è autoritativo:
options {
     recursion no; Diabilita la possibilità di fare query ricorsive
};


SEPARARE DNS RESOLVER DA DNS DELEGATED
Se un server DNS ha la delega per un dominio, deve poter rispondere a query DNS di tutti i client su Internet per le zone di cui è autoritario. Se viene utilizzato come resolver da un dato numero di client (i PC di una rete locale, gli utenti di un provider, ecc) deve poter eseguire query ricorsive per conto di tutti i suoi client.
Queste sono due funzionalità separate che in linea di massima sarebbe opportuno implementare su 2 macchine separate:
- Un server delegato, che permette query da tutta Internet, non permette query ricorsive e permette zone transfer solo ai suoi slave.
- Un server resolver, che permette l'accesso solo da un range di IP definito, permette query ricorsive e nega ogni zone transfer.
Molti tipi di attacchi di DNS poisoning, infatti, si basano sulla funzionalità di recursive query, che quindi andrebbe limitata per quanto possibile.
Se, come spesso accade, il proprio server DNS deve essere sia autoritativo per alcuni propri domini che fare da resolver per i propri client, è possibile configurarlo per cercare di espletare entrambe le funzioni limitando i rischi di sicurezza:
acl "trusted" {
    213.198.151.0/24; 10.0.0.0/8; Definisce una acl, chiamata "trusted"
};
acl "slave" {
    192.253.253.9; 193.205.245.8;
};
options {
    directory "/var/named";
    allow-query { "trusted"; }; Di default permette query solo dagli IP trasted
};
zone "openskills.info" {
    type master;
    file "openskills.info";
    allow-query { any; }; Per il dominio openskills.info, di cui è autoritario, accetta query da tutti
    allow-transfer { "slave"; }; Permette zon transfer per il dominio openskills.info solo agli IP indicati nell'acl "slave"
};
zone "151.198.213.in-addr.arpa" {
    type master;
    file "213.198.141";
    allow-query { any; };
    allow-transfer { "slave"; };
};


NASCONDERE LA VERSIONE DI BIND
Tramite il comando dig è possibile scoprire la versione di Bind che gira sul server interrogato:
dig version.bind chaos txt - Visualizza la versione di Bind sul server DNS correntemente utilizzato:
; <<>> DiG 9.2.1 <<>> version.bind chaos txt
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41822
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;version.bind.                  CH      TXT

;; ANSWER SECTION:
version.bind.           0       CH      TXT     "9.2.1" Sul server gira Bind 9.2.1


dig @ns.dominio.it version.bind chaos txt - Visualizza la versione di Bind sul server DNS ns.dominio.it.
Notare che se sul server non gira Bind, l'ANSWER SECTION risulta vuota.

Per nascondere la versione di Bind che si sta utilizzando basta scrivere nel file di configurazione:
options {
    version "Ignota";
};

Privacy Policy