Debian Wheezy : installation de Postfix/Dovecot/Spamassassin

Le but est d'installer sur une machine sous Wheezy le serveur IMAP Dovecot avec livraison via Postfix et vérification antispam par Spamassassin, le tout pour des utilisateurs locaux (pas des utilisateurs virtuels). De plus nous utilisons le SASL fourni avec Dovecot pour authentifier les connexions SMTP. Et enfin, nous utilisons les commandes doveadm pour effectuer l'archivage ou la suppression automatique des vieux mails.

Configuration de Dovecot

Configuration de SpamAssassin

NB: le filtrage est global au serveur, effectué par un utilisateur dédié ; impossible donc de gérer des bases bayésiennes spécifiques à chacun. Seules les règles founies par défaut (ou lors des mises-à-jour) seront donc utilisées.

Script de filtrage pour Postfix

Le filtrage s'effectue au travers du script /usr/local/sbin/spamc.run ci-dessous (téléchargeable ici), lancé par Postfix lors de la réception par SMTP (et uniquement lors de celle-ci), en tant qu'utilisateur filter:

#!/bin/sh

# Return codes
EX_TEMPFAIL=75

# Workdir
INSPECT_DIR="/var/spool/filter"

# Tools
SPAMC=/usr/bin/spamc
SENDMAIL="/usr/sbin/sendmail -G -i" # NEVER NEVER NEVER use "-t" here.

log_and_quit() {
	/usr/bin/logger -s -p mail.warning -t filter "$*"
	exit $EX_TEMPFAIL
}


# Clean up when done or when aborting.
trap "rm -f in.$$" EXIT TERM

# Start processing
cd $INSPECT_DIR || log_and_quit "$INSPECT_DIR does not exist"
	
# calls spamc
if [ -x "$SPAMC" ] ; then
	$SPAMC > in.$$ || log_and_quit "SpamAssassin failure (spamc return $return)"
else
	cat > in.$$ || log_and_quit "Cannot save to $INSPECT_DIR/in.$$"
fi

$SENDMAIL "$@" < in.$$
exit $?


Il faut également créer l'utilisateur filter:

adduser --system --home /var/spool/filter --shell /bin/false filter

Configuration de Postfix

La configuration de postfix s'effectue avec le /etc/postfix/main.cf. Voici l'extrait correspondant à la livraison locale, utilisant le protocole LMTP:

#
# delivery
#
alias_maps = hash:/etc/aliases
local_recipient_maps = hash:/etc/postfix/local_recipients, $alias_maps

mailbox_size_limit = 0
mailbox_transport = lmtp:unix:/var/run/dovecot/lmtp
prepend_delivered_header = forward
enable_original_recipient = no

Quelques indications:

Pour le filtrage par spamassassin, nous ajoutons un transport spécifique: