From fcc07ee8126fa0fa99d6086246fadb7231e7febd Mon Sep 17 00:00:00 2001 From: Romain Dessort Date: Wed, 11 Oct 2017 11:55:03 -0400 Subject: [PATCH] =?UTF-8?q?R=C3=A9fonte=20de=20la=20documentation=20sur=20?= =?UTF-8?q?Dovecot?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HowtoDovecot.md | 274 +++++++++++++++++++++++++++++------------------- 1 file changed, 165 insertions(+), 109 deletions(-) diff --git a/HowtoDovecot.md b/HowtoDovecot.md index 0e5cf8bb..27b2ae24 100644 --- a/HowtoDovecot.md +++ b/HowtoDovecot.md @@ -4,42 +4,116 @@ title: Howto Dovecot ... * Documentation : -* Rôle Ansible : -[Dovecot](https://www.dovecot.org/) est un puissant serveur POP et IMAP et écrit en ayant comme but la sécurité. Les autres objectifs sont la légèreté et la rapidité ainsi que la facilité à le mettre en place. +[Dovecot](https://www.dovecot.org/) est un puissant serveur POP et IMAP et +écrit en ayant comme but la sécurité. Les autres objectifs sont la légèreté et +la rapidité ainsi que la facilité à le mettre en place ; la configuration de +base, après installation, fournit un serveur POP/IMAP fonctionnel. ## Installation ~~~ -# apt install dovecot-pop3d dovecot-imapd dovecot-sieve dovecot-managesieved dovecot-ldap +# apt install dovecot-pop3d dovecot-imapd dovecot-sieve dovecot-ldap dovecot-managesieved ~~~ +`dovecot-ldap` est à installer si l'authentification se fait sur un annuaire +LDAP mais il est également possible d'utiliser une base MySQL ou PostgreSQL, +avec le paquet adapté en conséquence. + ## Configuration -La configuration de Dovecot se trouve dans le répertoire `/etc/dovecot` et notamment le fichier `dovecot.conf`. +La configuration de Dovecot se trouve dans le répertoire `/etc/dovecot`. Le +fichier principal est `dovecot.conf` mais la configuration se fait dans des +fichiers séparés dans `/etc/dovecot/conf.d/`. -Pour activer les protocoles POP(S) et IMAP(S) : +Les paramètres globaux se définissent notamment dans `10-mail.conf`. Dans le +cas d'un compte Unix unique pour tous les comptes : ~~~ -protocols = imap imaps pop3 pop3s +mail_location = maildir:/home/vmail/%d/%n + +mail_uid = 5000 +mail_gid = 5000 ~~~ -Pour autoriser l'authentification en clair même sans SSL/TLS (attention, les identifiants circuleront donc en clair !!) : +Pour utiliser LDAP comme backend d'authentification, ajouter ceci dans `10-auth.conf` : ~~~ -disable_plaintext_auth = no +!include auth-ldap.conf.ext +service auth { + unix_listener auth-userdb { + mode = 0600 + user = vmail + group = vmail + } +} ~~~ -### Support du + dans les adresses - -Il faut patcher le master.cf de postfix ainsi : +Et commenter la ligne suivante si on utilise pas du tout l'authentification via +PAM (important autrement PAM introduit un lag lors de l'authentification) : ~~~ -- flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient} -+ flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -a ${recipient} -d ${user}@${nexthop} +#!include auth-system.conf.ext ~~~ -### Crée des boîtes IMAP automatiquement +Les paramètres de connexion à LDAP ainsi que la correspondance des champs +doivent être indiqués dans le fichier `/etc/dovecot/dovecot-ldap.conf.ext` : + +~~~ +hosts = 127.0.0.1 +auth_bind = yes +ldap_version = 3 +base = dc=example,dc=com +user_attrs = homeDirectory=home +user_filter = (&(isActive=TRUE)(uid=%u)) +pass_attrs = uid=user,userPassword=password +~~~ + +### Authentification SMTP sur Dovecot + +Il est possible de déléguer l'authentification SMTP de Postfix à Dovecot, ce +qui est pratique pour ne pas définir à 2 endroits différents les paramètres du +backend d'authentification utilisé. Dans Dovecot, il s'agit de faire écouter +Dovecot sur un socket Unix, sur lequel on pourra récupérer la liste des comptes +et tester l'authentification. + +Dans le fichier `10-master.conf`, décommenter/adapter les lignes suivantes : + +~~~ +service auth { + […] + + # Postfix smtp-auth + unix_listener /var/spool/postfix/private/auth { + mode = 0666 + user = postfix + group = postfix + } +} + +Puis indiquer le chemin vers le socket dans la configuration de Postfix, relatif à son chroot : + +~~~ +smtpd_sasl_type = dovecot +smtpd_sasl_path = private/auth-client +~~~ + +### Configuration TLS + +La configuration se fait dans le fichier `10-ssl.conf` : + +~~~ +ssl = required +ssl_cert = @@ -66,103 +140,68 @@ namespace inbox { } ~~~ -### SSL/TLS +## Utiliser Dovecot comme LDA + +Dovecot fournit un agent de livraison (LDA) nommé `dovecot-lda` via la commande +`deliver`. + +Note : il est également possible d'utiliser le démon `dovecot-lmtp` (paquet _dovecot-lmtp_). + +Ajouter la ligne suivante dans le fichier `/etc/postfix/master.cf` : ~~~ -ssl_cert = + +On peut aussi utiliser des outils pour générer les règles comme Roundcube, Horde/Ingo, etc. voir + +##### Ajouter un message d'absence ~~~ require ["vacation"]; @@ -184,14 +223,8 @@ Cordialement, ~~~ ~~~ -require ["fileinto", "copy", "vacation", "variables"]; +require ["vacation", "variables"]; -# Exemple d'une règle de filtrage -if header :contains ["Subject"] ["testsieve"] { - fileinto "Test"; -} - -# Exemple de message "vacation" if header :matches "subject" "*" { vacation :days 3 :subject "Re: ${1}" "Bonjour, @@ -201,19 +234,18 @@ Je suis indispo jusqu'au DD/MM/YYYY. } ~~~ -### Langage Sieve +##### Tri sur le sujet -On peut écrire des règles Sieve dans le fichier `/home/vmail/example.com/jdoe/.dovecot.sieve` pour un utilisateur en particulier ou dans `/etc/dovecot/sieve.global` pour que cela soit général au serveur. +~~~ +require ["fileinto", "copy"]; -Voici quelques liens pour écrire les règles : +if header :contains ["Subject"] ["testsieve"] { + fileinto "Test"; +} -On peut aussi utiliser des outils pour générer les règles comme Roundcube, Horde/Ingo, etc. voir +~~~ -#### Debug - -Regarder dans le fichier *.dovecot.sieve.log* - -### Déduplication des mails entrants +##### Déduplication des mails entrants Pour réaliser un équivalent de la règle procmail suivante : @@ -224,7 +256,7 @@ Pour réaliser un équivalent de la règle procmail suivante : Testé avec Dovecot 2.2.13 en Jessie. -Ajouter le plugin sieve duplicate dans /etc/dovecot/conf.d/90-sieve.conf : +Ajouter le plugin sieve duplicate dans `/etc/dovecot/conf.d/90-sieve.conf` : ~~~ sieve_extensions = +vnd.dovecot.duplicate @@ -234,16 +266,19 @@ Puis dans les règles sieve : ~~~ require ["fileinto","vnd.dovecot.duplicate"]; + if duplicate { fileinto "Trash"; } + # Si on est sûr de vouloir les supprimer #if duplicate { # discard; #} ~~~ -Note : la ligne require doit être unique et en début de fichier, si des modules sont déjà chargés il suffit d'ajouter "vnd.dovecot.duplicate". +Note : la ligne require doit être unique et en début de fichier, si des modules +sont déjà chargés il suffit d'ajouter "vnd.dovecot.duplicate". En Jessie-backports, version 2.2.27, « duplicate » est intégré. Et il faut mettre dans une règle sieve : @@ -251,12 +286,12 @@ En Jessie-backports, version 2.2.27, « duplicate » est intégré. Et il faut m require ["duplicate", "variables"]; if header :matches "message-id" "*" { if duplicate :uniqueid "${0}" { - discard; + discard; } } ``` -### Déplacer les emails avec un certain sujet dans une sous-boîte Junk +##### Déplacer les emails avec un certain sujet dans une sous-boîte Junk ~~~ require ["fileinto", "mailbox"]; @@ -266,7 +301,7 @@ if header :contains "subject" ["[SPAM]"] { } ~~~ -### Redirection +##### Redirection ~~~ if header :contains "Subject" "Foo Bar" @@ -275,7 +310,7 @@ if header :contains "Subject" "Foo Bar" } ~~~ -### Syntaxe +##### Syntaxe Conditions : @@ -300,6 +335,27 @@ if CONDITION1 { > *Note* : le else {keep;} est le comportement par défaut + +#### managesieve + +Dovecot supporte le protocole managesieve, qui permet d'éditer les règles +depuis un client compatible (Thunderbird, Roundcube avec le plugin du même nom, +etc…). Il faut installer le paquet _dovecot-managesieved_ : + +~~~ +# apt install dovecot-managesieved +~~~ + +Et, si on utilise Roundcube : + +~~~ +# apt install roundcube-plugins php-net-sieve +~~~ + +La configuration se fait dans le fichier `20-managesieve.conf`. Celle fournie +par défaut est fonctionnelle. Le démon `managesieved` écoute par défaut sur le +port TCP 4190. + ## Mode debug ### Activer le raw logging