From: Сергей Сидорин <sergey.sidorin@novsu.ru.>
Newsgroups: email
Date: Mon, 12 Oct 2008 17:02:14 +0000 (UTC)
Subject: Серые списки: эффективная фильтрация спама.
На сегодняшний день существует несколько основных приемов фильтрации
спама. Основные: контекстная фильтрация и фильтрация по конверту (envelope).
Контекстная фильтрация заключается в анализе содержимого и заголовков
письма, обнаружении знакомых фрагментов текста, и вынесении вердикта,
насколько процентов данное письмо является спамом. Все, что выше
какой-либо отметки, удаляется. К таким методам относится, например,
Байесова фильтрация.
У метода контекстной фильтрации помимо неоспоримых достоинств есть
определенные недостатки, такие как:
1.Не всегда можно принять верное решение по содержимому письма.
Например, Вы пересылаете товарищу письмо о дешевых копиях дорогих часов,
предварительно сообщив об этом, и в данном случае это не является
спамом, не смотря на то, что содержимое самое что ни на есть рекламное.
2.При установке контекстного фильтра на сервере можно столкнуться с
проблемой, когда у разных пользователей разные взгляды на спам.
3.Анализ содержимого письма является довольно таки ресурсоемкой задачей.
Учитывая, что сейчас рассылки спама ведутся волнами, то во время такого
"прилива" сервер может надолго уйти в себя.
4.Ложные срабатывания. Любой контекстный фильтр ошибается. Если фильтр
признает "плохое" письмо "хорошим" - это еще полбеды. А вот если
"хорошее" письмо сервером удаляется - это действительно беда.
Другой метод, который может выступать как и альтернатива и дополнение к
контекстной фильтрации - "серые списки" (greylisting).
Что такое серые списки?
Каждое обращение клиента или другого сервера к smtp-серверу начинается с
представления клиента. Прежде чем начнется передача самого письма,
сервер уже знает о:
Возможны следующие ситуации, при проверке наличия конверта в базе данных.
1.Конверт отсутствует. В таком случае в базу заносится конверт с неким
временем жизни, например, 8 часов и временем блокировки, например, 3
минуты. Клиенту отправляется snmp-ответ 421 (временный сбой). Корректно
ведущий себя сервер-отправитель повторит попытку через некоторое время
(обычно несколько минут) и так до тех пор, пока не отправит письмо или
же пока письмо не устареет (обычно через 1 неделю).
2.Конверт присутствует в базе, но срок блокировки еще не прошел. Клиент
снова получает ответ 421.
3.Конверт присутствует в базе и блокировка закончилась. В таком случае
принимается содержимое письма, а срок жизни конверта продлевается,
например, на месяц.
Периодически конверты с прошедшим сроком жизни удаляются из базы.
Различные реализации серых списков допускают создание конвертов-масок.
Например, все конверты, чьи IP-адреса попадают в диапазон адресов
доверенных сетей, таких как локальная сеть организации или же сервисы
Gmail или Mail.ru автоматически разрешаются.
Рассмотрим достоинства и недостатки серых списков.
Достоинства:
1.Серые списки на этапе обращения к серверу удаляют по моим оценкам до
95% спама. В основном это письма от зомби-машин.
2.Серые списки не создают большой вычислительной нагрузки.
3.Что бы Вы не написали в письме, если Вы отправляете это письмо как
обычный отправитель, письмо всегда дойдет. Если письмо не доходит, в
этом виноват не принимающий сервер с серыми списками, а отправитель.
Недостатки:
1.Серые списки бессильны против спама, поступающего с полноценных
почтовых серверов, таких как открытые релеи. Правда, они могут
существенно испортить жизнь таким релеям из-за возрастающей нагрузки.
2.При занесении конверта в базу первый раз возникает задержка. Как
минимум это время блокировки конверта, а затем надо ждать, когда сервер
снова начнет посылать письмо. В зависимости от настроек отправляющего
сервера это время изменяется от нескольких минут (что нормально) до
получаса и больше (не нормально).
Реализация.
Существуют различные реализации серых списков. У меня используются серые
списки qmail-toaster. Подробности инсталляции приводить не буду, Google
в помощь. Практически к любому более-менее известному MTA можно найти
реализацию серых списков.
Усовершенствования.
К сожалению, прогресс в отношении спам-рассылок не стоит на месте, и
спаммеры научили зомби-неты рассылать письма повторно через несколько
минут.
Для этого я внес некоторые изменения в работу серых списков.
1.Серые списки по-прежнему ставят новые конверты в очередь на три минуты.
2.В течение этих трех минут, пока не прошло время блокировки конверта,
выполняется дополнительный скрипт, который оценивает IP-адреса
отправителей на их "правильность" и в зависимости от принятого решения
либо продлевает блокировку конвертов на несколько часов, либо оставляет
все как есть.
Критерии блокировки:
1. Чрезмерная активность. Если в течение трех минут от IP-адреса создано,
скажем, более 100 конвертов, то это активно работающий спам-хост.
2. Отсутствие обратного адреса (reverse dns). Уважающие себя почтовые
сервера имеют грамотно прописанные обратные адреса.
4. Наличие в обратном адресе записей типа dialap-129.provider.ru,
host-10.20.30.40-provider.ru и так далее.
5. Националистический метод. Принадлежность обратного адреса
национальным доменам .cn, .kr, .in, .tw и так далее.
6.Проверка IP-адреса по геотаргетингу.
Возможно использование и других блокировок.
Данный подход значительно уменьшает количество запросов обратных адресов
по сравнению с тем, если бы обратный адрес проверялся при каждом новом
smtp-сеансе.
Такая дополнительная проверка конвертов никак не сказывается на приеме
почты от крупных почтовых отправителей, на приеме рассылок и в то же
время практически полностью останавливает поток спама от спам-ботов. С
оставшимися незакрытыми релеями можно или смириться или внести их
конверты в черный список - запись с временем жизни и временем блокировки
где-то в далеком будущем.
В результате использования серых списков с дополнительной проверкой я
добился существенного снижения загрузки почтового сервера, повышения
устойчивости к спам-атакам и улучшения качества обслуживания клиентов.