Издано: апреля 10, 2009
Рассмотрев на досуге статистику своего сервера я осознал, что основная
масса обычного спама осталась за бортом, но письма, содержащие рекламу в
картинках проходят.
Выбрав немного свободного времени, решил заняться этим вопросом плотнее.
Наперед скажу, что на загруженных серверах данное решение необходимо
продумать более детально, т.к. процесс распознавания картинок - не
очень быстрый.
Ориентировочная моя суточная нагрузка выглядит так:
940 received
1476 delivered
1398 rejected (48%) - без image spam
Источники размышлений и информации
1. Большое спасибо Oles Hnatkevych, don_oles at able.com.ua за
http://able.com.ua/~gnut/fighting-spam.html
Основная конфигурация построена именно по такой схеме за исключением TLS/SSL/SASL.
2. К этому всему подключен Spamassassin
http://spamassassin.apache.org/
3. С плагином FuzzyOCR
http://fuzzyocr.own-hero.net/
4. И поправкой к нему
http://fuzzyocr.own-hero.net/ticket/201
5. SAMBA в ActiveDirectory
http://turbogaz.kharkov-ua.com/unix/www/squid.php
6. Microsoft Office Document Imaging
http://msdn2.microsoft.com/en-us/library/aa167607(office.11).aspx
Как это работает:
# Общая схема построена на FreeBSD с postfix+etc хорошо описана в able.com.ua/~gnut/fighting-spam.html , единственно к ней добавляется Spamassassin, задача которого - пометить письма с картинками непотребного содержания.
# Подключается spamassassin к postfix обычным smtp proxy (демон spampd) как и clamav. Единственно у меня получилось его подключить только перед clamav и dkfilter, а хотелось последним.
# Spamassassin использует плагин FuzzyOCR (который в свою очередь использует gocr или ocrad) в качестве распознавателя. Т.к. FuzzyOCR (с gocr) нацелен на англоязычное население, да и качество распознавания посредственное, пришлось думать над дальнейшей обработкой. FuzzyOCR готовит .pnm файл и передает его в gocr, который отдает обратно текст. Вот вместо gocr мы и будем цеплять Microsoft Office Document Imaging (MODI) Думал, про ABBY http://www.abbyy.ru/sdk/?param=60343 , но стоимость Developer лицензии моментально уничтожило всякое желание использовать FineReader.
# Perl Скрипт (вместо gocr) полученный .pnm файл конвертирует в tif и кладет на Win (через самбу)
# Заходит telnet’ом на Win и запускает там VisualBasic приложение, которое через API MODI распознает tif , а результат складывает в .txt файл.
# Perl Скрипт отдает содержимое полученного .txt файла обратно в FuzzyOCR.
Раскроем ключевые моменты
На рабочей станции делаем ресурс (для отладки можнос правами Все:Change + на NTFS
тоже самое), дальше - для пользователя, прописанного в /etc/nsmb.conf
В файле /etc/nsmb.conf прописываем
Содаем /mnt/incoming с правами для демона spamd (у меня uid:spamd)
Подключаем
Для автомаунта можно прописать в /etc/fstab
FuzzyOCR
1. По умолчанию не понимает цифр и большие (или маленькие) буквы в
FuzzyOCR.words и соответственно не работает нормально.
Для этого воспользуемся предложением fuzzyocr.own-hero.net/ticket/201 и закомментируем строки
в FuzzyOcr.pm под номерами 1137 и 1144.
2. В конфигурационном файле FuzzyOCR.cf меняем focr_bin_gocr на наш скрипт:
Программа на VB (Console OCR.exe)
Воспользовался MS Visual Basic 2005 Express Edition для создания “Console application”
Необходимо добавить reference на COM библиотеку MODI
(%ProgramFiles%\Common Files\Microsoft Shared\MODI\11.0\MDIVWCTL.DLL)
Подходит от MS Office 2003 и, возможно, дальше (В Office XP у MODI
отсутствовало API). Подробное описание в
msdn2.microsoft.com/en-us/library/aa167607(office.11).aspx.
Текст:
Заключение
Задача выполнена подручными средствами и без особого контроля над
происходящим в Perlе и VB, но даже если что-то в них не срабатывает -
почта проходит, но не помечается как спам.
В дальнейшем хочется перевести с телнета - на сокеты, вполне возможно
произвести распределение нагрузки по рабочим станциям - пусть каждый
распознает свой спам :).
Популярность: 18% [!]
Tagged with: apache, bsd, clamav, domain, freebsd, HTTP, mpd, nat, postfix, proxy, samba, spam, spamassassin, squid, UNIX, Windows