zurück zum Artikel

Mail-Blacklist-Überwachung [Update]

| Johannes Endres

DNS-Blocklisten tragen zur wirksamen Spam-Abwehr bei. Doch wenn man selbst auf eine solche Liste gerät, bleibt die abgehende Mail plötzlich stecken. Zwei einfache Skripte informieren den Postmaster automatisch, sobald sein Server fälschlich gelistet wird.

Update 4.8.09: Wir haben die Liste der Blacklisten erweitert und zwei kleine Fehler in den Skripten korrigiert.

Update 14.1.14: Da der Dienstleister AHBL seinen Service eingestellt hat [1], haben wir die betreffenden Abfragen und Tabelleneinträge entfernt.

Blocklisten wie NiX-Spam [2] sind eins der Elemente, die zu einer wirksamen Spam [3]-Abwehr beitragen. Der empfangende Mail-Server prüft mit einer DNS [4]-Abfrage, ob der einliefernde Server auf einer der Listen steht und unterbricht dann gegebenenfalls die Verbindung. Wegen dieser Abfragemethode heißen die üblichen Listen DNS-Blacklisten (DNSBL).

Die Kriterien, nach denen eine IP-Adresse auf einer Liste landen, sind sehr unterschiedlich. So versucht die Policy Block List [5] von Spamhaus.org, alle Adressen zu erfassen, die die Provider ihren Kunden bei der Einwahl vergeben. Ein Rechner mit einer solchen dynamischen IP-Adresse ist höchstwahrscheinlich kein regulärer Absender, sondern eher eine per Trojaner [6] gekaperte Spam-Schleuder, sodass es manchem Postmaster sinnvoll erscheint, sie zu blockieren.

Häufiger sind jedoch Listen, auf denen die Adressen von Servern landen, die tatsächlich Spam verschickt haben. So nutzt beispielsweise die NiX-Spam-Liste [7] eine Kombination aus User-Meldungen und Spam-Fallen, die automatisch reagieren.

Auf solchen Listen kann aber auch ein Server landen, der gar keinen Spam versendet. Das passiert zum Beispiel, wenn ein Internet-Nutzer einen Newsletter abonniert hat, dies später vergisst und den eingehenden Newsletter als Spam betrachtet. Wenn er den Absender dann bei einer DNSBL meldet, landet darauf ein Server, der gar nichts Unrechtes getan hat.

Manche Listen sperren (anders als NiX-Spam) keine einzelnen Adressen, sondern immer gleich ganze Blöcke, wenn ein Server daraus Spam verschickt. Bei dedizierten Servern (root-Servern), die sich beim Hoster ein Netzwerk teilen, kann das fatal sein: Wenn nur einer der (Freizeit-)Admins seinen Server nicht unter Kontrolle hat und ihn an einen Spammer verliert, stehen plötzlich auch die besser gesicherten Netz-Nachbarn auf einer DNSBL.

Über diese und andere Wege kann also durchaus auch der Server eines Postmasters, der alles richtig macht und keinen Spam verschickt, auf einer DNSBL landen. Das fällt dann meist eher zufällig auf, wenn die Mail eines Users mit einer Fehlermeldung zurückkommt. Weil aber einige Server so konfiguriert sind, dass sie im Falle eines DNSBL-Treffers die Verbindung ohne Fehlermeldung abbrechen, können die Fehlermeldungen ausbleiben. Dann verschwinden wahrscheinlich allerhand E-Mails im Orkus, bevor der Postmaster etwas merkt.

Daher sollte er regelmäßig prüfen, ob die IP-Adresse seines absendenden Servers blockiert wird. Das muss keine Handarbeit sein, sondern kann ebenso automatisch ablaufen wie die DNSBL-Abfrage im empfangenden Server.

Wir stellen hier Skripte für zwei Methoden vor: Zum einen einen Cron-Job, der sich per Mail meldet, und zum anderen ein Plug-In für das Systemüberwachungssystem Nagios [8]. Daraus lassen sich auch leicht Skripte für andere Umgebungen ableiten.

Die Abfrage funktioniert für alle DNSBL gleich, nämlich ähnlich wie die Rückwärtsauflösung einer IP-Adresse zu einem Namen: Die Bytes der Adresse werden in umgekehrte Reihenfolge gebracht, und dann die passende Domain angehängt, damit die Anfrage auch genau bei dem richtigen Server landet. Um beispielsweise zu kontrollieren, ob die Adresse 192.0.2.123 auf der NiX-Spam-Liste steht, fragt man nach 123.2.0.192.ix.dnsbl.manitu.net, etwa mit nslookup oder dig.

Wenn die Adresse nicht auf der Liste steht, liefert der DNS-Server eine Fehlermeldung zurück, andernfalls eine Adresse im Bereich 127.0.0.x. Einige Listen kodieren im x weiter Informationen, etwa den Grund, warum diese Adresse gelistet wird. Doch für die Selbstkontrolle des Postmaster genügt die Information, dass sein Server überhaupt auf der Liste steht.

Ein minimales Skript wandelt also zuerst die zu prüfende IP-Adresse von der Kommandozeile ins richtige Format und klappert dann eine Liste von DNSBLs ab. Wenn als Antwort eine Adresse zurückkommt, die mit 127.0.0. beginnt, gibt es eine Meldung aus:

#!/bin/sh

DNSBLlist="ix.dnsbl.manitu.net
bl.spamcannibal.org
xbl.spamhaus.org"

set `IFS=".";echo $1`
ip_arpa=$4.$3.$2.$1

for l in $DNSBLlist
do
if nslookup $ip_arpa.$l | grep -q "Address: 127.0.0."
then
echo "$1 steht auf $l"
fi
done

Im Prinzip könnte man dieses Skript schon als cron-Job regelmäßig laufen lassen. Wenn eine Meldung ausgegeben wird, schickt cron sie automatisch per Mail. Allerdings geht die Warn-Mail abhängig von der cron-Konfiguration nicht unbedingt an den Postmaster. Wir stellen daher unten eine wesentlich erweiterte Version des Skripts zur Verfügung, in die Sie oben die Postmaster-Adresse eintragen. Außerdem ist die Liste der DNSBL dort so aufgebaut, dass Sie einzelne Einträge mit einem # auskommentieren können.

Mehr Infos

Standalone-Skript

#!/bin/sh
#
# dnsbl-check-standalone.sh
#
# By Damon Tajeddini (dta)
# # 10.03.2009
#
MAIL_RCPT="postmaster@example.com"

DNSBLlist=`grep -v ^# <<!
cbl.abuseat.org
virbl.dnsbl.bit.nl
blackholes.five-ten-sg.com
dnsbl.inps.de
ix.dnsbl.manitu.net
no-more-funn.moensted.dk
combined.njabl.org
dnsbl.njabl.org
dnsbl.sorbs.net
bl.spamcannibal.org
bl.spamcop.net
sbl.spamhaus.org
xbl.spamhaus.org
pbl.spamhaus.org
dnsbl-1.uceprotect.net
# dnsbl-2.uceprotect.net
# dnsbl-3.uceprotect.net
psbl.surriel.com
l2.apews.org
dnsrbl.swinog.ch
db.wpbl.info
!`

# reverse IP address bytes
convertIP()
{
set `IFS=".";echo $1`
echo $4.$3.$2.$1
}

usage()
{
echo "Usage: $0 [-H <host>|-p]"
echo " -H IP address to check"
echo " -p Print list of DNSBLs"
exit 3
}

# Checks the IP with list of DNSBL servers
check()
{
for i in $DNSBLlist
do
if dig $ip_arpa.$i +short | grep -q "^127.0.0."
then
mail -s "** Service Alert: $ip found on $i **" $MAIL_RCPT <<!
*** DNSBL WARNING ***
Service: $progname
Host: `hostname`
Date/Time: `date`
Additional Info: DNSBL-Alarm: $ip is listed on $i
!
fi
done
exit
} # check

case $1 in
-H)
if [ -z "$2" ]; then
echo "ip address missing"
exit
fi
ip=$2
ip_arpa=`convertIP $ip`
check;;

-p)
for i in $DNSBLlist
do
echo $i
done
exit;;

--help)
usage
exit;;

*)
if [ -z "$1" ]; then
usage
fi
echo "unknown command: $1"
exit;;
esac

Wer Nagios [9] einsetzt, um seine Systeme zu überwachen, kann die DNSBL-Abfrage auch dort integrieren. Das hat den Vorteil, dass die Warnung nicht als Mail an einen einzelnen Admin geht, sondern über das Nagios-eigene Alarm-System verschiedene Informationswege genutzt werden können. Nach demselben Prinzip lässt sich die Abfrage auch in andere Überwachungssysteme einbauen, die ein Plug-In-Konzept haben.

Wie Nagios grundsätzlich aufgesetzt wird, beschriebt der Artikel Netzwerküberwachung mit Nagios [10]. Dort steht auch, wie ein Plug-In auszusehen hat: Eine ausführbare Datei, die im Exit Code den Zustand des geprüften Dienstes zurück liefert und einen Warntext für den Admin ausgibt. Nagios ruft das Plug-In dann mit der IP-Adresse des Mail-Servers auf und speist die Ergebnisse sowohl in die Web-Oberfläche als auch ins Alarm-System ein.

Mehr Infos

Die Nagios-Variante

#!/bin/sh
#
# dnsbl-check-nagios.sh
#
# (c) 2009 Damon Tajeddini & heise Netze
#
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
STATE_DEPENDENT=4

FOUND_ADRESS=0

DNSBLlist=`grep -v ^# <<!
cbl.abuseat.org
virbl.dnsbl.bit.nl
blackholes.five-ten-sg.com
dnsbl.inps.de
ix.dnsbl.manitu.net
no-more-funn.moensted.dk
combined.njabl.org
dnsbl.njabl.org
dnsbl.sorbs.net
bl.spamcannibal.org
bl.spamcop.net
sbl.spamhaus.org
xbl.spamhaus.org
pbl.spamhaus.org
dnsbl-1.uceprotect.net
# dnsbl-2.uceprotect.net
# dnsbl-3.uceprotect.net
psbl.surriel.com
l2.apews.org
dnsrbl.swinog.ch
db.wpbl.info
!`

# reverse IP address
convertIP()
{
set `IFS=".";echo $1`
echo $4.$3.$2.$1
}

usage()
{
echo "Usage: $0 [-H] <host>] [-p]"
echo " -H check Host "
echo " -p print list of DNSBLs"
exit 3
}

# Checks the IP with list of DNSBL servers
check()
{
count=0;
for i in $DNSBLlist
do
count=$(($count + 1))
if nslookup $ip_arpa.$i | grep -q "127.0.0." ;
then
FOUND_ADRESS=$(($FOUND_ADRESS + 1))
echo "DNSBL-Alarm: $ip is listed on $i"
fi
done
if [ $FOUND_ADRESS -ge 1 ]
then
exit 1
fi
echo "OK - $ip not on $count DNSBLs"
exit 0
}

case $1 in
-H)
if [ -z "$2" ]
then
echo "ip address missing"
exit
fi
ip=$2
ip_arpa=`convertIP $ip`
check;;

-p)
for i in $DNSBLlist
do
echo $i
done
exit $STATE_WARNING
exit;;

--help)
usage
exit;;

*)
if [ -z "$1" ]
then
usage
fi
echo "unknown command: $1"
exit;;
esac

Wenn eines unserer beiden Skripte einen Alarm auslöst, sollte der Postmaster sich schnell bemühen, wieder von der Liste zu kommen. Dafür gibt es überall dokumentierte Verfahren. Links zu den jeweiligen Seiten haben wir hier zusammengestellt.

Name DNS-Domain im Skript Link zur Löschung von der DNBSL
APEWSL2 l2.apews.org http://www.apews.org/?page=faq [11]
Composite Block List cbl.abuseat.org http://cbl.abuseat.org/lookup.cgi [12]
DNS Black Hole List dnsbl.inps.de http://dnsbl.inps.de/removereq.cgi [13]
Exploits Blocklist xbl.spamhaus.org http://www.spamhaus.org/xbl/index.lasso [14]
five-ten-sg.com blackholes.five-ten-sg.com http://www.five-ten-sg.com/blackhole.php [15]
NiX Spam ix.dnsbl.manitu.net http://www.dnsbl.manitu.net/ [16]
no-more-funn no-more-funn.moensted.dk http://moensted.dk/spam/no-more-funn/ [17]
Not Just Another Bogus List combined.njabl.org http://njabl.org/remove.html [18]
Not Just Another Bogus List dnsbl.njabl.org http://njabl.org/remove.html [19]
PSBL SURRIEL psbl.surriel.com http://psbl.surriel.com/remove [20]
SpamCannibal bl.spamcannibal.org http://www.spamcannibal.org/cannibal.cgi [21]
SpamCop bl.spamcop.net Die IP wird automatisch binnen 24 Stunden gelöscht
Spamhaus Block List sbl.spamhaus.org http://www.spamhaus.org/sbl/delistingprocedure.html [22]
SWINOG DNSRBL dnsrbl.swinog.ch http://antispam.imp.ch/spamikaze/remove.php [23]
UCEPROTECT BL dnsbl-1.uceprotect.net http://www.uceprotect.net/de/rblcheck.php [24]
UCEPROTECT BL dnsbl-2.uceprotect.net http://www.uceprotect.net/de/rblcheck.php [25]
UCEPROTECT BL dnsbl-3.uceprotect.net http://www.uceprotect.net/de/rblcheck.php [26]
Virus BL virbl.dnsbl.bit.nl Die IP wird automatisch binnen 24 Stunden gelöscht
Weighted Private BL db.wpbl.info http://www.wpbl.info/cgi-bin/detail.cgi [27]

()


URL dieses Artikels:
https://www.heise.de/-221552

Links in diesem Artikel:
[1] https://www.heise.de/news/DNS-Blacklist-AHBL-stellt-Betrieb-ein-2513094.html
[2] http://www.heise.de/ix/nixspam/
[3] http://www.heise.de/glossar/entry/Spam-399505.html
[4] http://www.heise.de/glossar/entry/Domain-Name-System-398615.html
[5] http://www.spamhaus.org/pbl/
[6] http://www.heise.de/glossar/entry/Trojanisches-Pferd-395498.html
[7] http://www.heise.de/ix/nixspam/
[8] https://www.heise.de/ratgeber/Netzwerkueberwachung-mit-Nagios-221683.html
[9] http://www.heise.de/netze/software/download/nagios/34227
[10] https://www.heise.de/ratgeber/Netzwerkueberwachung-mit-Nagios-221683.html
[11] http://www.apews.org/?page=faq
[12] http://cbl.abuseat.org/lookup.cgi
[13] http://dnsbl.inps.de/removereq.cgi
[14] http://www.spamhaus.org/xbl/index.lasso
[15] http://www.five-ten-sg.com/blackhole.php
[16] http://www.dnsbl.manitu.net/
[17] http://moensted.dk/spam/no-more-funn/
[18] http://njabl.org/remove.html
[19] http://njabl.org/remove.html
[20] http://psbl.surriel.com/remove
[21] http://www.spamcannibal.org/cannibal.cgi
[22] http://www.spamhaus.org/sbl/delistingprocedure.html
[23] http://antispam.imp.ch/spamikaze/remove.php
[24] http://www.uceprotect.net/de/rblcheck.php
[25] http://www.uceprotect.net/de/rblcheck.php
[26] http://www.uceprotect.net/de/rblcheck.php
[27] http://www.wpbl.info/cgi-bin/detail.cgi