Spam Prevention · 7 min read · Nov 18, 2025

Lucha Contra el Spam de Imágenes Con FuzzyOCR Y SpamAssassin En Fedora 12

Lucha Contra el Spam de Imágenes Con FuzzyOCR Y SpamAssassin En Fedora 12

Versión 1.0
Autor: Falko Timme
Sígueme en Twitter

Este tutorial describe cómo escanear correos electrónicos en busca de spam de imágenes con FuzzyOCR en un servidor Fedora 12. FuzzyOCR es un complemento para SpamAssassin que está dirigido a correos no solicitados que contienen imágenes como el principal portador de contenido. Usando diferentes métodos, analiza el contenido y las propiedades de las imágenes para distinguir entre correos normales (ham) y correos spam. FuzzyOCR intenta mantener la carga del sistema baja al escanear solo los correos que aún no han sido categorizados como spam por SpamAssassin, evitando así trabajo innecesario.

¡No emito ninguna garantía de que esto funcione para ti!

1 Nota Preliminar

En este artículo usaré Fedora 12 como sistema base.

Asumo que SpamAssassin ya está instalado y funcionando, con /etc/mail/spamassassin/ como su directorio de configuración principal. Si tu directorio es diferente (por ejemplo, si tienes ISPConfig 2 instalado, el directorio es /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin/), no hay problema. Anotaré dónde cambiar qué.

Por favor, asegúrate de que tu versión de SpamAssassin funcione con FuzzyOCR. Por ejemplo, la versión de FuzzyOCR que voy a instalar aquí (fuzzyocr-3.5.1-devel.tar.gz) requiere SpamAssassin 3.1.4 o más reciente.

2 Instalar Los Requisitos Previos Para FuzzyOCR

FuzzyOCR tiene algunos requisitos previos como ocrad y gocr que podemos instalar de la siguiente manera:

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

También necesitamos instalar el módulo Perl MLDBM::Sync que no está disponible como un paquete RPM. Abre un shell de Perl….

perl -MCPAN -e shell

… y instala el módulo de la siguiente manera:

install MLDBM::Sync

Escribe

q

después para salir del shell de Perl.

3 Instalar FuzzyOCR

A continuación, descargamos e instalamos la última versión de desarrollo de FuzzyOCR desde http://fuzzyocr.own-hero.net/wiki/Downloads. Descargamos la versión de desarrollo en lugar de la versión estable porque los desarrolladores de FuzzyOCR dicen:

“La recomendación actual es la versión de desarrollo porque la versión estable carece de características y es muy antigua.”

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

Luego descomprimimos FuzzyOCR y movemos todos los archivos FuzzyOcr* y el directorio FuzzyOcr (todos están en el directorio FuzzyOcr-3.5.1/) a /etc/mail/spamassassin:

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

Si tu directorio de SpamAssassin es diferente, por ejemplo, /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin/, entonces el último comando debe ser reemplazado por

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

No elimines aún el directorio /usr/src/FuzzyOcr-3.5.1/, hay un directorio con correos de spam de imágenes de muestra en él (samples/) que necesitamos más adelante para probar si FuzzyOCR está funcionando como se espera.

Así que FuzzyOCR ya está instalado, ahora necesitamos configurarlo.

4 Configurar FuzzyOCR

El archivo de configuración de FuzzyOCR es /etc/mail/spamassassin/FuzzyOcr.cf. En ese archivo casi todo está comentado. Abrimos ese archivo ahora y hacemos algunas modificaciones:

vi /etc/mail/spamassassin/FuzzyOcr.cf

Pon la siguiente línea en él para definir la ubicación del archivo de palabras de spam de FuzzyOCR:

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

/etc/mail/spamassassin/FuzzyOcr.words es una lista de palabras predefinida que viene con FuzzyOCR. Puedes ajustarla a tus necesidades si lo deseas.

A continuación, cambia

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

por

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

Finalmente, añade/habilita las siguientes líneas:

| [...] # 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 [...] |

Con las últimas cuatro líneas habilitas el hashing de imágenes. Esto es lo que los desarrolladores de FuzzyOCR dicen sobre el hashing de imágenes:

“La función de base de datos de hashing de imágenes permite al complemento almacenar un vector de características de imagen en una base de datos, por lo que reconoce esta imagen cuando llega una segunda vez (y por lo tanto no necesita escanearla de nuevo). Lo especial de esta función es que también reconoce la imagen nuevamente si se ha cambiado ligeramente (lo que hacen los spammers). “

Si usas /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin en lugar de /etc/mail/spamassassin, el archivo de configuración de FuzzyOCR es /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin/FuzzyOcr.cf en lugar de /etc/mail/spamassassin/FuzzyOcr.cf, así que edita ese. En el archivo de configuración ahora puedes reemplazar todas las ocurrencias de /etc/mail/spamassassin con /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin, O dejarlo como se mostró antes y crear un enlace simbólico de /etc/mail/spamassassin a /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin de la siguiente manera:

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

Eso es todo para la configuración de FuzzyOCR. Ahora veamos si funciona como se espera.

5 Probar FuzzyOCR

Mencioné antes que FuzzyOCR viene con correos de spam de imágenes de muestra (en el directorio samples/):

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

La salida debería verse así:

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

Ahora podemos alimentar cada uno de estos correos a SpamAssassin para ver si FuzzyOCR está vinculado correctamente a SpamAssassin. Descubre dónde está tu ejecutable de spamassassin (normalmente está en tu PATH - puedes averiguarlo si ejecutas

which spamassassin

Si muestra un resultado, spamassassin está en tu PATH, y no necesitas especificar la ruta completa a spamassassin para ejecutarlo.)

Si no sabes dónde está spamassassin, puedes averiguarlo ejecutando

updatedb  
locate spamassassin

Si usas ISPConfig 2, spamassassin está aquí: /home/admispconfig/ispconfig/tools/spamassassin/usr/bin/spamassassin

Ahora que sabes dónde está spamassassin, puedes alimentar los correos de spam de imágenes de muestra a spamassassin así:

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

Por ejemplo:

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

o, si spamassassin está en tu PATH:

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

Ahora deberías ver mucha salida, el final debería verse así:

[...]  
[10025] dbg: FuzzyOcr:  
[10025] dbg: FuzzyOcr: Viernes 4 de agosto, 4:01 pm ET  
[10025] dbg: FuzzyOcr: LAS VEGAS, NEVADA--(MARKET WIRE)--4 de agosto de 2006 -- auantum Energy, lnc. (OTC  
[10025] dbg: FuzzyOcr: BB:aEGY.oB-_-  
[10025] dbg: FuzzyOcr: auantum Energy, lnc. se complace en anunciar que ha solicitado que sus acciones se coticen en  
[10025] dbg: FuzzyOcr: la Bolsa de Valores de Frankfurt. La empresa ha contratado los servicios de Baltic  
[10025] dbg: FuzzyOcr: lnvestment Group de Hamburgo, Alemania para ayudar con la solicitud.  
[10025] dbg: FuzzyOcr:  
[10025] dbg: FuzzyOcr: _ qEGY,OB "  
[10025] dbg: FuzzyOcr:  
[10025] dbg: FuzzyOcr: <<=end  
[10025] info: FuzzyOcr: Scanset "ocrad" encontró la palabra "target" con fuzz de 0.0000  
[10025] info: FuzzyOcr: línea: "short term price target oo"  
[10025] info: FuzzyOcr: Scanset "ocrad" encontró la palabra "service" con fuzz de 0.0000  
[10025] info: FuzzyOcr: línea: "trading on the frankfurt stock exchange the company has retained the services ofbaltic"  
[10025] info: FuzzyOcr: Scanset "ocrad" encontró la palabra "stock" con fuzz de 0.0000  
[10025] info: FuzzyOcr: línea: "hot energy stocki"  
[10025] info: FuzzyOcr: Scanset "ocrad" encontró la palabra "stock" con fuzz de 0.0000  
[10025] info: FuzzyOcr: línea: "trading on the frankfurt stock exchange the company has retained the services ofbaltic"  
[10025] info: FuzzyOcr: Scanset "ocrad" encontró la palabra "price" con fuzz de 0.0000  
[10025] info: FuzzyOcr: línea: "current price o"  
[10025] info: FuzzyOcr: Scanset "ocrad" encontró la palabra "price" con fuzz de 0.0000  
[10025] info: FuzzyOcr: línea: "short term price target oo"  
[10025] info: FuzzyOcr: Scanset "ocrad" encontró la palabra "company" con fuzz de 0.0000  
[10025] info: FuzzyOcr: línea: "trading on the frankfurt stock exchange the company has retained the services ofbaltic"  
[10025] info: FuzzyOcr: Scanset "ocrad" encontró la palabra "recommendation" con fuzz de 0.0000  
[10025] info: FuzzyOcr: línea: "sboog bup recommendation"  
[10025] dbg: FuzzyOcr: Suficientes coincidencias de OCR sin eliminación de espacios, omitiendo el segundo pase de coincidencia...  
[10025] info: FuzzyOcr: Scanset "ocrad" genera suficientes coincidencias (8), omitiendo conjuntos de escaneo adicionales...  
[10025] info: FuzzyOcr: El mensaje es spam, puntaje = 15.000  
[10025] info: FuzzyOcr: Agregando Hash a "/etc/mail/spamassassin/FuzzyOcr.db" con puntaje "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: Palabras encontradas:  
[10025] info: FuzzyOcr: "target" en 1 líneas  
[10025] info: FuzzyOcr: "service" en 1 líneas  
[10025] info: FuzzyOcr: "stock" en 2 líneas  
[10025] info: FuzzyOcr: "price" en 2 líneas  
[10025] info: FuzzyOcr: "company" en 1 líneas  
[10025] info: FuzzyOcr: "recommendation" en 1 líneas  
[10025] info: FuzzyOcr: (12 ocurrencias de palabras encontradas)  
[10025] dbg: FuzzyOcr: Eliminar DIR: /tmp/.spamassassin10025QnPTq8tmp  
[10025] dbg: FuzzyOcr: FuzzyOcr finalizando con éxito...  
[10025] dbg: FuzzyOcr: Procesado en 2.191381 seg.

Como ves, /usr/src/FuzzyOcr-3.5.1/samples/ocr-gif.eml ha sido categorizado como spam con un puntaje de 15 puntos, así que FuzzyOCR está funcionando.

Así que tu SpamAssassin ahora puede reconocer spam de imágenes gracias a la ayuda de FuzzyOCR.

6 Enlaces

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.