После начала активного использования моих CGP-хелперов на Solaris — произвел небольшие правки.
Обновились:
Общие обновления коснулись более корректной работы с трэдами. Под линуксом проблем не было, а вот под солярисом проявились. Так же в dspam-cgp.c появилась возможность указывать произвольное имя для X-Junk-Score заголовка. А в findattach-cgp.c добавлены инструкции для сборки под solaris и включен chomp () для типов расширений.
Так же хочу обратить внимание, что вышел релиз GNU mailutils 2.2 со всеми нужными изменениями, так что начиная с этой версии хелпер findattach-cgp.c работает нормально.
В предыдущей статье DCC для CGP я описывал свой патч для dcc-cgp. В настоящий момент в виде патча мои изменения поддерживать не так удобно, потому я сделал свой тарболл dcc-cgp-1.1.0-dcc-1.3.130.tar.gz
Это модифицированная версия dcc-cgp v1.1.0 и плюс исправленные патчи для накатывания на dcc-1.3.130.
Мои модификации dcc-cgp v1.1.0:
Я уже больше года использую эти модификации на своей системе и пока доволен.
Если вы хотите пользоваться не модифицированной версией от автора dcc-cgp, то вам надо заменить dcc-cgp/dcc-cgp.c на версию из оригинального дистрибутива и модифицировать одну строку:
- dcc_mk_su(DCCsu, hp->h_addrtype, hp->h_addr, Port); + dcc_mk_su(DCCsu, hp->h_addrtype, hp->h_addr, 0, Port);
Установка модифицированной версии аналогична оригинальной:
Небольшое, но важное обновление хелпера поиска вложений для CGP: включено mu_message_destroy (). До этого оно было выключено по причине утечек памяти, которые вызывало. Но отсутствие mu_message_destroy () приводило к замусориванию /tmp директории. Сегодня в git версии mailutils появились исправления этих утечек и я включил mu_message_destroy (). После обновления findattach-cgp.c надо удалить мусор в /tmp:
$ rm /tmp/mu*
После месячного тестирования решил опубликовать еще один «хелпер» для CGP: findattach-cgp.c
Использовать этот «хелпер» можно для запрещение прохождения через почтовую систему определённых типов файлов. Например так, как описано на сайте РГУ.
Работа фильтра сводится к поиску вложений в проходящих через него сообщениях. Фильтр добавляет в сообщение заголовок с расширением вложенных файлов. Например для *.exe вложений будет добавлен заголовок: «X-AttachExt: exe». Добавляется только один заголовок для каждого типа файлов.
По функционалу фильтр похож на фильтр от компании Niversoft. Он написан на C, потому имеет высокую скорость работы.
Прошло несколько месяцев работы dspam-фильтров в промышленных масштабах. Серьёзных проблем не найдено, но захотелось немного изменить граничные точки для X-Junk-Score заголовка.
Было:
/* 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};
Стало:
/* 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-98 [XXXXX]
* 99-100 [XXXXXX]
*/
int BARSCORERANGES[] = {0,49,70,89,94,98,100, -1};
Изменились два последних диапазона. Это позволяет отделить максимальную вероятность 99 в отдельную группу. И применять к ней более суровые фильтры.
Я соответственно изменил, выложенные на сайте cgp- и zmailer- фильтры. Это единственное изменение в новых версиях.
Для написания некого почтового фильтра на Си понадобилась библиотека для работы с MIME-заголовками. Почтовый фильтр должен уметь вытаскивать из письма список имён вложенных в него файлов. Фильтр предполагался многопоточным (multithreaded) и потому библиотека должна была быть дружественна к многопоточному использованию (thread-safety).
Как оказалось — это не простая задача. Большинство найденных библиотек используют «глобальные области» для хранения разобранных MIME-структур. Отведённое место хранения данных всех потоков — едино. И при параллельной работе потоков происходит перемешивание данных. В лучшем случае приложение работает не правильно, в худшем — падает при очищении памяти одного потока из другого.
Исследованию подверглись библиотеки проектов: altermime, libmime, mimedecode, minimime, renattach, ripmime, uudeview. Для моих целей все эти библиотеки не подошли, и тщательных тестов я не проводил, но пару слов хочу сказать о двух из них:
Аналогично интеграции DSPAM для CGP в режиме добавления заголовков, можно использовать эту технологию для интеграции DSPAM-a для ZMailer MTA.
Обязательным условием интеграции является модификация исходного кода dspam, для перевода его в режим добавления только заголовков. Для этого надо наложить модификацию: dspam_addheader.patch
План интеграции такой:

Добавлен традиционный для 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 — это свободное программное обеспечение, представляющее собой статистический спам фильтр.
Проект DSPAM, который некоторое время оказался заброшенным, вот уже больше полугода активно развивается dspam-сообществом. В 2007 году его бывший автор Jonathan Zdziarski передал свои права компании Sensory Networks. А в январе 2009 года компания Sensory Networks объявила, что перестаёт заниматься этим проектом и полностью передала все права dspam-сообществу.
Про настройку, обучение и работу с dspam-ом есть много статей, я хочу написать об изменениях, которыми пользуюсь я для связки dspam-а и CGP.
Navigate: (Previous 10 Entries)