Les filtres « SIEVE » permettent de ranger les courriels arrivants sur un serveur mail dans un répertoire destination choisi en fonction d’un certain nombre de règles ou de critères définis par le destinataire.
Ils s’apparentent à « procmail » mais permettent, nativement, d’être géré par l’utilisateur via un canal sécurisé et dédié, « ManageSieve », sans accès direct au serveur (en SSH, (S)FTP, etc).
Les filtres sont enregistrés sur le serveurs et appliqués à un message dès son arrivée dans la BAL (Boîte Aux Lettres) de l’utilisateur.
Les possibilités de SIEVE ne se cantonnent pas aux classements des messages. Il est possible d’utiliser via ce procédé des scripts déjà intégrés (plugins tels que vacation, etc), de réexpédier des messages dès leurs réceptions, etc.
Les règles sont généralement définies via des interfaces de gestion respectant le protocole (plugin de Thunderbird, ou de RoundCube par exemple), ce qui permet de limiter les risques d’erreurs commises par l’utilisateur.
Installation
Conseil : Commencez par configurer votre plate-forme de messagerie Postfix + Dovecot par exemple et assurez vous de son bon fonctionnement. L’ajout des filtres SIEVE et de leur gestion est alors triviale.
Dans la suite de cet article nous considérerons que votre plateforme de messagerie est fonctionnelle. Cet article vous accompagne dans l’ajout du filtrage SIEVE et de sa gestion.
Sous Debian, comme pour la plupart des distributions (CentOS, etc) le support des filtres SIEVE est intégré à Dovecot donc rien de particulier à ajouter.
Sous Gentoo Linux, vous devrez ajouter les « useflags » « ssl », « managesieve » et « sieve » à dovecot :
srv ~ # cat /etc/portage/ net-mail/dovecot kerberos ldap pam ssl suid maildir managesieve sieve zlib |
Notons au passage que le support de SIEVE est intégré comme une extension de dovecot nécessitant un patch des sources pour les versions inférieures à la 2.X (pour celles et ceux qui utilisent un dovecot personnalisé).
Configuration
On peut décomposer la configuration en 3 parties :
- 1/ activation et configuration de Manage SIEVE, l’outil permettant de configurer les filtres (dans le fichier « /etc/dovecot/dovecot.conf ») ;
- 2/ configuration du LDA (Local Delivery Agent) intégré à Dovecot pour qu’il utilise les filtres SIEVE (encore dans « /etc/dovecot/dovecot.conf ») ;
- 3/ modification du MTA (Mail Transfert Agent) pour qu’il utilise le LDA de Dovecot (dans le fichier de configuration du MTA exemple : « /etc/postfix/main.cf »).
Configuration de Dovecot
Le fichier « /etc/dovecot/dovecot.conf » contient le gros de la configuration des filtres et de leur gestion. Pour commencer, il convient d’ajouter « managesieve » à la liste des protocoles supportés et de le configurer :
18:31:20 mailhost ~ # cat /etc/dovecot/dovecot.conf ... protocols = imaps managesieve ... ## ## ManageSieve specific settings ## protocol managesieve { # ip et port d'écoute : ssl_listen = 10.0.10.128:2000 # Login executable location : (valeur par défaut) login_executable = /usr/lib/dovecot/managesieve-login # ManageSieve executable location : (valeur par défaut) mail_executable = /usr/lib/dovecot/managesieve # Si non définit avant, définition de mail_location : mail_location = maildir:~/mail # Présentation du mode d'implémentation du manager de filtre : (valeur par défaut) managesieve_implementation_string = dovecot # Localisation des certificats : ssl_cert_file = /etc/ssl/dovecot/managesieves.rez0.lan.pem ssl_key_file = /etc/ssl/dovecot/managesieves.rez0.lan.pem } ... |
Pour la génération de vos certificats référez vous à « Autorité de certification et certificats OpenSSL » sur « Admin Linux Fr« .
Ensuite, configurez le LDA de Dovecot en précisant, au moins, l’utilisation du plugin Sieve (‘mail_plugins’) et le socket à utiliser pour l’authentification des utilisateurs (‘auth_socket_path’) :
... protocol lda { # Address to use when sending rejection mails (e.g. postmaster@example.com). postmaster_address = postmaster@admin-linux.fr # Nom d'hôte à utiliser dans différentes partie des mails envoyés (ex : Message-Id) : # Par défaut : nom de la machine. hostname = srv.rez0.lan # list of plugins to load. mail_plugins = sieve # localisation des plugins : mail_plugin_dir = /usr/lib/dovecot/modules/lda # Configuration des logs : log_path = info_log_path = deliver_log_format = msgid=%m: %$ # Binaire d'envois de mails : sendmail_path = /usr/lib/sendmail # Subject: header to use for rejection mails. You can use the same variables # as for rejection_reason below. rejection_subject = Rejected: %s # Human readable error message for rejection mails. You can use variables: # %n = CRLF, %r = reason, %s = original subject, %t = recipient rejection_reason = Your message to <%t> was automatically rejected:%n%r # UNIX socket path to master authentication server to find users. auth_socket_path = /var/run/dovecot/auth-master } ... |
Toujours dans « /etc/dovecot/dovecot.conf », créer le socket d’authentification défini dans la configuration du LDA (variable « auth_socket_path ») :
... auth default { ... mechanisms = plain login ... socket listen { master { # Localisation : path = /var/run/dovecot/auth-master # Droits : mode = 0600 } ... } } ... |
Terminez la configuration de Dovecot par la configuration du plugin SIEVE :
... plugin { ... # Localisation des filtres actifs : sieve=~/sieve.filters # Localisation des filtres dans le répertoire utilisateur : sieve_dir=~/sieve } ... |
Appliquez la configuration en redémarrant Dovecot :
18:43:34 mailhost / # /etc/init.d/dovecot restart Restarting IMAP/POP3 mail server: dovecot. |
Premiers tests de Manage SIEVE
« gnutls-cli » Permet de tester la configuration des filtres en lignes de commande (comme toutes les connexions SSL d’ailleur) :
1 2 3 4 5 6 7 8 9 10 11 12 13 | 23:07:40 fhh@mafalda ~ $ gnutls-cli imap.rez0.lan -p 2000 --starttls Resolving 'imap.rez0.lan'... Connecting to '10.0.10.128:2000'... - Simple Client Mode: "IMPLEMENTATION" "dovecot" "SIEVE" "fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date" "SASL" "" "STARTTLS" "NOTIFY" "mailto" "VERSION" "1.0" OK "-" |
La ligne 7 n’est autre que la valeur de « managesieve_implementation_string » définie dans le fichier « /etc/dovecot/dovecot.conf ».
Parmi les éléments retournés par le serveur, nous trouvons les méthodes d’authentification autorisées (ligne 9 SASL). Par défaut aucune méthode n’est acceptée.
En revanche, le serveur supporte le TLS (ligne 10).
Nous instancions donc la connexion TLS par la commande « STARTTLS » validée par entrée :
14 15 | STARTTLS OK "Begin TLS negotiation now." |
La séquence de touche « Ctrl+D » finalise la sécurisation (par échange de clés) de la connexion :
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | *** Starting TLS handshake - Ephemeral Diffie-Hellman parameters - Using prime: 1024 bits - Secret key: 1022 bits - Peer's public key: 1020 bits - Certificate type: X.509 - Got a certificate list of 1 certificates. - Certificate[0] info: - subject `C=FR,ST=FR,L=#4c65204b72656d6cadbc45ééa747265,O=Admin-Linux Fr,OU=Service Informatique,CN=imap.rez0.lan,EMAIL=fhh@admin-linux.fr', issuer `C=FR,ST=FR,L=#4c65204b72656d6cadbc45ééa747265,O=Admin-Linux Fr,OU=Service Informatique,CN=imap.rez0.lan,EMAIL=fhh@admin-linux.fr', RSA key 4096 bits, signed using RSA-SHA1, activated `2009-09-08 10:49:34 UTC', expires `2010-09-08 10:49:34 UTC', SHA-1 fingerprint `d872c9f0822cce' - The hostname in the certificate matches 'imap.rez0.lan'. - Peer's certificate issuer is unknown - Peer's certificate is NOT trusted - Version: TLS1.0 - Key Exchange: DHE-RSA - Cipher: AES-128-CBC - MAC: SHA1 - Compression: NULL "IMPLEMENTATION" "dovecot" "SIEVE" "fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date" "SASL" "PLAIN LOGIN" "NOTIFY" "mailto" "VERSION" "1.0" OK "TLS negotiation successful." |
Le nom du serveur appelé et le nom du serveur pour lequel le certificat à été délivré sont comparés (ligne 25). S’il ne sont pas identiques la séquence s’arrête par un :
- The hostname in the certificate does NOT match 'srv.rez0.lan' |
Ligne 35, nous pouvons constater que deux modes d’authentifications sont maintenant autorisés car nous sommes en TLS.
Pour les tests nous nous authentifierons en « plaintext ». Pour cela nous commençons par calculer la chaîne de caractère d’authentification depuis le shell par la commande :
echo -ne '\x00<login>\x00<mot de passe>' | base64 |
exemple avec le login « toto » et le mot de passe « tutu » :
23:16:43 fhh@mafalda ~ $ echo -ne '\x00toto\x00tutu' | base64 AHRvdG8AdHV0dQ== |
Le calcul de cette chaîne de caractère permet de poursuivre la séquence de test (avec succès si le couple login mot de passe est valide) :
39 40 | AUTHENTICATE "PLAIN" "AHRvdG8AdHV0dQ==" OK "Logged in." |
Vous pouvez enfin obtenir la liste des règles disponibles sur le serveur via la commande « LISTSCRIPTS » :
41 42 | LISTSCRIPTS OK "Listscripts completed." |
« Ctrl+D » Mettra fin au test.
Configuration du MTA (exemple : Postfix)
L’ultime étape de la configuration consiste à indiquer au MTA (Postfix, Sendmail, Exim, etc) d’utiliser Dovecot pour délivrer les courriels dans la boîte mail des utilisateurs.
Avec Postfix, il existe plusieurs méthodes pour cela. La plus simple consiste à renseigner la valeur de « mailbox_command » dans le fichier de configuration de Postfix (« /etc/postfix/main.cf »):
23:11:04 fhh@mailhost ~ $ cat /etc/postfix/main.cf ... mailbox_command = /usr/lib/dovecot/deliver -f ${sender} -d ${recipient} ... |
Les modifications sont validées par un rechargement de la configuration de Postfix :
19:03:20 mailhost ~ # /etc/init.d/postfix reload Reloading Postfix configuration...done. |
Votre plate-forme de messagerie intègre désormais la gestion des filtres SIEVE.
Intégration dans le webmail RoundCube
RoundCube est un webmail très en vogue ces temps derniers. Il est léger, efficace, esthétique et il dispose de nombreux plugins destinés à étendre ses fonctionnalités.
Parmi les plugins proposés, « managesieve » offre une interface de configuration des filtres SIEVE simple et accessible aux utilisateurs.
L’installation du plugin commence par la dépose dans le répertoire « plugins » du webmail du dossier contenant « managesieve » :
webserver site # ls plugins/managesieve/ Changelog config.inc.php config.inc.php.dist lib localization managesieve.js managesieve.php skins |
La configuration du plugin s’effectue dans le fichier « config.inc.php » où vous devrez, au moins, adapter les variables « $rcmail_config[‘managesieve_port’] », « $rcmail_config[‘managesieve_host’] » et « $rcmail_config[‘managesieve_usetls’] » :
<?php // managesieve server port $rcmail_config['managesieve_port'] = 2000 ; // managesieve server address, default is localhost. ... $rcmail_config['managesieve_host'] = 'imap.rez0.lan' ; ... // use or not TLS for managesieve server connection ... $rcmail_config['managesieve_usetls'] = true ; ... |
Enfin l’activation du plugin est effectuée par l’ajout de « managesieve » à la liste des plugins actifs (valeur de « $rcmail_config[‘plugins’] » dans « config/main.inc.php ») :
webserver site # cat config/main.inc.php ... // List of active plugins (in plugins/ directory) $rcmail_config['plugins'] = array('jqueryui', 'password', 'managesieve'); ... |
Le résultat est immédiatement accessible depuis l’interface du webmail (« Préférences », en haut à droite, et cliquez sur le nouvel onglet nommé « Filtres » pour obtenir l’interface de gestion des SIEVE) :

Côté serveur, les différents fichiers nécessaires à l’utilisation de SIEVE sont créés automatiquement.
Exemple avant l’utilisation de Manage SIEVE :
11:42:29 fhh@mailhost ~ $ ls -l total 12 drwx--S--- 143 fhh users 8192 Jun 27 11:42 mail |
… puis après utilisation de l’interface de gestion des filtres :
11:44:23 fhh@mailhost ~ $ ls -l total 12 drwx--S--- 143 fhh users 8192 Jun 27 11:36 mail drwx--S--- 3 fhh users 38 Jun 27 11:37 sieve lrwxrwxrwx 1 fhh users 21 Jun 27 11:37 sieve.filters -> sieve/roundcube.sieve |
Références
Dovecot : http://wiki2.dovecot.org/, http://wiki.dovecot.org/ et http://wiki.dovecot.org/ManageSieve/Troubleshooting
La documentation de Postfix : http://www.postfix.org/
RoundCube : http://roundcube.net/