Ce petit tutoriel a été fait à partir d'une Debian Etch (testing), ce qui ne veut pas dire que ça ne marchera pas sur une autre distribution (en particulier une Ubuntu qui est basée sur Debian).

Installation de Postfix
apt-get install postfix Ensuite, il faut éditer le fichier /etc/postfix/main.cf et changer quelques lignes :
myhostname = mx.fabroce.net pour le nom d'hote du serveur (de l'extérieur)
mydestination = où il faut ajouter les noms de domaines dont le serveur va recevoir les mails
mynetworks = où il faut ajouter les plages IP (exemple : 192.168.1.0/24) à partir desquels les mails peuvent être relayés ailleurs ( sinon le serveur renvoie un message du type Relay Access Denied)

un petit /etc/init.d/postfix restart et postfix fonctionne! Seulement il est incapable pour l'instant de livrer les mails aux utilisateurs du système (ce n'est pas son travail)

Installation de Procmail
Procmail va servir à livrer les mails.
apt-get install procmail
La première chose à faire et d'informer Postfix qu'il faut utiliser procmail dans le fichier /etc/postfix/main.cf en ajoutant la ligne : mailbox_command = procmail
Procmail se configure soit avec un fichier .procmailrc dans le répertoire de l'utilisateur soit par le fichier /etc/procmailrc pour tous les utilisateurs (fichier qui n'existe pas toujours donc à créer). Dans ce dernier, on ajoute une série d'informations sur la livraison des mails :
LOGNAME=$USER
SHELL=/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin:$HOME/bin

MAILDIR=$HOME
DEFAULT=$HOME/mbox
ORGMAIL=$MAILDIR/emergency-inbox
LOGFILE=/var/log/procmail.log
DROPPRIVS=yes

Maintenant, les mails peuvent être livrés aux utilisateurs.

Installation d'amavisd-new et de ClamAV
Amavisd-new est un content-filter, il sert à filtrer le contenu des mails. Ici amavisd-new ne va pas filter les spams, mais va détecter les virus avec ClamAV.
apt-get install amavisd-new clamav clamav-daemon va installer ce qui nous intéresse. ClamAV ne nécessite pas de configuration particulière, celle par défaut est suffisante (mise à jour automatique toutes les heures).
Il faut maintenant déterminer le comportement d'amavisd-new. Par défaut, ClamAV est utilisé comme antivirus comme indiqué dans le fichier /etc/amavis/conf.d/15-av_scanners
On y voit aussi :
# NOTE: remember to add the clamav user to the amavis group, and
# to properly set clamd to init supplementary groups

Il faut donc taper la commande addgroup clamav amavis
Maintenant, il faut vérifier le port où le service écoute. Par défaut il s'agit du port 10024 comme indiqué dans le fichier /etc/amavis/conf.d/20-debian_defaults :
$inet_socket_port = 10024; # default listenting socket
Maintenant, il ne reste plus qu'à indiquer à Postfix d'utiliser Amavisd-new.
Dans le fichier /etc/postfix/main.cf, il suffit d'ajouter la ligne : content_filter = smtp-amavis:[127.0.0.1]:10024
Puis d'ajouter dans /etc/postfix/master.cf : Attention, il faut au moins un espace au début des lignes commençants par -o
smtp-amavis unix - - y - 2 smtp

    -o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes

127.0.0.1:10025 inet n - y - - smtpd

    -o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes

Voilà, maintenant il faut relancer Postfix et Amavisd-new, et on dispose d'un serveur de mail qui filtre les virus!
/etc/init.d/amavis restart /etc/init.d/postfix restart

Installation de Spamassassin
EDIT : Il y a un tuto sur Dspam, moins gourmand en ressources et autant performant sur le long terme ici.
apt-get install spamassassin spamc razor pyzor dcc-client
Spamassassin n'est pas actif par défaut pour des raisons de sécurité, il faut l'activer en éditant le fichier /etc/default/spamassassin en mettant ENABLED=1.
Spamassassin va résider en mémoire et spamc va servir à lui envoyer les données.
On va vérifier que le mail n'est pas un spam après le test anti-virus, procmail va donc appeler spamc.
Dans /etc/procmailrc, il faut ajouter :
:0fw
| spamc

Mais aussi ça pour mettre à la poubelle le spam :
:0 ED
* ^X-Spam-Flag: YES
$MAILDIR/spam

Maintenant, tout fonctionne normalement, restes à améliorer la configuration de spamassassin.
Prochaine étape : Installation d'un serveur IMAP

Note : Lors du démarrage d'amavisd-new, il peut afficher ceci :
Starting amavisd: The value of variable $myhostname is "toto", but should have been
a fully qualified domain name; perhaps uname(3) did not provide such.
You must explicitly assign a FQDN of this host to variable $myhostname
in amavisd.conf, or fix what uname(3) provides as a host's network name!
Pour résoudre ce problème, il faut éditer le fichier /etc/hostname et y mettre un FQDN du style machine.domaine.tld

Note: Ces instructions fonctionnent à la lettre près sur Ubuntu LTS 6.06
N'hésitez pas à poster un commentaire pour compléter ce billet

Edit (07/02/2007): Merci à M. Kouame pour son retour d'expérience qui a permis de corriger certains problèmes dû à la syntaxe Wiki empéchant de copier/coller les fichiers de conf.