Luca Morettoni
English version
tinystats
tinystats è un filtro che legge i log di tinydns
e ricava le statistiche riguardo le tipologie di query ricevute ed
eventuali errori.
Il programma è ispirato al sistema ideato da
Nate Campi, con la grande
differenza che tinystats è stato scritto in C per non gravare
sulle risorse della macchina.
Installazione
Scaricare il pacchetto
tinystats-1.1.tar.gz (Perugia, Italia)
Per compilare il programma:
tar -xfz tinystats-[versione].tar.gz
cd tinystats
make install strip
(per modificare le opzioni di compilazione e/o installazione fate riferimento
alle prime linee all'inizio di Makefile).
Se usate la patch che implementa l'IPv6 nel pacchetto djbdns compilate il
tutto definendo la variabile WITH_IPV6 (es. make -D WITH_IPV6 ...).
Se usate FreeBSD potete intallare tinystats tramite
il suo port:
cd /usr/ports/dns/tinystats
make install clean
Utilizzo
Una volta compilato ed installato tinystats occorrerà modificare
il file tinydns/log/run in modo che venga eseguito tinystats.
La sua sintassi generale è:
tinystats [-h] [-s progr] output progr
dove output sarà la directory in cui verrà creato il file
tinystats.out (che conterrà le statistiche), mentre progr
sarà il programma che riceverà i log (normalmente multilog).
Il nuovo file log/run sarà (controllate anche il file
tinydns.log.run.sample disponibile nel pacchetto):
exec setuidgid Gdnslog tinystats -h ./main/tinystats/ \
multilog t n3 s250000 ./main/
Specificando l'opzione -h, i log di tinydns verranno resi più
leggibili: gli IP verranno scritti in decimale e i tipi di record richiesti verranno
scritti in formato testo.
Ecco un esempio di output con l'opzione -h:
192.168.0.50 57552 [56427] + MX home.morettoni.local
192.168.0.2 64228 [05045] + A current.morettoni.local
192.168.0.2 28675 [10102] + ANY morettoni.local
192.168.0.2 51488 [23734] + PTR 254.0.168.192.in-addr.arpa
Slave server
Se intendete utilizzare tinydns come slave di un server BIND (o di
altri software) basterà indicare tramite l'opzione -s il
programma che si occuperà della gestione della notifica.
Infatti, quando il master invierà a tinydns la notifica di
cambiamento della zona questi scriverà nei log una richiesta non implementata
(carattere I) per il record SOA (valore 0006); tinystats
eseguirà il programma indicato dopo l'opzione -s con i seguenti parametri:
- IP del server master che ha inviato la notifica;
- la zona che deve essere aggiornata
nel pacchetto troverete il file di esempio update_slave.sh.sample
utilizzabile per la gestione degli aggiornamenti, mentre il file Makefile.sample
può essere usato al posto del Makefile che trovate in tinydns/root
per riasseblare tutte le zone scaricate dai master e per generare il file data.cdb
Gli scipt di esempio fanno riferimento al file di configurazione tinydns/root/allow;
esso contiene la lista delle zone di cui si vuole fare da slave e l'IP del server master,
la sua sintassi è:
zonaA.tld:MASTER_IP
zonaB.tld:ALTRO_MASTER_IP
E' possibile salvare le zone scaricate in una directory differente da tinydns/root,
semplicemente cambiano la variabile ZONEDIR presente nei due file, è importante
inoltre che tutti i file *.data, data e data.cdb siano modificabili
dall'utente con cui gira il servizio tinydns/log.
Ho inserito anche lo script start_slave.sh.sample che si occupa di scaricare tutte le
zone presenti nel file allow, utile ad esempio per il primo startup del vostro slave
server.
Segnali
Nel caso in cui tinystats ricevesse i segnali ALRM, TERM e
HUP il suo comportamentamento sarà:
- ALRM: il file con le statistiche viene azzerato e il segnale viene
passato anche a prog;
- TERM: il segnale viene passato a prog;
- HUP: il file con le statistiche viene azzerato.
Statistiche
Il file generato da tinystats è composto di due righe: la prima
riporta il contatore delle varie tipologie di record richieste, mentre la seconda
è una semplice legenda.
Ecco un esempio:
386:7:0:4:0:0:272:8:0:0:0:122:0:6:860:24:1:0:0:30
a:ns:cname:soa:ptr:hinfo:mx:txt:rp:sig:key:aaaa:axfr:any:total:other:notauth:notimpl:badclass:noquery
I primi 15 campi sono di semplice comprensione, mentre gli ultimi 6 rappresentano:
- total: numero totale di query ricevute da tinydns (somma dei
primi 15 campi e degli ultimi 5);
- other: tipo di risorsa non prevista da tinystats;
- notauth: richiesta riguardante un dominio di cui tinydns non
è autoritativo;
- notimpl: richiesta non implementata in tinydns;
- badclass: classe non prevista da tinydns;
- noquery: query vuota o errata.
Grafici
Utilizzando RRDtools
è possibile visualizzare alcuni grafici che riguardano le query e gli errori
loggati da tinystats, nel pacchetto è presente uno script di shell
(tinydns.sh.sample) che è possibile lanciare da crontab
per generare i grafici. Lo script è personalizzabile attraverso una serie di variabili
impostabili nel file tinydns.conf (che andrà salvato nella stessa directory
dello script), le variabili sono:
- TINYSTATS: directory di output di tinystats;
- RRDDB: directory e nome del database RRD da utilizzare (se il
DB non esiste questo verrà creato in automatico);
- OUT: directory in cui salvare i grafici;
- TYPE: tipi di record di cui visualizzare i grafici, separati dal carattere
spazio (sono i primi 15 campi del file di output visto sopra, scritti però
in maiuscolo, es.: record ns va indicato con NS);
- ERROR: tipi di errore di cui visualizzare i grafici (come sopra);
- HTML: se settato a 1 verranno create le pagine html insieme ai grafici.
All'inizio dello script troverete i valori di default di queste impostazioni.
Ecco alcuni esempi di tinystats in azione:
Ringraziamenti
- Manuel Martini: per i vari suggerimenti e i test sui suoi DNS;
- Riccardo Torrini: per la consulenza sui colori e per la separazione tra le query e gli
errori;
- Filippo Natali: per il port sotto FreeBSD;
- Riccardo Andreoli: per la correzione della pagina in inglese;
- Collin R. Mulliner: per i suggerimenti riguardo IPv6;
- tutti quelli che useranno e testeranno tinystats!