¡Esta es una revisión vieja del documento!
Tabla de Contenidos
211.2 Managing E-Mail Delivery
Pertenece a Topic 211: E-Mail Services
- Weight: 2
- Description: Candidates should be able to implement client e-mail management software to filter, sort and monitor incoming user e-mail.
- Key Knowledge Areas:
- Understanding of Sieve functionality, syntax and operators
- Use Sieve to filter and sort mail with respect to sender, recipient(s), headers and size
- Awareness of procmail
- Terms and Utilities:
- Conditions and comparison operators
- keep, fileinto, redirect, reject, discard, stop
- Dovecot vacation extension
Para un MTA, otro objetivo principal es el de recibir correos con destino los usuarios de su dominio de correo. No hay nada pensado para la entrega del correo a los usuarios.
La solución común es usar un MDA (Mail Delivery Agent) para que los mensajes puedan recibirse desde un MUA (Mail User Agent), llamado comúnmente cliente de correo.
Una vez que un mensaje ha sido recibido por un MTA, se tiene que almacenar a la espera de la recepción por parte de un usuario.
Tradicionalmente existen dos formatos principales que permiten conservar estos mensajes de forma estructurada:
- mbox: todos los mensajes recibidos por un usuario se concatenan y se guardan en un único fichero (por ejemplo,
/var/spool/mail/pepito). - maildir: Utiliza una estructura de directorios para almacenar los correos recibidos para un usuario:
tmp: directorio al que llegan inicialmente.new: directorio al que pasan hasta que son leídos (bandeja de entrada).cur: directorio donde se almacenan después de ser leídos.
Recordamos que los correos se almacenan en el sistema en la ruta /var/spool/mail o /var/mail.
Por defecto, postfix utiliza el formato mbox para almacenar los correos recibidos por los usuarios. Se puede cambiar añadiendo la siguiente directiva al fichero main.cf:
home_mailbox = Maildir/
El comando mail usa únicamente el formato mbox. Por lo tanto, no se puede utilizar si se usa el formato maildir. En ese caso, los mensajes deberán obtenerse mediante el uso de algún medio compatible, como por ejemplo un servidor POP o IMAP que sea compatible con maildir.
Procmail
Se puede indicar al MTA que procese los mensajes entrantes antes de almacenarlos. Postfix puede designar a un programa de terceros para este propósito. El más conocido de todos ellos es procmail. Es una utilidad de filtrado de correo entrante que se puede utilizar para el preprocesado y clasificación de dichos correos.
Esta utilidad está empezando a dejarse de usar (ver Sieve). Además, la configuración completa de procmail sobrepasa el alcance de la certificación LPI nivel 2.
Para indicar a Postfix que utilice procmail, declaramos lo siguiente en su main.cf:
mailbox_command = /usr/local/bin/procmail
Los ficheros de configuración de Procmail son:
/etc/procmailrc(no es recomendable usarlo, lo que aquí se defina se ejecutará como root)~/.procmailrc(a nivel de usuario)
Tienen el siguiente formato:
:0 <flags> <condición> <acción>
:0: Señal que marca el comienzo de una regla de preprocesado.flags:H: búsqueda solo en cabeceraB: búsqueda solo en el cuerpo del mensaje.f: modificación del mensaje original.c: clonado del mensaje original.
condición: expresión regular que filtra los correos.acción: acción a tomar a los correos que cumplan la condición anterior.
Ejemplo:
:0 * ^From.*toto amigos/toto
El filtro anterior mueve todo el correo entrante de toto al directorio amigos/toto.
Sieve
Es un lenguaje de script que se utiliza para preprocesar y listar los mensajes entrantes. Se utiliza en lugar de Procmail.
Necesita funcionar con un LDA (local delivery agent) como por ejemplo Dovecot.
Para que Sieve funcione con Dovecot tendremos que editar la configuracion de Dovecot (se verá en el siguiente tema)
Sieve se basa en reglas que nos permitirán gestionar el correo
Sintaxis
La sintaxis de Sieve consiste en 4 partes básicas: los comandos de Control, Test y Acción y los requires
Los “requires” cargan extensiones de Sieve que proporcionan determinadas funcionalidades
Ejemplo: require “vacation”; → carga la extensión “vacation”
Comandos de control
Los comandos de control se encargan de gestionar el flujo de la regla:
- If
- Else
- Elsif
Deben evaluar el contenido de un comando Test. Si se evalúa como válido, se ejecuta la acción asociada. Utiliza los siguientes argumentos:
:contains:over:is:under(para relaciones de tamaño):matches
Comandos de test
Los comandos de test se encargan de hacer una comprobación:
address: comprueba una dirección.allof: es un AND. Comprueba que se evalúen todas las condiciones.anyof: es un OR. Comprueba que se evalúe cualquiera de las condiciones.exists: comprueba si una cabecera da determinado mensaje.true: simplemente devuelve un éxito en la comprobación.false: simplemente devuelve un fallo en la comprobación.header: comprueba si el header cumple determinada condición.not: se complementa con otro test para negarlo.size: sirve para especificar si un mensaje ?ene un tamaño mayor o menor del especificado.
Se combinan con los comandos de control.
Comandos de acción
keep: guarda el mensaje en la ubicación por defecto.Fileinto: necesita unrequire. Guarda el mensaje donde se especifique.redirect: redirige el mensaje a otra direccióndiscard: elimina el mensaje
Ejemplos:
if exists "x-virus-found" {
redirect "admin@example.com";
}
Si el antivirus ha detectado un virus, se reenviará el e-mail a la cuenta admin@example.com
if size :over 2M {
discard;
}
Si el tamaño del e-mail es mayor a 2 MB, se eliminarán.
if allof (header :contains "from" "Bofh", header :contains "to" "abuse") {
fileinto "spam";
}
Si la cabecera contiene “from”, “Bofh”, “abuse”, el e-mail se añadirá a la carpeta “spam”.
require "fileinto";
if header :contains "from" "lottery" {
discard;
} elsif header :contains ["subject"] ["$$$"] {
discard;
} else {
fileinto "INBOX";
}
Si la cabecera contiene “from”, “lottery”, “$$$”, eliminar. En otro caso, guardar en la bandeja de entrada.
