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/>
|
||||
* 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
|
||||
|
|
Loading…
Reference in a new issue