Este apunte trata sobre cómo automatizar el filtrado del correo electrónico con un sistema desatendido en Linux, es decir, delegarle la reorganización del correo y que nos ahorre algo de trabajo.

Hay varias formas de conseguirlo y ésta es una de las más sencillas y productivas que conozco, me topé con este software hace unos meses y me ha dado muy buen resultado, así que he decidido documentarlo aprovechando que lo estoy migrando a un contenedor Docker.

Se trata de imapfilter (software libre bajo la licencia MIT/X11). Reconozco que al principio me costó hacerme con su fichero de configuración, pero una vez superado promete resolver todos los requisitos de filtrado, y lo que es mejor, no hace falta hacer prácticamente nada en los servidores de correo.

imapfilter

Objetivo

¿Cuál es el problema que queremos resolver?. Cualquier programa de correo decente es capaz de aplicar reglas de filtrado, pero el problema al que nos enfrentamos es que hoy en día tenemos varias cuentas de correo, varios dispositivos inteligentes, mucho spam y mucho ham (correo bueno).

El objetivo es ponerle algo de cordura, contar con un “asistente” único centralizado que filtre al máximo ese volumen tan grande, sin necesidad de programar reglas en todos nuestros clientes o en los servidores (al menos contamos con una cuenta personal y otra laboral). Reconozco que no es una herramienta para el usuario tradicional, sino para quien tiene múltiples cuentas de correo (y está habituado a trabajar con Linux).

Imapfilter

Imapfilter es un motor de filtrado de correo basado en Lua. La arquitectura es simple: en un único sitio ejecutamos imapfilter que se irá conectando vía IMAP a cada uno de tus servidores, hará sus tareas de forma desatendida, analizará y actuará: marcar, mover o borrar. Una cosa que tiene que me gusta mucho es que puedes mover correos entre cuentas distintas (por ejemplo para tener centralizado el archivado de correos en una cuenta IMAP que dedicas solo para hacer backups)

Soporta “imap-idle”, es decir, puede pedirle al servidor que le notifique cuando el inbox cambia, de modo que reaccionará de forma casi instantánea ante cambios.

  • Nota: Para evitar confusiones, por ejemplo ver entrar un mail desde tu ordenador y que desaparezca de forma casi inmediata porque imapfilter lo ha movido a otro buzón, lo que puedes hacer es programar una regla en tu servidor para que entrege en un buzón “Pre-Inbox“, que imapfilter haga su magia en él y luego mueva lo “bueno” al Inbox real.

Instalación y configuración

La instalación es sencilla, aunque depende de la distribución tengas, pero básicamente sería: Descarga imapfilter, crear el directorio ~/.imapfilter en tu usuario, crear el fichero de configuración ~/.imapfilter/config.lua y por último ejecutar imapfilter

  • Instalación en Gentoo: emerge -v imapfilter
  • Instalación compilando desde los fuentes (así hago en mi Dockerfile)

 

Contenedor imapfilter en Docker

Como dije al principio, llevo tiempo con imapfilter en mi servidor con Gentoo pero llegó el momento de migrarlo a un contenedor basado en Docker:

Ejemplos de configuración

En mi contenedor utilizo una instancia de imapfilter por cada cuenta de correo. La razón reside en que empleo la técnica de un loop infinito con imap-idle para que el servidor notifique los cambios y despierte al programa. Dado que imapfilter no soporta imap-idle multicuenta entonces es necesario tener varias instancias.

  • Cuenta personal

imapfilter -c /root/.imapfilter/cuenta-personal.lua

  • Cuenta trabajo

imapfilter -c /root/.imapfilter/cuenta-trabajo.lua

Como ves arriba, cada instancia tiene un par de ficheros de configuración, el principal que se le pasa a imapfilter como argumento y el auxiliar que se carga desde el principal y contiene las reglas en sí. Lo hago así para implementar un sistema que re-lea las reglas cada cierto tiempo. Permite editar de forma externa (desde mi Host) el fichero de reglas y evito parar/arrancar el contenedor cada vez que cambio una regla.