Apportez votre aide…
Ceci est une ancienne révision du document !
Filtrage des courriels avec Dovecot
Dovecot est une application d'agent de distribution des courriels MDA (voir Comment fonctionne le courriel sous Linux ?). Pour voir ce que peut faire un agent de distribution de courriels lire Comment configurer sa distribution de courriels MDA sous Ubuntu ?
Cette application vous permet de trier et classer vos courriels à l'arrivée dans une boite aux lettres utilisateur ou dans une boite postale du serveur MTA. Elle gère l'identification des courriels marqués comme SPAM ou comme Virus par votre MTA.
Installation
Installez les paquets de filtrages de l'agent de distribution des courriels Dovecot dovecot-sieve dovecot-managesieved.
Configuration
Pour configurer le MDA Dovecot…
Configuration du serveur de messagerie MTA
Postfix
Comment configurer sa distribution de courriels systèmes MTA avec Postfix ?
Si vous voulez filtrer par un marquage vos courriels SPAMs ou Virus au niveau du serveur MTA, il vous faudra mettre en place la partie de filtration des courriels sur le serveur de messagerie.
Exim4
Définir les emplacements des boîtes aux lettres des utilisateurs
sudo nano /etc/dovecot/conf.d/10-mail.conf
… mail_location = maildir:~/.local/share/courriels …
Activer la technique de distribution des courriels
Le MDA utilise deux façons de distribuer les courriels, par l'Agent de Distribution Locale (LDA) du MDA, ou avec le Protocole Local de Transport des Courriels (LMTP) du MTA qui est une variante locale au serveur de messagerie du SMTP.
Activer le support LDA
sudo nano /etc/dovecot/15-lda.conf
{ … lda_mailbox_autocreate = yes lda_mailbox_autosubscribe = yes protocol lda { mail_plugins = $mail_plugins #sieve }
Activer le support LMTP
Sécuriser le transport du courriel
sudo nano /etc/dovecot/conf.d/10-auth.conf
… disable_plaintext_auth = yes … auth_mechanisms = plain login …
sudo nano /etc/dovecot/conf.d/10-ssl.conf
… ssl = yes ssl_cert = </etc/ssl/certs/ssl-cert-snakeoil.pem ssl_key = </etc/ssl/private/ssl-cert-snakeoil.key …
Configuration du plugin sieve
nano /etc/dovecot/conf.d/90-sieve.conf
plugin { sieve = file:~/.sieve;active=~/.dovecot.sieve sieve_default = /var/lib/dovecot/sieve/default.sieve }
Créer des filtres
Création de règles globales
sudo mkdir /var/lib/dovecot/sieve/ sudo nano /var/lib/dovecot/sieve/default.sieve
L'exemple de règles suivant déplace automatiquement les courriels indésirables de la boîte de réception vers le dossier indésirable SPAMs. X-Spam-Flag est ajouté par spamassassin et amavis par le serveur MTA.
require "fileinto"; if header :contains "X-Spam-Flag" "YES" { fileinto "SPAMs"; }
sudo sievec /var/lib/dovecot/sieve/default.sieve
Création de règles utilisateur
nano ~/.dovecot.sieve
Filtration par entête
Utiliser if(si)/elsif(sinon si)/else(sinon) pour stocker vos messages dans différents répertoire/sous répertoires :
require ["fileinto", "envelope"]; if address :is "to" "utilisateur@mon_domaine_de_courriels.fr" { fileinto "CourrielsUtilisateur"; } elsif envelope :is "from" "utilisateur@mon_domaine_de_courriels.fr" { fileinto "CourrielsUtilisateur.Envoyés"; } elsif anyof (header :contains "X-listname" "root@mon_domaine_de_courriels.fr", header :contains "List-Id" "Linux User root") { fileinto "AdminSystème"; } else { # Le reste va dans INBOX # par défaut c'est garder un copie "implicit keep", nous gardons cette copie ici keep; }
anyof c'est un «ou» logique, avec allof vous pouvez faire un «et» logique.
Transférer les courriels avec "commande" ou "achat" dans leur objet à une autre adresse :
if header :contains "subject" ["commande", "achat"] { redirect "serviccommandes@mon_domaine_de_courriels.fr"; }
Marquer ou mettre en évidence votre courriel
Certains clients de messagerie MUA utilisent ces indicateurs:
require "imap4flags"; require "regex"; if anyof (exists "X-Cron-Env", header :regex ["subject"] [".* security run output", ".* monthly run output", ".* daily run output", ".* weekly run output"]) { addflag "$label1"; # ie 'Important'/red label within Thunderbird # Other flags: # addflag "$label1"; # Important: #ff0000 => red # addflag "$label2"; # Work: #ff9900 => orange # addflag "$label3"; # personal: #009900 => green # addflag "$label4"; # todo: #3333ff => blue # addflag "$label5"; # later: #993399 => violet # }
Copie locale de vos courriels :
require ["envelope", "imap4flags"]; if envelope "from" "utilisateur@mon_domaine_de_courriels.fr" { setflag "\\seen"; }
Règles anti-spam/antivirus
La plupart des antivirus et anti-spam ajoutent un en-tête spécial aux messages électroniques. Afin que les utilisateurs puissent appliquer le filtrage en conséquence, selon la configuration de l'interpréteur Sieve, le filtrage peut être effectué soit en évaluant ces en-têtes directement, soit en utilisant les extensions spamtest et virustest.
Filtrage direct à l'aide de l'en-tête de message
L'évaluation directe des en-têtes est toujours possible tant que les en-têtes sont effectivement ajoutés aux messages par le logiciel de détection du MTA. Par exemple, pour classer les courriels marqués par SpamAssassin dans un dossier appelé "SPAMs" :
require "fileinto"; if header :contains "X-Spam-Flag" "YES" { fileinto "SPAMs"; }
L'exemple suivant rejette les courriels marqués par SpamAssassin avec un niveau de détection supérieur ou égal à 10 :
if header :contains "X-Spam-Level" "**********" { discard; stop; }
Certains analyseurs de spam ne produisent qu'un score numérique en en-tête. Le test devient alors plus complexe :
require ["comparator-i;ascii-numeric","relational"]; if allof ( not header :matches "x-spam-score" "-*", header :value "ge" :comparator "i;ascii-numeric" "x-spam-score" "10" ) { discard; stop; }
Filtrage à l'aide des extensions spamtest et virustest
Lorsque les extensions spamtest et virustest sont configurées sur le serveur MTA, les utilisateurs (les client MUA) peuvent avoir un moyen beaucoup plus simple de filtrer respectivement les messages de spam et de virus. Pour filtrer le spam, l'extension spamtest peut par exemple être utilisée comme suit:
require "spamtestplus"; require "fileinto"; require "relational"; require "comparator-i;ascii-numeric"; /* Si spamtest échoue pour quelque raison que se soit, exemple de l'absence d'entête de spam, * le fichier est déposé dans un dossier spécial. */ if spamtest :value "eq" :comparator "i;ascii-numeric" "0" { fileinto "Nonclassé"; /* Si le score de spamtest (entre 1 et 10) est plus grand ou égal à 3, * le fichier est déposé dans le dossier de spams : */ } elsif spamtest :value "ge" :comparator "i;ascii-numeric" "3" { fileinto "SPAMs"; /* Pour une évaluation plus fine des scores, la balise «:percent» peut être utilisée. * La règle suivante supprime tous les messages avec un pourcentage supérieur à 85% * par rapport au maximum. */ } elsif spamtest :value "gt" :comparator "i;ascii-numeric" :percent "85" { discard; } /* Les autres messages sont classés dans INBOX */
L'extension virustest peut être utilisée de la même manière:
require "virustest"; require "fileinto"; require "relational"; require "comparator-i;ascii-numeric"; /* Non scanné ? */ if virustest :value "eq" :comparator "i;ascii-numeric" "0" { fileinto "Unscanned"; /* Infecté avec une probabilité élevée (entre 1 et 5) */ } if virustest :value "eq" :comparator "i;ascii-numeric" "4" { /* Le mettre en quarantaine dans un dossier spécial (encore un peu dangereux) */ fileinto "Quarantaine"; /* Infecté */ } elsif virustest :value "eq" :comparator "i;ascii-numeric" "5" { /* Suppression */ discard; }