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