Home › Guide

Monitoraggio delle blacklist: script, API e avvisi via webhook

Pubblicato il 2026-11-03 / Aggiornato il 2026-11-03 / A cura di Yuki Nakazawa

Monitorare le blacklist significa interrogare a intervalli regolari diverse blocklist DNS (DNSBL) per i vostri IP e domini di invio, generando un avviso solo quando un risultato cambia. Intercettare un listing nel momento in cui avviene, anziché quando i clienti segnalano posta respinta, vi dà il tempo di trovare la causa e richiedere la rimozione prima che il danno si estenda.

Esistono due modi pratici per farlo: eseguire voi stessi un piccolo script con dig e cron, oppure affidare i controlli a un servizio tramite API e webhook. In entrambi i casi, due dettagli determinano se il monitoraggio dice il vero: le query inviate tramite resolver pubblici vengono rifiutate da liste come Spamhaus e producono risposte fuorvianti, e i codici di errore non devono mai essere conteggiati come listing.

Le regole dei gestori di liste citate qui si basano sulle loro pagine ufficiali aggiornate a novembre 2026. Le policy cambiano, quindi verificatele prima di affidarvi a una configurazione. Per le basi sul funzionamento delle DNSBL, vedete che cos'è una DNSBL (RBL).

Verifichi gratuitamente se il suo dominio o indirizzo IP compare in una delle circa 345 blacklist.

Decidete che cosa monitorare e quali liste interrogare

Iniziate annotando gli oggetti che dovete effettivamente monitorare.

Il formato delle query è definito in RFC 5782. Per IPv4 si invertono gli ottetti e si aggiunge la zona della lista, quindi 192.0.2.99 su una lista diventa 99.2.0.192 seguito dal nome della zona. Per IPv6 l'indirizzo si scrive come 32 nibble esadecimali in ordine inverso. Un dominio viene semplicemente anteposto alla zona. Una voce elencata restituisce un record A, per convenzione in 127.0.0.0/8; una non elencata restituisce NXDOMAIN. La RFC osserva inoltre che le liste dovrebbero pubblicare un record TXT che spieghi il motivo di un listing.

Monitorate più liste anziché una sola, perché i destinatari non usano tutti le stesse. Il significato di ciascun codice di risposta varia a seconda del gestore; la nostra guida ai codici di risposta delle DNSBL tratta quelli più comuni.

Perché i resolver pubblici danno risposte sbagliate

Un errore comune nei sistemi di monitoraggio fatti in casa è inviare le query tramite un resolver pubblico come Google Public DNS (8.8.8.8) o Cloudflare (1.1.1.1). La FAQ ufficiale di Spamhaus sull'uso delle DNSBL spiega che cosa succede:

La raccomandazione principale della FAQ è di gestire un proprio resolver DNS. Per chi deve restare su un resolver pubblico, Spamhaus rimanda al proprio Data Query Service (DQS); verificatene le condizioni per sapere che cosa è gratuito. La FAQ suggerisce dig txt whoami.fastly.net per vedere quale resolver state effettivamente usando.

RFC 5782 aggiunge un controllo di coerenza integrato: una lista IPv4 deve contenere una voce per 127.0.0.2 e non deve contenere 127.0.0.1, e i client dovrebbero controllare periodicamente queste voci di test per confermare che la lista funzioni. Nell'esempio di Spamhaus, 2.0.0.127.zen.spamhaus.org restituisce 127.0.0.10, 127.0.0.4 e 127.0.0.2, mentre 1.0.0.127.zen.spamhaus.org restituisce NXDOMAIN. Un sistema di monitoraggio dovrebbe eseguire prima questo test e scartare l'esecuzione se fallisce.

Opzione 1: uno script con dig e cron

Ecco uno script minimo che controlla un indirizzo IPv4 su Spamhaus ZEN e SpamCop (bl.spamcop.net, che secondo la documentazione di SpamCop risponde 127.0.0.2 per un IP elencato). Sostituite l'indirizzo e le zone con i vostri.

#!/bin/sh
# Interrogate il vostro resolver ricorsivo (es. unbound sullo stesso host), mai uno pubblico
RESOLVER=127.0.0.1
IP=192.0.2.10
ZONES="zen.spamhaus.org bl.spamcop.net"
REV=$(echo "$IP" | awk -F. '{print $4"."$3"."$2"."$1}')

q() {
  out=$(dig +time=3 +tries=1 @"$RESOLVER" "$1" A) || { echo ERR; return; }
  case "$out" in
    *"status: NOERROR"*) a=$(printf '%s\n' "$out" | awk '$4=="A"{print $5}'); echo "${a:-NX}" ;;
    *"status: NXDOMAIN"*) echo NX ;;
    *) echo ERR ;;
  esac
}

for Z in $ZONES; do
  # Se la voce di test 127.0.0.2 non restituisce un codice di listing, non fidatevi di questa esecuzione
  case "$(q "2.0.0.127.$Z")" in
    127.255.255.*|NX|ERR) echo "$Z ERROR test-entry"; continue ;;
    127.*) ;;
    *) echo "$Z ERROR test-entry"; continue ;;
  esac
  A=$(q "$REV.$Z")
  case "$A" in
    NX)            echo "$Z CLEAN" ;;
    ERR)           echo "$Z ERROR no-answer" ;;
    127.255.255.*) echo "$Z ERROR $A" ;;
    127.*)         echo "$Z LISTED $A" ;;
    *)             echo "$Z ERROR unexpected $A" ;;
  esac
done

Che cosa fa lo script:

Poi lasciate che cron confronti ogni esecuzione con la precedente e invii una mail solo quando qualcosa è cambiato:

# Esempio: esecuzione ogni ora, mail solo quando l'output differisce dall'esecuzione precedente
0 * * * * /usr/local/bin/dnsbl-watch.sh > /var/tmp/dnsbl.now 2>&1; cmp -s /var/tmp/dnsbl.now /var/tmp/dnsbl.prev || mail -s "DNSBL status changed" you@example.com < /var/tmp/dnsbl.now; mv /var/tmp/dnsbl.now /var/tmp/dnsbl.prev

L'intervallo orario è solo un esempio. Spamhaus offre accesso gratuito per un uso non commerciale a basso volume, e i client che superano la sua soglia di volume di query hanno bisogno di un'opzione a pagamento; verificate le condizioni di ciascuna lista man mano che cresce il numero di IP monitorati. La FAQ consiglia inoltre di provare i comandi alcune volte per confermare che i risultati restino gli stessi.

Opzione 2: l'API batch e i webhook di DNSBL Checker

Se preferite non mantenere un resolver e regole di interpretazione per ogni lista, potete lasciare che sia un servizio a eseguire i controlli. Di seguito l'API v1 di questo sito, limitata a ciò che l'implementazione del server fa effettivamente. Il riferimento si trova in /en/api-docs e le chiavi vengono rilasciate nella pagina riservata ai membri in /account. Per la registrazione basta un indirizzo email, e l'accesso avviene tramite un link inviato per email.

Autenticazione e limiti

Controlli batch

Inviate un array targets di nomi di dominio o indirizzi IP a POST /api/v1/batch:

curl -X POST https://dnsblchecker.com/api/v1/batch \
  -H "X-API-Key: $DNSBL_API_KEY" -H "Content-Type: application/json" \
  -d '{"targets":["example.com"]}'

Se qualche target deve ancora essere controllato, la risposta è 202 con un batch_id. Interrogate GET /api/v1/batch/{batch_id} ogni pochi secondi finché status non diventa done (esempio abbreviato; i numeri e il nome della lista sono illustrativi, non un risultato reale):

{
  "batch_id": 1, "status": "done", "created": "2026-11-03 09:10:41", "count": 1, "pending": 0,
  "results": [
    {
      "target": "example.com", "type": "domain",
      "status": "done", "verdict": "listed",
      "checked_at": "2026-11-03 09:12",
      "lists_checked": 80, "listed_count": 1, "error_count": 4,
      "listed_on": [
        { "list": "ZapBL RHSBL", "zone": "rhsbl.zapbl.net", "response": "127.0.0.2" }
      ]
    }
  ]
}

Monitoraggio via webhook

Registrate un target e un callback_url con POST /api/v1/monitors. Ogni target registrato viene poi controllato una volta al giorno senza usare la cache (il primo controllo avviene entro circa un giorno dalla registrazione), e una POST JSON viene inviata al vostro URL solo al primo controllo (monitor.initial) e quando il verdetto passa da listed a clean o viceversa (monitor.status_changed).

curl -X POST https://dnsblchecker.com/api/v1/monitors \
  -H "X-API-Key: $DNSBL_API_KEY" -H "Content-Type: application/json" \
  -d '{"target":"example.com","callback_url":"https://your-app.example/hooks/dnsbl"}'
import hmac, hashlib
expected = "sha256=" + hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
ok = hmac.compare_digest(expected, request.headers.get("X-DNSBL-Signature", ""))

Progettare gli avvisi: frequenza, più liste e falsi allarmi

Un sistema di monitoraggio è utile solo se le persone continuano a leggerne gli avvisi dopo qualche mese. Uno che scatta di continuo finisce presto per essere ignorato.

Frequenza

Più liste

Falsi positivi e risposte transitorie

Che cosa fare quando viene rilevato un listing

  1. Confermatelo. Controllate la pagina di verifica del gestore e annotate il nome della lista, l'ora e l'eventuale motivo indicato.
  2. Eliminate prima la causa. Cercate account compromessi, moduli web abusati, macchine infette, scarsa igiene delle liste e reverse DNS (PTR) o nomi HELO non coerenti. Richiedere la rimozione mentre la causa persiste di solito porta a un nuovo listing.
  3. Seguite la procedura di rimozione di quella lista. La decisione sulla rimozione spetta a ciascun gestore di lista, e presentare una richiesta non garantisce che il listing venga revocato. Se non controllate l'IP, come nel caso dell'hosting condiviso, contattate il vostro provider di hosting o ISP.
  4. Lasciate che il monitoraggio confermi il risultato. I destinatari applicano anche filtri propri, quindi tenete d'occhio il recapito dopo che il verdetto è tornato clean.

Per una verifica una tantum di un IP o di un dominio, usate il blacklist checker. Se individuare la causa o gestire le richieste è più di quanto possiate affrontare, potete chiederci aiuto. Per il percorso completo di risoluzione dei problemi quando la posta viene respinta, vedete email bloccate dalle blacklist.

Se preferisce non occuparsene personalmente

Presentiamo fornitori che si occupano di richieste di rimozione, consulenza e assistenza (a partire da JPY 50,000). La rimozione è decisa da ciascun gestore della lista e non può essere garantita.

Richiedi assistenza

Questo sito può ricevere una commissione dai fornitori presentati. About

Domande frequenti

Ho controllato tramite 8.8.8.8 e non risulta alcun listing. Sono pulito?

Non necessariamente. La FAQ di Spamhaus afferma che le query tramite resolver aperti gratuiti come Google Public DNS nella maggior parte dei casi ricevono una risposta "non elencato" (NXDOMAIN), quindi un IP elencato può sembrare pulito. Interrogate dal vostro resolver, oppure usate la pagina di verifica del gestore.

Ho ricevuto 127.255.255.254. Significa che sono elencato?

No. È un codice di errore restituito per le query tramite un resolver pubblico o aperto, e Spamhaus afferma che non significa che l'oggetto sia elencato. Registratelo come errore e non inviate un avviso di listing.

Posso semplicemente chiamare l'API batch ogni giorno come sistema di monitoraggio?

Un batch può restituire un risultato memorizzato vecchio fino a 30 giorni, quindi non sempre rappresenta lo stato odierno. Controllate checked_at, oppure usate il monitoraggio via webhook (POST /api/v1/monitors), che esegue un controllo aggiornato ogni giorno.

Devo richiedere la rimozione non appena scatta un avviso?

Eliminate prima la causa. Una richiesta presentata mentre il problema persiste di solito si conclude con un nuovo listing. La decisione spetta sempre al gestore della lista.

Pagine ufficiali consultate

Le informazioni di questo articolo sono state verificate sulle pagine ufficiali indicate di seguito al momento della pubblicazione. Le policy e il funzionamento possono cambiare senza preavviso: prima di fare affidamento su un'informazione importante, consulti le pagine ufficiali.

Guide correlate

Codici di risposta DNSBL: 127.0.0.2, 127.255.255.x e NXDOMAIN

Come leggere i codici DNSBL: il significato di 127.0.0.2 secondo RFC 5782, i codici di Spamhaus, SpamCop e UCEPROTECT, gli errori e NXDOMAIN o SERVFAIL.

Rimozione da Spamhaus: come far togliere dalla lista IP o dominio

In lista su Spamhaus? Scopra in quale lista è (ZEN, PBL, XBL, CSS, SBL, DBL), cosa indicano i codici di ritorno e la procedura di rimozione per ciascuna.

Email in blacklist? Come leggere l'errore e uscire dalla lista

Email bloccate da una blacklist? Legga il codice di errore, verifichi le cause nell'ordine giusto, capisca quali inserimenti contano e chieda la rimozione.

Tutte le guide →