Raccogliere i syslog di BIND Named

Il server DNS Bind, noto anche come Named, è uno dei nameserver più vecchi e diffusi sul web e nelle organizzazioni che utilizzando sistemi Linux e Unix.
Spesso Bind viene configurato in modalità chroot, il che permette di ridurre la superficie di attacco isolando il servizio in una gabbia.
Tuttavia quando una risorsa viene “ingabbiata” si perdono le caratteristiche che permettono una semplice condivisione di messaggi o dati con altri servizi.
In questo caso vorremmo poter raccogliere tutte le query fatte al nostro DNS server e gli errori mediante un server syslog esterno.
La configurazione di default non è sufficiente per fare ciò e bisogna fare delle modifiche ai file di configurazione del syslog (rsyslog) e di Bind.

Qualora rsyslog non sia installato (questo succede in distribuzioni vecchie come Red Hat 5 e simili) è necessario installarlo e sostituire rsyslog al syslog di base, chiamato syslogkd/klogd.

Il server syslog esterno raccoglie i log di Bind con Log Analyzer

Se Named è chrootato, i file di configurazione sono posti (di default) in /var/named/chroot quindi il classico named.conf non si trova più /etc/named.conf ma in /var/named/chroot/etc/named.conf

La prima cosa da fare è modificare il file di configurazione di Bind /var/named/chroot/etc/named.conf aggiungendo nella sezione options la riga “querylog yes“, poi abilitando il logging verso il syslog. Tutto il codice va nel blocco logging.

options {
	  querylog yes;
};

channel log2syslog  { 
    print-time yes;
    print-category yes;
    print-severity yes;

    syslog daemon;
    severity info; 
};
category queries { queries_log; };

L’uso delle istruzioni che cominciano con print è facolatativo ma consente un migliore filtraggio sul server di destinazione.

L’abilitazione del logging via syslog crea un socket unix in /dev/log. Visto che il nostro Bind è in chroot, il socket sarà creato nella sua cartella chrootata, quindi il socket sarà /var/named/chroot/dev/log.

Ora abilitiamo l’ascolto sul socket da parte di rsyslog e modifichiamo la configurazione di /etc/rsyslog.conf aggiungendo le seguenti righe:

$ModLoad imuxsock
$AddUnixListenSocket /var/named/chroot/dev/log
input(type="imuxsock" Socket="/var/named/chroot/dev/log" CreatePath="on")

:programname, isequal, "named" @172.16.0.2
:programname, isequal, "named" ~

Dove 172.16.0.2 è l’indirizzo IP del server syslog esterno.
Così facendo avremmo inoltrato i messaggi di syslog alla porta 514 (UDP) del syslog esterno.

E’ importante verificare che se è attivo SELINUX, sia permessa la comunicazione dei 2 servizi e qualora il firewall fosse attivo, sia abilitata l’uscita dei datagrammi UDP verso il server syslog esterno.

Fatto questo possibile riavviare il servizio rsyslog e named.

service rsyslog restart
service named restart

Note: Questo articolo è stato scritto per essere il più generico possibile, ossia utilizzabile sia su sistemi recenti o vecchi come Red Hat 5 e derivate. Per questo motivo potrebbero esserci delle differenze su altre distribuzioni.

hardware

Articolo successivo

Disabilitare Shot on Mi