Strona główna › Poradniki

Monitorowanie czarnych list: skrypty, API i alerty webhook

Opublikowano 2026-11-03 / Zaktualizowano 2026-11-03 / Autor Yuki Nakazawa

Monitorowanie czarnych list polega na cyklicznym odpytywaniu kilku list blokujących DNS (DNSBL) o adresy IP i domeny nadawcze oraz wysyłaniu alertu tylko wtedy, gdy wynik się zmieni. Wykrycie wpisu w chwili jego pojawienia się, a nie dopiero wtedy, gdy klienci zgłaszają odrzucaną pocztę, daje czas na ustalenie przyczyny i złożenie wniosku o usunięcie, zanim szkody się rozprzestrzenią.

Są dwa praktyczne sposoby: samodzielne uruchamianie niewielkiego skryptu z dig i cron albo powierzenie sprawdzeń usłudze przez API i webhooki. W obu przypadkach o tym, czy monitor mówi prawdę, decydują dwa szczegóły: zapytania wysyłane przez publiczne resolvery są odrzucane przez listy takie jak Spamhaus i dają mylące odpowiedzi, a kodów błędów nigdy nie wolno liczyć jako wpisów.

Przytoczone tu zasady operatorów list opierają się na ich oficjalnych stronach według stanu na listopad 2026. Zasady się zmieniają, dlatego przed oparciem się na danej konfiguracji warto je potwierdzić. Podstawy działania DNSBL wyjaśnia artykuł czym jest DNSBL (RBL).

Sprawdź bezpłatnie, czy Twoja domena lub adres IP znajduje się na którejś z około 345 czarnych list.

Ustal, co monitorować i które listy odpytywać

Zacznij od spisania obiektów, które faktycznie trzeba obserwować.

Format zapytania definiuje RFC 5782. W przypadku IPv4 odwraca się kolejność oktetów i dopisuje strefę listy, więc 192.0.2.99 na danej liście staje się 99.2.0.192 z dopisaną nazwą strefy. W przypadku IPv6 adres zapisuje się jako 32 półbajty (nibble) szesnastkowe w odwrotnej kolejności. Domenę po prostu umieszcza się przed strefą. Wpisany obiekt zwraca rekord A, zgodnie z konwencją z zakresu 127.0.0.0/8; niewpisany zwraca NXDOMAIN. RFC zaznacza też, że listy powinny publikować rekord TXT wyjaśniający powód wpisu.

Warto obserwować kilka list, a nie jedną, ponieważ odbiorcy nie korzystają z tych samych list. Znaczenie poszczególnych kodów odpowiedzi zależy od operatora; najczęstsze omawia nasz poradnik o kodach odpowiedzi DNSBL.

Dlaczego publiczne resolvery dają błędne odpowiedzi

Częstym błędem w samodzielnie budowanym monitoringu jest wysyłanie zapytań przez publiczny resolver, taki jak Google Public DNS (8.8.8.8) lub Cloudflare (1.1.1.1). Oficjalne FAQ Spamhaus dotyczące korzystania z DNSBL wyjaśnia, co się wtedy dzieje:

Główne zalecenie FAQ to uruchomienie własnego resolvera DNS. Użytkownikom, którzy muszą pozostać przy publicznym resolverze, Spamhaus wskazuje swoją usługę Data Query Service (DQS); w jej warunkach należy sprawdzić, co jest bezpłatne. Aby zobaczyć, z którego resolvera faktycznie korzystasz, FAQ sugeruje dig txt whoami.fastly.net.

RFC 5782 dodaje wbudowany test poprawności: lista IPv4 musi zawierać wpis dla 127.0.0.2 i nie może zawierać 127.0.0.1, a klienci powinni okresowo sprawdzać te wpisy testowe, aby potwierdzić, że lista działa. W przykładzie Spamhaus 2.0.0.127.zen.spamhaus.org zwraca 127.0.0.10, 127.0.0.4 i 127.0.0.2, a 1.0.0.127.zen.spamhaus.org zwraca NXDOMAIN. Monitor powinien najpierw wykonać ten test i odrzucić cały przebieg, jeśli test się nie powiedzie.

Opcja 1: skrypt z dig i cron

Oto minimalny skrypt, który sprawdza jeden adres IPv4 na Spamhaus ZEN i SpamCop (bl.spamcop.net, który według dokumentacji SpamCop zwraca 127.0.0.2 dla wpisanego IP). Zastąp adres i strefy własnymi.

#!/bin/sh
# Odpytuj własny resolver rekurencyjny (np. unbound na tym samym hoście), nigdy publiczny
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
  # Jeśli wpis testowy 127.0.0.2 nie zwraca kodu wpisu, nie ufaj temu przebiegowi
  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

Co robi skrypt:

Następnie niech cron porównuje każdy przebieg z poprzednim i wysyła wiadomość tylko wtedy, gdy coś się zmieniło:

# Przykład: uruchamiaj co godzinę, wysyłaj wiadomość tylko, gdy wynik różni się od poprzedniego
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

Interwał godzinowy to tylko przykład. Spamhaus oferuje bezpłatny dostęp przy niewielkim, niekomercyjnym użyciu, a klienci przekraczający jego próg liczby zapytań potrzebują opcji płatnej; w miarę wzrostu liczby monitorowanych adresów IP sprawdzaj warunki każdej listy. FAQ zaleca też kilkukrotne wykonanie poleceń, aby potwierdzić, że wyniki się nie zmieniają.

Opcja 2: API wsadowe DNSBL Checker i webhooki

Jeśli wolisz nie utrzymywać resolvera i reguł interpretacji dla każdej listy, możesz powierzyć sprawdzanie usłudze. Poniżej opisano API v1 tej witryny w zakresie tego, co faktycznie robi implementacja po stronie serwera. Dokumentacja znajduje się pod adresem /en/api-docs, a klucze wydaje się na stronie konta pod adresem /account. Rejestracja wymaga tylko adresu e-mail, a logowanie odbywa się za pomocą linku wysyłanego e-mailem.

Uwierzytelnianie i limity

Sprawdzenia wsadowe

Wyślij tablicę targets z nazwami domen lub adresami IP do 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"]}'

Jeśli któryś cel wymaga jeszcze sprawdzenia, odpowiedzią jest 202 z batch_id. Odpytuj GET /api/v1/batch/{batch_id} co kilka sekund, aż status przyjmie wartość done (przykład skrócony; liczby i nazwa listy są poglądowe, a nie rzeczywistym wynikiem):

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

Monitorowanie z webhookami

Zarejestruj target i callback_url za pomocą POST /api/v1/monitors. Każdy zarejestrowany cel jest wtedy sprawdzany raz dziennie z pominięciem pamięci podręcznej (pierwsze sprawdzenie następuje w ciągu około doby od rejestracji), a JSON metodą POST jest wysyłany na Twój URL tylko przy pierwszym sprawdzeniu (monitor.initial) oraz wtedy, gdy werdykt zmienia się między listed a 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", ""))

Projektowanie alertów: częstotliwość, wiele list i fałszywe alarmy

Monitor jest przydatny tylko wtedy, gdy po kilku miesiącach ludzie nadal czytają jego alerty. Taki, który alarmuje bez przerwy, szybko zaczyna być ignorowany.

Częstotliwość

Kilka list

Fałszywe alarmy i odpowiedzi przejściowe

Co zrobić po wykryciu wpisu

  1. Potwierdź go. Sprawdź stronę sprawdzania prowadzoną przez operatora i zanotuj nazwę listy, czas oraz ewentualny podany powód.
  2. Najpierw usuń przyczynę. Szukaj przejętych kont, nadużytych formularzy WWW, zainfekowanych maszyn, zaniedbanych list adresowych oraz niezgodnego odwrotnego DNS (PTR) lub nazw HELO. Wniosek o usunięcie złożony, gdy przyczyna nadal istnieje, zwykle prowadzi do nowego wpisu.
  3. Postępuj zgodnie z procedurą usuwania danej listy. Decyzja o usunięciu należy do operatora każdej listy, a złożenie wniosku nie gwarantuje zdjęcia wpisu. Jeśli nie kontrolujesz adresu IP, jak w przypadku hostingu współdzielonego, skontaktuj się z dostawcą hostingu lub ISP.
  4. Pozwól monitorowi potwierdzić wynik. Odbiorcy stosują też własne filtry, więc po powrocie werdyktu do clean nadal obserwuj dostarczanie.

Do jednorazowego sprawdzenia adresu IP lub domeny użyj narzędzia do sprawdzania czarnych list. Jeśli ustalenie przyczyny lub obsługa wniosków przerasta Twoje możliwości, możesz poprosić nas o pomoc. Pełną ścieżkę diagnostyczną przy odrzucanej poczcie opisuje artykuł poczta blokowana przez czarne listy.

Jeśli wolisz nie zajmować się tym samodzielnie

Polecamy firmy, które przyjmują zlecenia usunięcia z list, konsultacje i doradztwo (od JPY 50,000). O usunięciu z listy decyduje operator danej listy, dlatego nie można go zagwarantować.

Poproś o pomoc

Ta strona może otrzymywać prowizję od polecanych firm. About

Najczęściej zadawane pytania

Sprawdziłem przez 8.8.8.8 i nie ma wpisu. Czy mój adres jest czysty?

Niekoniecznie. FAQ Spamhaus podaje, że zapytania przez bezpłatne otwarte resolvery, takie jak Google Public DNS, w większości przypadków otrzymują odpowiedź „brak wpisu” (NXDOMAIN), więc wpisany adres IP może wyglądać na czysty. Odpytuj z własnego resolvera albo skorzystaj ze strony sprawdzania prowadzonej przez operatora.

Otrzymałem 127.255.255.254. Czy to oznacza, że jestem wpisany?

Nie. To kod błędu zwracany dla zapytań przez publiczny lub otwarty resolver, a Spamhaus podaje, że nie oznacza on wpisania obiektu. Zapisz go jako błąd i nie wysyłaj alertu o wpisie.

Czy wystarczy codziennie wywoływać API wsadowe jako monitor?

Zlecenie wsadowe może zwrócić zapisany wynik sprzed nawet 30 dni, więc nie zawsze jest to dzisiejszy stan. Sprawdzaj checked_at albo użyj monitorowania z webhookami (POST /api/v1/monitors), które codziennie wykonuje świeże sprawdzenie.

Czy wnioskować o usunięcie od razu po alercie?

Najpierw usuń przyczynę. Wniosek złożony, gdy problem nadal istnieje, zwykle kończy się nowym wpisem. Decyzja zawsze należy do operatora listy.

Wykorzystane strony oficjalne

Fakty podane w tym artykule zostały sprawdzone w momencie publikacji na poniższych stronach oficjalnych. Zasady i działanie usług mogą się zmienić bez uprzedzenia, dlatego przed podjęciem ważnych decyzji warto sprawdzić strony oficjalne.

Powiązane poradniki

Kody odpowiedzi DNSBL: 127.0.0.2, 127.255.255.x i NXDOMAIN

Jak czytać kody odpowiedzi DNSBL: co oznacza 127.0.0.2 według RFC 5782, kody Spamhaus, SpamCop i UCEPROTECT, kody błędów oraz NXDOMAIN a SERVFAIL.

Usunięcie ze Spamhaus: jak usunąć adres IP lub domenę z listy

Jesteś na liście Spamhaus? Sprawdź, na której (ZEN, PBL, XBL, CSS, SBL, DBL), co oznaczają kody odpowiedzi i jak wygląda ścieżka usunięcia z każdej z nich.

E-mail na czarnej liście? Jak odczytać zwrot i usunąć się z listy

E-mail zablokowany przez czarną listę? Odczytaj kod zwrotny, sprawdź przyczyny we właściwej kolejności i złóż wniosek o usunięcie we właściwy sposób.

Wszystkie poradniki →