Pull to refresh

Независимое тестирование различных АнтиСпам решений (коммерческие и свободные продукты)

Reading time 11 min
Views 20K
Целью данного тестирования было оценить эффективность работы различных антиспам систем. Для тестирования были выбраны следующие продукты:
• Apache Spamassassin — SA(свободный)
• Yandex Spamooborona 2.3 — SO(коммерческий)
• Kaspersky Antispam 3.0 — KAS(коммерческий)
• FastBL 0.7.0 (свободный)
• dnsbl списки:
bl.spamcop.net
cbl.abuseat.org
dnsbl.sorbs.net
dul.nsbl.sorbs.net
dul.ru
sbl-xbl.spamhaus.org
zen.spamhaus.org



DNSBL списки были выбраны по популярности использования.
Для каждого продукта был выделен отдельный сервер (P4 3.0GHz HT/1GB RAM/FreeBSD 7.2-PRERELEASE), на котором производилось тестирование почтовой корреспонденции. В качестве MTA использовался sendmail, скомпилированный с поддержкой milter для подключения cервисов SA,SO,KAS. Для тестирования коммерческих продуктов были использованы временные лицензии, полученные с сайта разработчиков.

Почтовый трафик использовался поступающий для двух доменов, зарегистрированных в 2002 и 2003 году. Суммарный ежесуточный трафик на данные домены составляет от 5 до 12 тысяч писем, что является вполне достаточным количеством почты для тестирования. Данные домены используются в основном для личной переписки, подписки на листы рассылки и имеют в наличии около 10 реальных почтовых получателей. Личный трафик на этих доменах составляет от 10 до 40 писем в сутки, что позволяет оценить эффективность работы тестируемых продуктов, а также коэффициент False Negative для каждой из систем. К сожалению, из-за небольшого личного трафика не получилось оценить коэффициент False Positive, но это не является проблемой, так как тестируемые системы используют шаблонные методы оценки спама и вероятность попадания нормальных писем в спам очень невелика.

Схема подключения серверов для анализа имела следующий вид:


Основной релей принимал все входящие соединения и совершал их начальный анализ путём запросов к DNSBL-спискам, проверке соответствия сессии RFC(FastBL), затем перенаправлял письма далее на сервера с тестируемыми продуктами. Сразу скажу, что запросы в DNSBL зоны были только для получения информации о IP-адресе, но блокировка адреса не производилась. Тестирование производилось без дополнительного «тюнинга» продуктов в виде завышения оценочных коэффициентов, т.е. «as is».

В связи с тем, что тестируемые системы имеют различные методы тестирования писем, обновление продуктов происходило по следующей схеме:
«Apache Spamassassin» – sa-update раз в сутки
«Kaspersky Antispam» – каждые 3 минуты
«Yandex Spamooborona» – каждые 20 минут

Указанные временные промежутки обусловлены возможной частотой выхода новых обновлений и рекомендациями разработчиков.

Каждый из продуктов имеет свои особенности тестирования почтового контента:
«Касперский Антиспам» использует offline-тестирование, регулярно обновляя свои локальные базы, плюс возможность подключения dnsbl листов.
«Яндекс Спамооборона» использует online-технологии тестирования, постоянно работая со своим центральным сервером, а также обновляя свои локальные базы по мере необходимости, также имея возможность подключения dnsbl листов.
«Apache Spamassassin» использует offline обработку данных, а также online-сервисы списков DNSBL, Razor, Pyzor, DKIM, SPF.

SA и KAS используют fork() для обработки каждого письма, а SO, в свою очередь, использует Threads, что намного экономичнее с точки зрения расхода памяти. При этом SA использует preforked процессы, ограничивая вероятность перерасхода памяти, а KAS форкается по мере необходимости, не превышая уровня фильтрующих процессов выше лимита, указанного в конфигурационном файле.
Примерный расход памяти на каждый процесс:
SA ~ 40 MB
KAS ~ 30 MB
SO ~ 90 MB

Ниже приведены таблицы результатов с комментариями.
Сокращения, используемые в таблицах:
PS – Passed(количество пропущенных писем)
BL – Blocked(количество заблокированных писем, определенных как SPAM)
FN — FalseNegative(Количество писем определенных как хорошие, но являющихся спамом)
FP – FalsePositive(Количество писем определенных как SPAM, но таковыми не являющиеся).
Date: 02.04.2009. Count: 10291 PS BL FN FP
Spamooborona 56 10235 42 0
SpamAssassin 887 9406 873 0
Kaspersky Antispam 277 10014 264 1
bl.spamcop.net 5107 5184 5093 0
cbl.abuseat.org 2353 7938 2339 0
dnsbl.sorbs.net 5732 4559 5718 0
dul.nsbl.sorbs.net 7773 2518 7759 0
dul.ru 10255 36 10241 0
FastBL 89 10202 75 0
sbl-xbl.spamhaus.org 2336 7955 2322 0
zen.spamhaus.org 395 9896 381 0

Первый день тестирования начался со странного пробоя антиспам защиты продукта «Kaspersky Antispam», в связи с этим KAS пропустил писем больше, чем ожидалось. Этот же день показал слабость раздельной работы dnsbl-списков и SpamAssassin против российского спама. При тестировании я специально послал 4 письма с квотингом одного из спам писем с перемешиванием слов на тестовый сервер. Касперский в связи с контекстным анализом содержимого отправил валидное письмо, подписанное DKIM с gmail.com в SPAM. С одной стороны, контент письма действительно был спамом, но, в свою очередь, письму была поставлена оценка [SPAM] вместо [Possible Spam]. Принимая во внимание, что данное письмо могло быть переслано системному администратору для анализа содержимого заголовков, KAS получил 1 FP.
Date: 03.04.2009. Count: 6357 PS BL FN FP
Spamooborona 61 6296 31 0
SpamAssassin 780 5579 750 0
Kaspersky Antispam 65 6292 35 0
bl.spamcop.net 3455 2902 3425 0
cbl.abuseat.org 1571 4786 1541 0
dnsbl.sorbs.net 3759 2598 3729 0
dul.nsbl.sorbs.net 4801 1556 4771 0
dul.ru 6331 26 6301 0
FastBL 77 6280 47 0
sbl-xbl.spamhaus.org 1557 4800 1527 0
zen.spamhaus.org 325 6032 295 0

Во второй день тестирования Spamooborona и Kaspersky Antispam сравняли свои позиции.
Date: 05.04.2009. Count: 7025 PS BL FN FP
Spamooborona 59 6966 39 0
SpamAssassin 1291 5739 1271 0
Kaspersky Antispam 29 6996 9 0
bl.spamcop.net 4170 2855 4150 0
cbl.abuseat.org 2031 4994 2011 0
dnsbl.sorbs.net 4424 2601 4404 0
dul.nsbl.sorbs.net 5180 1845 5160 0
dul.ru 6986 39 6966 0
FastBL 42 6983 22 0
sbl-xbl.spamhaus.org 2018 5007 1998 0
zen.spamhaus.org 368 6657 348 0

В третий и четвертый день тестирования (выходные дни) немного прохудилась защита у Spamooborona в связи с резким всплеском одиночных сообщений. Так как данные о составляющих компонентах писем у Yandex Spamooborona обрабатываются в online-режиме, то вполне вероятны пропуски сообщений, которые не имели частых повторений. Kaspersky Antispam в свою очередь показал преимущества своей оффлайновой системы оценки.

Date: 06.04.2009. Count: 9963 PS BL FN FP
Spamooborona 53 9906 33 0
SpamAssassin 1506 8459 1486 0
Kaspersky Antispam 125 9837 105 0
bl.spamcop.net 7042 2921 7022 0
cbl.abuseat.org 2562 7401 2542 0
dnsbl.sorbs.net 6420 3543 6400 0
dul.nsbl.sorbs.net 7561 2402 7541 0
dul.ru 9907 56 9887 0
FastBL 68 9895 48 0
sbl-xbl.spamhaus.org 2549 7414 2529 0
zen.spamhaus.org 308 9655 288 0

На пятый день особых сюрпризов не произошло, кроме увеличения количества пробоев у Kaspersky Antispam.
Date: 07.04.2009. Count: 10923 PS BL FN FP
Spamooborona 88 10832 48 1
SpamAssassin 1418 9503 1377 0
Kaspersky Antispam 190 10727 149 0
bl.spamcop.net 6405 4518 6364 0
cbl.abuseat.org 2651 8272 2610 0
dnsbl.sorbs.net 6478 4445 6437 0
dul.nsbl.sorbs.net 8237 2686 8196 0
dul.ru 10877 46 10836 0
FastBL 103 10820 62 0
sbl-xbl.spamhaus.org 2633 8290 2592 0
zen.spamhaus.org 293 10630 252 0

На шестой день Spamooborona схватила FP, заблокировав валидную рассылку с subscribe.newsland.ru. Во все дни тестирования приходило достаточно большое количество NDR с репортами о недоставке спам сообщений, но все NDR были отфильтрованы продуктами как SPAM, разбираться с этим не стал. Хотя это неверно.
Total. Count: 44552 PS BL FN FP
Spamooborona 317 44235 193 1
SpamAssassin 5882 38686 5757 0
Kaspersky Antispam 686 43866 562 1
bl.spamcop.net 26178 18374 26053 0
cbl.abuseat.org 11168 33384 11043 0
dnsbl.sorbs.net 26812 17740 26687 0
dul.nsbl.sorbs.net 33551 11001 33426 0
dul.ru 44353 199 44228 0
FastBL 379 44173 254 0
sbl-xbl.spamhaus.org 11093 33459 10968 0
zen.spamhaus.org 1689 42863 1564 0

По окончании всех тестов из всего объёма писем (44552 письма) было выделено 125 абсолютно валидных писем, на основании которых были рассчитаны параметры FalseNegative и FalsePositive. Если исключить первый день тестирования, то видно, как коммерческие продукты идут нога в ногу при анализе спама. Spamassassin всё-таки рассчитан на анализ зарубежного спама и часто пропускает письма из-за отсутствия нормализации контента. Коммерческие продукты приводят письма к определенному виду. Например, часто используемый спамерами метод вставки лишних знаков в слова типа: «Р-А-С-С.Ы, Л=К-И», а также замена русских букв сходными по написанию английскими буквами, абсолютно неэффективны против нормализации, при которой искаженное слово всё равно превратится в «рассылки» и попадёт под контекстный анализ, добавляющий за каждое такое слово определённое количество баллов всему письму. В свою очередь, SpamAssassin довольно хорошо различает зарубежный спам типа «Medical, Viagra, Cialis, Enlargement», а также хорошо фильтрует «bayes poisoning» контекстных анализаторов.

По поводу dnsbl-списков мнение сложилось неоднозначное. С одной стороны, популярность публичных dnsbl очень высока, и они могут обеспечить защиту от спама до определённой степени. Но, с другой стороны, использовать dnsbl-списки в качестве панацеи нельзя, так как всё-таки бывают FP при работе с валидными доменами. Что же касается проверки входящих соединений по RFC (FastBL), то за время тестирования не случилось ни одного FP и уровень фильтрации сопоставим с коммерческими продуктами. Но это уже другая история. :)

Ну, и напоследок, я решил свести в таблицу варианты событий в том случае, если бы контекстные анализаторы работали в паре с DNSBL-листами. Как и ожидалось, я получил 100% эффективность фильтрации спама даже при использовании зарубежного продукта Apache SpamAssassin.

Total Count:44552 PS BL FN FP
bl.spamcop.net+so 124 44243 184 1
bl.spamcop.net+sa 125 38702 5725 0
bl.spamcop.net+kas 124 44050 377 1
 
cbl.abuseat.org+so 124 44266 161 1
cbl.abuseat.org+sa 125 40541 3886 0
cbl.abuseat.org+kas 124 44264 163 1
 
dnsbl.sorbs.net+so 124 44258 169 1
dnsbl.sorbs.net+sa 125 39832 4595 0
dnsbl.sorbs.net+kas 124 44068 359 1
 
dul.nsbl.sorbs.net+so 124 44247 180 1
dul.nsbl.sorbs.net+sa 125 39398 5029 0
dul.nsbl.sorbs.net+kas 124 44013 414 1
 
dul.ru+so 124 44236 191 1
dul.ru+sa 125 38714 5713 0
dul.ru+kas 124 43872 555 1
 
FastBL+so 124 44413 14 1
FastBL+sa 125 44374 53 0
FastBL+kas 124 44412 15 1
 
sbl-xbl.spamhaus.org+so 124 44268 159 1
sbl-xbl.spamhaus.org+sa 125 40519 3908 0
sbl-xbl.spamhaus.org+kas 124 44265 162 1
 
zen.spamhaus.org+so 124 44309 118 1
zen.spamhaus.org+sa 125 43747 680 0
zen.spamhaus.org+kas 124 44387 40 1


Теперь о самом грустном в этой познавательной истории об антиспаме — о настройке и лицензировании коммерческих продуктов.
Несмотря на практически безупречное ядро продуктов, внешняя обёртка очень неудачна и неудобна. Лично я ждал большего профессионализма от разработчиков продуктов такого плана.
Итак, несколько «ложек дёгтя в бочку с мёдом».
Оба продукта ориентированы на установку в систему FreeBSD 6.2, которая уже давно устарела с точки зрения безопасности, а также версий продуктов, используемых в релизе(пришлось шаманить с compat6x).
Kaspersky antispam содержит в своём дистрибутиве perl 5.6.2, а также часть специфических perl модулей. Администраторская консоль KAS использует thttpd и обвязку системы в виде перловых CGI-скриптов. Она конечно, выглядит красиво, но, по-моему, не сильно информативно, хотя имеет графики работы фильтра. Имеется возможность создания групп пользователей с различными методами фильтрации, есть белые/черные списки — как пользователей, так и ip адресов. Возможности использовать внешние базы пользователей и групп я, к сожалению, в администраторской web консоли не нашёл (возможно, закопано где-то в консольных утилитах). С лицензированием тоже не совсем ясно, формально я нигде не нашёл количественной единицы, по которой оценивается лицензирование per-user. Во временной лицензии указанный порог обработки в 250 мегабайт на самом деле составляет от 250 до 499 мегабайт. Лицензирование продукта основывается на файле лицензии, получаемом при покупке. Система поддерживает добавление и установку нескольких лицензий. Ну и самое моё большое «фи» в сторону разработчиков KAS — это метод установки milter-фильтра в конфигурационный файл sendmail.cf
Ребята!!! Зачем же Вы правите РАБОЧИЙ СКОМПИЛИРОВАННЫЙ КОНФИГ, который при ПЕРВОМ же обновлении отменит все внесенные изменения ?
Скрипт добавления фильтра в конфиг при ближайшем рассмотрении таки-имеет hidden flag, позволяющий указать sendmail.mc для инъекции строк, вызывающих фильтр, но данный flag не вызывается из конфигурирующего скрипта MTA-config.pl
Все процессы KAS выполняются под пользователем mailflt3, которому отведен свой каталог для работы /usr/local/ap-mailfilter3. Скрипты запуска используют старый механизм запуска сервисов, который не контролируется из /etc/rc.conf.

Yandex Spamooborona тоже меня удивила. Конфигуратор написан на DIALOG, при установке я этого несколько не ожидал. Ветки конфигуратора очень «разлапистые» и очень просто там заблудиться. Большая часть настроек уже предустановлена, но лучше пройтись по всем пунктам в меню и выставить нужные Вам параметры. SO имеет возможность работы с plaintext файлами, LDAP и судя по кускам SQL кода в конфиге, умеет еще и MySQL. После того как я настроил работу SO, меня один человек спросил: «я просто слышал отзывы некоторых продавцов антиспамов, что якобы spamооборона жутко сложна в настройке и никто, кто не купил прямую поддержку у Яндекса, «завести» ее не смог. Или ты уникум редкий, или кто-то где-то врёт».
Реально настройка с plaintext файлами не так уж сложна, и, в принципе, полностью прозрачна. Но мне кажется, что основные проблемы настройки всё-таки связаны с LDAP и MySQL. Политика лицензирования тоже необычна. Для защиты от спама необходимо прописать либо вручную, либо автоматически все почтовые адреса, которые будет защищать система. Т.к. это реально неудобно в динамически растущей сети, то заставляет сильно задуматься. Лицензирование per-user основано именно на этом списке пользователей. Что произойдёт в том случае, если список пользователей привысит максимальный уровень, указанный в лицензии, я сказать не могу, но, как мне кажется, это не совсем правильно. В моей организации около 30 доменов, 600 юзеров и около 50 групп. При том, что каждый пользователь может иметь адреса из двух доменов (например, alias), мне придётся купить практически безлимитную лицензию для нормальной работы моей компании. Отдельная статья — ключ лицензирования. Ключ генерируется из двух файлов: spam.ini(основной конфиг фильтра) и domains(список защищаемых доменов). Эти два файла отсылаются на web сервер SO ”вручную” и, после заполнения необходимой информации в web форме, сервер генерит ключ. Ключ сохраняется в файлик so.key и кладётся в каталог где находятся остальные настройки SO. И не дай бог Вам исправить хотя бы один бит в файлах spam.ini и domains — всю процедуру регистрации придётся проходить заново, иначе фильтр работать не будет. Хорошим плюсом для начинающих администраторов будет русификация интерфейса настройки SO.

Описывать настройку и работу SpamAssassin особого смысла нет, так как он установлен на подавляющем большинстве почтовых релеев.

Ну, в принципе, вроде всё. Что хотел написать и сказать — написал и объяснил.
Сомнения о необъективности тестирования, я, конечно, приму от любого. Если Вы считаете, что данное тестирование было необъективным и можно получить иные результаты без серьёзного закручивания гаек, то можете прислать мне в личку конфигурационный файл интересующего Вас продукта, и я смогу поставить еще пару-тройку серверов с существующими и Вашими конфигами, тогда мы еще раз сравним результаты.

ЗЫ: Если есть вопросы по тестированию, то «Лаборатория Касперского» написала чудесный документ: www.spamtest.ru/document.html?context=15948&pubid=16638, в котором Вы сможете найти все рекомендации к тестам. В моих тестах они были соблюдены максимально точно, за исключением времени тестирования, всё таки документ 2004 года.
ЗЗЫ: Готов ловить камни в свой огород.

ABORCHE 2009

Конфиг SpamAssassin:
bayes_auto_learn 1
bayes_ignore_header X-Bogosity
bayes_ignore_header X-Spam-Flag
bayes_ignore_header X-Spam-Status
loadplugin Mail::SpamAssassin::Plugin::AWL
loadplugin Mail::SpamAssassin::Plugin::AutoLearnThreshold
loadplugin Mail::SpamAssassin::Plugin::Bayes
loadplugin Mail::SpamAssassin::Plugin::BodyEval
loadplugin Mail::SpamAssassin::Plugin::Check
loadplugin Mail::SpamAssassin::Plugin::DKIM
loadplugin Mail::SpamAssassin::Plugin::DNSEval
loadplugin Mail::SpamAssassin::Plugin::HTMLEval
loadplugin Mail::SpamAssassin::Plugin::HTTPSMismatch
loadplugin Mail::SpamAssassin::Plugin::Hashcash
loadplugin Mail::SpamAssassin::Plugin::HeaderEval
loadplugin Mail::SpamAssassin::Plugin::ImageInfo
loadplugin Mail::SpamAssassin::Plugin::MIMEEval
loadplugin Mail::SpamAssassin::Plugin::MIMEHeader
loadplugin Mail::SpamAssassin::Plugin::Pyzor
loadplugin Mail::SpamAssassin::Plugin::Razor2
loadplugin Mail::SpamAssassin::Plugin::RelayEval
loadplugin Mail::SpamAssassin::Plugin::ReplaceTags
loadplugin Mail::SpamAssassin::Plugin::Rule2XSBody
loadplugin Mail::SpamAssassin::Plugin::SPF
loadplugin Mail::SpamAssassin::Plugin::SpamCop
loadplugin Mail::SpamAssassin::Plugin::URIDNSBL
loadplugin Mail::SpamAssassin::Plugin::URIDetail
loadplugin Mail::SpamAssassin::Plugin::URIEval
loadplugin Mail::SpamAssassin::Plugin::VBounce
loadplugin Mail::SpamAssassin::Plugin::WLBLEval
loadplugin Mail::SpamAssassin::Plugin::WhiteListSubject
report_safe 0
rewrite_header Subject *****SPAM*****
use_bayes 1
Tags:
Hubs:
+44
Comments 66
Comments Comments 66

Articles