BIND, acronimo di Berkeley Internet Domain Name, è sviluppato e mantenuto dalla ISC, Internet Software Consortium (http://www.isc.org/products/BIND/).
BIND è un pacchetto software composto principalmente da:
- Un Domain Name Service server chiamato named.
- Una libreria per la risoluzione dei nomi.
- Alcune utility di configurazione e dei tool per la gestione del servizio (rndc, named-checkconf).
Attualmente la versione più recente è la 9.2.2 (marzo 2003).
Premesso che la maggioranza delle distribuzioni Linux permette l'installazione e l'aggiornamento del pacchetto attraverso sistemi binari (rpm per RedHat, Mandrake o Suse, deb per Debian) può essere utile all'amministratore di sistema, vuoi per abilitare qualche feature in fase di compilazione o perchè la versione presenta qualche baco, scaricare il pacchetto dei sorgenti.
Questo può essere fatto tramite l'immenso network di sourceforge/freshmeat.net o direttamente dal sito ufficiale.
Una volta scaricato e scompattato il pacchetto si può procedere alla compilazione con il classico:
./configure
make
Ci sono diverse variabili settabili al momento del lancio di configure, vediamo le principali:
--with-libtool
: per abilitare l'uso delle shared library.
--with-openssl
: per abilitare l'uso della crittografia per l'autenticazione sicura (DNSSEC), nel caso openssl fosse installata in un path diverso da quello standard, si può specificare con:
--with-openssl=/prefix
--enable-libbind
: per abilitare l'uso delle librerie libbind di BIND versione 8, visto che attualmente le librerie di BIND 9 sono ancora considerate in sviluppo, può essere interessante l'uso di quelle meno recenti ma più stabili.
--enable-threads
o --disable-threads
a seconda se la nostra macchina è multiprocessore o no, notare che configure dovrebbe verificare da solo questa variabile, è utile avere la possibilità di specificarla.
--prefix=/...
: di default named viene installato in /usr/local
con questa variabile si può specificare un'altra directory.
--sysconfdir
: permette di specificare un'altra directory dove installare il file di configurazione (named.conf) diversa da quella standard /etc
.
--localstatedir
permette di specificare una directory diversa dallo standard /var per run/named.pid
.
NOTA BENE: se si specifica la variabile --prefix
questa modifica anche i valori standard delle ultime due variabili descritte che diventeranno:
$PREFIX/etc/named.conf
e $PREFIX/var/run/named.pid
Di norma quindi se si specifica la variabile --prefix
va ricordato di specificare anche le altre due.
Ad ogni modo se si vuole avere un prospetto completo di tutte le opzioni del configure si usa:
./configure --help
Si procede ad installare il pacchetto con:
make install
Il pacchetto BIND dalla versione 9.x.x contiene l'utility rndc per la gestione e controllo del servizio. Rndc comunica con il named attraverso una connessione TCP inviando comandi autenticati tramite una signature digitale.
In caso si stesse utilizzando BIND 8.x.x il suo corrispettivo tool si chiama ndc e ha poche differenze con l'attuale rndc.
Se si desidera utilizzare rndc per gestire il named bisogna innanzi tutto lavorare sul file di configurazione /etc/named.conf
e su /etc/rndc.conf
.
Esiste un comodo tool per creare un rndc.conf e si chiama rndc-confgen
, questa utility ha diverse opzioni per le quali rimando alla sua pagina del manuale in linea Unix.
Lanciando come root il comando senza opzioni si ottiene sullo standard output (quindi facilmente ridirezionabile ad un file) una serie di direttive da aggiungere poi a mano nei rispettivi file di configurazione:
bash-2.05a# rndc-confgen
# Start of rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "m7Umc6qeKl1Q0eeMjVSq0g==";
};
options {
default-key "rndc-key";
default-server 127.0.0.1;
default-port 953;
};
# End of rndc.conf
# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
# algorithm hmac-md5;
# secret "m7Umc6qeKl1Q0eeMjVSq0g==";
# };
#
# controls {
# inet 127.0.0.1 port 953
# allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf
Una volta editato i due file rndc.conf
e named.conf
mantenendo queste direttive così come sono avremo la possibilità di utilizzare rndc solo da locale, dall'host cioè che fornisce il servizio named.
Per utilizzare rndc da remoto sarà importante cambiare la direttiva controls
in modo che rispecchi la nostra configurazione di rete e sarà necessario avere sulla macchina amministrativa un rndc.conf con la giusta chiave. Lo scambio di questo secret può avvenire in diversi modi, via email o via telefono, è importante ricordare che chiunque conosca la shared-key sarà ammesso al canale di controllo di named con ovvie ripercussioni sulla sua sicurezza, la chiave quindi va custodita con cura e non bisogna scordare che i file di configurazione devono essere leggibili da un ristretto gruppo di utenti "trusted".
La sua sintassi è la seguente:
rndc [opzioni] [comandi]
Vediamo ora le principali opzioni di rndc:
-c config_file
: permette di specificare un diverso file di configurazione dallo standard /etc/rndc.conf
.
-k key_file
: permette di specificare un diverso key_file dallo standard /etc/rndc.key
che verrà utilizzato per autenticare i comandi inviati al server in caso un rndc.conf
non sia presente (per approfondimenti leggere il manuale in linea unix di rndc-confgen
).
-s server
: permette di specificare un server a cui inviare i comandi. Se usata questa opzione sovrascrive la direttiva default-server
di rndc.conf
.
-y key_id
: rndc generalmente va a cercare nel file di configurazione del named l'istanza che identifica la chiave da usare per il sign delle comunicazioni. Questa opzione permette di specificare la chiave che si desidera utilizzare.
Per la gestione del server DNS rndc accetta vari comandi:
halt
: Ferma immediatamente il servizio DNS.
querylog
: Abilita il logging delle query che il named riceve dai suoi clienti.
refresh
: Fa effettuare al named un refresh dei suoi file di zona.
reload
: Simile al refresh permette di far rileggere al named i file di zona senza però fargli "pulire" la cache. In più accetta come parametro il nome del singolo file di zona evitando così di oberare il server nella lettura di file che non hanno subito cambiamenti. La sintassi così è: rndc reload file_di_zona
stats
: Esegue un dump delle statistiche attuali del server nel file /var/named/named.stats
.
stop
: Ferma il server in maniera "pulita" perchè permette al server di salvare ogni dynamic-update o qualunque dato IXFR prima di uscire.
restart
: Fa ripartire il server facendogli salvare tutti i dynamic-update e i dati IXFR e facendogli rileggere tutti i suoi file compreso il named.conf
Il server DNS di BIND è un demone chiamato named, il quale è principalmente gestito attraverso il suo file di configurazione ma supporta diverse opzioni direttamente dalla riga di comando.
Lanciato senza invocare alcuna opzione, named legge il suo file di configurazione, i relativi file di zona e resta in ascolto delle query.
Le sue opzioni non sono molte ma spesso vitali per aggiungere alcuni parametri di funzionamento non specificabili nel suo file di configurazione.
La sua sintassi è: named [opzioni]
Opzioni:
-c file_alternativo
: Permette di indicare al named un file di configurazione diverso da /etc/named.conf
. Per garantire che named rilegga correttamente il file dato dopo che ha cambiato la directory di lavoro come specificato con l'opzione directory
del file di configurazione bisogna specificare il PATH assoluto per il file.
-d valore
: Abilita il debug_mode. Va specificato il valore di verbosità del debug, un numero più alto indica messaggi di debug più accurati.
-f
: Fa girare il server in foreground.
-g
: Fa girare il server in foreground e invia tutti i messaggi di errore allo standard error (stderr).
-n #cpus
: Specifica il numero di cpu presenti sulla macchina. Questo fa creare tante threads quante che sono le cpu. Se non specificato named cerca di capire quante cpu sono presenti e attiva tanti processi quante cpu. Se non riesce crea un'unica thread per lavorare.
-p
: Permette di specificare una porta diversa dalla default 53 da usare per restare in ascolto delle query.
-s
: Stampa a monitor le statistiche dell'uso della memoria e poi esce. Questa opzione è intesa per l'uso da parte dei programmatori e verrà presto eliminata.
-t directory
: Fa cambiare directory "root" del processo (chroot()
) prima che venga letto il file di configurazione. E' intesa per l'uso associato con l'opzione -u
perchè constringere un processo ad una determinata directory non ha effetto se questo gira con i permessi di root che come si sa non ha limiti all'interno del file system.
-u user_id
: Cambia l'utente proprietario del processo dopo che aver eseguito quelle operazioni che richiedono i privilegi dell'utente root. Molto importante ai fini della sicurezza garantisce che in caso di compromissione del servizio non ci siano i privilegi per danneggiare ulteriormente il sistema.
-v
: stampa la versione del programma e esce.
Installazione e configurazione djbdns.
Istruzioni essenziali.
Parametri impostati:
Rete: 192.168.20.
IP DNS server: 192.168.65.111
Dominio: texilee.it
- Installazione daemon tools
mkdir -p /var/package
chmod 1755 /var/package
cd /var/package
gunzip daemontools-0.76.tar
tar -xpf daemontools-0.76.tar
rm daemontools-0.76.tar
cd admin
package/install
- Installazione ucspi-tcp
cd /tmp
gunzip ucspi-tcp-0.88.tar
tar -xf ucspi-tcp-0.88.tar
make
make setup check
- Modifica daemontools
cd /command
vi svscanboot
-- Aggiungere /var prima di service
/command/svc -dx /var/service/* /var/service/*/log
env - PATH=$PATH svscan /var/service 2>&1 | \
vi /etc/inittab
In fondo commentare la parte SV
init q
ps -aux
Verificare che SVSCAN sia su /var/service
Modificare /etc/resolv.conf:
domain tuodominio
nameserver ip_server_dns
- Preparazione alla configurazione dns
mkdir /var/dns
groupadd dns
useradd dnscache -g dns -d /var/dns -s /bin/false
useradd dnslog -g dns -d /var/dns -s /bin/false
useradd dns -g dns -d /var/dns -s /bin/false
- Installazione djbdns
cd /tmp
tar -xvzf djbdns-1.05.tar.gz
cd djbdns-1.05
make
make setup check
- Configurazione delle zone
tinydns-conf dns dnslog /var/dns/nome_zona ip_server-dns
ln -s /var/dns/nome_zona /var/service
cd /var/dns/nome_zona/root
./add-ns tuodominio ip_server-dns
./add-ns xxx.xxx.xxx.in-addr.arpa ip_server-dns
xxx.xxx.xxx.in-addr.arpa è da modificare secondo la rete, ad esempio 192.168.65.x diventa 65.168.192.in-addr.arpa
- Modifica file "data"
vi data
tuodominio:ip_server-dns:ns1:numero
"Es. .texilee.it:192.168.65.111:a:259200
.texilee.it:192.168.65.111:ns1:259200
- Popolamento zona
./add-host pc1.texilee.it 192.168.65.25
./add-host www.texilee.it 192.168.65.54
./add-host pippo.texilee.it 192.168.65.222
./add-host fax.texilee.it 192.168.65.77
./add-host dns.texilee.it 192.168.65.111
./add-alias master.texilee.it 192.168.65.25
make
- dns cache server (locale)
dnscache-conf dnscache dnslog /var/dns/dnscache ip_server-dns
ln -s /var/dns/dnscache /var/service
touch /var/dns/dnscache/root/ip/192.168.65
echo 127.0.0.1 > /var/dns/dnscache/root/servers/texilee.it
echo 127.0.0.1 > /var/dns/dnscache/root/servers/1.0.0.127.in-addr.arpa
echo 127.0.0.1 > /var/dns/dnscache/root/servers/0.0.10.in-addr.arpa
- Per testare il funzionamento
dnsqr a www.texilee.it
1 www.texilee.it:
85 bytes, 1+1+0+0 records, response, noerror
query: 1 www.texilee.it
answer: www.texilee.it 86400 A 192.168.65.54