Spam Control · 7 min read · Nov 17, 2025

Lucha Contra el Spam de Imágenes Con FuzzyOCR Y SpamAssassin En Debian Lenny

Lucha Contra el Spam de Imágenes Con FuzzyOCR Y SpamAssassin En Debian Lenny

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 Debian Lenny. FuzzyOCR es un complemento para SpamAssassin que está dirigido a correos no solicitados en masa 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í un trabajo innecesario.

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

1 Nota Preliminar

En este artículo usaré Debian Lenny 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 así:

aptitude install netpbm gifsicle libungif-bin gocr ocrad libstring-approx-perl libmldbm-sync-perl imagemagick tesseract-ocr

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 imagen de muestra en él (samples/) que necesitaremos 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 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 nuevamente). 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 lo dejas como se mostró antes y creas un enlace simbólico de /etc/mail/spamassassin a /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin así:

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 imagen 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 administrator users 13633 2007-01-07 12:55 ocr-animated.eml  
-rw-r--r-- 1 administrator users 16108 2007-01-07 12:55 ocr-gif.eml  
-rw-r--r-- 1 administrator users 27506 2007-01-07 12:55 ocr-jpg.eml  
-rw-r--r-- 1 administrator users 27842 2007-01-07 12:59 ocr-multi.eml  
-rw-r--r-- 1 administrator users 24657 2007-01-07 12:55 ocr-obfuscated.eml  
-rw-r--r-- 1 administrator users 18236 2007-01-07 12:55 ocr-png.eml  
-rw-r--r-- 1 administrator users 16113 2007-01-07 12:55 ocr-wrongext.eml  
-rw-r--r-- 1 administrator users 3576 2007-01-07 12:55 README

Ahora podemos alimentar cada uno de estos correos a SpamAssassin para ver si FuzzyOCR está correctamente vinculado a SpamAssassin. Encuentra dónde está tu ejecutable de spamassassin (normalmente está en tu PATH - puedes averiguar si este es el caso ejecutando

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 imagen 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 sean listadas para  
[10025] dbg: FuzzyOcr: comercio en la Bolsa 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, puntuación = 15.000  
[10025] info: FuzzyOcr: Añadiendo Hash a "/etc/mail/spamassassin/FuzzyOcr.db" con puntuación "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 una puntuación 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.