Icinga 2: DNSBL Check mit Icinga 2 und check_rbl

Viele Mailserver überprüfen vor dem anliefern eine E-Mail, ob der versendende Server auf einer Blacklist steht. Dazu fragen sie via DNS bei einem Blacklist Provider an. Gibt dieser eine IP Adresse aus dem Bereich 127.0.0.1/24 zurück, dann steht der Server auf der Blacklist. Das Resultat: Die E-Mails werden nicht mehr angenommen. Wird der Fehler NXDOMAIN (also „nicht gefunden“) zurück geliefert ist kein Eintrag auf der Blacklist vorhanden.
Für Firmen ist ein Eintrag auf einer Blacklist nichts schönes, doch auch für private Mailserver ist so ein Check sinnvoll. Normalerweise landet man schneller auf einer Blacklist als eine Abusemeldung beim Provider eintrifft und bearbeitet wird. Sobald diese eintrifft, kann man den Provider wenigstes beschwichtigen und sagen, dass das Problem schon bekannt und hoffentlich auch schon behoben ist.

Mit den Boardmitteln check_dns oder check_dig kann man leider nicht arbeiten, da man nicht auf NXDOMAIN prüfen kann.

check_rbl

Es gib auf GitHub das Plugin check_rbl von Matteo Corti, mit dem die Prüfung möglich ist. Das Script nimmt eine Domain oder IP-Adresse und prüft sie gegen eine Liste von Blacklists. Leider wird kein CheckCommand mitgeliefert. Das CheckCommand von Markus Benning hat mir nicht gefallen, da ich dort nicht in der Lage bin verschiedene IPs gegen verschiedenen Blacklists zu checken. Deshalb habe ich es etwas angepasst:

object CheckCommand "dnsbl" {
 import "plugin-check-command"

 command = [ PluginDir + "/check_rbl" ]
 
 arguments = {
   "-t" = "$dnsbl_timeout$"
   "-H" = "$dnsbl_address$"
   "-s" = {
   value = "$dnsbl_lists$"
   repeat_key = true
 }
}
 
 vars.dnsbl_address = "$address$"
 vars.dnsbl_timeout = "60"
}

Ein Service Objekt sieht dann zum Beispiel so aus:

object Service "dnsbl" {
 import "hourly-service"

 check_command = "dnsbl"
 display_name = "DNSBL mineralwasser.veloc1ty.de"
 host_name = "mineralwasser"
 command_endpoint = NodeName

 vars.dnsbl_address = "31.220.45.3"
 vars.dnsbl_lists = [
 "cbl.abuseat.org",
 "dnsbl.cyberlogic.net",
 "bl.deadbeef.com",
 "zen.spamhaus.org"
 ]
}

Würde ich jetzt eine zweite IP mit anderen Blacklists abfragen wollen, dann müsste ich einfach nur das Array dnsbl_lists ändern.

Further Reading