Esta secci�n detalla solamente Procmail. Para informaci�n sobre el comando mail, consulte su p�gina man.
Procmail entrega y filtra correo mientras es colocado en el archivo spool de correo de la m�quina local. Es una herramienta eficaz, que hace un uso adecuado de los recursos del sistema y de amplio uso. Procmail desempe�a un papel cr�tico en la entrega de correo a ser le�do por las aplicaciones clientes de correo.
Procmail se puede invocar de muchas formas diferentes. Cada vez que un MTA coloca un correo en el archivo spool de correo, Procmail es lanzado. Procmail luego filtra y archiva el correo para el MUA y sale. Alternativamente, el MUA puede ser configurado para ejecutar Procmail cada vez que se recibe un mensaje y as� los mensajes son movidos en sus buzones correctos. Por defecto, la presencia de un archivo /etc/procmailrc o .procmailrc (tambi�n llamado archivo rc) en el directorio principal del usuario llamar� a Procmail cada vez que un MTA reciba un nuevo mensaje.
Las acciones que toma Procmail con un correo dependen de si el mensaje coincide con un grupo de condiciones o de recetas particulares en el archivo rc. Si un mensaje coincide con la receta o regla, entonces el correo se ubicar� en un determinado archivo, se eliminar� o se procesar�.
Cuando Procmail arranca, lee el mensaje de correo y separa el cuerpo de la informaci�n de cabecera. A continuaci�n, busca los archivos /etc/procmailrc y rc en el directorio por defecto /etc/procmailrcs, de todo el sistema, as� como las variables de entorno Procmail y reglas. Luego busca si hay un archivo .procmailrc en el directorio principal del usuario. Muchos usuarios tambi�n crean archivos rc adicionales para Procmail a los que se hace referencia dentro de .procmailrc en su directorio principal.
11.4.1. Configuraci�n de Procmail
El archivo de configuraci�n de Procmail contienen variables de entorno importantes. Estas variables especifican cosas tales como, qu� mensajes deben ordenarse, qu� hacer con los mensajes que no coinciden con ninguna receta, etc.
Estas variables de entorno normalmente aparecen al principio del archivo .procmailrc con el siguiente formato:
En este ejemplo, <env-variable> es el nombre de la variable y <value> define la variable.
La mayor parte de los usuarios de Procmail no utilizan muchas variables de entorno y muchas de las variables de entorno m�s importantes ya est�n definidas con un valor por defecto. La mayor�a de las veces tratar� con las siguientes variables:
DEFAULT — Establece el buz�n por defecto en el que se ubicar�n los mensajes que no coincidan con ninguna receta.
El valor por defecto DEFAULT es el mismo que $ORGMAIL.
INCLUDERC — Especifica archivos rc adicionales que contienen m�s recetas para los que deben comprobarse los mensajes. Esto permite desglosar las listas de recetas de Procmail en archivos individuales que cumplen papeles diferentes, tales como como bloquear correo basura y gestionar listas de correo, que se pueden activar o desactivar con caracteres de comentario en el archivo de usuario .procmailrc.
Por ejemplo, las l�neas en el archivo .procmailrc del usuario se pueden parecer a lo siguiente:
MAILDIR=$HOME/Msgs
INCLUDERC=$MAILDIR/lists.rc
INCLUDERC=$MAILDIR/spam.rc |
Si el usuario desea desactivar el filtro de Procmail para las listas de correo, pero quiere controlar el correo basura, solamente deber� comentar la primera l�nea INCLUDERC con un car�cter #.
LOCKSLEEP — Establece cuanto tiempo, en segundos, entre los intentos de Procmail de usar un lockfile concreto. El valor por defecto es ocho segundos.
LOCKTIMEOUT — Establece la cantidad de tiempo, en segundos, que debe transcurrir despu�s de modificar un lockfile para que Procmail asuma que este lockfile es antiguo y que se puede eliminar. El valor por defecto es 1024 segundos.
LOGFILE — El archivo que contendr� los mensajes de error o de informaci�n de Procmail.
MAILDIR — Establece el directorio de trabajo actual de Procmail. Si se define este directorio, todas las otras rutas de Procmail ser�n relativas a este directorio.
ORGMAIL — Especifica el buz�n original u otro lugar para colocar los mensajes si no se pueden ubicar en la ubicaci�n de receta o por defecto.
Por defecto, se utiliza un valor de /var/spool/mail/$LOGNAME.
SUSPEND — Establece la cantidad de tiempo, en segundos, que Procmail se detendr� si no est� disponible un recurso necesario, tal como espacio de intercambio (swap).
SWITCHRC — Permite a un usuario especificar un archivo externo que contiene recetas de Procmail adicionales, como la opci�n INCLUDERC, excepto que la verificaci�n de recetas es en realidad detenida en el archivo de configuraci�n referido y s�lo se usan las recetas en el archivo SWITCHRC especificado.
VERBOSE — Hace que Procmail registre mucha m�s informaci�n. Esta opci�n es �til para procesos de depuraci�n.
Otras variables de entorno importantes se extraen del shell, tal como LOGNAME, que es el nombre de conexi�n, HOME, que es la ubicaci�n del directorio principal y SHELL, que es el shell por defecto.
Hay una explicaci�n completa de todas las variables de entorno y sus valores por defecto en la p�gina man de procmailrc.
11.4.2. Recetas de Procmail
Los usuarios nuevos consideran que la creaci�n de recetas es la parte m�s dif�cil de Procmail. En cierto modo, esto es l�gico, ya que las recetas comparan los mensajes con las expresiones regulares, que es un formato concreto que se utiliza para especificar cualificaciones para una cadena coincidente. Sin embargo, las expresiones regulares no son dif�ciles de crear, e incluso es m�s f�cil entenderlas cuando se leen. Adem�s, la consistencia en la forma en que las recetas de Procmail est�n escritas, independientemente de las expresiones regulares, facilita aprender a trav�s de ejemplos. Para ver ejemplos de recetas, consulte Secci�n 11.4.2.5.
Una receta de Procmail tiene la siguiente estructura:
:0<flags>: <lockfile-name>
* <special-condition-character> <condition-1>
* <special-condition-character> <condition-2>
* <special-condition-character> <condition-N>
<special-action-character><action-to-perform> |
Los dos primeros caracteres de una receta de Procmail son dos puntos y un cero. Opcionalmente, se pueden insertar varios indicadores despu�s del cero para controlar c�mo Procmail procesa la receta. Dos puntos despu�s de la secci�n <flags> especifica que se crear� un lockfile para este mensaje. Si se crea un lockfile, debe especificar su nombre en el espacio <lockfile-name>.
Una receta puede contener varias condiciones con las que se comparar� el mensaje. Si no tiene condiciones, cada mensaje coincide la receta. Las expresiones regulares se insertan en algunas condiciones para facilitar su comparaci�n con un mensaje. Si se usan varias condiciones, todas ellas deben coincidir para que se realice una acci�n. Las condiciones se comprueban en funci�n de los indicadores establecidos en la primera l�nea de la receta. El uso de caracteres especiales opcionales que se insertan despu�s del car�cter * permiten controlar todav�a m�s la condici�n.
La opci�n <action-to-perform> especifica lo que le ocurrir� a un mensaje si coincide con una de las condiciones. S�lo puede haber una acci�n por receta. En muchos casos, se usa aqu� el nombre de un buz�n para dirigir los mensajes coincidentes a ese archivo con el fin de ordenar de una manera eficaz el correo. Tambi�n se pueden usar caracteres de acci�n especiales antes de especificar la acci�n. Consulte la Secci�n 11.4.2.4 para m�s informaci�n.
11.4.2.1. Recetas de entrega vs. recetas de no entrega
La acci�n usada si la receta coincide con un mensaje concreto determina si la receta se considera de entrega o de no entrega. Una receta de entrega contiene una acci�n que registra el mensaje a un archivo, env�a el mensaje a otro programa o reenv�a el mensaje a otra direcci�n de correo. Una receta de no entrega cubre cualquier otra acci�n, como el uso de un bloque de anidamiento. Un bloque de anidamiento es un conjunto de acciones entre llaves { }, que designa las acciones adicionales que deben realizarse en los mensajes que cumplen las condiciones de la receta. Los bloques de anidamiento pueden ser anidados uno entre otro, lo cual proporciona un mayor control a la hora de identificar y realizar acciones en los mensajes.
Cuando los mensajes coinciden con una receta de entrega, Procmail lleva a cabo la acci�n especificada y deja de comparar el mensaje con otras recetas. Los mensajes que coinciden con recetas de no entrega siguen siendo comparados contra otras recetas.
11.4.2.2. Indicadores
Los indicadores son muy importantes para determinar c�mo o si se comparar�n las condiciones de una receta con un mensaje. Los siguientes indicadores son de uso com�n:
A — Especifica que esta receta s�lo se usar� si la receta anterior sin un indicador A o a tambi�n coincidi� con este mensaje.
a — Especifica que esta receta s�lo se usar� si la receta anterior con un indicador A o a tambi�n coincidi� con este mensaje y se complet� exitosamente.
B — Analiza el cuerpo del mensaje y busca condiciones coincidentes.
b — Utiliza el cuerpo en cualquier acci�n resultante, como escribir el mensaje a un archivo o reenviarlo. Este es el comportamiento por defecto.
c — Genera una copia al carb�n (CC) del correo. Es �til para la entrega de recetas, puesto que la acci�n necesaria se puede realizar en el mensaje y se puede seguir procesando una copia del mensaje en los archivos rc.
D — Hace una comparaci�n egrep que distingue entre may�sculas y min�sculas. Por defecto, el proceso de comparaci�n no distingue entre may�sculas y min�sculas.
E — Similar al indicador A, con la diferencia de que las condiciones de la receta s�lo se comparan con el mensaje si la receta inmediatamente anterior sin un indicador E no coincide. Se puede comparar con la acci�n else.
e — Solamente se compara la receta con el mensaje si la acci�n especificada en la receta inmediatamente anterior falla.
f — Usa la canalizaci�n (pipes) como filtro.
H — Analiza la cabecera del mensaje y busca condiciones coincidentes. Este es el comportamiento por defecto.
h — Usa la cabecera en la acci�n resultante. Este es el comportamiento por defecto.
w — Indica a Procmail que debe esperar a que finalice el proceso del filtro o programa especificado, y que cree un informe indicando si tuvo �xito o no antes de considerar el mensaje como filtrado.
W — Esto es id�ntico a w excepto que se eliminan los mensajes "Program failure".
Para una lista detallada de los indicadores asicionales, consulte la p�gina man de procmailrc.
11.4.2.3. Especificaci�n de un Lockfile local
Los archivos lockfiles son muy �tiles en Procmail para garantizar que no m�s de un proceso intenta alterar un mensaje concreto al mismo tiempo. Puede especificar un lockfile local si inserta un car�cter de dos puntos (:)despu�s de cualquier indicador en la primera l�nea de una receta. Con esto se crear� un lockfile local basado en el nombre de archivo de destino m�s cualquier otro valor definido en la variable de entorno global LOCKEXT.
Como alternativa, puede especificar el nombre del lockfile local que se usar� con esta receta despu�s del car�cter :.
11.4.2.4. Condiciones y acciones especiales
El uso de caracteres especiales antes de las condiciones y acciones de recetas de Procmail cambian el modo en que se interpretan.
Los siguientes caracteres se pueden usar despu�s del car�cter * al principio de una l�nea de condici�n de receta:
! — En la l�nea de condici�n, invierte la condici�n y ocasiona que s�lo se produzca una coincidencia si la condici�n no coincide con el mensaje.
< — Comprueba si el mensaje est� por debajo de un n�mero especificado de bytes.
> — Comprueba si el mensaje est� sobre un n�mero especificado de bytes.
Los siguientes caracteres se utilizan para realizar acciones especiales:
! — En la l�nea de acci�n, este car�cter le indica a Procmail que reenvie el mensaje a las direcciones de correo especificadas.
$ — Hace referencia a una variable establecida anteriormente en el archivo rc. Se usa normalmente para configurar un buz�n com�n que utilizar�n varias recetas.
| — Inicia un programa especificado para procesar el mensaje.
{ y } — Crea un bloque de anidamiento que se usa para contener recetas adicionales a aplicar a los mensajes coincidentes.
Si no se utiliza un car�cter especial al principio de la l�nea de acci�n, Procmail asume que la l�nea de acci�n est� especificando el buz�n en donde registrar el mensaje.
11.4.2.5. Ejemplos de recetas
Procmail es un programa extremadamente flexible. Sin embargo, como resultado de esta flexibilidad, la composici�n de una receta de Procmail desde cero para alcanzar un objetivo concreto, puede resultar una labor muy complicada para los usuarios nuevos.
La mejor forma de desarrollar habilidades para construir recetas Procmail parte de un buen entendimiento sobre las expresiones regulares combinadas con la revisi�n de ejemplos constru�dos por otros. No entra en el �mbito de este cap�tulo ofrecer una explicaci�n extensa sobre las expresiones regulares. La estructura de las recetas de Procmail es m�s importante, y hay ejemplos �tiles de ellas en varios sitios de Internet (por ejemplo en https://www.iki.fi/era/procmail/links.html). El uso y la adaptaci�n adecuada de las expresiones regulares contenidas en estos ejemplos se puede derivar observando estas recetas de ejemplo. Puede encontrar informaci�n b�sica sobre reglas de expresiones regulares en las p�ginas man de grep.
Los ejemplos siguientes demuestran la estructura b�sica de las recetas Procmail y pueden suministrar la base para construcciones m�s elaboradas.
Una receta b�sica puede que ni siquiera tenga condiciones, como se demuestra en el siguiente ejemplo:
La primera l�nea especifica que se cree un lockfile local pero sin indicar un nombre, de modo que Procmail utilice el nombre del archivo de destino y anexa el valor especificado en la variable de ambiente LOCKEXT. No se especifica ninguna condici�n y, por tanto, cada mensaje coincide con esta receta y se insertar� en el archivo de spool denominado new-mail.spool, que se encuentra dentro del directorio especificado por la variable de entorno MAILDIR. Un agente MUA puede a continuaci�n ver los mensajes de este archivo.
Se puede colocar una receta b�sica como esta, al final de todos los archivos rc para dirigir los mensajes a una ubicaci�n por defecto.
El ejemplo siguiente coincide los mensajes provenientes de una direcci�n de correo espec�fica y los descarta.
Con este ejemplo, cualquier mensaje enviado por [email protected] se mueve inmediatamente al dispositivo /dev/null, elimin�ndolos.
| Atenci�n |
---|
| Aseg�rese de que una regla funciona adecuadamente antes de mover los mensajes a /dev/null, que supone una eliminaci�n permanente. Si las condiciones de receta "atrapan" inadvertidamente mensajes no destinados correctamente y estos mensajes desaparecen sin dejar rastro, entonces se hace m�s dif�cil revisar problemas en la regla. Una soluci�n mejor es dirigir la acci�n de la receta a un buz�n especial que compruebe de vez en cuando para buscar positivos falsos. Una vez comprobado que no se han coincidido por error los mensajes, puede eliminar el buz�n y dirigir la acci�n para enviar los mensajes a /dev/null. |
La receta siguiente atrapa el correo enviado a una lista de correo particular y lo coloca en una carpeta indicada.
:0:
* ^(From|CC|To).*tux-lug
tuxlug |
Cualquier mensaje enviado desde la lista de distribuci�n [email protected] se colocar� autom�ticamente en el buz�n tuxlug para el agente MUA. Tenga en cuenta que la condici�n de este ejemplo comparar� el mensaje si tiene la direcci�n de correo de la lista de distribuci�n en las l�neas Desde, CC, o Para.
Para m�s detalles consulte los muchos recursos disponibles para Procmail en l�nea en la Secci�n 11.6.
11.4.2.6. Filtros de correo basura
Puesto que Procmail es llamado por Sendmail, Postfix y Fetchmail cuando reciben nuevos correos, se puede usar tambi�n como una herramienta poderosa para combatir correo basura.
Esto es particularmente cierto cuando Procmail es usado en conjunto con SpamAssassin. Cuando se usan juntos, estas dos aplicaciones pueden identificar r�pidamente correo basura y ordenarlos o destruirlos.
SpamAssassin usa an�lisis de las cabeceras, de texto, listas negras, una base de datos de seguimiento de correo basura y el an�lisis de correo basura Bayesiano de autoaprendizaje, para identificar y marcar efectivamente el correo basura.
La forma m�s f�cil para que un usuario local use SpamAssassin es colocar la siguiente l�nea cerca de la parte superior del archivo ~/.procmailrc:
INCLUDERC=/etc/mail/spamassassin/spamassassin-default.rc |
El /etc/mail/spamassassin/spamassassin-default.rc contiene una regla simple de Procmail que activa SpamAssassin para todo el correo entrante. Si un correo es identificado como basura, se marca en la cabecera como tal y en el t�tulo se coloca:
El cuerpo del mensaje es tambi�n marcado al principio con una lista de qu� elementos provocaron que fuese considerado basura.
Para archivar correo marcado como basura, se puede usar una regla similar a lo siguiente:
:0 Hw
* ^X-Spam-Status: Yes
spam |
Esta regla archiva todo el correo marcado como basura en el buz�n de correo llamado spam.
Puesto que SpamAssassin es un script Perl, puede ser necesario en servidores ocupados usar un demonio binario SpamAssassin (spamd) y la aplicaci�n cliente (spamc). Configurar SpamAssassin de esta forma requiere acceso root.
Para arrancar el demonio spamd, escriba el siguiente comando como usuario root:
/sbin/service spamassassin start |
Para iniciar el demonio SpamAssassin cuando se inicia el sistema, use una utilidad initscript, tal como la Herramienta de configuraci�n de servicios (system-config-services), para activar el servicio spamassassin. Consulte la Secci�n 1.4.2 para m�s informaci�n sobre las utilidades initscript.
Para configurar Procmail a usar la aplicaci�n cliente SpamAssassin en vez de un script Perl, coloque la siguiente l�nea cerca de la parte superior del archivo ~/.procmailrc . Para una configuraci�n global del sistema, col�quela en /etc/procmailrc:
INCLUDERC=/etc/mail/spamassassin/spamassassin-spamc.rc |