Cette page propose d'intégrer entre eux les logiciels suivants :

On suppose que Postfix et Dovecot (pour l'imap) sont déjà configurés. Cette documentation est rédigée pour Debian squeeze, qui propose la version 1.2 de Dovecot.

Délivrer les mails en utilisant Dovecot LDA et Bogofilter

Tout d'abord, il faut compléter la configuration de Dovecot dans /etc/dovecot/dovecot.conf : Dovecot Deliver a besoin d'une adresse pour postmaster_address, il faut modifier la ligne correspondante dans la section protocol lda. Vérifiez au passage que les chemins vers les boîtes mails des utilisateurs sont bien configurées (c'est normalement le cas pour le serveur IMAP).

Nous devons créer un script shell, qui sera appelé par Postfix. Ce script recevra le contenu du mail sur son entrée standard, le passera à Bogofilter, qui ajoutera des entêtes au mail, puis le passera à l'entrée standard de Dovecot Deliver.

/usr/local/bin/bogodeliver :

#!/bin/sh
# Deliver mails using Dovecot LDA
# by first passing it through Bogofilter

/usr/bin/bogofilter -e -p | /usr/lib/dovecot/deliver "$@"

Il faut le rendre exécutable et lisible par tout le monde :

# chmod a+rx /usr/local/bin/bogodeliver

Ensuite, il suffit de dire à Postfix de l'utiser. Dans le /etc/postfix/main.cf :

mailbox_command = /usr/local/bin/bogodeliver -a "${ORIGINAL_RECIPIENT}"

Normallement, les mails doivent bien arriver dans les boîtes de chaque utilisateur (à tester !).

Activer le plugin Sieve de Dovecot Deliver

Dans la section protocol lda de /etc/dovecot/dovecot.conf, décommentez la ligne :

mail_plugins = sieve

Normallement, ça marche ! Il suffit d'écrire votre script sieve dans ~/.dovecot.sieve.

Exemple de script de test :

require "fileinto";
if address :is "from" "VOTRE@ADRESSE" {
  fileinto "UNDOSSIER";
}

Installer le serveur ManageSieve pysieved

Tout d'abord, il faut l'installer :

# apt-get install pysieved

Pysievd sera démarré automatiquement au besoin à l'aide de inetd. Par contre, le fichier de configuration créé automatiquement par Debian utilise le nouveau port standard de ManageSieve (tcp 4190), au lieu de l'ancien (2000). Il faut donc configurer Pysievd pour qu'il l'utilise, en changeant la variable port dans /etc/pysieved.ini.

On peut alors tester en local :

telnet 127.0.0.1 4190

Il faut ensuite configurer l'authentification. Pour cela, on va demander à Dovecot d'exposer un socket, que Pysieved lira.

Dans /etc/dovecot/dovecot.conf, il faut décommenter, dans la section auth default, et dans la sous-section socket listen, toute la partie client.

Ensuite, dans /etc/pysieved.ini, il faut change auth pour Dovecot, vérifier la base des boîtes mails, et modifier le chemin du compilateur sieve :

sievec = /usr/bin/sievec

Et dans la section Dovecot, modifier la ligne :

mux = /var/run/dovecot/auth-clien

On peut ensuite essayer de se connecter au serveur Manage Sieve pour tester, par exemple avec sieve-connect, un client Manage Sieve en ligne de commande.

Par contre, Pysieved (en tout cas la version de Debian squeeze) ne semble pas gérer le chiffrement de l'authentification. Pour ne pas que des mots de passe transitent en clair sur le réseau, il faut restreindre (par exemple via des règles du parefeu) son accès à localhost. Le serveur Pysieved ne pourra alors n'être accéder que par des interfaces web (intégrées au webmail, par exemple).

Intégration avec Roundcube

Pour que les utilisateurs puissent modifier leurs règles Sieve directement dans Roundcube, nous allons utiliser son plugin Sieve Rules (le plugin Manage Sieve inclus par défaut ne marche pas chez moi).

Il faut télécharger le plugin correspondant à la version de Rouncube : Sieve Rules, puis l'extraire pour avoir le plugin dans un répertoire sieverules du répertoire plugins de Rouncube.

Dans config/main.inc.php, il faut modifier la ligne :

// List of active plugins (in plugins/ directory)
$rcmail_config['plugins'] = array('jqueryui', 'sieverules');

Ensuite, nous pouvons configurer le plugin. Il faut copier le fichier plugins/sieverules/config.inc.php.dist dans plugins/sieverules/config.inc.php, et éventuellement le modifier (notamment pour définir le port à 4190).

Ensuite, il faut tester ! Dans les préférences, un onglet Filtre doit apparaître.

Suite à un bug « Erreur serveur inconnue », et ces symptômes, j'ai remplacé plugins/sieverules/lib/Net/Sieve.php par la version 0.5.4.

Proposer des règles antispam par défaut

Pour que la configuration de l'antispam par les utilisateurs soit plus simple, on peut (dans Rouncube) créer des régles pré-définies. Ça se passe dans plugins/sieverules/config.inc.php :

$rcmail_config['sieverules_predefined_rules'] = array(
  array(
    'name' => 'Spam (sûr et certain)',
    'type' => 'header',
    'header' => 'X-Bogosity',
    'operator' => 'contains',
    'extra' => '',
    'target' => 'Spam,'),
  array(
    'name' => 'Spam (non sûr)',
    'type' => 'header',
    'header' => 'X-Bogosity',
    'operator' => 'contains',
    'extra' => '',
    'target' => 'Unsure,')
)

Cela créé deux règles : une « Spam (sûr et certain) » et une « Spam (non sûr) », qui correspondent aux classements de Bogofilter.

Les utilisateurs pourront alors les utiliser pour classer facilement leurs mails.

Permettre aux utilisateurs de changer leur mot de passe

Roundcube vient avec un plugin de changement de mot de passe, qu'il faut activer. Pour des utilisateurs unix, il faut ajouter un driver passwd pour éviter d'effectuer cette opération en root.

Apprentissage automatique

Pour l'apprentissage dès que l'on déplace un mail soit dans le dossier spam, soit au-dehors, j'utilise le plugin antispam de dovecot, présent dans les dépôts Debian.