Réfonte de la documentation sur Dovecot

This commit is contained in:
Romain Dessort 2017-10-11 11:55:03 -04:00
parent 3eb6040369
commit fcc07ee812

View file

@ -4,42 +4,116 @@ title: Howto Dovecot
...
* Documentation : <http://wiki2.dovecot.org/>
* Rôle Ansible : <https://forge.evolix.org/projects/ansible-roles/repository/show/dovecot>
[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 = </etc/ssl/certs/example.com.crt
ssl_key = </etc/ssl/private/example.com.key
ssl_dh_parameters_length = 2048
~~~
Avec `ssl = required`, toutes les connexions POP/IMAP doivent être chiffrées. Un exception est cependant faite pour localhost, où les connexions en clair restent possibles.
La directive `ssl_cert` doit inclure le certificat du domaine ainsi que tous ceux de sa chaine de certification.
### Créer des boîtes IMAP automatiquement
Voir <http://wiki2.dovecot.org/MailboxSettings>
@ -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 = </etc/ssl/certs/mail.example.com.cert
ssl_key = </etc/ssl/private/mail.example.com.key
ssl_ca = </etc/ssl/certs/sub.class1.server.ca.pem
dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
~~~
Note : cela suppose que tous les comptes de courriels sont gérés par un unique compte unix _vmail_.
## Utiliser Dovecot/LDA pour utiliser le langage Sieve
Dovecot/LDA (ou deliver) est un agent de livraison fourni avec Dovecot, que Postfix peut utiliser pour délivrer les mails dans les maildir des utilisateurs d'un serveur mail. Celui-ci prend notamment en charge le langage "sieve", qui offre des fonctionnalités du même type que le programme "procmail".
Puis dans `/etc/postfix/main.cf`, ajouter :
~~~
# aptitude install dovecot-common
~~~
/etc/postfix/master.cf :
~~~
dovecot unix - n n - - pipe flags=DORqhu user=dovelda
argv=sudo /usr/lib/dovecot/deliver -n -f ${sender} -d ${recipient}
~~~
/etc/postfix/main.cf :
~~~
virtual_transport dovecot
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
~~~
Dans la configuration de sudo :
### Support du + dans les adresses
Il faut modifier les options de `deliver` dans le fichier `master.cf` de Postfix ainsi :
~~~
Defaults:dovelda !syslog
dovelda ALL=NOPASSWD:/usr/lib/dovecot/deliver
- 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}
~~~
/etc/dovecot/dovecot.conf :
### Gestion de Sieve
Sieve est un langage permettant d'écrire des règles de tri de courriel, du même
type que se que `procmail` offre. Il a cependant l'avantage d'être normalisé
dans le RFC 5228 et donc supporté par plusieurs clients.
Pour utiliser sieve, il faut l'ajouter à la directive `mail_plugins` dans le fichier `15-lda.conf` :
~~~
protocols = none
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_privileged_group = mail
mail_location = maildir:~
protocol imap {
}
protocol pop3 {
pop3_uidl_format = %08Xu%08Xv
}
protocol sieve {
}
protocol lda {
auth_socket_path = /var/run/dovecot/auth-master
# Space separated list of plugins to load (default is global mail_plugins).
mail_plugins = sieve
postmaster_address = postmaster@example.com
}
auth default {
mechanisms = plain
userdb ldap {
args = /etc/dovecot/dovecot-ldap.conf
}
passdb ldap {
args = /etc/dovecot/dovecot-ldap.conf
}
user = root
socket listen {
# for LDA
master {
path = /var/run/dovecot/auth-master
mode = 666
user = dovecot
}
}
}
dict {
}
plugin {
}
~~~
/etc/dovecot/dovecot-ldap.conf :
Dovecot lit par défaut le fichier _.dovecot.sieve_ à la racine du compte de
l'utilisateur et le compile à la volée. Si une erreur est rencontrée, il va
simplement ignorer le fichier et délivrer les messages dans la boite
principale, de sorte qu'aucun message ne soit perdu. Les erreurs de compilation
sont journalisées dans le fichier *.dovecot.sieve.log* à la racine du compte.
~~~
hosts = 127.0.0.1
base = dc=example,dc=com
ldap_version = 3
user_filter = (&(objectClass=mailAccount)(isActive=TRUE)(courierActive=TRUE)(uid=%u))
pass_attrs = uid=user,userPassword=password,homeDirectory=userdb_home,uidNumber=userdb_uid,gidNumber=userdb_gid
#dn = cn=courier,ou=ldapuser,dc=example,dc=com
#dnpass = xxx
#user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid
~~~
Il est également possible de définir des scripts sieve globaux à tous les
comptes, voir le fichier `90-sieve.conf`.
On peut alors créer des fichiers .dovecot.sieve de ce type dans le $HOME d'un utilisateur, qui seront traités par dovecot/LDA :
#### Exemple de règles
Simple :
Voici quelques liens pour écrire les règles : <http://support.tigertech.net/sieve> <http://sieve.info/tutorials>
On peut aussi utiliser des outils pour générer les règles comme Roundcube, Horde/Ingo, etc. voir <http://sieve.info/clients>
##### 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 : <http://support.tigertech.net/sieve> <http://sieve.info/tutorials>
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 <http://sieve.info/clients>
~~~
#### 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