Buzones de Qmail

En todo Sistema Unix el correo electrónico de todos los usuarios es enviado y recabado de un Buzón, este Buzón, puede ser un archivo o un Directorio

Antecedentes de Qmail

Cuando se envía un correo electrónico hacia un usuario y este arriva al "Host" pertinente , el MTA (Qmail o Sendmail) de este "Host" es el encargado de depositar este correo en el buzón del usuario.

En un sistema Unix por lo general estos buzones se encuentran en un directorio llamado /var/spool/mail/<nombre_del_usuario> , esta ubicación se debe al uso de Sendmail (uno de los programas en mayor uso como MTA), ya que su funcionamiento es el de enviar todo correo a este directorio general ( /var/spool/mail ) y encontrar al usuario correspondiente.

Entre los problemas que presenta este tipo de buzones es el de velocidad y seguridad , el intentar escribir miles de correos electrónicos a un directorio general ( /var/spool/mail ) puede ser muy tardado, además el escribir código para implementar seguridad en un directorio que puede ser escrito globalmente no es fácil; es por esto que Qmail utiliza otro formato.

NOTA: Qmail es lo suficientemente flexible, que si usted lo desea puede configurarlo para que continúe enviando el correo electrónico a este tipo de directorios ( /var/spool/mail ),sin embargo, su envío "default" es el que se explica a continuación.

Configuración de Buzones en Qmail

Cuando realizó la instalación básica de Qmail y las primeras pruebas de recepción notaría que todo mensaje fue enviado al archivo (buzón) llamado Mailbox , este archivo llamado Mailbox es la metodología "default" que utiliza Qmail, cabe mencionar que es posible alterar esta metodología e inclusive es recomendable migrar a la metodología Maildir , pero más sobre esto en otras secciones.

Como llegan los Mensajes al archivo Mailbox ?

En las pruebas iniciales de recepción se mencionó que solo existían 3 usuarios para recibir correo , estos 3 usuarios fueron definidos en el paso 6 de la instalación básica.

La operación básica de Qmail es que cuando desconoce el destinatario final de un mensaje , todo mensaje será dirigido al usuario alias del sistema que fue definido inicialmente, debido a que el usuario alias tiene definido su directorio raíz ("Home Directory") en /etc/passwd como /var/qmail/alias todos los mensajes serán dirigidos a este subdirectorio raíz ("Home Directory") del usuario.

Los archivos .qmail

En el paso 6 de la instalación básica se generaron 3 archivos de tipo .qmail bajo el directorio raíz ("Home Directory") del usuario alias , estos archivos .qmail son de suma importancia ya que rigen como será manipulado el mensaje en su etapa final .

El argumento que le sigue a cualquier archivo .qmail- indica un usuario existente, esto es, .qmail-postmaster :define que existe el usuario postmaster@dominio.com , al igual que .qmail-root define que existe el usuario root@dominio.com , es por esto que cuando se envió un mensaje a desconocido@dominio.com Qmail rechazo este mensaje, para haberlo recibido hubiera sido necesario que existiese el archivo .qmail-desconocido , inclusive es posible crear un archivo .qmail-default el cual recibiría TODOS los mensajes sobre los cuales no existiese un usuario especifico, esto es, se recibirían mensajes para rooottt@dominio.com , rebote@dominio.com y cualquier otro mensaje dirigido a dominio.com ; quizás esto en ocasiones no es conveniente ya que TODO mensaje será recibido y el remitente jamás se percatará que esta dirección no existe.

El contenido de los archivos .qmail

Con el solo hecho de existir un archivo .qmail-xxx Qmail ejecutará una acción razonable, la cual es: Agregar el mensaje al archivo Mailbox , en el caso anterior donde fueron definidos los 3 archivos .qmail-postmaster .qmail-mailer-daemon .qmail-root los mensajes dirigidos para los usuarios postmaster, mailer-daemon y root serán anexados al archivo (buzón) que reside en el mismo directorio,cualquier otro mensaje será rechazado.

Pero que sucede si se requiere otra acción para los mensajes dirigidos a postmaster o es necesario notificar a 5 administradores cuando arrive un mensaje para root ?

Estas acciones pueden ser definidas dentro de los archivos .qmail-xxx y pueden ser las siguientes :

  1. Redireccionar: Es posible redireccionar el mensaje a otra dirección electrónica, solo debe agregarse la linea: &servicio@isp.com . El parámetro & indica que el mensaje será redireccionado, mientras lo que continúe es la dirección electrónica alterna.En esta misma manera puede ser generada un lista de correos "Mailing-List" solo basta agregar todos los destinatarios de la misma forma.
  2. Ejecución : También es posible indicar en estos archivos .qmail algún programa por el cual debe ser transferido todo el mensaje, este puede ser un filtro, un pre-procesador para SPAM como SpamAssassin , un antivirus como ClamAV o cualquier otro programa, para esto se utiliza lo siguiente: |preline /usr/vacaciones/ , el parámetro | indica que el mensaje se procesará por el Shell, mientras el resto de la linea indica el programa que será invocado para el mensaje.
  3. Directorio Mailbox : Indica la ubicación del archivo Mailbox que contendrá todos los mensajes del usuario, su formato es:/home/admin/Mailbox, cabe mencionar que la acción "default" para todos los usuarios es anexar todos los mensajes al directorio actual ("Present Working Directory") de los archivos .qmail- , esto puede ser corroborado en las pruebas de recepción en la instalación básica.
  4. Directorio Maildir : Especifica la ubicación del directorio Maildir que contendrá los mensajes para el usuario, su formato es: /home/admin/Maildir/, nótese que a diferencia de Mailbox esta linea de configuración termina con "/".

    Un poco sobre Maildir : Maildir es una alternativa para Mailbox , el utilizar Maildir ofrece varias ventajas sobre Mailbox , sin embargo para no desviarse del tema esto será discutido en Mailbox vs. Maildir

Definición de Usuarios

La discusión anterior se baso en el usuario alias , este usuario será el que recibirá TODOS los mensajes de los usuarios desconocidos, pero que sucede si ya se tienen usuarios definidos en el sistema y cada uno requiere de su buzón ?

El archivo assign

Este archivo contiene TODOS los usuarios que recibirán correo electrónico, usted deberá generar este archivo bajo el directorio /var/qmail/users , su composición es muy similar al archivo /etc/passwd , observe:

=informes:juan:231:121:/home/juan:::

Por decirlo de cierta forma Qmail posee dos tipos de filtros (aunque no son filtros explícitamente): archivos .qmail y el archivo assign .

Los archivos .qmail ya fueron discutidos anteriormente: si existe uno por nombre .qmail-xxx será recibido el mensaje para xxx de otra forma será rechazado, sin embargo, sería ilógico pensar que todos los usuarios fueran definidos .qmail-usuario1, .qmail-usuario-2, ... , el archivo assign ofrece este "filtro" previo a llegar a los archivos .qmail .

Una linea del archivo assign sería la siguiente:

=informes:juan:231:121:/home/juan:::

Esta linea significa que cualquier correo electrónico destinado para informes sera enviado al Buzón del usuario juan con UID=231, GID=121 que se encuentra en el directorio /home/juan , también es posible indicar una extensión abierta para el destinatario ("wildcard"):

+web:jose:234:342:/home/jose:::

La linea anterior indica que todo correo cuyo nombre empiece con web será enviado al buzón del usuario jose en el directorio /home/jose , esto sería: webmaster@, web-hosting@, webservicio@ ,etc...Un archivo assign básico sería el siguiente:

+web:jose:234:342:/home/jose:::
=web:admin:121:23:/home/admin:::
.

Nótese que debe terminar en punto este archivo. La secuencia de eventos en Qmail para este archivo sería:

  1. Si arriva un mensaje para web@ este será enviado al buzón del usuario admin
  2. Cualquier mensaje que inicie en web______@ (excluyendo web@ ) será enviado al buzón del usuario jose
  3. Todo mensaje que no entre dentro de estos criterios será enviado al buzón del usuario alias
  4. NOTA: Esta es solo la primera etapa de "filtros",la recepción final dependerá de los archivos .qmail presentes en cada directorio del usuario.

Cada vez que sea agregado un usuario al archivo assign es necesario ejecutar el comando qmail-newu ubicado en el directorio /var/qmail/bin , esto generará un archivo binario con el contenido de assign , la intención de este archivo es agilizar el acceso de información a Qmail, este archivo binario se llama cdb y se encuentra en el directorio /var/qmail/users

Las asignaciones anteriores en el archivo assign asumieron dos cosas:

  1. Todos los mensajes están dirigidos a un solo dominio, aquel definido en el archivo /var/qmail/control/defaultdomain, esto es, si solo se define un nombre ( web: ), Qmail asume la dirección web@<defaultdomain>
  2. Todos los usuarios que reciben mensajes deben tener cuentas Unix en el "Host" para poder tener un buzón propio

Qmail puede ser configurado para recibir correo electrónico de múltiples dominios y miles de usuarios, sin la necesidad de generar miles de cuentas Unix y modificando algunos parámetros de la configuración básica, los detalles están en Dominios y Usuarios Múltiples en Qmail

Mailbox vs. Maildir

Cuando finalmente arriva un mensaje a su destino final la acción "default" de Qmail es anexar el mensaje al archivo llamado Mailbox , es en este archivo en el que residirán todos los mensajes para posteriormente ser leídos por el usuario, sin embargo, esta metodología carece de confiabilidad ("reliability") ya que todos los mensajes son anexados al mismo archivo.

Que sucede si al momento de estar anexando un mensaje al archivo Mailbox ,el sistema falla ? Seguramente el mensaje será corrompido o anexado al anterior, claro esta que Qmail (o Sendmail) detectará que no fue exitoso e intentará reenviar el mensaje, pero el archivo Mailbox ya estará corrompido.Para esto existe Maildir , Maildir esta compuesto por varios subdirectorios que eliminan el problema antes mencionado con Mailbox .

Configuración para Maildir

Primeramente se debe crear el directorio del tipo Maildir que substituirá el uso de Mailbox , para esto se utiliza el comando maildirmake ubicado en /var/qmail/bin . De la misma en que es generado el archivo Mailbox en el directorio raíz ("Home Directory") del usuario, se debe ejecutar el comando maildirmake dentro del directorio raíz del usuario ("Home Directory").

Si el usuario admin tiene su directorio raíz ("Home Directory") en /home/admin , entonces dentro de este directorio se debe ejecutar maildirmake Maildir , este comando generará un directorio llamado Maildir que contendrá tres subdirectorios cur, new, tmp .

Ahora se debe indicarle a Qmail que el usuario empezará a recibir sus mensajes en el formato Maildir , esto se realiza agregando la siguiente linea al archivo .qmail del usuario:

./Maildir/

Lo anterior indica que todo mensaje será colocado dentro del directorio Maildir .

Si se desea empezar a utilizar este formato para recibir los mensajes (algo muy recomendable) para todos los usuarios del Sistema, se deben modificar los parámetros "default" de Qmail, estos se encuentran en el archivo /var/qmail/rc , basta cambiar la linea: qmail-start ./Mailbox splogger qmail por

qmail-start ./Maildir/ splogger qmail

Si opta por este esquema se recomienda agregar el directorio Maildir a /etc/skel (Vea Administración de usuarios en Unix )

Consideraciones de Maildir

A pesar de las ventajas que presenta Maildir , presenta un pequeño problema de configuración; debido al amplio uso del formato Mailbox algunos Mailers (MUA "Mail User Agents") del mercado no son capaces de accesar los mensajes en este formato directamente , sin embargo, Qmail ofrece opciones que simulan el formato Mailbox que comúnmente espera un Mailer.

Debido a que esto es tema de lectura de mensajes , existe una sección dedicada donde se abarca esto y otros temas relacionados : recabación de mensajes

Links: