Holger Stehle

Softwareentwicklung und -architektur

« DNS-Sperrlisten abfragen

In diesem Artikel soll eine (sehr einfache) Möglichkeit der Abfrage von DNS-Blacklisten vorgestellt werden, die auch von vielen eMail-Systemen genutzt wird, um potentiellen Spam zu erkennen (und ggf. abzuweisen).

Zu den bekannten Anbietern entsprechender Dienste gehören beispielsweise:

Diese setze ich auch selbst ein und habe jeweils gute Erfahrungen damit gemacht. Bitte informiert euch jedoch vor einem Einsatz beim jeweiligen Anbieter über die genauen Konditionen, der kommerzielle Einsatz ist beispielsweise oftmals kostenpflichtig. Ebenso verhält es sich je nach Anbieter ab einem gewissen Abfragevolumen.

Um nun eine IP-Adresse gegen die entsprechenden Dienste prüfen zu können, müssen wir diese dem oben angegebenen Hostnamen in umgekehrter Reihenfolge voranstellen und eine Namensauflösung durchführen.

Konkret fragen wir also beispielsweise bei einer Prüfung der IP-Adresse 198.51.100.51 auf Spam-Aktivität laut Spamhaus das Ergebnis der Domain 51.100.51.198.zen.spamhaus.org ab.

Per C# könnte man dies nun beispielsweise wie folgt durchführen:

public static bool CheckBlacklisting(IPAddress ipAddress, string blacklist = "zen.spamhaus.org") {
    string ipAddressReversed = String.Join(".", ipAddress.GetAddressBytes().Reverse());
    string hostName = String.Concat(ipAddressReversed, ".", blacklist);

    try {
        foreach(IPAddress hostAddress in Dns.GetHostAddresses(hostName)) {
            /**
             * Achtung: Diese Implementierung ist naiv und sollte nicht direkt
             * übernommen werden. Je nach Anbieter, so beispielsweise auch bei
             * Spamhaus, gilt nicht der gesamte Loopback-Adressbereich als Spam.
             * Daher bitte vorher beim Anbieter informieren und konkretisieren!
            **/
            if(IPAddress.IsLoopback(hostAddress)) {
                return true;
            }
        }

        return false;
    } catch {
        return false;
    }
}

bool checkResult = CheckBlacklisting(IPAddress.Parse("198.51.100.51"));

Das Ergebnis der Namensauflösung, also die erhaltene IP-Adresse, gibt darüber hinaus tlw. Aufschluss über den genaueren Status. Spamhaus liefert dazu beispielsweise in ihren FAQ weiterführende Informationen.