Indice1. Introducción.3. Configuración Del Sistema Procmail; Archivo .procmailrc4. Bibliografía.
1. Introducción.
A pesar de lo eficiente y atractivos que resultan muchos servicios de intercambio de información en Internet, sigue siendo el correo electrónico el mas usado; tal vez en ello influya la menor exigencia de su implementación física del servicio, a la par que la del software; también puede influir su permanencia mas larga entre las herramientas comunicadoras, lo que le puede haber generado un "público" al acostumbrado. también no se debe pasar por alto el hecho que los más "atrasados", con este servicio como única forma de contacto, obliga a los mas "adelantados" a conservarlo y a comunicarse por él, so pena de perder los interlocutores en buena parte de la humanidad, no sólo coloquiales, sino comerciales, científicos, politécnicos, etc. Tal vez de estos factores más generales se generan nuevas formas de uso que incrementan el empleo del correo. Un ejemplo de ello esta en las listas de discusión. Solo en Internet hay registradas mas de 200 000. Por otro lado, los propios servicios de Internet, inaccesibles a una gran mayoría on line, están disponibles vía e-mail. Sólo el servicio de Telnet, entre los fundamentales, no es posible emplearlo por correo electrónico. También los factores mas arriba analizados, amen de las obvias limitaciones del ser humano para atender y procesar la información provoca el surgimiento de la necesidad de la clasificar la misma. Esta clasificación se puede hacer a nivel del administrador de correo (en el supuesto que estemos en presencia de una organización o grupo de usuarios de alguna forma asociados), pero cuando el saldo cualitativo es muy grande, esto se torna ineficiente, cuando no imposible, y entonces surge la necesidad de clasificación a nivel de usuario, por lo que estamos en presencia de un control autónomo del correo; la clasificación generalmente se asocia a un término: filtrado de correo (mail filtering). Por otro lado, junto a los efectos positivos del profuso tráfico de mensajes electrónicos, aparecen, indefectiblemente otros negativos, perjudiciales. Algunos son casuales, independientes del deseo de las partes, otros intencionales, entre ellos el "spam". En Internet spam significa el envío de mensajes con múltiples copias del mismo articulo (o ligeramente alterado) a muchos grupos de noticias o listas, sin el "crossposting" (crossposting significa que físicamente una copia sola de un articulo recorre el mundo en muchos grupos de noticias o listas, la mayoría de los cuales no tienen nada que hacer con el tópico del artículo).
De ah la necesidad del control individual del proceso de "spam bouncing" (rebote de correo indeseado). También los mensajes, por ser muchos y poder llegar en cualquier momento, incluido cuando no estamos (de noche, en vacaciones, de viaje, etc.). El hecho de eventualmente tener que dar respuesta inmediata o al menos acuse de recepción a algunos de ellos de manera inmediata, implica la necesidad de crear contestadores automáticos ("autoresponders"). Otras muchas tareas, como el desglose de mensajes comprimidos ("splitting"), la conversión de mensajes codificados a su original, prevención de bucles (mensajes enviados-contestados infinitamente), dan sentido al manejo autónomo del correo electrónico y a la existencia de herramientas para ello. En Linux (y en general en todos los "unices") el procmail es una de las más poderosas y flexibles herramientas para el control del correo. A mostrar varias facetas de su funcionamiento, a partir de los cuales se pueda inducir la filosofía de su uso y configuración, esta dirigido este trabajo. En los puntos que siguen daremos una breve panorámica de su aparición, versiones, así como principales sitios asociados al tema, aunque la bibliografía que aparece al final del trabajo casi podría considerarse como un súper conjunto de esto ultimo, haciendo la salvedad que existen también referencias a fuentes tradicionales (libros, artículos de revistas). Luego pasaremos a la presentación de la tarea mas importante en el trabajo con el procmail; la creación del fichero .procmailrc. Esto se desglosa en la descripción de las partes funcionales del fichero de la configuración, la sintaxis y semántica de los elementos constitutivos de los "recipes" o reglas y varios ejemplos al respecto. Finalmente se presentaran ficheros de configuración reales y se discutirá su funcionamiento, para terminar con la inserción de cambios en el fichero .procmailrc y el envío de mensajes para constatar "in situ" el resultado.
El procmail es un conjunto poderoso y robusto de herramientas que permite procesar automáticamente el correo en cuanto lo recibe o después que esta en la carpeta de mensajes. Este definición, tomada de un documento en Internet sobre procmail, (http://www.ii.com/internet/robots/procmail/ ) puede ser reducida, luego de eliminadas alternancias sospechosas para un primer encuentro, a que el procmail es una herramienta para el proceso automático del correo. En particular, este control puede ser hecho a nivel de usuario, es decir, autónomo. La primera versión de procmail se escribió el 7 de diciembre de 1990. La última el 2 de abril de 1999. A continuación presentamos un listado de todas las versiones con su fecha de salida. Algunas tuvieron una vida más que efímera, o fueron solo cambios cosméticos de las anteriores. 1990/12/07: v1.00 1990/12/12: v1.01 1991/02/04: v1.02 1991/02/13: v1.10 1991/02/21: v1.20 1991/02/22: v1.21 1991/03/01: v1.30 1991/03/15: v1.35 1991/06/04: v1.99 1991/06/10: v2.00 1991/06/11: v2.01 1991/06/12: v2.02 1991/06/20: v2.03 1991/07/04: v2.10 1991/07/12: v2.11 1991/10/02: v2.20 1991/10/18: v2.30 1991/10/22: v2.31 1991/12/05: v2.40 1991/12/13: v2.50 1992/01/22: v2.60 1992/01/31: v2.61 1992/04/30: v2.70 1992/07/01: v2.71 1993/02/04: v2.80 1993/02/19: v2.81 1993/06/02: v2.82 1993/07/01: v2.90 1993/07/02: v2.91 1994/06/14: v3.00 1994/06/14: v3.01 1994/06/16: v3.02 1994/06/30: v3.03 1994/08/02: v3.04 1994/08/04: v3.05 1994/08/30: v3.06 1994/10/31: v3.10 1995/05/17: v3.11pre3 1995/10/29: v3.11pre4 1997/04/28: v3.11pre7 1999/03/02: v3.12 1999/03/31: v3.13 1999/04/02: v3.14pre
Sitios relevantes. Hay muchos sitios, varios de ellos de casi obligada referencia, si se quiere avanzar un poco en este asunto, o al menos no hacerlo muy lentamente. En primer lugar, donde encontrar las fuentes del procmail: ftp://ftp.informatik.rwth-aachen.de/pub/packages/procmail
El siguiente URL puede considerarse como un punto de información de otros muchos sitios relativos al tema. Es el conocido mini faq de Era Eriksson: http://www.iki.fi/~era/procmail/mini-faq.html Existe una lista con bastante tráfico. Las solicitudes de inscripción se dirigen a: Procmail-request[arroba]informatik.rwth-aachen.de Los ficheros de esta lista pueden encontrarse en: http://www.rsat.mpe-garching.mpg.de/mailing-list/procmail El spam y la lucha contra el es también un tema que haya muchos sitios. He aquí uno, mantenido por Catherine Hampton: http://www.hrweb.org/spambouncer/proctut también sobre la lucha contra el spam, muchos enlaces sobre el tema los tenemos en el sitio: http://www.best/~ariel/nospam La "Lista Negra" de los anunciadores (spammers) en Internet: http://www-math.uni-poderborn.de/%7Eaxel/BL/#spam
3. Configuración Del Sistema Procmail; Archivo .procmailrc.
Al recibir un nuevo mensaje en un S.O. Linux (no necesariamente en todos los Unices), el procmail automáticamente se remite al fichero de configuración .procmailrc, colocado en el home directory de la cuenta del usuario a quien va dirigido el mensaje y, si existe, sigue las instrucciones de este fichero de configuración. De ahí se deduce, que si en varios o en todas las cuentas (usuarios) del sistema existen diferentes ficheros .procmailrc, distintas serán las conductas y destinos de los mensajes. El fichero .procmailrc puede ser dividido, en primera instancia, en 2 partes funcionalmente diferentes (pero no necesariamente ubicadas en porciones predeterminadas del fichero): la sección de declaración de variables de entorno y la sección de reglas o recipes.
-Sección de Declaración de Variables de Entorno. En ella se le asignan valores a una serie de variables, por lo general de ubicación (pero no solo) de carpetas y ficheros, donde se enviara información, mensajes, partes de estos, trazas de ejecución, etc., o se leerán y ejecutaran instrucciones y comandos.
Mostremos a continuación las variables de entorno de mas frecuente uso: SHELL: Especifica el shell del Linux usado para ejecutar el procmail. Por lo general no debe asignarse nada, a no ser que se sienta lo suficientemente experto como para hacerlo. MAILDIR: Indica el directorio donde se almacenan los ficheros con los mensajes de correo. Por lo general estos son $HOME/mail o $HOME/Mail. El que sea alguno de estos o incluso otro, dependerá del lector de correo que usemos. LOGFILE: Esta variable se iguala al nombre de fichero donde se guardara la "traza" de las operaciones que va realizando el procmail con cada mensaje que entra. Esta descripción puede ser completa o parcial, en dependencia del valor de la variable VERBOSE que veremos a continuación. De más está decir lo importante que resulta tener una historia de lo que va sucediendo, como lo es en otros muchos procesos del Unix/Linux. En más de una ocasión hemos encontrado en el la causa de un comportamiento inexplicable o de un silencio de ultratumba (una torpe configuración del .procmailrc puede provocar la desaparición, sin dejar rastros, de los mensajes, que en profusión nos llegaban. Me ocurrió una vez, solo no recuerdo que hice…). La ausencia de valores en esta variable implica el no almacenamiento de los resultados de las operaciones que se realizan. En general, mientras no estemos seguros del comportamiento de nuestro .procmailrc, o si con frecuencia hacemos cambios, en especial incrementales, debemos conservar nuestro "LOGFILE". Pero también debemos ser cuidadosos con el crecimiento del mismo, pues en la opción de descripción completa crece notablemente (a no ser que el tráfico sea muy pobre), lo cual es indeseable en cualquier caso, y en particular cuando nuestra cuenta tiene una cuota de espacio de disco.
Ejemplo: LOGFILE=$HOME/mail/log VERBOSE: Esta variable esta indisolublemente ligada a LOGFILE. Puede tomar sólo dos valores: on o off . En el primer caso, en el LOGFILE se almacenará la descripción completa del tratamiento y destino de cada mensaje. En el segundo sólo parcialmente. Ejemplo: VERBOSE=on DEFAULT: Esta variable contiene el nombre (y por supuesto la posición) del fichero a donde ira a parar, se almacenará un mensaje si ninguna de las partes ejecutivas del .procmailrc puede actuar sobre él, o lo hace y genera una copia que no será usada por otro que no genere copias (esto de generar copias se verá un poco más adelante). SENDMAIL: En esta variable se almacena el lugar (el camino) donde estará el programa sendmail. Este programa se emplea cuando una de las acciones incluye dentro de si otras, una de las cuales es el envío del mensaje hacia alguna dirección. Además existen otras variables, como PATH, que tienen un sentido conocido dentro del Shell; hay algunas que son propias del .procmailrc: TO, FROM_MAILER, etc. Para una descripción completa de las mismas, ver la página man procmailrc.
–Segunda parte del .procmailrc; sección de reglas (recipes). La segunda sección del .procmailrc es el de las reglas o recipes. En esta están las instrucciones que deben seguir los mensajes dirigidos al usuario en cuya cuenta está el .procmailrc, o al menos alguno de estos. Toda regla debe comenzar con :0 . Esto es como la señal que el sistema debe esperar a continuación al menos una condición (puede ser la condición trivial, es decir, la incondicionalidad). Después debe aparecer un signo * a la derecha de lo cual se debe escribir una condición, en forma de expresión regular (ver más adelante). Debajo de la condición (o condiciones, pueden ser varias, todas precedidas por * y se consideran relacionadas en una conjunción), debe aparecer la acción que ha de ejecutar con el mensaje. Veamos un ejemplo: ^From.*rey[arroba]ghost.matcom.uh.cu filtro1[arroba]usa.net
En este ejemplo todos los mensajes en cuyo encabezamiento haya una línea que comience con From, luego aparezca cualquier cantidad de caracteres (incluida la cantidad nula) y finalmente la cadena: rey[arroba]ghost.matcom.uh.cu debe ser reenviado (sin alteración en ninguna de sus partes) hacia la dirección: filtro1[arroba]usa.net Esta interpretación de la condición está hecha desde el punto de vista de una expresión regular, como se verá a continuación, pero desde la óptica de las posibles acciones a realizar por un mensaje de correo, podríamos decir que: Todo mensaje originado en: rey[arroba]ghost.matcom.uh.cu debe ser reenviado a: filtro1[arroba]usa.net Vistos estos ejemplos y antes de pasar a la forma general de una regla, veamos algo sobre expresiones regulares.
Expresiones regulares. Las expresiones regulares son patrones compuestos por meta caracteres. Todos conocemos ejemplos simples de estos y otros en la representación de ficheros; así * significa cualquier cantidad de caracteres, ? un carácter. Estos son meta caracteres. De esta forma: *.com y file?.doc significan todos los ficheros cuya extensión es com la primera expresión, mientras que la segunda es aquella que representa a todos los ficheros con extensión doc, cuyo nombre tiene cinco caracteres, los cuatro primeros de los cuales son file. Estas son expresiones para los nombres de ficheros. En el Linux/Unix existen expresiones regulares con mucho mayor expresividad, que son las usadas en las reglas del .procmailrc y en comandos y lenguajes como grep, egrep, sed, awk (aunque algunas difieren ligeramente entre sí; las del .procmailrc son un súper conjunto de las del egrep). Las expresiones regulares que se emplean en las condicionales de las reglas usan, entre otros, los siguientes meta caracteres: ^ Comienzo de la línea. $ Final de la línea. . Cualquier carácter excepto un salto de línea. * Cero o más veces. + Una o más veces. ? Cero o una vez. [a-z] Rango de caracteres, en este caso de la 'a' a la 'z'. [^a-z] Cualquier carácter que no esté en el rango de la 'a' a la 'z'. a|b La 'a' o la 'b' Ejemplos de expresiones veremos en breve, al desarrollar ejemplos de reglas del .procmailrc.
Sintaxis general de una regla. La sintaxis general de una regla es: :0 [opciones] [ : [fichero de exclusión] ] * condición 1 * condición 2 * condición N acción
Vayamos por partes analizando esta construcción. En primer lugar, como ya adelantamos, cada regla comienza por un :0, a continuación podemos indicar las siguientes opciones: H La condición se aplica a la cabecera del mensaje. B La condición se busca en el cuerpo del mensaje. D Al analizar la condición se distingue entre mayúsculas y minúsculas. A Esta regla se ejecutará únicamente si su antecesora lo hizo. a Igual que la anterior, con la salvedad de que la ejecución de la regla anterior debió realizarse sin errores. E Esta regla se ejecutará si la anterior no lo hizo. e Esta regla se ejecutará si se intento ejecutar la regla anterior pero hubo algún error. h La cabecera se pasa al comando. b El cuerpo del mensaje se pasa al comando. f El comando se considerará como un filtro. c Genera un carbon copy del mensaje. Al ejecutar una regla que da el mensaje por entregado con este flag, se consigue que el mensaje no se de por entregado y se puedan ejecutar otras reglas a continuación de esta. w Espera a que el comando se ejecute para recibir su código de salida. W Igual que el anterior pero en caso de error no emite ningún mensaje. i Ignora los posibles errores de escritura. r Escribe el mensaje tal y como esté. No comprueba que termine en una línea en blanco que sería lo correcto. Por defecto, de no indicarse nada, se comparará la condición de la regla con la cabecera del mensaje (opción H). Al comando se le pasará a su entrada estándar tanto la cabecera del mensaje como su cuerpo (opciones h y b). No se hará distinción entre mayúsculas y minúsculas. Tras el :0 y las posibles opciones puede aparecer opcionalmente un segundo :, de hacerlo se estará indicando que el fichero destino donde se escriba el mensaje debe bloquearse para que dos procesos no escriban a la vez sobre el fichero. Opcionalmente se puede indicar el fichero de exclusión que se usará para realizar el bloqueo. A continuación vienen las condiciones, una por línea y precedidas por un *. En las condiciones generalmente se usan expresiones regulares para intentar encontrar cadenas de texto dentro de la cabecera o del cuerpo del mensaje. Para construir estas expresiones, se emplean los símbolos más arriba descritos.
Después de las condiciones viene la acción. En este lugar puede aparecer:
- Un nombre de fichero. En ese caso el mensaje que cumpla la sección de condición se almacenará allí.
- Un ! seguido de una dirección de correo. En ese caso el mensaje será reenviado a este sitio.
- Un signo |. Si después del símbolo se pone el nombre de un programa, este se ejecutará. Si no se indica nada tras el símbolo, el mensaje será enviado a la salida standard. Si se indica el nombre de una variable de entorno antes del |, entonces el resultado del comando indicado se guarda en esta variable.
Ejemplo de aplicación del manejo del correo con ayuda del procmail. A continuación desarrollaremos un detallado ejemplo del empleo del procmail en la comunicación con un grupo de estudiantes por medio del correo electrónico. En el segundo semestre del curso 98-99 decidimos implementar una especie de consulta virtual con los estudiantes; para ello pretendíamos que la relación tuviese un carácter semejante a una lista de discusión. Los estudiantes del grupo de marras estaban divididos en tres subgrupos. En la primera mitad del curso a su disposición contaban con sólo 8 cuentas de correos, correspondiendo a 8-9 estudiantes una cuenta. En la segunda mitad cada uno tuvo su propia cuarta. Estas dos situaciones generaron dos configuraciones ligeramente diferentes. Analizaremos la primera.
Las 8 cuentas tenían las siguientes direcciones: vet1[arroba]udg.granma.inf.cu vet2[arroba]udg.granma.inf.cu vet3[arroba]udg.granma.inf.Åu vet4[arroba]udg.granma.inf.cu vet5[arroba]udg.granma.inf"cu vet6[arroba]udg.gra ma.inf.cu vet7[arroba]udg.granma.inf.cu vet-[arroba]udg.granma.inf.cu
Se planificó que la comunicación se realizara de la siguiente manera: El estudiante, al enviar una pregunta o cualquier otro mensaje, lo hacía a cualquiera de las dos direcciones de corre.@de su profesor: King[arroba]udg.granma.inf.cu King[arroba]philadelphia.granma.inf.cu Se configuraron estas de tal modo todos los mensajes convergieran hacia la cuenta en el servidor philadelphia; para ello se colocó el siguiente .procmailrc en el "HOME directory" de king en udg: #procmailrc para el control del correo. # Variables de Enviroment SHELL=/bin/bash PATH=$HOME/bin:/bin:/usr/bin:/local/bin MAILDIR=$HOME/mail DEFAULT=/var/spool¯mail/kFng LOGFILE=$MAILDIR/log ÑENDMAIL=/usr/sbin/sendmail FORMAIL=/usr/bin/formail VERBOSE=on
Algunas reglas para pre.enir la pérdida de mensajes o su duplicación: Crea una copia en backup. La regla que vemos más arriba es muy simple; en la condición se discriminan todos los mensajes en cuyo encabezamiento haya una línea que comience con la cadena From, que después de esta haya cualquier cantidad de caracteres (incluido ninguno, pero en todo caso no puede ser un cambio de línea). En esa misma línea debe aparecer la cadena vet seguida de un carácter en el rango del 1 al 8 , ambos inclusive y a continuación @udg.granma.inf.cu.
Estos mensajes serán reenviados (forward) hacia la dirección king[arroba]philadelphia.granma.inf.cu, que es lo que se impone en la línea de acción. Para los mensajes recibidos en king[arroba]philadelphia.granma.inf.cu, preparamos el siguiente comportamiento: Todo mensaje proveniente de los estudiantes (vet1 a vet8 en udg) debía ser clasificado según el subgrupo, es decir, almacenados en tres buzones denominados B-1, B-2 y B-3 y luego distribuidos a todas las cuentas. También debía permitirse que cualquier estudiante pudiese enviar un mensaje, personal o privado al profesor, sin ser este reflejado en las demás cuentas, o por el contrario, un estudiante podía distribuir un mensaje entre los demás sin ser visto por el profesor. Para lograr esto se impuso en la comunicación dos convenios: cuando un estudiante quería quesu mensaje fuese leído por el profesor y distribuido debía incluir en el Asunto (Subject) una cadena que contuviese gb1, gb2 o gb3, según fuese de alguno de estos grupos. Si el mensaje sólo debía alcanzar al profesor, la palabra clave era personal. Finalmente, si el mensaje debía obviar al profesor, no se escribía ninguno de los dos en el asunto.
En la cuenta king del servidor philadelphia se creó el siguiente fichero .procmailrc: #.procmailrc para el control del correo. # Variables de Enviroment SHELL=/bin/bash PATH=$HOME/bin:/bin:/usr/bin:/local/bin MAILDIR=$HOME/mail DEFAULT=/var/spool/mail/king LOGFILE=$MAILDIR/log SENDMAIL=/usr/sbin/sendmail FORMAIL=/usr/bin/formail VERBOSE=on
Nótese que cada regla, excepto la última tiene la opción c. De no ser así el mensaje se consideraría entregado a la dirección de correo que no lo tuviese y no se retransmitiría a las subsiguientes direcciones. En la segunda mitad del curso, cada estudiante recibió su cuenta individual, las cuales fueron denominadas uniformemente: estv75, estv76…..estv142. Los estudiantes del grupo 1 tenían sus cuentas del estv75 al 98, los del 2 del estv99 al 120, y el tercero del estv121 al 142, todas ubicadas en el servidor philadelphia (philadelphia.granma.inf.cu). Los servicios que se implementaron fueron los mismos. Al final de este trabajo en un anexo está el texto de todo el fichero .procmailrc, que contiene las reglas para la distribución de la mensajería entre profesor y estudiantes.
4. Bibliografía.
Ángel Lopez, Procesamiento de Correo con procmail; LinuxFocus noviembre 1997 Peter J. Brown, Starting with Unix, Moscú, Mir, 1987 (en ruso). http://www.ii.com/internet/robots/procmail/ ftp://ftp.informatik.rwth-aachen.de/pub/packages/procmail http://www.rsat.mpe-garching.mpg.de/mailing-list/procmail http://www.hrweb.org/spambouncer/proctut http://www.best/~ariel/nospam http://www-math.uni-poderborn.de/%7Eaxel/BL/#spam
Autor:
Lic. Rey Segundo Guerrero Proenza
http://www.geocities.com/reysgp/
Graduado de Matemáticas en la Facultad Mecánico-Matemática de la Universidad Estatal de Moscú Lomonosov, en el Curso 82-83, realizando la tesis en Topología, en el tema: Continuidad de los Functores de los Hiperespacios. Desde el curso 83-84 trabaja en la Universidad de Granma (UDG, antiguo ISCAB), en el cual ha realizado varias actividades de carácter docente-investigativo, a la par con las obvias tareas educativas, de asesoramiento y de superación. En el trabajo investigativo y de superación, ha combinado y puesto en función su formación en Matemáticas con las correspondientes en Ciencias de la Computación, y otras que por razones de trabajo han sido necesarias; sus intereses actuales son: Inteligencia Artificial (verificación de bases de conocimientos), servicios de Internet (particularmente su acceso por correo electrónico), Linux (uso del procmail como gestor autónomo del correo), Informática Educativa, específicamente en enseñanza virtual por correo electrónico. Actualmente está enfrascado en la realización de su tesis de Maestría en la Universidad de La Habana (Herramientas Colaborativas).