Home › Handleidingen

Blacklistmonitoring: scripts, een API en webhookmeldingen

Gepubliceerd 2026-11-03 / Bijgewerkt 2026-11-03 / Door Yuki Nakazawa

Blacklistmonitoring betekent dat u volgens een schema meerdere DNS-blocklists (DNSBL's) bevraagt voor uw verzendende IP-adressen en domeinen, en alleen een melding geeft wanneer een resultaat verandert. Als u een listing opmerkt op het moment dat die ontstaat, en niet pas wanneer klanten teruggestuurde mail melden, hebt u tijd om de oorzaak te vinden en verwijdering aan te vragen voordat de schade zich uitbreidt.

Er zijn twee praktische manieren: zelf een klein dig- en cronscript draaien, of de controles via een API en webhooks aan een dienst overlaten. In beide gevallen bepalen twee details of de monitor de waarheid vertelt: queries via publieke resolvers worden door lijsten zoals Spamhaus geweigerd en leveren misleidende antwoorden op, en foutcodes mogen nooit als listings worden geteld.

De regels van de lijstbeheerders die hier worden aangehaald, zijn gebaseerd op hun officiële pagina's zoals die er in november 2026 uitzagen. Beleid verandert, dus controleer de regels voordat u op een opzet vertrouwt. Voor achtergrond over de werking van DNSBL's, zie wat een DNSBL (RBL) is.

Controleer gratis of uw domein of IP-adres op een van de ongeveer 345 blacklists staat.

Bepaal wat u bewaakt en welke lijsten u bevraagt

Noteer eerst welke objecten u echt moet bewaken.

Het queryformaat is vastgelegd in RFC 5782. Voor IPv4 draait u de octetten om en voegt u de zone van de lijst toe, dus 192.0.2.99 op een lijst wordt 99.2.0.192 gevolgd door de zonenaam. Voor IPv6 wordt het adres geschreven als 32 hexadecimale nibbles in omgekeerde volgorde. Een domein wordt simpelweg vóór de zone geplaatst. Een gelistte vermelding geeft een A-record terug, volgens de conventie in 127.0.0.0/8; een niet-gelistte geeft NXDOMAIN terug. De RFC merkt ook op dat lijsten een TXT-record horen te publiceren met de reden voor een listing.

Bewaak meerdere lijsten in plaats van één, omdat niet alle ontvangers dezelfde gebruiken. Wat elke retourcode betekent, verschilt per beheerder; onze gids over DNSBL-retourcodes behandelt de gangbare codes.

Waarom publieke resolvers verkeerde antwoorden geven

Een veelgemaakte fout bij zelfgebouwde monitoring is queries versturen via een publieke resolver zoals Google Public DNS (8.8.8.8) of Cloudflare (1.1.1.1). De officiële FAQ van Spamhaus over DNSBL-gebruik legt uit wat er dan gebeurt:

De belangrijkste aanbeveling in de FAQ is een eigen DNS-resolver te draaien. Voor gebruikers die bij een publieke resolver moeten blijven, verwijst Spamhaus naar zijn Data Query Service (DQS); controleer in de voorwaarden wat gratis is. De FAQ stelt dig txt whoami.fastly.net voor om te zien welke resolver u werkelijk gebruikt.

RFC 5782 voegt een ingebouwde controle toe: een IPv4-lijst moet een vermelding voor 127.0.0.2 bevatten en mag 127.0.0.1 niet bevatten, en clients horen deze testvermeldingen periodiek te controleren om te bevestigen dat de lijst werkt. In het voorbeeld van Spamhaus geeft 2.0.0.127.zen.spamhaus.org 127.0.0.10, 127.0.0.4 en 127.0.0.2 terug, terwijl 1.0.0.127.zen.spamhaus.org NXDOMAIN teruggeeft. Een monitor hoort dit eerst te testen en de run te verwerpen als de test mislukt.

Optie 1: een dig- en cronscript

Hier is een minimaal script dat één IPv4-adres controleert tegen Spamhaus ZEN en SpamCop (bl.spamcop.net, dat volgens de documentatie van SpamCop 127.0.0.2 teruggeeft voor een gelist IP-adres). Vervang het adres en de zones door uw eigen.

#!/bin/sh
# Bevraag uw eigen recursieve resolver (bijv. unbound op dezelfde host), nooit een publieke
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
  # Geeft de testvermelding 127.0.0.2 geen listingcode, vertrouw deze run dan niet
  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

Wat het script doet:

Laat cron vervolgens elke run vergelijken met de vorige en alleen mail versturen als er iets is veranderd:

# Voorbeeld: elk uur uitvoeren, alleen mailen als de uitvoer afwijkt van de vorige run
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

Het interval van een uur is slechts een voorbeeld. Spamhaus biedt gratis toegang voor niet-commercieel gebruik met een laag volume, en clients die de drempel voor het queryvolume overschrijden, hebben een betaalde optie nodig; controleer de voorwaarden van elke lijst naarmate het aantal bewaakte IP-adressen groeit. De FAQ raadt ook aan opdrachten een paar keer uit te voeren om te bevestigen dat de resultaten gelijk blijven.

Optie 2: de batch-API en webhooks van DNSBL Checker

Wilt u liever geen resolver en verwerkingsregels per lijst onderhouden, dan kunt u de controles door een dienst laten uitvoeren. Hieronder staat de v1-API van deze site, beperkt tot wat de serverimplementatie daadwerkelijk doet. De referentie staat op /en/api-docs en sleutels worden uitgegeven op de ledenpagina op /account. Voor aanmelden is alleen een e-mailadres nodig, en u logt in via een link die per e-mail wordt verstuurd.

Authenticatie en limieten

Batchcontroles

Stuur een array targets met domeinnamen of IP-adressen naar 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"]}'

Moet er nog een doel worden gecontroleerd, dan is het antwoord 202 met een batch_id. Vraag GET /api/v1/batch/{batch_id} om de paar seconden op totdat status de waarde done heeft (verkort voorbeeld; de getallen en de lijstnaam zijn ter illustratie, geen echt resultaat):

{
  "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" }
      ]
    }
  ]
}

Monitoring met webhooks

Registreer een target en een callback_url met POST /api/v1/monitors. Elk geregistreerd doel wordt daarna één keer per dag gecontroleerd zonder de cache te gebruiken (de eerste controle vindt binnen ongeveer een dag na registratie plaats), en er wordt alleen een JSON-POST naar uw URL gestuurd bij de eerste controle (monitor.initial) en wanneer het oordeel omslaat tussen listed en clean (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", ""))

Meldingen ontwerpen: frequentie, meerdere lijsten en vals alarm

Een monitor is alleen nuttig als mensen de meldingen na een paar maanden nog lezen. Een monitor die voortdurend afgaat, wordt al snel genegeerd.

Frequentie

Meerdere lijsten

False positives en tijdelijke antwoorden

Wat u doet als er een listing wordt gedetecteerd

  1. Bevestig de listing. Controleer de eigen lookuppagina van de beheerder en noteer de naam van de lijst, het tijdstip en een eventuele getoonde reden.
  2. Verhelp eerst de oorzaak. Zoek naar gecompromitteerde accounts, misbruikte webformulieren, geïnfecteerde machines, slecht lijstonderhoud en niet-overeenkomende reverse DNS (PTR) of HELO-namen. Verwijdering aanvragen terwijl de oorzaak blijft bestaan, leidt meestal tot een nieuwe listing.
  3. Volg de verwijderingsprocedure van die lijst. De beslissing over delisten ligt bij elke lijstbeheerder, en een verzoek indienen is geen belofte dat de listing wordt opgeheven. Beheert u het IP-adres niet zelf, zoals bij shared hosting, neem dan contact op met uw hostingprovider of ISP.
  4. Laat de monitor het resultaat bevestigen. Ontvangers gebruiken ook eigen filters, dus houd de aflevering in de gaten nadat het oordeel weer op clean staat.

Voor een eenmalige controle van een IP-adres of domein gebruikt u de blacklistchecker. Is het opsporen van de oorzaak of het afhandelen van de verzoeken meer dan u aankunt, dan kunt u ons om hulp vragen. Voor het volledige stappenplan als mail terugkomt, zie e-mail die door blacklists wordt geblokkeerd.

Als u dit liever niet zelf afhandelt

Wij brengen u in contact met dienstverleners die verwijderingsverzoeken, consultancy en advies verzorgen (vanaf JPY 50,000). Over verwijdering beslist de beheerder van elke lijst; die kan niet worden beloofd.

Hulp vragen

Deze website kan een doorverwijzingsvergoeding ontvangen van de vermelde dienstverleners. About

Veelgestelde vragen

Ik heb via 8.8.8.8 gecontroleerd en zag geen listing. Ben ik schoon?

Niet per se. Volgens de FAQ van Spamhaus krijgen queries via gratis open resolvers zoals Google Public DNS in de meeste gevallen een antwoord "niet gelist" (NXDOMAIN), dus een gelist IP-adres kan schoon lijken. Bevraag vanaf uw eigen resolver, of gebruik de lookuppagina van de beheerder.

Ik kreeg 127.255.255.254. Betekent dat dat ik gelist ben?

Nee. Het is een foutcode die wordt teruggegeven bij queries via een publieke of open resolver, en Spamhaus stelt dat die niet betekent dat het object gelist is. Registreer het als fout en verstuur geen listingmelding.

Kan ik als monitor gewoon elke dag de batch-API aanroepen?

Een batch kan een opgeslagen resultaat van maximaal 30 dagen oud teruggeven, dus het is niet altijd de stand van vandaag. Controleer checked_at, of gebruik monitoring met webhooks (POST /api/v1/monitors), die elke dag een nieuwe controle uitvoert.

Moet ik verwijdering aanvragen zodra er een melding binnenkomt?

Verhelp eerst de oorzaak. Een verzoek terwijl het probleem nog bestaat, eindigt meestal in een nieuwe listing. De beslissing ligt altijd bij de lijstbeheerder.

Gebruikte officiële pagina's

De feiten in dit artikel zijn bij publicatie gecontroleerd aan de hand van de officiële pagina's hieronder. Beleid en werkwijze kunnen zonder aankondiging veranderen. Controleer daarom de officiële pagina's voordat u ergens belangrijks op vertrouwt.

Gerelateerde handleidingen

DNSBL-retourcodes uitgelegd: 127.0.0.2, 127.255.255.x en NXDOMAIN

Zo leest u DNSBL-retourcodes: wat 127.0.0.2 betekent volgens RFC 5782, codes van Spamhaus, SpamCop en UCEPROTECT, foutcodes en NXDOMAIN of SERVFAIL.

Verwijdering bij Spamhaus: uw IP-adres of domein van de lijst

Op een Spamhaus-lijst? Zie op welke lijst u staat (ZEN, PBL, XBL, CSS, SBL, DBL), wat de retourcodes betekenen en hoe u per lijst verwijdering aanvraagt.

E-mail op een blacklist? Bounce lezen en van de blacklist af

Door een blacklist geblokkeerd? Lees de bouncecode, controleer de oorzaken op volgorde, zie welke vermeldingen tellen en vraag correct om verwijdering.

Alle handleidingen →