Dovecot : Ajout des filtres SIEVE (avec gestion sur SSL)

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) :

Ajout de filtre SIEVE sous Round Cube via Manage 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/

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *