sieve est malheureusement un grand oublié des serveurs IMAP. Peu de monde connaît ce petit langage qui pourtant peut rendre d'immenses services comme trier automatiquement le spam, les publicités, ou même renvoyer un message d'absence lorsque vous êtes en vacance. Voici donc un petit panorama pour régler cette injustice.
Pour mieux comprendre ce que Sieve peut vous apporter, un petit exemple parlant :D'un coup on comprends mieux à quoi cet outil peut servir. Sieve est donc un langage permettant divers opérations sur les courriels reçus par le serveur IMAP. Dans notre exemple, il analyse le header de chaque message et s'il s'agit d'un spam, le pause directement dans la sous-boîte spams. En gros, sieve permet de faire à peu près tout ce que permettent les classiques fonctions de filtrage des clients courriels, ais de manière automatique, au niveau du serveur lui-même. Ainsi, grâce à des scripts sieve bien construits, le mail est directement ventilé dans les sous boîtes, même avec un accès de type webMail.
D'un point de vue physique, sieve est un sous-serveur de cyrus placé sur le port 2000, il est activé dans le fichier /etc/cyrus.conf qui doit contenir la ligne suivante :
Ensuite il faut simplement relancer cyrus (service cyrus-imapd restart) pour constate l'arrivé du serveur sieve (netstat -anlp | grep 2000).
Comme sieve est un serveur, vous pouvez acceder aux scripts à distance. Le moyen le plus simple que j'ai trouvé c'est un module KIOSLAVE dédié de KDE. Pour ceux qui ne connaissent l'architecture KIO de KDE est proprement géniale. En effet, KDE fournit une interface de type plugin pour prendre en charge les protocoles de lecture et décriture de fichier ou de dossier. Par exemple, si vous prenez konqueror et que vous tappez dans l'url imap://mon_login@mon_serveur_imap vous avez accès, après autentification, à vos mails en lecture...De la même manière vous pouvez accedez aux scritps sieve d'un compte par l'url sieve://mon_login_sieve@.
Logiquement donc, konqueror devrait après autentification afficher une page vide. Il n'y a en effet pour l'instant aucun script pour ce compte imap. Pour en créer un, clique droit et nouveau document texte que vous appellerez default.
Maintenant, très simplement, vous double-cliqué sur ce fichier default, qui s'ouvre sans broncher avec un éditeur de texte comme kwrite et vous pouvez éditer votre script. A chaque sauvegarde, votre travail est envoyé sur le serveur sieve, compilé et immédiatement actif. S'il y a une erreur de syntaxe, kwrite vous donnera même la ligne de l'erreur. Magique non ?
Petite vérification d'usage pour vérifier que le script est bien actif :
Un script sieve commence par la déclaration des librairies pré-requises :
Ensuite, vous pouvez inserez vos règles sous la forme de tests :
Les actions les plus "utiles" sont :
BLOC_CONDITION quant à lui peut être une condition simple ou une composition de conditions simples liées entre elle par des ET (allof) ou des OU (anyof) :
une condition simple se compose de l'objet sur lequel porte la condition, d'un type de condition et de paramétres. La syntaxe globale d'une condition simple est donc (notez bien le : et le not optionnel) :
Les objets de conditions classiques sont :
Les paramétres des conditions dépendent quant à eux beaucoup du type de condition. Cela peut être une chaine ("CHAINE"), une taille (1M pour 1mo), un tableau de chaines (["CHAINE_1","CHAINE_2",...,"CHAINE_N"]), etc...
enfin les grand types de condition sont :
L'exemple qui suit est une mise en application des principes énoncés plus haut. L'objectif est de filrer les spams flaggés par spamassassin selon 3 niveaux. Les spams de niveau 3 et plus seront détruits, les spams de niveau 2 et les erreurs de trasport de courries lié à l'usurpation d'adresse sont placés dans le dossier "spams", enfin les spams de niveau 1, sont placés dans le dossier "spams.ham".
Ce bref apperçu de la syntaxe sieve permet surtout de saisir la puissance du filtrage proposé.
Maintenant quelques exemples simples de tests sieve? N'oubliez pas de mettre la ligne require comme indique plus.
On vérifie ici que la courriel est membre d'une mailling-liste (tag List-Id) et selons les cas, on ventile dans différents dossiers :
Si le courriel vient d'une adresse donnée, on le place dans un dossier spécial. Noter que "contains" implique *@mon_client.com :
Si le courriel est destiné à quelqu'un en particulier :
Si le courriel a été reçu via un serveur SMTP (relai) particulier :
Si le message est très gros, on le place dans un dossier particulier...
- répondre
Jean-François , le 10 September, 2007 - 17:48Je suis en train de mettre en place un serveur smtp Postfix couplé à un serveur imap Cyrus. Autant dire que je suis heureux de lire cet article. Chapeau.
Une question : les filtres Sieve sont-ils forcément propres à UN utilisateur ? J'aimerais avoir un filtre qui classe certains messages arrivant dans une boîte, dans un dossier d'une autre boîte. Possible ?
- répondre
Ulhume, le 10 September, 2007 - 22:45Ravis que cela puisse servir (vu le peu de commentaires, dés fois j'ai des doutes
Pour un script global, pour autant que je m'en souvienne, il suffit d'utiliser sieveshell avec l'utilisateur cyrus. Le script sera alors exécuté à l'échelle globale.
Dit moi si cela fonctionne !
- répondre
Jean-François , le 11 September, 2007 - 10:27Ben non justement ça marche pas pour un script global, c'est ce que j'avais essayé mais ça marche pas
Autre chose qui serait de grande utilité : un tuto pour une installation complète Postfix / MySQL / cyrus-sasl / cyrus-imapd / Clamav / DSPAM / sieve le tout gérant des domaines virtuels. J'en trouve plein avec courier-imap mais cyrus-imap : désert. Ou alors sans le cas des domaines virtuels... avec un LDAP à la place de MySQL ça irait aussi... comme quoi je suis pas si difficile que ça !
- répondre
Ulhume, le 11 September, 2007 - 11:09C'est plus un tuto mais un livre qu'il faudrait là
Sur le site en cherchant tu devrais trouver "postfix/spamd", "postfix/cyrus/ssl", et "Cyrus/Sieve". Si tu ne trouves pas, dis-le moi, je te chercherais les pointeurs.
Pour ce qui est de postfix, j'avais le projet d'en écrire un mais c'est un monde à part entière ce soft. J'ai jamais eu le courage
Et en plus cela demanderais une maîtrise du bignou que je suis bien loin d'avoir... Sinon, j'ai pas vraiment exploité les domaines virtuels, juste une attaque à la sauvage postfix/virtual.cf. Donc rien de bien serieux.
Pour MySql je ne sais pas, j'utilise pas.
Poster un nouveau commentaire