DSPAM для CGP в режиме добавления заголовков
DSPAM — это свободное программное обеспечение, представляющее собой статистический спам фильтр.
Проект DSPAM, который некоторое время оказался заброшенным, вот уже больше полугода активно развивается dspam-сообществом. В 2007 году его бывший автор Jonathan Zdziarski передал свои права компании Sensory Networks. А в январе 2009 года компания Sensory Networks объявила, что перестаёт заниматься этим проектом и полностью передала все права dspam-сообществу.
Про настройку, обучение и работу с dspam-ом есть много статей, я хочу написать об изменениях, которыми пользуюсь я для связки dspam-а и CGP.
Работая с почтовым сервером CGP, я решил попробовать dspam. У CGP есть удобный механизм написания helper-ов. Программ-помощников, которые умеют получать на вход содержимое сообщения, а на выход выдавать свой вердикт. Письмо можно принять, отвергнуть или добавить в него служебный заголовок. Вот я и решил использовать helper, что бы добавлять в сообщения заголовки с результатами анализа сообщения dspam-ом.
Как выяснилось, dspam не умеет выдавать результат анализа сообщения в виде коротких заголовков. Он или работает в режиме LMTP, когда принимает сообщение, анализирует, добавляет заголовки и передаёт сообщение дальше локальному DeliveryAgent-у. Или умеет измененное сообщение с заголовками возвращать на stdout обратно. Всё это не очень удобно для работы из helper-а CGP. Потому я сделал не большой патч к dspam-у, который переводит его в режим «возврата только заголовков». И написал dspam-cgp.c helper для CGP.
Для запуска dspam-а для CGP надо:
- Взять свежий dspam из git репозитория.
- Пропатчить dspam. dspam_addheader.patch включает в dspam-е вывод только заголовков:
$ cd ./dspam $ patch -p2 < ../dspam_addheader.patch
- Собрать dspam:
./autogen.sh ./configure \ --enable-daemon \ --enable-syslog \ --with-storage-driver=mysql_drv \ --with-mysql-includes=/usr/include/mysql \ --enable-long-usernames
- Сконфигурить dspam. Я использую mysql для хранения базы. hashdb много быстрее, но крешится. Мой dspam.conf:
Home /usr/local/var/dspam StorageDriver /usr/local/lib/libmysql_drv.so OnFail error Trust root Trust nobody TrainingMode tum Feature noise Feature whitelist Feature tb=5 Algorithm graham burton # Я использую osb, если поток писем не большой, # то можно попробовать sbph Tokenizer osb PValue bcr ImprobabilityDrive off Preference "spamAction=deliver" Preference "signatureLocation=headers" # 'message' or 'headers' Preference "showFactors=off" # Ваши настройки для mysql базы dspam-а. MySQLServer 111.222.333.444 MySQLPort 3306 MySQLUser dspam MySQLPass xxxxxx MySQLDb dspam MySQLCompress true MySQLReconnect true MySQLConnectionCache 5 # Игнорируем хэдеры, которые может добавлять кто-то по пути IgnoreHeader X-Spam-Status IgnoreHeader X-Spam-Scanned IgnoreHeader X-Spam-Flag IgnoreHeader X-Virus-Scanner-Result IgnoreHeader X-DSPAM-Result IgnoreHeader X-DSPAM-Confidence IgnoreHeader X-DSPAM-Probability IgnoreHeader X-Spam-Yversion IgnoreHeader X-Spam-Ystatus Notifications off # Чистка базы mysql запускается отдельно через sql запрос. # Потому тут всё "off". PurgeSignature off # Specified in purge.sql PurgeNeutral 90 PurgeUnused off # Specified in purge.sql PurgeHapaxes off # Specified in purge.sql PurgeHits1S off # Specified in purge.sql PurgeHits1I off # Specified in purge.sql SystemLog off UserLog off TrainPristine off Opt out ParseToHeaders off ChangeModeOnParse off ChangeUserOnParse off MaxMessageSize 10485760 # Параметры dspam-сервера ServerPort 24 ServerQueueSize 64 ServerPID /var/run/dspam.pid ServerMode dspam ServerPass.Relay1 "secret" ServerParameters "--deliver=innocent, spam" ProcessorURLContext on ProcessorBias on
- Я использую одну общую базу для всех ящиков. Общий пользователь у меня: nobody. Для этого надо положить в Home dspam-а файл group вот такого содержания (для моего конфига в /usr/local/var/dspam/group):
nobody:shared:*
- Запустить dspam-демон:
dspam --daemon --user nobody
Запускать его можно как на том же сервере, где работает CGP, так и на удалённом выделенном сервере. Ресурсов он потребляет не много. Основная нагрузка приходится на mysql базу, потому что запросы достаточно тяжёлые. Для систем с большим потоком писем возможно стоит перейти в режим «TrainingMode notrain» и «Tokenizer osb»:
# TrainingMode notrain - Do not train or store signatures # (large ISP systems, post-train) # Tokenizer osb - Orthogonal Sparse biGram # Similar to SBPH, but only uses the biGrams # example: "the * * fox" and "the * * * jumped"
- Собрать dspam-cgp.c:
Linux: gcc -Wall -pthread dspam-cgp.c -o dspam-cgp FreeBSD: gcc -DFREEBSD -pthread dspam-cgp.c -o dspam-cgp Solaris: gcc -threads dspam-cgp.c -o dspam-cgp -lsocket -lnsl - Сделать и запустить хелпер CGP:
CGPDSPAM/dspam-cgp -q -d 127.0.0.1 -u nobody -a secret@Relay1
Дополнительные параметры хелпера:
Usage: dspam-cgp [options] -d : specify ip address to connect to DSPAM -h : print this help message -p : specify port for connection. default: 24 -t : timeout in seconds to read from DSPAM 0 disables, default: 30 sec -U : use UNIX domain socket with path -a : set ClientIdent for DSPAM mode -u : specifies the destination users -c : tells DSPAM to only classify the message -S : checks the first Kylobytes of a message : if message size is more, default: 256K -q : don't add any header on Skip messages - Настроить правило для CGP, что бы оно все сообщения отправляло в этот фильтр. Так как для анализа не требуется всё сообщение, на проверку отправляется только первые 256 килобайт сообщения. Потому в правиле для CGP можно не ограничивать размер обрабатываемых сообщений. Смотри параметр -S в dspam-cgp.
- Далее наблюдаем за результатами работы антиспама и обучаем его рекомендуемыми способами. Их можно поискать в документации или воспользоваться мировым опытом в интернете.
- Смотреть статику можно так:
# dspam_stats -H nobody: TP True Positives: 45176 TN True Negatives: 564624 FP False Positives: 329 FN False Negatives: 353 SC Spam Corpusfed: 124471 NC Nonspam Corpusfed: 183185 TL Training Left: 0 SHR Spam Hit Rate 99.22% HSR Ham Strike Rate: 0.06% PPV Positive predictive value: 99.28% OCA Overall Accuracy: 99.89%
В результате в сообщениях появятся заголовки:
X-DSPAM-Result: Spam X-DSPAM-Processed: Tue Dec 8 20:50:37 2009 X-DSPAM-Confidence: 0.9901 X-DSPAM-Probability: 1.0000 X-DSPAM-Signature: 4aba8b37175501492017818
Внимание! Заголовок X-DSPAM-Factors не добавляется. Он слишком большой и неудобный для добавления.









Оставить комментарий