Ограничение доступа к веб-сайту с использованием DNSBL

()

DNSBL - это технология публичных чёрных списков с использованием DNS. То есть мы можем проверить наличие IP-адреса в чёрном списке простым выполнением одного запроса к DNS. Наибольшую популярность DNSBL завоевали в качестве чёрных списков почтовых серверов, однако сейчас в эти списки вносятся так же анонимные прокси-сервера.

Наличие анонимных прокси-серверов в списках DNSBL может быть интересно веб-мастерам, которые думают над вопросом борьбы со "спамоботами" - ботами, заходящими на форумы и доски объявлений через анонимные прокси и оставляющие там нежелательные сообщения (спам).

Проверка на наличие или отсутствие IP-адреса в чёрном списке очень проста. Далее мы будем приводить примеры опираясть на чёрный список spamcop.net. Для других чёрных скписков иструкции выгядят примерно так же.

Итак. Допустим что нам нужно проверить наличие в чёрном списке адреса 11.33.22.44. Для этого нам надо выполнить запрос к DNS на разрешение имени хоста 44.22.33.11.bl.spamcop.net. Например вот так:

nslookup 44.22.33.11.bl.spamcop.net.

Если получим ответ - значит адрес в чёрном списке. Если же разрешить имя не удалось - значит адрес в чёрном списке отсутствует.

Соответственно если сайт написан на PHP то можно воспользоваться функцией gethostbyname. В случае если удалось разрешить имя - она возвращает IP-адрес. Если же нет - возвращает имя, которое мы и пытались разрешить. Используя это мы можем написать несложную функцию проверки наличия адреса в чёрном списке и добавить её к PHP-файлам нашего сайта. Код надо добавлять в самое начала файла index.php и остальных файлов, к которым будет обращаться посетитель. Добавляемый код выглядит примерно так:

# Функция проверки наличия IP-адреса в чёрном списке
function checkipbl($ip)
 {
  # Получаем имя хоста для разрешения
  $ip1=explode(".",$ip);
  $ip2=$ip1[3].".".$ip1[2].".".$ip1[1].".".$ip1[0].".bl.spamcop.net.";
  # Разрешаем имя хоста
  $r=gethostbyname($ip2);
  # Возвращаем результат - если удалось разрешить имя - возвращаем истину.
  # Если же нет - ложь.
  return ($r!=$ip2);
 }

# Если адрес клиента в чёрном списке...
if (checkipbl($_SERVER["REMOTE_ADDR"]))
 {
  # ...сообщаем ему об этом...
  print "Sorry, but your IP (".$_SERVER["REMOTE_ADDR"].") blacklisted at spamcop.net";
  # ...и завершаем скрипт.
  exit;
 }

Теперь если пользователь заходит с IP-адреса, находящегося в чёрном списке, на веб-сайт - ему будет показано сообщение вида: «Sorry, but your IP 11.33.22.44 blacklisted at spamcop.net».

Конечно в чёрном списке не все адреса спамеров, но хотя бы от части из них этот метод избавит. К тому же можно использовать несколько различных чёрных списоков, для повышения качества отсева.

Приятной работы!

Ключевые слова: web, spamcop.net, dnsbl, rbl, blacklist, php.

Комментарии:

Alex 2008-08-10 08:29:55 (#)

А в камментах будет выкладываться лог эффективности работы на примере сайта ylsoftware.com?
Например: дата, заблокировано, пропущено

MooSE 2008-08-10 18:35:19 (#)

А как по-твоему я буду палить пропущеные? Но вообще срабатывает не плохо судя по логу...

Alex 2008-08-10 21:19:05 (#)

Глазками смотришь на зарегистрированные акки ботами. Подключаешь свой математический аппарат и считаешь их. Вот тебе и пропущенные

MooSE 2008-08-11 08:28:28 (#)

я эту штуку отключил уже... нашёл более интересный способ от ботов избавляться...
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE