Indice
1.
Introducción.
3. Configuración Del Sistema Procmail;
Archivo .procmailrc
4. 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).