DSPAM для CGP v1.0.1

Обновил dspam-cgp.c до версии 1.0.1.
Добавлен традиционный для CGP заголовок вида: X-Junk-Score: 90 [XXXX]. Его удобно использовать для применения различных действий к письмам с разным уровнем «вероятности» спама. Этот заголовок автоматически используется в разделе «Упрощённые Правила по Обработке Спама». Так же это можно использовать и в своих правилах вида:
Header Field is X-Junk-Score:*[XXXX* Store in Junk Discard
Подробнее о том как использовать этот заголовок можно прочитать на сайте CGP в описании настроек для фильтра CGPSpamCatcher.
Для задания граничных точек уровня вероятности используется массив чисел:
/* Defines the bar score ranges. By default the following ratios are used:
* digital Bar score
* 0 []
* 1-49 [X]
* 50-70 [XX]
* 71-89 [XXX]
* 90-94 [XXXX]
* 95-99 [XXXXX]
* 100 [XXXXXX]
*/
int BARSCORERANGES[] = {0,49,70,89,94,99,100, -1};
Вероятность может быть от 0 до 100. Количество диапазонов может быть любым. Вероятность вычисляется исходя из результатов, которые сообщает dspam. Пока мне кажется оптимальным такое распределение вероятностей. Но вы можете сами изменить их, отредактировав BARSCORERANGES[]. Конечный «-1» всегда должен присутствовать последним элементом, он используется для определения конца массива.
О том как изменить dspam и использовать его для CGP читать в предыдущей статье: DSPAM для CGP в режиме добавления заголовков
DSPAM для CGP в режиме добавления заголовков
DSPAM — это свободное программное обеспечение, представляющее собой статистический спам фильтр.
Проект DSPAM, который некоторое время оказался заброшенным, вот уже больше полугода активно развивается dspam-сообществом. В 2007 году его бывший автор Jonathan Zdziarski передал свои права компании Sensory Networks. А в январе 2009 года компания Sensory Networks объявила, что перестаёт заниматься этим проектом и полностью передала все права dspam-сообществу.
Про настройку, обучение и работу с dspam-ом есть много статей, я хочу написать об изменениях, которыми пользуюсь я для связки dspam-а и CGP.
Белые списки для CGP
Наравне с технологией DNS blacklisting (DNSBL) существует технология DNS whitelisting (DNSWL). Это списки ip-адресов, хранимые с использованием системы архитектуры DNS. Но в отличии от «чёрных списков»(blacklist), которые хранят ip-адреса распространителей спама, «белые списки»(whitelist) хранят ip-адреса тех, кто в рассылках спама не замечен.
Основная идея «белых списков» — уменьшить количество ложных срабатываний остальных антиспам фильтров.
Мне показалось, что наиболее полную базу «белых адресов» имеет ресурс dnswl.org. Этот ресурс, помимо самого факта «чистоты» ip-адреса, хранит так же уровень этой чистоты(Trust Level).
Всего уровней четыре:
- High – никогда не рассылал спам;
- Medium – крайне редки случаи спама, быстро реагируют на проблемы;
- Low – иногда рассылают спам, активно реагируют на проблемы, но менее оперативно;
- None – легитимный почтовый сервер, но может рассылать спам.
Применение этого белого списка может быть таким:
- не применять технологию «серых списков» для всех ip-адресов с уровнями None-High;
- не применять технологию «черных списков» для всех ip-адресов с уровнями None-High;
- не проверять письма на спам (или проверять в меньшей степени) для ip-адресов с уровнями Medium-High.
Вся остальная почта с адресов, которых нет в DNSWL, пройдёт полную проверку.
Для CGP я написал dnswl-cgp.c фильтр (cgp helper), который делает запрос в DNSWL и добавляет в сообщение заголовок: «X-DNSWL-Status: <Trust Level>».

Как известно для прикручивания антивируса ClamAV к CGP есть два открытых helper’а: clamav-cgp и cgpav.
Есть еще один платный от "Niversoft", но его мы рассматривать не будем.
Как выяснилось, работают они не одинаково. При рассылке большого потока одинаковых сообщений, заметили, что письма уходят медленно — в среднем 1 в секунду. Анализ SMTP диалога отправки сообщений показал, что тормозит проверка антивирусом. При отключенном антивирусе трафик вырос до 30 писем в секунду.
Исследования показали, что сам антивирус не потребляет особо много ресурсов. Тогда возникла мысль про тормоза «прокладки» между CGP и ClamAV. В это время у нас работал cgpav, решили попробовать clamav-cgp. И о чудо, с новым helper`ом трафик вырос до 15 писем в секунду. Спасибо Andy Igoshin’у за замечательный продукт!
У себя я выложил слегка модифицированную «под себя» версию:
- Добавлено отрезание CGP-ных заголовков перед отправкой письма на проверку к ClamAV (рекомендации Николая Варинова из рассылки mx.ru: http://mx.ru/Lists/CGatePro/Message/17475-P.txt).
- Немного изменена логика работа helper’а. В случае каких-то внутренних проблем он всегда пропускает сообщение. В логи пишется диагностика ошибки.
- Если ClamAV сообщает, что письмо инфицировано, то вместо молчаливого удаления сообщения, генерируется ответ с причиной: в сообщении <YYYYY> найден <XXXXX> вирус.
Комментарии к изменениям: Читать полностью »
DCC для CGP
В заметке Greylisting для CGP я давал ссылку на dcc-cgp help'ер, который реализует проверку входящих сообщений через технологию DCC. Как оказалось, сайт автора (http://sk.simtel.ru/DCC/DOC/DownLoad.html) уже некоторое время недоступен.
Потому я выложил дистрибутив у себя: http://kocmuk.ru/download/dcc-cgp. К сожалению, этот дистрибутив накатывается на новые версии DCC с ошибкой. Потому там же я выложил свой dcc-cgp.1.3.103.patch. Этот патч надо применить уже после всех патчей самого dcc-cgp.
INSTALLATION
dcc-cgp requires CommuniGate Pro version 4.0 or higher (4.1 or higher preferred).
Installation of dcc-cgp takes several steps. The following step-by-step instructions should enable you to get the filter working on your system.
- The latest dcc-cgp tarball is available from Simtel.Ru.
- The latest dcc-dccd.tar.Z tarball is available from http://www.dcc-servers.net/dcc/source/.
- Extracting the source distribution will create a directory named "dcc-dccd- " where the source resides. Change current directory to it and extract dcc-cgp source distribution to this directory
- Apply patch to «configure» and «Makefiles» by execution the following command:
«patch < dcc-CGP.patch», or «gpatch < dcc-CGP.patch».
On Linux apply: «patch -l -u -t -p0 < dcc-CGP.patch». - Apply patch to «Makefile» for all non-FreeBSD systems by execution the following command:
«patch < dcc-CGP-nonFreeBSD.patch», or «gpatch < dcc-CGP-nonFreeBSD.patch».
On Linux apply: «patch -l -u -t -p0 < dcc-CGP-nonFreeBSD.patch». - Apply patch to «Makefile» for new version of DCC by execution the following command:
«patch < dcc-cgp.1.3.115.patch», or «gpatch < dcc-cgp.1.3.115.patch».
On Linux apply: «patch -l -u -t -p0 < dcc-cgp.1.3.115.patch». - And now install DCC software on your system following documentation. Also install any auxiliary programs you want to use, such as «rrdtool» for example.
- ... follow README
UPD 05/04/2009: обновил мой патч с dcc-cgp.1.3.99.patch до dcc-cgp.1.3.103.patch
UPD 26/08/2009: обновил мой патч с dcc-cgp.1.3.103.patch до dcc-cgp.1.3.115.patch
Greylisting для CGP
Как я уже писал чуть раньше в заметке: «Эффективность решений по борьбе с нежелательными сообщениями», различные технологии борьбы с нежелательными сообщениями имеют разный коэффициент эффективности. Кроме всем известных и часто используемых: DNSBL, SPF и прочего, я попробовал использовать DCC (Distributed Checksum Clearinghouse). Сама по себе технология не нова и не забыта. Яндекс.Cпамооборона работает по сходному принципу: сообщение превращается в шинглы (в контрольные суммы, по терминологии DCC), шинглы (суммы) отправляется на сервер хранения и сервер возвращает ответ. На основании этого ответа можно, либо принять сообщение, либо отвергнуть как массовую рассылку. Как показали тесты, технология «Серые списки» (англ. Greylisting) так же показала себя достаточно эффективно. По моим данным, поток спама упал в 2 раза (на 50%).
Для реализации технологии Greylisting и DCC для CommuniGate (CGP) можно применить «DCC interface for CommuniGate®Pro server» от Spam-Killer.Simtel.Ru
Под linux cобирается это достаточно просто:
- берём исходный код DCC
- берём исходный код DCC-CGP (он представляет собой несколько патчей для DCC)
- патчим DCC по инструкции от DCC-CGP
- собираем DCC и получаем сам DCC клиент и сервер, и DCC-CGP helper, который подключается в CGP так же как обычный helper
С этого момента в CGP доступны серые списки и контекстный антиспам фильтр на базе DCC. Как настроить сам DCC для работы с серыми списками и реализовывать антиспам защиту, я уже описывал ранее в заметке: DCC (Distributed Checksum Clearinghouse)







