Ars Longa, Vita Brevis

Как использовать DNS Blacklist для помещения комментариев в очередь на модерирование

Как-то на досуге я занялся анализом приходящего спама и обратил внимание, что практически 98% спама в комментариях приходят с IP-адресов, замеченных в рассылке спама по электронной почте. А спамеры обычно попадают в черные списки (blacklist).

DNSBLDNS blacklist или DNS blocklist — списки хостов, хранимые с использованием системы архитектуры DNS. Обычно используются для борьбы со спамом. Почтовый сервер обращается к DNSBL, и проверят в нём наличие IP-адреса клиента, с которого он принимает сообщение. При положительном ответе считается, что происходит попытка приёма спам-сообщения, и оно блокируется (не принимается сервером, и, как правило, отправителю отсылается уведомление об этом).

Идея состоит в том, чтобы написать расширение для WordPress, проверяющее наличие IP-адреса комментатора в чёрном списке.

Есть два (интересующих в данный момент) типа DNSBL: LHSBL (Left Hand Side Blacklist) и RHSBL (Right Hand Side Blacklist). Основная разница в том, что в LHSBL проверяются IP-адреса, а в RHSBL проверяются доменные имена.

Проверка адреса в LHSBL

Пусть, например, имеется IP-адрес 62.85.45.84 (спамер, привет!). Допустим, мы хотим его проверить в списке dnsbl-3.uceprotect.net.

Для этого мы "обращаем" IP-адрес (то есть из 62.85.45.84 делаем 84.45.85.62) и добавляем его к имени хоста списка. в результате получим имя 84.45.85.62.dnsbl-3.uceprotect.net.

В PHP проверку можно сделать, например, при помощи функции gethostbyname(). Для простоты можно выполнить запрос и при помощи утилиты host:

[-]
View Code Bash
host -t any 84.45.85.62.dnsbl-3.uceprotect.net

В результате получим

84.45.85.62.dnsbl-3.uceprotect.net has address 127.0.0.2

Когда возвращается адрес 127.0.0.0/8, это означает, что адрес в черном списке (конкретное значение зависит от самого списка; например, 127.0.0.2 может означать открытый релей, 127.0.0.3 — открытый прокси-сервер и т.п.).

Если же возвращается ошибка NXDOMAIN (несуществующий домен), адрес не в черном списке.

В Windows, где утилиты host нет (поправьте меня, если ошибаюсь), проверку можно выполнить утилитой nslookup:

[-]
View Code Bash
nslookup 84.45.85.62.dnsbl-3.uceprotect.net

На моём компьютере ответ был таким:

Server:         10.10.0.15
Address:        10.10.0.15#53

Non-authoritative answer:
Name:   84.45.85.62.dnsbl-3.uceprotect.net
Address: 127.0.0.2

Проверка адреса в RHSBL

Проверка в RHSBL аналогична проверке в LHSBL; разница состоит в том, что вместо IP-адреса проверяется доменное имя.

Например, если мы хотим проверить oardo.com (Дэвид, привет!) в списке multi.surbl.org, нам нужно проверить существование имени (записи A или AAAA) oardo.com.multi.surbl.org:

[-]
View Code Bash
host -t any oardo.com.multi.surbl.org

Результат:

oardo.com.multi.surbl.org descriptive text "Blocked, oardo.com on lists [ob], See: http://www.surbl.org/lists.html"
oardo.com.multi.surbl.org has address 127.0.0.16

Аналогично, если запись не в черном списке, возвращается NXDOMAIN.

Пример очень простого скрипта на PHP (на коленке за 5 минут), проверяющего черные списки:

[-]
View Code PHP
<pre>
<?php
    $lhsbls = array(
        'dnsbl.ahbl.org',
        'dnsbl.isoc.bg',
        'cbl.abuseat.org',
        'bl.csma.biz',
        'list.dsbl.org',
        'bl.emailbasura.org',
        'dnsbl-1.uceprotect.net',
        'dnsbl-2.uceprotect.net',
        'dnsbl-3.uceprotect.net',
        'zen.spamhaus.org',
        'bl.spamcop.net',
        'bl.spamcannibal.org',
        'dnsbl.sorbs.net',
        'dnsbl.rangers.eu.org',
        'psbl.surriel.com',
        'combined.rbl.msrbl.net',
        'noptr.spamrats.com',
        'zombie.dnsbl.sorbs.net',
        'badconf.rhsbl.sorbs.net',
        'dyna.spamrats.com',
        'intercept.datapacket.net',
        'blacklist.hostkarma.com',
        'postmaster.rfc-ignorant.org',
        'abuse.rfc-ignorant.org',
        'whois.rfc-ignorant.org',
        'bogusmx.rfc-ignorant.org',
    );
 
    $rhsbls = array(
        'abuse.rfc-ignorant.org',
        'bogusmx.rfc-ignorant.org',
        'dsn.rfc-ignorant.org',
        'dynamic.rhs.mailpolice.com',
        'l1.apews.org',
        'multi.surbl.org',
        'multi.uribl.com',
        'postmaster.rfc-ignorant.org',
        'rddn.dnsbl.net.au',
        'rhsbl.ahbl.org',
        'rhsbl.sorbs.net',
        'webmail.rhs.mailpolice.com',
    );
 
    $ip   = 'IP ADDRESS HERE';
    $host = gethostbyaddr($ip);
 
    $rev = preg_replace('/^(\\d+)\.(\\d+)\.(\\d+)\.(\\d+)$/', '$4.$3.$2.$1', $ip);
 
    foreach ($lhsbls as $entry) {
        print "Querying {$entry}...";
        $res = gethostbyname($rev . '.' . $entry);
        print $res . "\n";
    }
 
    print "\n\n{$host}\n\n";
    foreach ($rhsbls as $entry) {
        print "Querying {$entry}...";
        $res = gethostbyname($host . '.' . $entry);
        print $res . "\n";
    }
?>

Будет время, нужно будет попробовать написать плагин для WordPress…

Комментарии к статье "Использование DNSBL для борьбы со спамом в комментариях" (2) »

  1. [Май 4, 2008 10:42 пп] oyfNJ:

    Hi, Your Site is Very Informative, Thanks

    #1
  2. [Май 4, 2008 10:52 пп] Vladimir:

    oyfNJ, or whosoever you are (I guess you are a spam bot, but anyway)… All offtopic and spam links are ruthlessly killed by the Spam Recognition System, our secret weapon :-) So don’t waste your time :-)

    I remember one wise man saying, If you have nothing to do, don’t do it here, please!

    #2

RSS лента комментариев к этой записи. TrackBack URL

Оставить комментарий к записи "Использование DNSBL для борьбы со спамом в комментариях"

Изображения должны быть включены!

XHTML: Вы можете использовать эти теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, Вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя