Maildrop - Agente de Envio de Correo (MDA)

Transcripción

Maildrop - Agente de Envio de Correo (MDA)
Maildrop - Agente de Envio de Correo (MDA)
Anterior
http://tuxjm.net/docs/mailserver-howto/mysql-base...
Maildrop - Agente de Envio de Correo (MDA)
Capítulo 4. Implementación
Siguiente
Maildrop - Agente de Envio de Correo (MDA)
Instalaremos y configuraremos Courier maildrop, este sera usado como MDA
(Mail Delivery Agent) el cual es el encargado de llevar el correo a su
localización final, puede hacer filtrado antes de entregar el correo y además
maneja quotas de los buzones de correo (Maildir).
Instalación
Es importante que instalemos una versión de maildrop 1.8.0 o superior, en las
versiones anteriores a maildrop 1.8.0 se tenian modulos independientes para
mysql y se tenia que configurar un archivo de configuracion para la consulta,
desde la version 1.8.0 se elminarion dichos modulos y se integro con courierauthlib por lo que ahora no tendremos que configurar un archivo de consulta
para maildrop, adelante veremos como configurar courier-authlib para buscar
la información de los buzones.
Le activaremos el USE flag de mysql el cual activara el activara soporte para
usar authlib.
# echo "mail-filter/maildrop berkdb gdbm mysql -authlib -debug -fam \
-ldap -postgres" >> /etc/portage/package.use
Ahora instalamos maildrop, así:
# emerge mail-filter/maildrop
Verifiquemos que maildrop se compilo con soporte para Courier Authlib y
Quotas de Maildir
# maildrop -v
maildrop 2.0.2 Copyright 1998-2005 Double Precision, Inc.
GDBM extensions enabled.
Courier Authentication Library extension enabled.
Maildir quota extension enabled.
This program is distributed under the terms of the GNU General Public
License. See COPYING for additional information.
Configuración y variables de entorno
1 de 7
27/06/11 19:41
Maildrop - Agente de Envio de Correo (MDA)
http://tuxjm.net/docs/mailserver-howto/mysql-base...
Maildrop tiene un archivo de configuración global, es /etc/maildroprc el cual por
default tiene todo comentado, sin embargo, podemos usar archivos de filtrado
por usuario Unix y por usuario virtual, más adelante veremos como
configurarlos para nuestro entorno de usuarios virtuales.
Ya que todos los buzones de nuestros usuarios virtuales están bajo el $HOME
de el usuario vmail, entonces usaremos este como base para la configuración
de maildrop y los usuarios virtuales.
Maildrop maneja variables de entorno para referirse a algunos argumentos y
rutas a los buzones de los usuarios, les explicare algunas de las que usaremos:
HOME = /home/vmail/dominios esto es lo mismo que tenemos en
virtual_mailbox_base en /etc/postfix/main.cf .
Esta variable define nuestra base para la configuración de usuarios y dominios
virtuales.
DEFAULT = dominio.tld/username/
Ruta relativa a $HOME para el buzón de el usuario, esto es lo mismo que se
tiene definido en el campo maildir de la tabla mailbox, ya que es un Maildir
entonces llevara al final una "/"
LOGNAME = [email protected]
El nombre de el buzon/destinatario del correo.
Creación de filtro base
Bien, como se comento antes se pueden usar archivos de configuración y
filtrado para maildrop por usuario, entonces usaremos uno base para nuestros
usuarios virtuales y este podrá hacer una inclusión a archivos de configuración
y filtrado para cada uno de los usuarios virtuales.
Crearemos un archivo .mailfilter dentro de /home/vmail/dominios/ este archivo debe
de pertenecer a vmail:vmail y tener permisos solo para el usuario vmail y
nadie más, con 600 es suficiente.
# touch /home/vmail/dominios/.mailfilter
# chown vmail:vmail /home/vmail/dominios/.mailfilter
# chmod 600 /home/vmail/dominios/.mailfilter
El archivo
/home/vmail/dominios/.mailfilter
tendrá el siguiente contenido:
# GLOBAL VARIABLES
2 de 7
27/06/11 19:41
Maildrop - Agente de Envio de Correo (MDA)
http://tuxjm.net/docs/mailserver-howto/mysql-base...
# HOME=/home/vmail/dominios
# DEFAULT=dominio.tld/username/
# [email protected]
# Log everything to this file
logfile "/home/vmail/maildrop.log"
# LOG BEGIN OF FILTERING
log "==== BEGIN maildrop processing for $LOGNAME ==="
exception {
log "Including $HOME/$DEFAULT.mailfilter"
include "$HOME/$DEFAULT.mailfilter"
}
En este archivo las lineas que inician con "#" son comentarios, les explicare
que es cada linea:
logfile: Esta linea indica en que archivo registrar los eventos de maildrop.
log: Toda linea que inicie con log enviara a logfile todo lo que incluya se
pueden agregar variables de entorno usando $VARIABLE por ejemplo ahí
agregamos un encabezado cuando empieza a hacer el procesamiento para un
buzón.
exception: aquí también hace un log y además hace include a
$HOME/$DEFAULT.mailfilter lo que se traduce a: /home/vmail/dominios/dominio.tld/username/ y
de ahí leerá y procesara las instrucciones en el archivo .mailfilter que tendrá
instrucciones de filtrado para ese usuario.
Cuando todo este funcionando correctamente se podrán comentar las lineas de
log para que para que nuestro archivo maildrop.log no crezca excesivamente.
Por ahora la parte de configuración del mismo maildrop esta completa, ahora lo
que sigue es decirle a Postfix que use a maildrop como transporte para enviar
el correo.
Usando maildrop dentro de Postfix
Dentro de nuestro archivo /etc/postfix/main.cf tenemos la directiva
virtual_transport = virtual la cual dice que usara a el agente de envío de
correo para dominios virtuales de Postfix - virtual (8).
Ya que ahora usaremos a maildrop como MDA entonces cambiaremos la linea a:
virtual_transport = maildrop
3 de 7
27/06/11 19:41
Maildrop - Agente de Envio de Correo (MDA)
http://tuxjm.net/docs/mailserver-howto/mysql-base...
Tambien agregaremos las siguientes lineas:
maildrop_destination_concurrency_limit = 1
maildrop_destination_recipient_limit = 1
unknown_maildrop_mailbox_reject_code = 450
Estas ultimas lineas son para que Postfix le envíe los correos a maildrop de uno
en uno, ya que así es como debe de procesarlos.
Ahora agregaremos el transporte maildrop a el archivo /etc/postfix/main.cf
maildrop unix n
n
pipe
flags=DRhu user=vmail argv=/usr/bin/maildrop -w 90 -d ${recipient}
Es posible que unas lineas como esas ya existan, si ya esta solo hay que
modificarla para que quede como esta. Aquí agregamos el transporte llamado
maildrop que sera de tipo socket Unix, además correrá con los privilegios de el
usuario vmail, el argumento -w 90 le dice a maildrop que envíe una alerta de:
cuota de buzón excedida a el usuario, cuando este haya llegado a un 90% de su
limite.
NOTA: Deben de ir en dos lineas, la segunda inicia con espacio en blanco lo
que indica que es continuacion de la linea de arriba.
Alerta de cuota excedida
La alerta que se comento arriba es una copia de el archivo /etc/quotawarnmsg,
por lo que deberías de personalizarla antes de usarla.
Editar mensaje de alerta de sobre quota.
# vim /etc/quotawarnmsg
X-Comment: Rename/Copy this file to quotawarnmsg, and make appropriate changes
X-Comment: See deliverquota man page for more information
From: Mail Delivery System <[email protected]>
Reply-To: [email protected]
To: Valued Customer:;
Subject: Mail quota warning
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 7bit
Your mailbox on the server is now more than 90% full. So that you can continue
to receive mail you need to remove some messages from your mailbox.
:wq
Reiniciando Postfix para que use maildrop
4 de 7
27/06/11 19:41
Maildrop - Agente de Envio de Correo (MDA)
http://tuxjm.net/docs/mailserver-howto/mysql-base...
Después de que se edito la parte de Postfix entonces esta listo para usarse,
deberemos de re iniciar Para que tomen efecto los cambios.
Re iniciar Postfix:
# /etc/init.d/postfix restart
Si al re iniciar Postfix no hubo algún error entonces veremos los logs,
enviaremos un correo desde el exterior a alguna cuenta de nuestro servidor de
correo y veremos como lo procesa:
==> mail.log <==
Dec 26 02:43:47 mail postfix/pipe[20780]: C8B12C0B66: to=<[email protected]>,
relay=maildrop, delay=1, status=sent (tuxjm.net)
Dec 26 02:43:47 mail postfix/qmgr[10277]: C8B12C0B66: removed
Como vemos en el log dice que ahora uso al relay maildrop lo cual nos indica
que ya esta usándolo y lo envió satisfactoriamente a el buzón de jmedina.
También podemos ver el log de maildrop, como vimos arriba le dijimos que
registre en /home/vmail/maildrop.log.
==== BEGIN maildrop processing for [email protected] ===
Including /home/vmail/dominios/tuxjm.net/jmedina/.mailfilter
Processing per user filters for: [email protected]
Date: Tue Dec 26 02:43:47 2006
From: "Jorge Armando Medina" <[email protected]>
Subj: Prueba usando maildrop como MDA.
File: tuxjm.net/jmedina/
(2391)
Creación automatica de buzones
Cuando se usa maildrop como MDA y se envía un correo a algún buzón, el
correo no se entregara a menos que exista previamente el Maildir, si se crea
un nuevo usuario maildrop no creara el Maildir por si mismo, como lo hacia el
MDA virtual, por lo que tendremos que crear un procedimiento para que
cuando se cree una cuenta de correo se envíe un correo de bienvenida y en ese
momento en que se recibe el correo de bienvenida se cree automáticamente el
Maildir para el nuevo usuario.
Podemos decirle a el archivo /home/vmail/dominios/.mailfilter que ejecute algunos
comandos para que revise si existe el directorio de el dominio y si existe
entonces revise si existe el maildir del usuario, además que cree los directorios
Trash y Sent para ser usado con IMAP y además suscriba los directorios
automáticamente, agregaremos esto a nuestro archivo .mailfilter.
5 de 7
27/06/11 19:41
Maildrop - Agente de Envio de Correo (MDA)
http://tuxjm.net/docs/mailserver-howto/mysql-base...
# Ruta al /home/vmail/domains
VHOME="/home/vmail/dominios"
# Extrae solo el username de [email protected]
ACCOUNT=`echo "$LOGNAME" | cut -d@ -f1`
# Extrae solo el dominio.tld de [email protected]
USERDOMAIN=`echo "$LOGNAME" | cut -d@ -f2`
# Logea todo a la ruta especificada.
VMAIL_LOGFILE="/home/vmail/maildrop-maildirmake.log"
# Ruta a maildirmake
MAILDIRMAKE=/usr/bin/maildirmake
# Revisar si existe /home/vmail/dominio.tld/username
`test -d "$VHOME/$USERDOMAIN/$ACCOUNT"`
if( $RETURNCODE == 1 )
{
MESSAGE_DATE = `date`
# Registra la fecha actual de la creacion del Maildir en el maildrop.log
`echo CREATION DATE:
"$MESSAGE_DATE" >> $VMAIL_LOGFILE`
# Registra la ruta absoluta de el nuevo maildir en el maildrop.log
`echo EMAIL DIRECTORY: "$VHOME/$USERDOMAIN/$ACCOUNT" >> $VMAIL_LOGFILE`
# Registra el [email protected] a el maildrop.log
`echo USER EMAIL LOGIN: "$LOGNAME" >> $VMAIL_LOGFILE`
# Agrega una linea en blanco como separadar a el maildrop.log
`echo " " >> $VMAIL_LOGFILE`
# Revisa si existe el directorio de el dominio /home/vmail/dominio.tld
`test -d "$VHOME/$USERDOMAIN"`
if( $RETURNCODE == 1 )
{
# Registra la fecha de creacion de el directorio del dominio
# al maildrop.log
`echo CREATING DIRECTORY: "$VHOME/$USERDOMAIN" >> $VMAIL_LOGFILE`
# Crea el directorio para dominio.tld
`mkdir -p "$VHOME/$USERDOMAIN"`
# Agrega una linea en blanco como separador a el maildrop.log
`echo " " >> $VMAIL_LOGFILE`
}
# Crea el directorio para el username
`$MAILDIRMAKE "$VHOME/$USERDOMAIN/$ACCOUNT"`
# Crea el directorio Sent dentro del el maildir de username
`$MAILDIRMAKE -f Sent "$VHOME/$USERDOMAIN/$ACCOUNT"`
# Agrega el directorio Sent dentro de los directorios sucritos de username
`echo INBOX.Sent >> $VHOME/$USERDOMAIN/$ACCOUNT/courierimapsubscribed`
# Crea el directorio Trash dentro del el maildir de username
`$MAILDIRMAKE -f Trash "$VHOME/$USERDOMAIN/$ACCOUNT"`
# Agrega el directorio Trash dentro de los directorios sucritos de username
`echo INBOX.Trash >> $VHOME/$USERDOMAIN/$ACCOUNT/courierimapsubscribed`
# Crea el archivo courierimapuiddb dentro de el maildir de username
`touch $VHOME/$USERDOMAIN/$ACCOUNT/courierimapuiddb`
# Crea el directorio courierimapkeywords dentro de el maildir de username
6 de 7
27/06/11 19:41
Maildrop - Agente de Envio de Correo (MDA)
http://tuxjm.net/docs/mailserver-howto/mysql-base...
`mkdir -p "$VHOME/$USERDOMAIN/$ACCOUNT/courierimapkeywords"`
}
Supongamos que creamos una cuenta de correo nueva y se envió
automáticamente el mensaje de Bienvenida, en ese momento al recibir el
correo maildrop, este ejecutara las instrucciones de arriba y creara el buzón
para el usuario nuevo.
==> maildrop-maildirmake.log <==
CREATION DATE: Sun Dec 24 06:35:42 EST 2006
EMAIL DIRECTORY: /home/vmail/dominios/tuxjm.net/test
USER EMAIL LOGIN: [email protected]
Lo comprobamos:
# ls -l /home/vmail/dominios/tuxjm.net/test/
total xx
drwx------ 2 vmail vmail 4096 Dec 24 06:50 courierimapkeywords
-rw-r--r-- 1 vmail vmail
47 Dec 24 05:35 courierimapsubscribed
-rw-r--r-- 1 vmail vmail 217 Dec 24 19:24 courierimapuiddb
drwx------ 2 vmail vmail 4096 Dec 24 06:51 cur
drwx------ 2 vmail vmail 4096 Dec 26 02:43 new
drwx------ 2 vmail vmail 4096 Dec 26 02:43 tmp
Anterior
Postfix
7 de 7
Subir
Inicio
Siguiente
Servicios Courier IMAP/POP3
27/06/11 19:41

Documentos relacionados