Filtrado de correo con Procmail

0
636

Se sabe que Procmail es un paquete diseñado para filtrar correo electrónico en base a determinados criterios. Éste programa fué escrito por Stephen van de Berg, y la página se encuentra en http://www.procmail.org,

Procmail es una utilidad de uso general de correo muy potente; se puede usar para fines muy distintos:

  • Para clasificar los mensajes entrantes por remitente, asunto, o cualquier otro esquema.
  • Para rechazar correo de usuarios o dominios específicos con características o contenido (definido localmente); y se puede rechazar o separarlo según convenga.
  • Para identificar el Spam, que se puede rechazar o separarlo para examinarlo después.
  • Para buscar problemas de seguridad en el correo (como virus y macros en los archivos adjuntos o enlazados), pudiendo recharzar los mensajes o ponerlos en cuarentena.

De hecho, procmail es la herramienta de filtrado de correo preferido por los usuarios de sistemas UN*X. Se suele aplicar a los mensajes principalmente de dos formas: usandolo como agente local de entrega de correo o para filtrar el correo entrante de los usuarios, normalmente en el archivo .forward como el siguiente ejemplo:

|IFS=’ ‘ && exec /usr/bin/ procmail -Yf- | | exit 75
#username

En el ejemplo anterior se define primero que el separador de campos del intérprete de comandos es un espacio y luego ejecuta procmail, especificando las opciones -Y (asumimos que el formato de los buzones es BSD) y -f (indica que se actualize la fecha en el From de las cabeceras). Es posible que haga falta modificar la ruta para adecuarla a un sistema. Si se desean algunas precauciones, se puede usar algo como esto:

|IFS=’ ‘ && p=/usr/bin/procmail && test -f $p && exec $p -Yf- | | exit 75
#username

Esta versión comprueba la existencia del ejecutable de procmail antes de invocarlo. El último elemento, es un comentario para el intérprete de comandos, y es necesario. Como lo explica la página del manual de procmail, éste elemento “no es realmente un parámetro requerido por procmail, de hecho el intérprete de comandos lo descartará antes de que procmail lleve a verlo; pero es, aun así, necesario contra los programas de sendmail muy optimizados”.

Nota: El archivo del usuarios .forward no es necesario ni se usa cuando procmail es el agente de entrega local.

Configuración de Procmail
Procmail recibe las intruccions de filtrado de correo en un archivo de configuración, a nivel de sistema, el archivo de configuración se localiza en el /etc/procmail. El archivo específico de cada usuario es ~/.procmail.

Configuraciones de ejemplo de Procmail

Ejemplo 1
#——————————————————————-
#Definicion de variables
PATH=/bin:/usr/bin:/usr/local/bin:$HOME/bin:/usr/sbin
MAILDIR=$HOME/Mail
DEFAULT=$MAILDIR/logs

#desechar los mensajes de este usuario
0:
*
* ^From. *pepe@nador\.com
/dev/null

#Copiar todos los demas mensajes de correo al archivo
:0c
archivo
#———————————————————————

Descripción del ejemplo 1.
En la parte inicial del archivo de configuración se definen algunas variables de procmail como son: el directorio del correo, la ruta de búsqueda y el destino por dafault para los mensajes no redirigidos por alguna regla.

La primera regla filtra el correo del usuario pepe de nador.com redirigiendolo a /dev/null. Observe que la condición es una expresión regular con la que se comprueba el mensaje entrante. Contrariamente a lo que se espera, la búsqueda de patrones no es, por defecto, sensible a las mayúsculas.

La segunda regla copia incondicionalmente todos los mensajes entrantes al archivo ~/Mail/archivo, las rutas relativas son intepretadas con respecto a MAILDIR, mientras que se mantiene el mensaje original en el flujo de entrada. Dado que no hay ninguna condición especificada, todos los mensajes coindidirán y serán procesados.

La copia ocurre porque se incluye la opcion c (clonar un mensaje) en la línea inicial. Como indica esta regla, la línea inicial puede incluir potencialmente una variedad de elementos. El 0 puede estar seguido de una o mas letras de código (opciones especificando las variaciones en el manejo de mensajes), y la cadena entera puede ser seguida por otro punto, lo que causa que procmail use un achivo de bloqueo mientras procesa un mensaje con esta regla.

Si este es el archivo de configuración .procmail completo, entonces todos los mensajes no rechazados por la primera regla acabarían en el mismo lugar especificado por la variable DEFAULT, ~/Mail/logs. Se pueden usar reglas similares para hacer que procmail ordene el correo entrante en carpetas, tal y como se ilustra en el siguiente ejemplo.

ORDENANDO CORREO

#———————————————————————–
#configurar el directorio para rutas relativas
HOME=/home/usuario/Mail

#Ordenar y transferir varios tipos de mensajes
:0:
* ^From: (patti_singleton|craig_stone|tod_stone)@notaol\.org
cuates-usa

:0c:
* ^TO_help@zoas\.org
soporte\archivo

:0:
* ^TO_help@zoas\.org
* ^Subject: Case.*[GVPM][0-9][0-9][0-9]+
soporte/archivo1

:0:
* ^TO_help@zoas\.org
soporte/entradas
#———————————————————————–

Descripción del ejemplo anteior

  • La primera regla envia el correo de varios usuarios de notaol.org a la carpeta de correo indicada.
  • Las tres reglas restantes copian todas las direcciones de los mensajes de ayuda al archivo especificado en el directorio indicado y luego ordena los mensaes en otras dos carpetas de correo.
  • La tercera regla redirige los mensajes cuyo asunto comienza por Case y contiene una de las letras indicadas seguida por tres o más dígitos consecutivos al archivo existente. el resto de los mensajes van al archivo entradas (ambos en mi subdirectorio ~soporte).


Más ejemplos:

Especificando núltiples condiciones.

#———————————————————————–
#Definimos a From header set
FROM=”^From^[ ]|(Resent-)?(From|Reply-To|Sender):)”
#Descartamos los mensajes de este dominio
:0
* $ $ (FROM).*@pepe\.org
/dev/null

#Descartamos correo basura
:0
* ^Subject:.*last chace|\
^Subject:.*viagra|\
^Subject:.*??
/dev/null
#———————————————————————–

Reenviando y Generando Correo (auto-response)
#———————————————————————–
#Bloqueamos el correo y le nontificamos que ha sido bloqueado dicho correo a esta persona
:0
* ^From:.*persistent@pepe\.org
* !X-Loop: dvarela@linuxsc.net | (formail -r -a “X-Loop: dvarela@linuxsc.net”; \
echo “This us an auto-genered reply.”; \
echo “Mail rejected; it will never be read.” ) \
| sendmail -t -oi
#———————————————————————–

Como veran, con procmail no solo se pueden filtrar los correo y ordenarlos en una carpeta, si no que tambien se pueden bloquear lo correos con archivos enlazados o adjuntos con extensiones exe,com, bat, bak, pif, cdr, etc. Tambien es posible bloquear las cadenas o los forwarders (fwd), y permitir que solo el dominio local pueda hacer fwd.

Si quiere saber más acerda dee como bloquear los archivos adjuntos y hacer un auto-reponse sin bloquear le remitente, no dude en enviarme un e-mail.

 

 

LEAVE A REPLY

Please enter your comment!
Please enter your name here