
Il monitoraggio delle richieste DNS rappresenta un’attività importante per amministratori di sistema, professionisti della sicurezza informatica e appassionati che gestiscono infrastrutture domestiche o aziendali. Attraverso le interrogazioni DNS è infatti possibile comprendere quali domini vengono contattati dai dispositivi collegati alla rete, individuare comportamenti anomali e ottenere informazioni utili per la gestione della sicurezza.
DNS-collector è un progetto open source sviluppato in Go che punta proprio a semplificare questa attività, mettendo a disposizione un sistema leggero e flessibile per raccogliere, elaborare e distribuire informazioni sul traffico DNS.
Il progetto, disponibile su GitHub, permette di acquisire richieste e risposte provenienti da diversi server DNS, tra cui BIND, PowerDNS e Unbound. I dati raccolti vengono elaborati attraverso una pipeline configurabile, che consente di applicare filtri, normalizzazioni e arricchimenti prima di inviarli verso sistemi esterni.
Uno degli aspetti più interessanti è la possibilità di intervenire sui dati direttamente durante la fase di raccolta, evitando di trasferire verso i sistemi di archiviazione informazioni inutili o indesiderate.
DNS-collector può quindi essere utilizzato sia in piccoli ambienti homelab sia in infrastrutture più articolate, dove la quantità di richieste DNS rende importante disporre di strumenti efficienti per la raccolta e l’analisi dei dati.
Raccolta DNS, filtri intelligenti e rilevamento delle anomalie
DNS-collector supporta differenti modalità di acquisizione del traffico. Tra le principali troviamo DNStap, un protocollo utilizzato per trasmettere informazioni DNS dai server verso sistemi di raccolta, e la cattura diretta dei pacchetti di rete.
Sono inoltre disponibili componenti dedicati all’acquisizione da file e altri sistemi di raccolta, permettendo di adattare il funzionamento del programma alle caratteristiche dell’infrastruttura.
Una volta acquisiti, i messaggi DNS possono essere elaborati attraverso diversi transformer, componenti che permettono di modificare, filtrare e arricchire le informazioni.
Tra le funzionalità disponibili troviamo:
- Normalizzazione: uniformazione dei nomi di dominio e dei dati raccolti.
- Filtraggio del traffico: esclusione di interrogazioni indesiderate, controlli automatici e richieste non rilevanti.
- GeoIP e ASN: arricchimento delle informazioni con dati geografici e relativi agli Autonomous System.
- Rilevamento delle anomalie: identificazione di comportamenti sospetti e attività DNS potenzialmente interessanti.
- Tracciamento dei nuovi domini: individuazione di domini che compaiono per la prima volta nel traffico osservato.
- Gestione della privacy: anonimizzazione degli indirizzi IP degli utenti prima dell’archiviazione.
- Analisi delle latenze: raccolta di informazioni sui tempi di risposta delle interrogazioni DNS.
Particolarmente interessante è il sistema di rilevamento delle attività sospette, che comprende funzionalità di analisi dell’entropia di Shannon per individuare caratteristiche potenzialmente anomale nei dati DNS.
La configurazione modulare permette inoltre di costruire pipeline differenti, adattando le elaborazioni alle esigenze specifiche dell’amministratore.
Integrazione con Grafana, Prometheus, Loki e installazione
Uno dei punti di forza di DNS-collector è la capacità di distribuire le informazioni raccolte verso numerose piattaforme esterne.
Il progetto mette a disposizione diversi logger, ovvero componenti responsabili dell’esportazione e dell’invio dei dati.
Tra le destinazioni supportate troviamo ClickHouse, Kafka, Elasticsearch, Grafana Loki, Fluentd, InfluxDB, Redis, MQTT, Syslog e Prometheus.
È possibile anche esportare i dati in file locali, utilizzare output JSON oppure inviare informazioni attraverso connessioni TCP e webhook.
L’integrazione con Prometheus permette di esporre metriche utili per monitorare il funzionamento del sistema, mentre Loki consente di centralizzare i log DNS all’interno di infrastrutture di osservabilità basate su Grafana.
DNS-collector supporta inoltre diversi formati di esportazione, tra cui testo, JSON, PCAP e template Jinja2.
Per iniziare a utilizzare il progetto è necessario scaricare una versione precompilata oppure predisporre l’ambiente di esecuzione. Il programma utilizza un file YAML per definire le pipeline e i relativi componenti.
Un esempio di configurazione minimale permette di ricevere flussi DNStap sulla porta TCP 6000 e visualizzare i dati direttamente nel terminale:
pipelines:
- name: tap
dnstap:
listen-ip: 0.0.0.0
listen-port: 6000
transforms:
normalize:
qname-lowercase: true
routing-policy:
forward: [ console ]
- name: console
stdout:
mode: text
Dopo aver salvato la configurazione nel file config.yml, è possibile avviare il programma con:
./dnscollector -config config.yml
La versione 3.0 introduce inoltre importanti ottimizzazioni delle prestazioni, tra cui una riduzione di circa il 40% dell’utilizzo della memoria rispetto alla versione 2.5, un sistema di elaborazione multi-worker configurabile e una gestione più efficiente dei messaggi DNS.
Tra le novità figurano anche il batching dei messaggi, il supporto all’inserimento batch in ClickHouse e un logger Top-N per ottenere riepiloghi periodici dei domini, dei client e dei codici di risposta più frequenti.
DNS-collector rappresenta quindi uno strumento particolarmente interessante per chi desidera avere maggiore visibilità sul traffico DNS della propria rete, centralizzare i log e integrare le informazioni raccolte con strumenti di monitoraggio e sicurezza già presenti nella propria infrastruttura. Abbiamo testato DNS-collector su Ubuntu 26.10.