SpamAssassin: опыт эксплуатации Алексей Тутубалин lexa@lexa.ru «Ашманов и Партнеры» Где происходила эксплуатация: Lexa.ru – персональный домен (зарегистрирован в 1996 г.). Адрес lexa@lexa.ru общеизвестен, широко опубликован, используется в форумах, на сайтах и в новостях в течение 8 лет. 600-1000 спам - сообщений (и 300-500 вирусов) в сутки. Очень разнообразная «нормальная почта», разные языки, разные темы, 100-300 сообщений в сутки. Классические методы (RBL, черные списки, простые контентные фильтры) – неэффективны. С весны 2002 года используется SpamAssassin, результаты работы которого внимательно изучаются. SpamAssassin: особенности Общая идея: множество проверок для каждого сообщения, обойти сразу много проверок спамерам трудно. Общее количество правил на сегодня: >800 Написан на Perl, легко расширяем FreeWare, OpenSource, лицензия Apache (начиная с v3.0) Что анализируется в правилах Заголовки сообщения (анализируются регулярными выражениями или отдельной подпрограммой): Набор заголовков, их содержание (признаки spamware) Правила по DNS (RBL, SPF) Тело сообщения: Правила по нераспакованному тексту сообщения. Правила по тексту (ключевые слова, особенности оформления, признаки spamware). Вероятностные правила. Проверки текста сетевыми сервисами (Razor, DCC, URI-DNSBL). Три типа правил «Локальные» - проверки текста и заголовков сообщений (текст, оформление, структура письма). «Вероятностные» - сравнение с базой данных по частотностям слов (подсчет вероятностей по 2). «Сетевые» - обращение к сетевым сервисам (RBL/DNSBL, URI-DNSBL, Razor, DCC, Pyzor) Примеры правил Проверка RBL header RCVD_IN_CBL rbleval:check_rbl('CBL', cbl.abuseat.org.') describe RCVD_IN_CBL Received via a relay in cbl.abuseat.org tflags RCVD_IN_CBL net score RCVD_IN_CBL 1.2 Проверка заголовка header NO_REAL_NAME From =~ /^["\s]*\<?\S+\@\S+\>?\s*$/ describe NO_REAL_NAME From: does not include a real name score NO_REAL_NAME 0.124 0.178 0.336 0.007 Проверка текста письма body MILLION_EMAIL /million (?:\w+ )?(?:e-?mail )?addresses/i describe MILLION_EMAIL Get a million email addresses score MILLION_EMAIL 0.093 0.417 0.937 0.000 Подсчет результата Каждое правило имеет свой вес (может быть несколько весов, выбираемых в разных режимах использования). Стандартные («дистрибутивные») веса правил рассчитываются по подборкам писем авторами SpamAssassin. Вес правила может быть переопределен администратором или пользователем. Результат работы – арифметическая сумма весов сработавших правил – сравнивается с порогом. Порог «спама» может быть переопределен администратором (для системы) или пользователем (для себя лично). Дополнительные возможности Черные/белые списки. Возможность задать желаемые языки и кодовые страницы сообщений. Хранение «истории» для каждого отправителя – SA запоминает и использует вероятность получения спама от данного отправителя. Самообучение вероятностного механизма. Механизм расширения, позволяющий добавить новые методы распознавания. Идеальное решение ? Не вполне! Опыт использования версий 2.x в целом позитивный, НО: «Дистрибутивная» конфигурация требует переопределения весов многих правил, без этого – много ложных срабатываний. Вероятностные методы склонны к «излишнему обучению», после чего их качество резко падает, за этим нужно постоянно следить. После приложения заметных усилий по настройке, ложные срабатывания все равно присутствуют (около 0.1%) Качество фильтрации спама – 75-85% SpamAssassin 3.0: Качество работы Качество работы версии 3.0 заметно лучше чем у версий 2.x, в первую очередь за счет отсутствия ложных срабатываний: Уровень распознавания спама 75-91% Ложных срабатываний за время тестирования не было Для ликвидации ложных срабатываний: Необходима дополнительная настройка. При использовании вероятностных методов – нужна аккуратность при обучении. Качество работы подробно (1) Методика: запуск SA дважды 1. 2. На всю почту: запуск без использования сетевых сервисов (RBL, URI-DNSBL, DCC, Razor). Для нераспознанных на первом этапе писем – запуск с сетевыми проверками. Результат: 1. 2. Локальными методами определяется 70-85% спама. Сетевые проверки дают 4-6% прироста качества распознавания. Качество работы подробно (2) Трехшаговый тест: 1. 2. 3. Результат: 1. 2. 3. Локальные правила Локальные + вероятностные Локальные + вероятностные + сетевые 70-85% распознавания +5% к варианту 1 +~0.5% к варианту 2 Расхождения двух вариантов тестирования качества определяются разными весами правил в разных режимах использования (при отключении части правил, остальные получают больший вес) Недостатки SpamAssassin 3.0 Требовательность к ресурсам Низкая скорость работы (запуск из командной строки/«клиент-сервер», тестировалось на P3-1000Mhz) 0.2/0.25 письма/сек. при включенных сетевых проверках 0.4/2.2 письма/сек. – локальные + вероятностные правила 0.5/3.6 письма/сек. – только локальные правила Высокий расход RAM: 30-36Mb на процесс При хранении данных в SQL – дополнительное падение производительности (особенно в режиме обучения). Недостатки (продолжение) Вероятностные методы: требуют качественного обучения. Для каждого потока почты (пользователя) требуется отдельное обучение. Польза от самообучения сомнительна: При стандартных настройках обучение спаму происходит на сообщениях, которые и так распознаются с огромным запасом. При снижении порога самообучения – растет возможность обучения по ложным срабатываниям. Большое количество правил затрудняет настройку. SA не имеет доступа к данным SMTP-сессии и «угадывает» их из заголовков сообщения. Выводы и рекомендации Несмотря на ряд недостатков, использование SA для не очень больших потоков почты вполне возможно. При возникновении проблем с производительностью уместна «двухступенчатая» схема: Сначала «локальные» проверки Для прошедших первую стадию писем – сетевые (или сетевые+вероятностные) проверки При использовании вероятностных методов необходима аккуратность на стадии обучения Рекомендации по настройке Во всех случаях: Переопределить (в 0) веса правил, дающих ложные срабатывания на письмах c русским текстом (HEAD/FROM/SUBJ_ILLEGAL_CHARS, BODY_8BITS) Указать в списке языков русский (ok_languages,ok_locales ru) Настроить белый список (общий или отдельный для каждого пользователя) При использовании вероятностного метода При обучении использовать тщательно проверенные подборки писем, ошибочное попадание «спама» в «хорошие» может сильно испортить результат обучения. Подборки должны быть индивидуальными для получателей. Не стоит учить на слишком больших объемах спама. Использование самообучения (autolearn) может привести к резкому ухудшению качества в некоторый момент. Спасибо за внимание Пожалуйста, задавайте вопросы