Debian etch : installation de Postfix/procmail/UW imapd

Le but est d'installer sur un petit serveur sous Etch le serveur IMAP UW imapd, avec livraison via postfix et filtrage par procmail. Le format des boites utilisé sera mbx (à ne pas confondre avec le classique mbox), format de boite simple et très rapide.

Outils utilisés

Postfix

La configuration de postfix s'effectue simplement via le fichier /etc/postfix/main.cf, dont voici l'extrait correspondant à la livraison locale:

#
# delivery
#
mailbox_command = /usr/bin/procmail -a "$SENDER"
mailbox_size_limit = 0
local_destination_recipient_limit = 1
local_destination_concurrency_limit = 1
prepend_delivered_header = forward
enable_original_recipient = no

Quelques indications:

Procmail

Nous préconfigurons certaines variables ainsi que la livraison par défaut dans /etc/procmailrc:

#
# global procmailrc
#

#
# Drop root privileges now
#
DROPPRIVS=yes

#
# Global settings
# $1 comes from "-a $SENDER" in the postfix configuration
#
SENDER="$1"
DELIVER=/usr/local/bin/deliver
LOCKTIMEOUT=0


#
# Include user's own rules if they exist
#
INCLUDERC=$HOME/.procmailrc

#
# default delivery
#
:0w
| $DELIVER

#
# should never go there, but if so, something is going bad
# so tell postfix there is a problem
#
:0 e
{
EXITCODE=$?
HOST
}

La définition de la variable SENDER provient de l'argument passé à la commande procmail dans /etc/postfix/main.cf, paramètre mailbox_command. Cette variable sera utilisée ensuite par l'agent de livraison deliver (qui lui même appellera dmail).

Deliver

Il s'agit d'un petit shell script, à placer dans /usr/local/bin, qui supprime certains en-têtes inutiles ou mal-placés et appelle dmail:

#!/bin/sh

# Exit codes from sysexits.h
EX_TEMPFAIL=75


# tools
FORMAIL=/usr/bin/formail
DMAIL=/usr/bin/dmail

#
# utilities
#
log_and_fail() {
	/usr/bin/logger -s -p mail.warning -t deliver "$1"
    	exit $2
}


#
# sanity checks
#
[ -x $FORMAIL ] || log_and_fail "Missing $FORMAIL" $EX_TEMPFAIL
[ -x $DMAIL ]   || log_and_fail "Missing $DMAIL"   $EX_TEMPFAIL


#
# filter out some headers, deliver, and check return code
#
$FORMAIL -I Return-Path: | $DMAIL -f "$SENDER" "$@" > /dev/null 2>&1 
if [ $? -gt 0 ] ; then
	log_and_fail "dmail failure" $EX_TEMPFAIL
fi

exit 0

dmail, UW imapd

Ces deux outils sont installables via apt-get:

# apt-get install uw-mailutils uw-imapd

La configuration de ces deux outils est extrèmement simple, via un fichier de configuration global (même si ce n'est pas recommandé par l'auteur), /etc/c-client.cf:

I accept the risk
set new-folder-format mbx
set mail-subdirectory Imapdir

On indique ici que nous souhaitons que toutes les nouvelles boites soient créées au format mbx, et que la racine de ces boites sera le répertoire ~/Imapdir de chaque utilisateur

.

Pour activer le serveur imapd, il suffit d'utiliser les commandes suivantes:

# update-inetd --enable imap2
# update-inetd --enable imaps

Exemple d'utilisation

Si on souhaite que l'utilisateur ait sa boite principale INBOX au format mbx, il faut d'abord créer cette boite manuellement comme suit, sinon ce sera la boite classique /var/mail/<username> qui sera utilisée:

$ mailutil create "#driver.mbx/INBOX"

NB: avoir une boite INBOX au format mbx n'empêche nullement la livraison dans /var/mail/<username> ; le serveur UW imapd est capable d'aller chercher les courriers livrés dans cette boite "standard" et les mettre dans la boite mbx.


Exemple de fichier ~/.procmailrc. Attention, ce fichier suppose que les différentes boites indiquées existent déjà. Si on tente une livraison dans une boite inexistante, le courrier sera finalement livré dans INBOX.

#
# ~/.procmailrc
#

#
# filter through spamassassin
#
:0fw
* < 300000
| spamc

#
# If marked as spam, deliver it in the Junk folder,...
#
:0
* ^X-Spam-Flag: YES
{ FOLDER="Junk" }

#
# else remove spamassassin headers
#
:0fw
* ! ^X-Spam-Flag: YES
| formail -I X-Spam-Checker-Version: -I X-Spam-Status:

#
# Mailing-lists
#
:0
* ! FOLDER ?? (.)
* ^List-Id:.*alpine-info
{ FOLDER="list/alpine" }

:0
* ! FOLDER ?? (.)
* ^List-Id:.*imap-uw
{ FOLDER="list/imap-uw" }

:0
* ! FOLDER ?? (.)
* ^List-Post:.*postfix-(users|announce)
{ FOLDER="list/postfix" }

:0
* ! FOLDER ?? (.)
* ^List-Id:.*procmail
{ FOLDER="list/procmail" }

#
# No FOLDER set, default to INBOX
#
:0
* ! FOLDER ?? (.)
{ FOLDER="INBOX" }

#
# Delivery happends here
#
:0w
| $DELIVER +$FOLDER

A propos du format de boite

MBX est un format de boite proche du MBOX classique, mais indexé en interne. Il n'est pas compatible avec le MBOX, c'est-à-dire qu'il n'est lisible que par UW-imapd ou Alpine. Ses avantages sont sa simplicité (une seule boite et non 35076396739 fichiers séparés) et une vitesse fort honorable, bien supérieure au MBOX.

Depuis quelques temps, un nouveau format est apparu, MIX, lui aussi indexé, utilisant non pas un fichier par mail mais le regroupement de plusieurs mails dans des fichier de données dont on indique la taille maximale souhaitée à la compilation (1 MB par défaut), et plusieurs index et caches (comme Cyrus-imapd). Il est encore plus rapide que MBX, et supporte de plus les boites "dual-use", celles qui peuvent contenir à la fois des messages et des sous-dossiers.

Pour plus d'informations


Dernière modification : Saturday January 31, 2009, Nicolas KOWALSKI


Valid HTML 4.0! Valid CSS!