Réfonte de la documentation sur Dovecot
This commit is contained in:
parent
3eb6040369
commit
fcc07ee812
274
HowtoDovecot.md
274
HowtoDovecot.md
|
@ -4,42 +4,116 @@ title: Howto Dovecot
|
||||||
...
|
...
|
||||||
|
|
||||||
* Documentation : <http://wiki2.dovecot.org/>
|
* 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
|
## 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
|
## 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
|
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) :
|
||||||
Il faut patcher le master.cf de postfix ainsi :
|
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
- flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
|
#!include auth-system.conf.ext
|
||||||
+ flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -a ${recipient} -d ${user}@${nexthop}
|
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
### 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>
|
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
|
dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
|
||||||
ssl_key = </etc/ssl/private/mail.example.com.key
|
|
||||||
ssl_ca = </etc/ssl/certs/sub.class1.server.ca.pem
|
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
|
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
|
Puis dans `/etc/postfix/main.cf`, ajouter :
|
||||||
|
|
||||||
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".
|
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
# aptitude install dovecot-common
|
virtual_transport = dovecot
|
||||||
~~~
|
|
||||||
|
|
||||||
/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
|
|
||||||
dovecot_destination_recipient_limit = 1
|
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
|
- flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
|
||||||
dovelda ALL=NOPASSWD:/usr/lib/dovecot/deliver
|
+ 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 {
|
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
|
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.
|
||||||
|
|
||||||
~~~
|
Il est également possible de définir des scripts sieve globaux à tous les
|
||||||
hosts = 127.0.0.1
|
comptes, voir le fichier `90-sieve.conf`.
|
||||||
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
|
|
||||||
~~~
|
|
||||||
|
|
||||||
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"];
|
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" "*" {
|
if header :matches "subject" "*" {
|
||||||
vacation :days 3 :subject "Re: ${1}" "Bonjour,
|
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
|
##### Déduplication des mails entrants
|
||||||
|
|
||||||
Regarder dans le fichier *.dovecot.sieve.log*
|
|
||||||
|
|
||||||
### Déduplication des mails entrants
|
|
||||||
|
|
||||||
Pour réaliser un équivalent de la règle procmail suivante :
|
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.
|
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
|
sieve_extensions = +vnd.dovecot.duplicate
|
||||||
|
@ -234,16 +266,19 @@ Puis dans les règles sieve :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
require ["fileinto","vnd.dovecot.duplicate"];
|
require ["fileinto","vnd.dovecot.duplicate"];
|
||||||
|
|
||||||
if duplicate {
|
if duplicate {
|
||||||
fileinto "Trash";
|
fileinto "Trash";
|
||||||
}
|
}
|
||||||
|
|
||||||
# Si on est sûr de vouloir les supprimer
|
# Si on est sûr de vouloir les supprimer
|
||||||
#if duplicate {
|
#if duplicate {
|
||||||
# discard;
|
# 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 :
|
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"];
|
require ["duplicate", "variables"];
|
||||||
if header :matches "message-id" "*" {
|
if header :matches "message-id" "*" {
|
||||||
if duplicate :uniqueid "${0}" {
|
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"];
|
require ["fileinto", "mailbox"];
|
||||||
|
@ -266,7 +301,7 @@ if header :contains "subject" ["[SPAM]"] {
|
||||||
}
|
}
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
### Redirection
|
##### Redirection
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
if header :contains "Subject" "Foo Bar"
|
if header :contains "Subject" "Foo Bar"
|
||||||
|
@ -275,7 +310,7 @@ if header :contains "Subject" "Foo Bar"
|
||||||
}
|
}
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
### Syntaxe
|
##### Syntaxe
|
||||||
|
|
||||||
Conditions :
|
Conditions :
|
||||||
|
|
||||||
|
@ -300,6 +335,27 @@ if CONDITION1 {
|
||||||
|
|
||||||
> *Note* : le else {keep;} est le comportement par défaut
|
> *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
|
## Mode debug
|
||||||
|
|
||||||
### Activer le raw logging
|
### Activer le raw logging
|
||||||
|
|
Loading…
Reference in a new issue