Спам и безопасность · 6 min read · Nov 18, 2025

Борьба с изображениями спама с помощью FuzzyOCR и SpamAssassin на Fedora 12

Борьба с изображениями спама с помощью FuzzyOCR и SpamAssassin на Fedora 12

Версия 1.0
Автор: Фалько Тимме
Следите за мной в Twitter

Это руководство описывает, как сканировать электронные письма на наличие изображений спама с помощью FuzzyOCR на сервере Fedora 12. FuzzyOCR — это плагин для SpamAssassin, который предназначен для нежелательной массовой почты, содержащей изображения в качестве основного носителя контента. Используя различные методы, он анализирует содержимое и свойства изображений, чтобы различать обычные письма (ham) и спам-письма. FuzzyOCR пытается поддерживать низкую нагрузку на систему, сканируя только те письма, которые еще не были классифицированы как спам SpamAssassin, тем самым избегая ненужной работы.

Я не даю никаких гарантий, что это сработает для вас!

1 Предварительная заметка

В этой статье я буду использовать Fedora 12 в качестве базовой системы.

Я предполагаю, что SpamAssassin уже установлен и работает, с /etc/mail/spamassassin/ в качестве его основного каталога конфигурации. Если ваш каталог отличается (например, если у вас установлен ISPConfig 2, каталог будет /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin/), это не проблема. Я укажу, где что изменить.

Пожалуйста, убедитесь, что ваша версия SpamAssassin работает с FuzzyOCR. Например, версия FuzzyOCR, которую я собираюсь установить здесь (fuzzyocr-3.5.1-devel.tar.gz), требует SpamAssassin 3.1.4 или новее.

2 Установка предварительных требований для FuzzyOCR

FuzzyOCR имеет некоторые предварительные требования, такие как ocrad и gocr, которые мы можем установить следующим образом:

yum install netpbm gifsicle giflib giflib-utils gocr ocrad ImageMagick tesseract perl-String-Approx perl-MLDBM perl-CPAN

Нам также нужно установить модуль Perl MLDBM::Sync, который недоступен в виде пакета RPM. Откройте оболочку Perl….

perl -MCPAN -e shell

… и установите модуль следующим образом:

install MLDBM::Sync

Наберите

q

после этого, чтобы выйти из оболочки Perl.

3 Установка FuzzyOCR

Далее мы загружаем и устанавливаем последнюю версию FuzzyOCR devel с http://fuzzyocr.own-hero.net/wiki/Downloads. Мы загружаем версию devel вместо стабильной версии, потому что разработчики FuzzyOCR говорят:

“Текущая рекомендация — это версия разработки, потому что стабильная версия не имеет функций и очень старая.”

cd /usr/src/  
wget http://users.own-hero.net/~decoder/fuzzyocr/fuzzyocr-3.5.1-devel.tar.gz

Затем мы распаковываем FuzzyOCR и перемещаем все файлы FuzzyOcr* и каталог FuzzyOcr (они все находятся в каталоге FuzzyOcr-3.5.1/) в /etc/mail/spamassassin:

tar xvfz fuzzyocr-3.5.1-devel.tar.gz  
cd FuzzyOcr-3.5.1/  
mv FuzzyOcr* /etc/mail/spamassassin/

Если ваш каталог SpamAssassin отличается, например, /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin/, то последнюю команду следует заменить на

mv FuzzyOcr* /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin/

Не удаляйте каталог /usr/src/FuzzyOcr-3.5.1/ пока, там есть каталог с образцами изображений спама (samples/), который нам понадобится позже, чтобы проверить, работает ли FuzzyOCR как ожидалось.

Итак, FuzzyOCR теперь установлен, теперь нам нужно его настроить.

4 Настройка FuzzyOCR

Файл конфигурации FuzzyOCR — это /etc/mail/spamassassin/FuzzyOcr.cf. В этом файле почти все закомментировано. Мы открываем этот файл сейчас и вносим некоторые изменения:

vi /etc/mail/spamassassin/FuzzyOcr.cf

Поместите следующую строку, чтобы определить местоположение файла со словами спама FuzzyOCR:

| [...] focr_global_wordlist /etc/mail/spamassassin/FuzzyOcr.words [...] |

/etc/mail/spamassassin/FuzzyOcr.words — это предопределенный список слов, который поставляется с FuzzyOCR. Вы можете настроить его под свои нужды, если хотите.

Далее измените

| [...] # Include additional scanner/preprocessor commands here: # focr_bin_helper pnmnorm, pnminvert, pamthreshold, ppmtopgm, pamtopnm focr_bin_helper tesseract [...] |

на

| [...] # Include additional scanner/preprocessor commands here: # focr_bin_helper pnmnorm, pnminvert, convert, ppmtopgm, tesseract [...] |

Наконец, добавьте/включите следующие строки:

| [...] # Search path for locating helper applications focr_path_bin /usr/local/netpbm/bin:/usr/local/bin:/usr/bin focr_preprocessor_file /etc/mail/spamassassin/FuzzyOcr.preps focr_scanset_file /etc/mail/spamassassin/FuzzyOcr.scansets focr_enable_image_hashing 2 focr_digest_db /etc/mail/spamassassin/FuzzyOcr.hashdb focr_db_hash /etc/mail/spamassassin/FuzzyOcr.db focr_db_safe /etc/mail/spamassassin/FuzzyOcr.safe.db [...] |

С помощью последних четырех строк вы включаете хеширование изображений. Вот что говорят разработчики FuzzyOCR о хешировании изображений:

“Функция базы данных хеширования изображений позволяет плагину хранить вектор характеристик изображения в базе данных, чтобы он знал это изображение, когда оно приходит во второй раз (и, следовательно, не нужно сканировать его снова). Особенность этой функции заключается в том, что она также распознает изображение снова, если оно было немного изменено (что делают спамеры).”

Если вы используете /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin вместо /etc/mail/spamassassin, файл конфигурации FuzzyOCR будет /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin/FuzzyOcr.cf вместо /etc/mail/spamassassin/FuzzyOcr.cf, поэтому редактируйте тот. В файле конфигурации вы теперь можете либо заменить все вхождения /etc/mail/spamassassin на /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin, ИЛИ оставить его как показано ранее и создать символическую ссылку из /etc/mail/spamassassin на /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin следующим образом:

mkdir /etc/mail/  
ln -s /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin/ /etc/mail/spamassassin

Вот и все для конфигурации FuzzyOCR. Теперь давайте посмотрим, работает ли это как ожидалось.

5 Тестирование FuzzyOCR

Я упоминал ранее, что FuzzyOCR поставляется с образцами писем спама с изображениями (в каталоге samples/):

ls -l /usr/src/FuzzyOcr-3.5.1/samples/

Вывод должен выглядеть следующим образом:

total 156  
-rw-r--r-- 1 1000 users 13633 2007-01-07 12:55 ocr-animated.eml  
-rw-r--r-- 1 1000 users 16108 2007-01-07 12:55 ocr-gif.eml  
-rw-r--r-- 1 1000 users 27506 2007-01-07 12:55 ocr-jpg.eml  
-rw-r--r-- 1 1000 users 27842 2007-01-07 12:59 ocr-multi.eml  
-rw-r--r-- 1 1000 users 24657 2007-01-07 12:55 ocr-obfuscated.eml  
-rw-r--r-- 1 1000 users 18236 2007-01-07 12:55 ocr-png.eml  
-rw-r--r-- 1 1000 users 16113 2007-01-07 12:55 ocr-wrongext.eml  
-rw-r--r-- 1 1000 users  3576 2007-01-07 12:55 README

Теперь мы можем подать каждое из этих писем в SpamAssassin, чтобы увидеть, правильно ли FuzzyOCR подключен к SpamAssassin. Узнайте, где находится ваш исполняемый файл spamassassin (обычно он находится в вашем PATH - вы можете узнать, так ли это, запустив

which spamassassin

Если он показывает результат, spamassassin находится в вашем PATH, и вам не нужно указывать полный путь к spamassassin для его запуска.)

Если вы не знаете, где находится spamassassin, вы можете узнать, запустив

updatedb  
locate spamassassin

Если вы используете ISPConfig 2, spamassassin находится здесь: /home/admispconfig/ispconfig/tools/spamassassin/usr/bin/spamassassin

Теперь, когда вы знаете, где находится spamassassin, вы можете подать образцы писем спама с изображениями в spamassassin следующим образом:

/path/to/spamassassin --debug FuzzyOcr < /usr/src/FuzzyOcr-3.5.1/samples/ocr-gif.eml > /dev/null

Например,

/home/admispconfig/ispconfig/tools/spamassassin/usr/bin/spamassassin --debug FuzzyOcr < /usr/src/FuzzyOcr-3.5.1/samples/ocr-gif.eml > /dev/null

или, если spamassassin находится в вашем PATH:

spamassassin --debug FuzzyOcr < /usr/src/FuzzyOcr-3.5.1/samples/ocr-gif.eml > /dev/null

Теперь вы должны увидеть много вывода, в конце должно выглядеть так:

[...]  
[10025] dbg: FuzzyOcr:  
[10025] dbg: FuzzyOcr: Пятница, 4 августа, 16:01 по восточному времени  
[10025] dbg: FuzzyOcr: Лас-Вегас, Невада--(MARKET WIRE)--4 августа 2006 года -- auantum Energy, lnc. (OTC  
[10025] dbg: FuzzyOcr: BB:aEGY.oB-_-  
[10025] dbg: FuzzyOcr: auantum Energy, lnc. рада сообщить, что она подала заявку на листинг своих акций на  
[10025] dbg: FuzzyOcr: торгах на Франкфуртской фондовой бирже. Компания наняла Baltic  
[10025] dbg: FuzzyOcr: Инвестиционная группа из Гамбурга, Германия, чтобы помочь с заявкой.  
[10025] dbg: FuzzyOcr:  
[10025] dbg: FuzzyOcr: _ qEGY,OB "  
[10025] dbg: FuzzyOcr:  
[10025] dbg: FuzzyOcr: <<=end  
[10025] info: FuzzyOcr: Scanset "ocrad" найдено слово "target" с нечеткостью 0.0000  
[10025] info: FuzzyOcr: строка: "краткосрочная цена цели oo"  
[10025] info: FuzzyOcr: Scanset "ocrad" найдено слово "service" с нечеткостью 0.0000  
[10025] info: FuzzyOcr: строка: "торговля на франкфуртской фондовой бирже, компания наняла услуги baltic"  
[10025] info: FuzzyOcr: Scanset "ocrad" найдено слово "stock" с нечеткостью 0.0000  
[10025] info: FuzzyOcr: строка: "горячая энергетическая акция"  
[10025] info: FuzzyOcr: Scanset "ocrad" найдено слово "stock" с нечеткостью 0.0000  
[10025] info: FuzzyOcr: строка: "торговля на франкфуртской фондовой бирже, компания наняла услуги baltic"  
[10025] info: FuzzyOcr: Scanset "ocrad" найдено слово "price" с нечеткостью 0.0000  
[10025] info: FuzzyOcr: строка: "текущая цена"  
[10025] info: FuzzyOcr: Scanset "ocrad" найдено слово "price" с нечеткостью 0.0000  
[10025] info: FuzzyOcr: строка: "краткосрочная цена цели oo"  
[10025] info: FuzzyOcr: Scanset "ocrad" найдено слово "company" с нечеткостью 0.0000  
[10025] info: FuzzyOcr: строка: "торговля на франкфуртской фондовой бирже, компания наняла услуги baltic"  
[10025] info: FuzzyOcr: Scanset "ocrad" найдено слово "recommendation" с нечеткостью 0.0000  
[10025] info: FuzzyOcr: строка: "sboog bup recommendation"  
[10025] dbg: FuzzyOcr: Достаточно OCR Hits без удаления пробелов, пропуская второй проход...  
[10025] info: FuzzyOcr: Scanset "ocrad" генерирует достаточно попаданий (8), пропуская дальнейшие сканирования...  
[10025] info: FuzzyOcr: Сообщение является спамом, оценка = 15.000  
[10025] info: FuzzyOcr: Добавление хеша в "/etc/mail/spamassassin/FuzzyOcr.db" с оценкой "15.000"  
[10025] dbg: FuzzyOcr: Digest: 538584:327:549:7::255:255:255:255:168580::0:0:0:0:9098::0:128:0:75:1086::0:0:128:15:395::128:0:128:53:213::0:0:255:29:115  
[10025] info: FuzzyOcr: Найденные слова:  
[10025] info: FuzzyOcr: "target" в 1 строках  
[10025] info: FuzzyOcr: "service" в 1 строках  
[10025] info: FuzzyOcr: "stock" в 2 строках  
[10025] info: FuzzyOcr: "price" в 2 строках  
[10025] info: FuzzyOcr: "company" в 1 строках  
[10025] info: FuzzyOcr: "recommendation" в 1 строках  
[10025] info: FuzzyOcr: (найдено 12 вхождений слов)  
[10025] dbg: FuzzyOcr: Удалить DIR: /tmp/.spamassassin10025QnPTq8tmp  
[10025] dbg: FuzzyOcr: FuzzyOcr завершен успешно...  
[10025] dbg: FuzzyOcr: Обработано за 2.191381 сек.

Как вы видите, /usr/src/FuzzyOcr-3.5.1/samples/ocr-gif.eml был классифицирован как спам с оценкой 15 баллов, так что FuzzyOCR работает.

Таким образом, ваш SpamAssassin теперь способен распознавать изображения спама благодаря помощи FuzzyOCR.

6 Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.