Archive for the ‘Maildir’ Category.

Mutt +Maildir probando nuestro server

En el Post anterior, de forma bastante simple creo yo explicamos cómo usar nuestro MTA favorito (Exim4) con Maildir.
Ahora nos toca probar nuestra configuración, realmente veremos si todo funciona.

mutt, como todos sabran es un excelente MUA para sistemas Unix/Linux, es extremadamente configurable y las opciones que permite tener en su archivo ~/.muttrc con centenas.

Pero para nuestra prueba solamente necesitamos unas pocas lineas, y en principio son solamente las siguientes:

1
2
3
4
5
6
7
set mbox_type=Maildir
set folder="~/.Maildir"
set mask="!^\\.[^.]"
set mbox="~/.Maildir"
set record="+.Sent"
set postponed="+.Drafts"
set spoolfile="~/.Maildir"
set mbox_type=Maildir
set folder="~/.Maildir"
set mask="!^\\.[^.]"
set mbox="~/.Maildir"
set record="+.Sent"
set postponed="+.Drafts"
set spoolfile="~/.Maildir"

La guía original que seguí para tener esto funcionando la obtuve de una simple búsqueda; y mas precisamente de http://www.elho.net/mutt/maildir/; Algo que he modificado respecto al anterior, es que he añadido un . (punto) al path del directorio Maildir, explico el porqué en el post anterior.

Recordemos que instalamos el paquete dovecot-imap, este paquete nos da un binaro que utlizaremos muy a menudo: maildirmake-dovecot:

1
cmiranda@debmail:~$ maildirmake.dovecot ~/.Maildir
cmiranda@debmail:~$ maildirmake.dovecot ~/.Maildir

Ese comando nos generar un directorio .Maildir en el home del usuario que lo ejecutó, es siempre buena idea estar en el path x defecto del usuario para esto.

Otra opción es crear dentro de /etc/skel el directorio .Maildir, de manera tal que todos los usuarios nuevos que se creen a futuro, lean esa configuración y la copien a sus propios ~/

1
root@debmail:~# maildirmake.dovecot /etc/skel/.Maildir
root@debmail:~# maildirmake.dovecot /etc/skel/.Maildir

Y listo, con eso cada usuario que creemos ya tendrá su ~/.Maildir hecho.

Sigamos con mutt, una vez tenemos todo en orden, con una simple linea enviamos un mail local, ese a su vez nos dará 2 files dentro de ~/.Maildir

1
cmiranda@debmail:~$ echo "21:36hs" |mail -s "21:36hs" usuario@localhost
cmiranda@debmail:~$ echo "21:36hs" |mail -s "21:36hs" usuario@localhost

Por usuario@localhost nos referimos a un usuario local del servidor y es importante que sea asi, ya que si Exim4 esta configurado para enviar/recibir a traves de internet, lo enviará al servidor real del dominio principal que esta usando Exim4 (/etc/exim4/update-exim4.conf.conf), y queremos que la entrega sea local, de alli que listamos.

12
3
4
cmiranda@debmail:~$ ls -lh .Maildir/.Sent/cur/total 12K
1239333088.P24758Q0M519599.debmail:2,S
-rw------- 1 cmiranda cmiranda 366 2009-04-10 21:36 1239339473.P28001Q0M318688.debmail:2,S
cmiranda@debmail:~$ ls -lh .Maildir/.Sent/cur/
total 12K
1239333088.P24758Q0M519599.debmail:2,S
-rw------- 1 cmiranda cmiranda 366 2009-04-10 21:36 1239339473.P28001Q0M318688.debmail:2,S

Vemos alli el mensaje que nos acabamos de enviar en forma individual, y por cada email que enviemos se genera un file, se darán cuenta del rendimiento que a la larga tenemos en nuestro server.
Pero tambien debemos asegurarnos que el email nos llegó, y para tambien listamos
Asi es, por cada nuevo email que nos llegue, lo veremos en ~/.Maildir/cur, si lo abrimos con un MUA (Mail user agent).

Y bueno, ya está con estos simples pasos nos aseguramos de que todo funciona como debe (en parte) pendiente tengo de seguir con Dovecot + SSL y despues Exim4 + SSL, todo a su tiempo

Maildir en Exim4 (rápido y limpio)

En Debian, el almacenamiento de los mails en el MTA por defecto que es Exim4, se utiliza mbox [1] que para grandes volumenes de mails no es el mas adecuado y tal como Wikipedia explica:

mbox es un término genérico para una familia de formatos de fichero que se usan para almacenar conjuntos de correos electrónicos. Todos los mensajes en un buzón mailbox están concatenados en un único fichero.

Es facil entender entonces que si a la larga tenemos mails almacenados de hace bastante tiempo, todos estaran en el mismo file en el servidor, con el tiempo el rendimiento se degrada sumado el consumo de memoria del server para mantener cada uno de los mbox de usuario.

A las falencias de este método se dió una solución, y justamente viene de la mano Maildir [2], por defecto es el almacenamiento en el archiconocido QMail [3][4].

La mayor ventaja de Maildir es que cada uno de los mails es un archivo diferente en el sistema. eso da como resultado un alto rendimiento en memoria y subsana errores comunes al manejar un solo gran archivo si usaramos mbox, el rendimiento en bruto es lo mas notable a primera vista. luego tenemos seguridad contra fallos de sectores de discos, en todo caso se perderá la porción de mails alojadas en el sector dañado.

Utilizando un file system como reiserfs [5] es mas que adecuado para archivos pequeños.

Pero pasemos al plato fuerte de este artículo, que es cómo tener Maildir en Debian Lenny con mi MTA favorito.

Los archivos implicados son 4:

  • /etc/login.defs
  • /etc/pam.d/login
  • /etc/exim4/exim4.conf.template
  • /etc/exim4/conf.d/transport/30_exim4-config_maildir_home

Tener presente que cuando hayan seleccionado el “split” de los files de configuración de Exim4 cuando ejecutaron

1
~#: dpkg-reconfigure exim4-config
~#: dpkg-reconfigure exim4-config

Tendremos que modificar los 2 últimos file con la misma data.

/etc/login.defs

Estrictamente no es necesario editar este file para que podamos usar Maildir en nuestro server, aún asi no esta de mas especificar que lo usamos, mas que nada para aplicaciones que requieran dejar correo local, un ejemplo lo tenemos en versiones viejas de fetchmail[6]

1
2
#MAIL_DIR        .Maildir/ dejamos esta linea comentada
MAIL_FILE      .Maildir/ y reemplazamos .Maildir en esta otra
#MAIL_DIR        .Maildir/ dejamos esta linea comentada
MAIL_FILE      .Maildir/ y reemplazamos .Maildir en esta otra

En el caso que esten usando Qmail como MTA, al final de este mismo archivo deben descomentar la siguiente linea.

1
#QMAIL_DIR .Maildir/
#QMAIL_DIR .Maildir/

Tengan presente que a todos los paths les he puesto un . (punto) delante de Maildir, la razón es que deseo que sea un directorio oculto, esto lo definiremos mas adelante con el comando maildirmake.

/etc/pam.d/login

Agregaremos una sola linea, debajo de “session optional pam_mail.so standard”, que quedará asi:

1
2
session    optional   pam_mail.so standard
session optional pam_mail.so standard noenv dir=.Maildir/
session    optional   pam_mail.so standard
session optional pam_mail.so standard noenv dir=.Maildir/

/etc/exim4/exim4.conf.template

Tenemos que buscar el siguiente texto:
directory = $home/.Maildir
Siempre y cuando hayan seleccionado “Maildir” en las respuestas del dpkg-reconfigure
Como en mi caso tenia

1
directory = $home/Maildir
directory = $home/Maildir

Solamente necesité agregarle el .(punto) antes de Maildir

1
directory = $home/.Maildir
directory = $home/.Maildir

/etc/exim4/conf.d/transport/30_exim4-config_maildir_home

Aqui los pasos son exactamente que en el anterior file, ambos tiene la misma información, es asi debido a que si seleccionaran hacer o no el “split” de los archivos de exim4, toma de uno u otro lugar lo que Exim4 tiene que hacer.

Listo, con eso ya tenemos un MTA funcionando con Maildir. pero queda algo importante, el software complementario, en este caso necesitamos crear los directorios para los mails. usaremos el comando maildirmake, asi que tienen que decidir queé servidor IMAP utilizarán.

Yo prefiero Dovecot [7] asi que a instalarlo.

1
~#: aptitude install dovecot-imapd
~#: aptitude install dovecot-imapd

Eso nos instalará dovecot con sus dependencias, aunque no el paquete dovecot-pop3, yo nunca uso POP3 en mis servidores.

Con el servidor IMAP instalado, disponemos de la herramienta

1
~#: maildirmake.dovecot ~/.Maildir/
~#: maildirmake.dovecot ~/.Maildir/

Que hace lo mismo que maildirmake, nada mas que esta viene incluida en Dovecot, de la misma forma que Courier (por ejemplo) tambien trae este comando como dependencia.

Tener presente que x cada usuario se debe ejecutar en su /home/~usuario/, o en su defecto como root, podemos ejecutarlo en /etc/skel, de manera que todo nuevo usuario de sistema ya tiene su repositorio de mails

Solamente nos queda editar /etc/dovecot/dovecot.conf y agregarle el .(punto) a la linea que nos informa el path de Maildir.

1
mail_location = maildir:~/.Maildir
mail_location = maildir:~/.Maildir

[1] http://es.wikipedia.org/wiki/Mbox
[2] http://es.wikipedia.org/wiki/Maildir
[3] http://es.wikipedia.org/wiki/Qmail
[4] http://www.qmail.org/
[5] http://es.wikipedia.org/wiki/ReiserFS
[6] http://fetchmail.berlios.de/
[7] http://www.dovecot.org/