Система адаптивного блокирования спама после первого факта рассылки. Copyright (c) 2003 by Maxim Chirkov http://www.opennet.ru/dev/spam_check/ Внимание !!! Используемая технология является вероятностной, основанной на совокупности субъективных факторов. Система не гарантирует полное отсутствие ложных блокировок (так же как и любая другая антиспам система, будь то DNSBL списки или контекстные фильтры). Используйте только на свой страх и риск, никаких гарантий не предоставляется. ============================================================================== Общий обзор технологий борьбы со спамом Методы определения спама: 1.1. Блокировка по сигнатурам (IP адресам, доменам, email'ам ("RCPT TO" и "MAIL FROM"), фрагментам спама); 1.2. Адаптивные методы (статистический и вероятностный анализ для выявления аномалий). Области данных на основании которой делается вывод о присутствии спама: 2.1. Анализ IP хоста отправителя; 2.2. Анализ email отправителя и получателя; 2.3. Анализ заголовка письма; 2.4. Анализ тела письма. Этапы на которых производится определение: 3.1. На этапе соединения с почтовым сервером (по IP и данным в "HELO", "RCPT TO" и "MAIL FROM"); 3.2. В момент передачи данных после "DATA", но до завершения сеанса; 3.2. После получения тела письма, но перед передачей локальному агенту для доставки в ящик (фильтры по заголовку и телу, контекстный анализ); 3.3. Через некоторое время после доставки пользователю (задача блокировать пересылку данного спама в будущем и для других пользователей). Например, следующие конструкции в postfix позволяют отсеять письма с заведомо несуществующих доменов и несуществующим адресатам, а также хосты предоставившие неправдоподобную информацию на этапе HELO: smtpd_sender_restrictions = reject_non_fqdn_sender, reject_unknown_sender_domain smtpd_recipient_restrictions = reject_non_fqdn_recipient reject_unknown_recipient_domain, check_relay_domains smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, reject_non_fqdn_hostname Цели блокирования спама: 4.1. Избавление от нежелательной рекламной корреспонденции, экономия трафика, времени и денег пользователя (конечный пользователь платит за получение спама); 4.2. Экономия трафика для провайдера (спам создает значительный паразитный трафик, если блокировать спам после его получения на почтовый сервер, то издержки за получение спама ложаться на провайдера); 4.3. Избавление от паразитной нагрузки на почтовый сервер, как результат - задержка отправления и приема нормальной корреспонденции (если спам блокируется после его получения, то отправка "bounce" сообщений на неотвечающие хосты может образовывать почтовую очередь в тысячи писем). Средства рассылки спама: 5.1. Открытые почтовые релеи (не так часто появляются и не так просто найти, быстро блокируются, обилие DSBL списков блокировки); 5.2. Открытые прокси (http, socks, см 5.1); 5.3. Взлом cgi-скриптов (formmail, см 5.1); 5.4. Рассылка через dial-up анонимно подключившись по карточке (большая рассылка не эффективна, DUL списки блокировки в сети, злоумышленник при желании легко вычисляется провайдером через АОН); 5.5. Взлом пользовательских машин подключенных через высокоскоростные каналы к сети (рассылка троянских программ, использование типовых уязвимостей) (слишком динамично появляются новые хосты для рассылки, невероятно большое число пользователей не заботятся о безопасности, высокоскоростные каналы доступа позволяют рассылать спам в огромных объемах за короткий промежуток времени). Справка: Открытые релеи не только плод неправильной конфигурации почтового сервера, например, был случай когда клиент не утруждая себя установкой почтового сервера настроил прямой редирект на SMTP сервер провайдера, никак не ограничив к потру редиректа доступ. Запросы через этот прокси-редирект для провайдера выглядели как IP клиента для которого релееинг почты был открыт. Такие методы, как контекстный анализ сообщения, будь то сложными статистическими методами или просто по regex маскам, приводится к тому что письмо определяется как спам и блокируется, но пропускается на сервер перед анализом, т.е. возникает паразитный трафик и нагрузка, задача экономии трафика не решается, наоборот возникает дополнительный трафик из-за попыток отправить сообщение о невозможности доставки письма адресату, на, как правило, несуществующий или не отвечающий хост. Pешения вида блокирования по *BL спискам или хостам и email отправителей, лишь частично решаются проблему, слишком динамично спамеры обнаруживают новые машины-жертвы. Блокировка по существующим DNSBL спискам охватывает как правило англоязычный спам, русские спамеры перешли на рассылку через взлом машин имеющих xDSL соединение, как правило ежедневно появляется тысячи новых точек распространения спама. DNSBL отлично справляются с 5.1, 5.2, 5.3 и 5.4. Для блокирования 5.5 нужна более оперативная реакция. ============================================================================== Описание реализованного метода борьбы со спамом. Предлагаемая система является адаптивной системой использующей для определения спамера только IP хоста отправителя из лог файла. Анализ производится по трем параметрам: - обратная проверка типовых взламываемых открытых потов; - интенсивность рассылки; - анализ имени хоста. За счет частичного пропуска первой волны spam сообщений (в "tail" режиме блокирование производится сразу после первого письма) нескольким адресатам, можно достаточно быстро заблокировать дальнейшее распространение спама с начавшего рассылку хоста. Т.е. используется система динамической обратной проверки хостов подозреваемых на спам. Вероятность блокирования хостов осуществляющих массовую пересылку нескольким адресатам возрастает. Система наиболее эффективна лишь на хостах с достаточно большим числом активных почтовых ящиков (не меньше 1000-2000, сейчас используется в двух системах с примерно 5000 и 9000 активных пользователей, для систем с небольшим трафиком эффективен "tail" режим слежения за лог файлом). Так же рекомендуется дополнительно использовать существующие DNSBL-системы, как первичный щит для блокирования спамеров (рекомендую: dsbl.org, proxies.relays.monkeys.com, relays.ordb.org). Блокирование производится на этапе подключения к серверу, при этом лишний трафик не принимается, "bounce" письмо не отправляется. Минус - принимаются первые несколько писем со спамом, так как проверка ведется в offline режиме, путем периодического анализа лог-файла (раз в N мин. или сразу после приема первого письма со спамом). При проверке на этапе соединения, создавалась бы ощутимая задержка необходимая для обратной проверки, что недопустимо. В настоящее время спамеры рассылают спам не только для всех пользователей сразу (и тем более отправка перебором типовых имен еще большая редкость), а стараются максимально приблизить параметры рассылки к реальному почтовому обмену. В дополнение к "периодическому" режиму слежения за изменением в лог файле (вызов из cron через определенные промежутки времени), реализован "интерактивный" режим - постоянное слежение за появлением новых записей в логе (как "tail -f"), при этом процесс должен запускаться один раз. Контроль ротации лога осуществляется автоматически. Факторы анализируемые при определении спама: - Обратная проверка на наличие открытых сетевых портов, сигнализирующих о наличии троянских программ или потенциальных уязвимостей; - Анализ уровня домена (спам с поддомена 5 уровня более вероятен, чем с 3, например: bzq-218-1-51.cable.test.com). - Учет ключевых слов сигнализирующих о неблагонадежности хоста (например: client, dial, dsl, cable, pool, ppp); - Интенсивность рассылки с данного хоста (чем больше отправлено сообщений в день - тем выше вероятность блокировки). ============================================================================== Установка и использование. - Отредактировать блок конфигурации в spam_check.pl под свою систему: # vi spam_check.pl # vi util/clean_dn.pl - Завести пользователя (например: antispam) под которым будет выполняться spam_check.pl (должен быть доступ к maillog на чтение, к "data" (см. конфигурацию) директории, с логом и временными файлами, на запись): Linux : # groupadd antispam; useradd -g antispam -s /bin/sh antispam FreeBSD: # pw useradd -n antispam -c 'antispam robot' -s /bin/sh - Создать все описанные в конфигурации директории, сделать их владельцем пользователя antosmap, скопировать скрипты в /usr/local/etc/postfix/antispam: # mkdir -m 755 /var/log/antispam # mkdir -m 755 /usr/local/etc/postfix/antispam # mkdir -m 755 /usr/local/etc/postfix/antispam/blocklist # chown antispam:antispam /var/log/antispam # chown antispam:antispam /usr/local/etc/postfix/antispam/blocklist - Проверить работу скрипта (su antispam -c ./spam_check.pl). При необходимости установить perl модуль BerkeleyDB (http://search.cpan.org/author/PMQS/BerkeleyDB-0.23/) или саму Berkeley DB (http://sleepycat.com). Для работы "tail" режима нужно воспользоваться модулем File::Tail (http://search.cpan.org/author/MGRABNAR/File-Tail-0.98/), так же может потребоваться модуль Time::HiRes (http://search.cpan.org/author/JHI/Time-HiRes-1.48/). - Прописать периодический (раз в 5-10 мин.) запуск скрипта spam_check.pl через cron (чем меньше интервал проверки, тем быстрее блокируется спам): # crontab -e -u antispam */4 * * * * /usr/local/etc/postfix/antispam/spam_check.pl 2>/dev/null При выборе режима слежения за логом "tail", в cron прописывать не нужно, примерная строка запуска (предварительно проверьте запустив без "&"): su antispam -c '/usr/local/etc/postfix/antispam/spam_check.pl&' Настроить периодическую чистку базы используя скрипт util/clean_dn.pl: # crontab -e -u antispam 32 5 * * * /usr/local/etc/postfix/antispam/util/clean_dn.pl - Список блокировки, полученный в результате работы spam_check.pl, подключить к почтовому серверу или к rbldnsd. Например, для postfix в main.cf можно добавить: maps_rbl_domains = list.dsbl.org, relays.ordb.org, proxies.relays.monkeys.com maps_rbl_reject_code = 550 smtpd_client_restrictions = hash:/usr/local/etc/postfix/antispam/blocklist/block_list.txt, reject_maps_rbl Не прописывайте список блокировки в ваш MTA сразу, посмотрите на сформированный блоклист несколько дней. Система эксперементальная, при ошибке задания параметров блокировки в блэклист могут попасть нормальные хосты.