The Fool

Distribution et filtrage des mails

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

  • le MTA (Mail Transfer Agent) Postfix, qui récupère les mails, et appelle le LDA (Local Deliver Agent) correspondant au destinataire du mail ;
  • l'antispam Bogofilter ;
  • le LDA (Local Deliver Agent) Dovecot LDA qui délivre les mails dans la bonne boîte mail ;
  • le plugin Sieve de Dovecot LDA qui permet d'appliquer et des règles de filtrage Sieve ;
  • le serveur ManageSieve de Dovecot qui permet de configurer les règles Sieve ;
  • le serveur IMAP Dovecot pour servir les mails aux UA (User Agent) ;
  • le plugin SieveRules de Roundcube, pour configurer les règles de filtrage depuis le webmail.

On suppose que Postfix et Dovecot (pour l'imap) sont déjà configurés. Cette documentation est rédigée pour Debian bullseye, qui propose la version 2.3 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 de Dovecot

Tout d'abord, il faut l'installer :

# apt install dovecot-managesieved

Pas besoin de plus pour que ça marche.

Pour ne pas se poser la question de l'authentification (pas chiffrée avec l'ancien serveur Pysieved), l'accès au serveur Managesieve est restreint à localhost via une règle du parefeu.

(il est peut-être possible de configurer l'authentification chiffrée avec Dovecot ManageSieve, pas testé)

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.