Red Hat Linux 9: Manual de referencia de Red Hat Linux | ||
---|---|---|
Anterior | Capítulo 11. Correo electrónico | Siguiente |
Red Hat Linux incluye dos MDAs primarias, Procmail y mail. Ambas aplicaciones son consideradas Agentes de entrega local y ambas mueven el correo desde el archivo spool MTA en el buzón de correo. Sin embargo, Procmail proporciona un sistema de filtrado de correo robusto.
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 puede ser invocado 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 de manera que el MUA lo pueda encontrar, y sale. Alternativamente, el MUA puede ser configurado para ejecutar Procmail cada vez que un mensaje es recibido y así los mensajes son movidos en sus buzones correctos. Por defecto, la presencia de un archivo .procmailrc 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 las instrucciones de las recetas particulares, o reglas mediante las que se comparan los mensajes con el programa. Si un mensaje coincide con la receta o regla, 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 para encontrar las reglas específicas de dicho usuario. Muchos usuarios también crean archivos rc adicionales propios para Procmail que son referidos por su archivo .procmailrc, pero que se pueden activar o desactivar rápidamente si se produce un problema al filtrar el correo.
Por defecto, no hay archivos rc aplicables a todo el sistema en el directorio /etc y ningún archivo de usuario .procmailrc existe. Para comenzar a usar Procmail, construya un archivo .procmailrc con variables de entorno y reglas particulares para ciertos tipos de mensajes.
En la mayoría de las configuraciones, la decisión sobre si Procmail se arranca e intenta filtrar el correo se basa en el existencia de un archivo de usuario .procmailrc. Para desactivar Procmail, pero guardar el trabajo en el archivo .procmailrc, copie la información a un archivo de nombre similar que utilice el comando mv ~/.procmailrc ~/.procmailrcSAVE. Cuando esté preparado para realizar nuevas pruebas con Procmail, cambie nuevamente el nombre del archivo a .procmailrc. Procmail empezará a funcionar de nuevo inmediatamente.
Los archivos de configuración de Procmail, y más en concreto el archivo de usuario .procmailrc, contienen variables de entorno importantes. Estas variables indican a Procmail 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:
<env-variable>="<value>" |
En este ejemplo, <env-variable> es el nombre de la variable y <value> define la variable.
Muchas variables de entorno no se utilizan por la mayor parte de los usuarios de Procmail, 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 según diversas funciones (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 cada cuanto tiempo, en segundos, que Procmail intentará 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 — La ubicación y archivo que contendran 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, es usado 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.
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 adivinar su contenido.
No entra en el objeto 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 http://www.iki.fi/era/procmail/links.html). El uso y la adaptación adecuada de las expresiones regulares contenidas en estos ejemplos dependerá de si se entiende la estructura correspondiente. Puede encontrar información básica específica a las reglas de expresiones regulares en las páginas man de grep.
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 lo que hace Procmail cuando procesa la receta. Dos puntos después de la sección <flags> especifica que se creará un lockfile para este mensaje. Si se va a crear 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 cumple 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.
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 en 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 una acción 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, lo cual proporciona un mayor control a la hora de identificar y realizar acciones en los mensajes.
La entrega de recetas coincidentes con mensajes provoca que Procmail realice la acción especificada y detenga la comparación del mensaje con otras recetas. Los mensajes que cumplen las condiciones de las recetas de no entrega seguirán comparándose con otras recetas en los archivos rc. En otras palabras, las recetas de no entrega, hacen que el mensaje siga pasando por las recetas después de adoptarse la acción especificada.
Los indicadores son muy importantes para determinar cómo 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.
Para garantizar que se ha completado correctamente la acción de la última receta coincidente anterior, antes de que se permita una coincidencia con la receta actual, utilice el indicador a.
B — Analiza el cuerpo del mensaje y busca condiciones coincidentes.
b — Utiliza el cuerpo de una 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.
Use el indicador e si sólo desea que se compruebe esta receta en el caso de que la receta anterior coincidiese pero fallase la acción.
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.
Si desea omitir los mensajes de "error de programa", cuando decida si un filtro o no termina correctamente, utilice la opción W.
Hay indicadores adicionales en la página man de procmailrc.
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 : 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 :.
El uso de determinados caracteres 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:
! — 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 tiene un número inferior de bytes.
> — Comprueba si el mensaje tiene un número superior de bytes.
Los siguientes caracteres se utilizan para realizar acciones especiales:
! — Indica a Procmail que reenvíe el mensaje a las direcciones de correo especificadas.
$ — Hace referencia a una variable establecida anteriormente en el archivo rc. Se usa normalmente para establecer un buzón común que utilizarán varias recetas.
| — Carácter de canalización que indica a Procmail que debe arrancar un programa específico para gestionar este mensaje.
{ y } — Crea un bloque de anidamiento que se usa en combinación con recetas adicionales para aplicarlo 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 un buzón donde registrar el mensaje.
Procmail es un programa extremadamente flexible que permite comparar los mensajes con condiciones muy específicas y, a continuación, realizar en ellos acciones muy detalladas. 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 manera de obtener los conocimientos necesarios para crear condiciones de recetas de Procmail es comprender las expresiones regulares y analizar los distintos ejemplos de otros desarrolladores. Los siguientes ejemplos, muy básicos, servirán para mostrar la estructura de las recetas de Procmail y pueden proporcionar la base para crear otras recetas más complejas.
Una receta básica puede que ni siquiera tenga condiciones, como se demuestra en el siguiente ejemplo:
:0: new-mail.spool |
La primera línea inicia la receta mediante la especificación de que se cree un lockfile local pero sin indicar un nombre, de modo que Procmail utilice el nombre del archivo de destino y LOCKEXT para crearlo. No se especifica ninguna condición y, por tanto, cada mensaje coincide con esta receta y se insertará en el archivo de spool exclusivo 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.
Esta receta básica se insertará al final de todos los archivos rc para dirigir los mensajes a una ubicación por defecto. Un ejemplo más complejo, que extrae los mensajes de una dirección de correo concreta y los saca, como se puede ver en este ejemplo.
:0 * ^From: spammer@domain.com /dev/null |
Con este ejemplo, cualquier mensaje enviado por spammer@domain.com son movidos inmediatamente a /dev/null, y se eliminarán.
![]() | Atención |
---|---|
Asegúrese de que una regla funciona adecuadamente antes de mover los mensajes que coinciden con /dev/null, que supone una eliminación permanente. Si las condiciones de receta "atrapan" inadvertidamente mensajes no destinados correctamente, esto mensajes desaparecerán sin dejar rastro, haciendo 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 o mensajes que han coincidido inadvertidamente con las condiciones. 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. |
Procmail se usa principalmente como filtro de correo, colocándolos automáticamente en el lugar correcto para que no tenga que ordenarlo manualmente. La siguiente receta atrapa el correo enviado desde una lista de correo particular y los coloca en la carpeta correcta.
:0: * ^(From|CC|To).*tux-lug tuxlug |
Cualquier mensaje enviado desde la lista de distribución tux-lug@domain.com 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 From, CC, o To.
Para más detalles y recetas consulte los muchos recursos disponibles para Procmail en línea en Sección 11.6.
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 y una base de datos de seguimiento de correo basura para rápida y efectivamente identificar y marcar 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:
*****SPAM***** |
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 el sistema es arrancado, use una utilidad initscript, tal como la Herramienta de configuración de servicios (redhat-config-services), para activar el servicio spamassassin. Consulte 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 o, para una configuración global del sistema, colóquela en /etc/procmailrc:
INCLUDERC=/etc/mail/spamassassin/spamassassin-spamc.rc |