Aller au contenu

Configuration de Dovecot

Comprendre l'architecture du dossier de Dovecot

Par défaut, sur la plupart des installations, Dovecot crée une arborescence complète dans le dossier /etc/dovecot/conf.d/ et coupe sa configuration en plusieurs fichiers. Si cela peut s'avérer pratique pour ne modifier que certaines parties, cela peut rapidement dérouter les débutants et nous perdre.
Dans notre exemple, je vais surtout indiquer les fichiers à modifier et les options à ajouter et/ou décommenter pour avoir un serveur de réception fonctionnel.

Mettre en place notre configuration

Sélectionner les protocoles à utiliser

Par définition, Dovecot communique avec l'extérieur à l'aide de deux protocoles distincts : IMAP et POP (abregé en POP3 en référence à son numéro de révision actuel).
Pour faire simple, la grande différence entre les deux se situe dans la conservation des messages : IMAP se contente de laisser le serveur stocker les messages dans un dossier et permettre aux utilisateurs de ne télécharger que le message qu'il est en train de regarder et de les afficher partout, ce qui permet à l'utilisateur d'avoir tous ses mails sur n'importe quel périphérique, mais l'oblige à télécharger ses messages à chaque fois. POP3, lui, demande au client mail de télécharger tous les messages présents pour les stocker en local directement et efface alors les messages du serveur (même s'il est possible de le configurer pour fonctionner comme IMAP), ce qui permet à l'utilisateur de tout télécharger une fois et de pouvoir consulter ses mails sans accès Internet.

Dans notre cas, nous allons configurer les deux protocoles pour permettre à l'utilisateur de choisir entre les deux solutions. De mon point de vue personnel, j'utilise IMAP pour tous mes équipements, à l'exception de mon PC portable qui utilise POP3 pour vider la boîte mail de temps en temps.

On commence par vérifier que /etc/dovecot/dovecot.conf contient bien les différents protocoles que l'on souhaite utiliser et que Dovecot écoute sur toutes les adresses IP disponibles, pour pouvoir être joignable de l'extérieur :

## Config file for Dovecot

# Main parameters
protocols = imap pop3 lmtp sieve
listen = *, ::

# Cette ligne sert à activer l'arborescence de conf.d
!include conf.d/*.conf

Dans le fichier /etc/dovecot/conf.d/10-master.conf, on va indiquer notamment sur quels ports écouter, les méthodes de connexion (par exemple, STARTTLS sur le port 143 et SSL/TLS sur le port 993 pour IMAP), les utilisateurs système nécessaire pour communiquer avec Postfix et avoir les bonnes permissions pour notre configuration et quelques autres options utiles.
Personnellement, je préfère indiquer toutes les options pour IMAP et POP3 dans un seul fichier plutôt que d'utiliser les deux fichiers spéciaux (20-pop3.conf et 20-imap.conf) qui ont été créés à l'installation, mais libre à vous de mettre ces options dans ces fichiers spéciaux.

Voici le contenu final de ce fichier :

service imap-login {
    inet_listener imap {
        port = 143
    }
    inet_listener imaps {
        port = 993
        ssl = yes
    }
    service_count = 1
    process_min_avail = 4
    vsz_limit = 128M
}

service pop3-login {
    inet_listener pop3 {
        port = 110
    }
    inet_listener pop3s {
        port = 995
        ssl = yes
    }
    service_count = 1
}

service lmtp {
    unix_listener /var/spool/postfix/private/dovecot-lmtp {
        mode = 0600
        user = postfix
        group = postfix
    }
    user = vmail
}

service managesieve-login {
        inet_listener sieve {
            port = 4190
        }
}

service imap {
    process_limit = 2048
}

service pop3 {
    process_limit = 2048
}

service auth {
    unix_listener auth-userdb {
            mode = 0644
        user = vmail
        group = vmail 
    }

    # Postfix smtp-auth
    unix_listener /var/spool/postfix/private/auth {
        mode = 0600
            user = postfix
            group = postfix
    }
    user = dovecot
}

service auth-worker {
    user = vmail
}

protocol imap {
    mail_plugins = $mail_plugins quota imap_quota imap_sieve
        mail_max_userip_connections = 20
        imap_idle_notify_interval = 29 mins
}

protocol lmtp {
        postmaster_address = admin@linuxmario.net
        mail_plugins = $mail_plugins sieve
}

Configurer le chiffrement et les connexions sécurisées

Le fichier /etc/dovecot/conf.d/10-ssl.conf contient toutes les options relatives aux connexions chiffrées et aux procotoles de chiffrement. Nous allons donc essayer d'obtenir une configuration relativement propre et assez sécurisée pour nos utilisateurs : on se basera donc sur la configuration recommandée par Mozilla sur leur générateur.
Voilà à quoi ressemblera alors notre fichier 10-ssl.conf :

ssl = required

ssl_cert = </etc/letsencrypt/live/mail.votredomaine.xyz/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.votredomaine.xyz/privkey.pem

# SSL protocols to use
ssl_min_protocol = TLSv1.2

# SSL ciphers to use
ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384

# Prefer the server's order of ciphers over client's.
ssl_prefer_server_ciphers = no

# SSL extra options. Currently supported options are:
#   no_compression - Disable compression.
#   no_ticket - Disable SSL session tickets.
ssl_options = no_compression no_ticket

Définir l'emplacement de stockage des boîtes mail

Dans le fichier /etc/dovecot/conf.d/10-mail.conf, nous allons indiquer où sont stockés les boîtes mails de nos utilisateurs, ainsi que l'utilisateur système que Dovecot utilisera en interne pour consulter les messages et les enregistrer, sans que d'autres personnes n'aient accès directement aux données.

Dans mon exemple, j'ai choisi l'utilisateur vmail et j'ai indiqué un dossier situé dans /srv comme emplacement de stockage :

## Config file for mail

mail_uid = vmail
mail_gid = vmail
mail_privileged_group = vmail

mail_location = maildir:/srv/production/vmail/webmail/%d/%n

mail_plugins = quota

Une fois cela défini, il nous reste alors à créer l'utilisateur en question, ainsi que le dossier de stockage qui lui servira de racine (dossier par défaut) :

$ sudo mkdir -p /srv/production/vmail/webmail
$ sudo useradd -u 5000 -g 5000 -s /sbin/nologin -d /srv/production/vmail/ vmail
$ sudo chown vmail:vmail -R /srv/production/vmail/

Choisir les noms des dossiers dans les boîtes mails

Dans le fichier /etc/dovecot/conf.d/15-mailboxes.conf, on renseigne les différents dossiers qui serviront de structure pour les nouvelles boîtes mails. Cela permettra de créer les premiers dossiers de base.
Son contenu ressemble alors à quelque chose de ce style :

## Mailbox's folders structure
namespace inbox {
    separator = /
    prefix =
    inbox = yes
    mailbox Brouillons {
        auto = subscribe
        special_use = \Drafts
    }
    mailbox Envoyés {
        auto = subscribe
        special_use = \Sent
    }
    mailbox "Messages envoyés" {
        special_use = \Sent
    }
    mailbox Spam {
        auto = subscribe
        special_use = \Junk
    }
    mailbox Corbeille {
        auto = subscribe
        special_use = \Trash
    }
}

Mettre en place la liaison avec la base de données

Afin de relier Dovecot à notre future base de données SQL, nous allons modifier deux fichiers existants dans le dossier conf.d et nous créerons ensuite un autre fichier qui contiendra les requêtes nécessaires pour obtenir les informations de connexion de nos utilisateurs.

Le premier fichier à modifier est /etc/dovecot/conf.d/10-auth.conf. Il sert notamment à indiquer les méthodes d'authentification et à activer ou non les extensions que l'on souhaite pour gêrer notre liste d'utilisateurs.
On ajoute donc les méthodes d'authentification et le fichier qui sert à activer le module SQL de Dovecot :

disable_plaintext_auth = yes
auth_mechanisms = plain login

!include auth-system.conf.ext
!include auth-sql.conf.ext

La raison qui nous pousse à utiliser SQL est que PostfixAdmin, un script que nous allons utiliser plus tard, se sert d'une base de données MySQL pour stocker la liste des utilisateurs.

Comme nous avons ajouté /etc/dovecot/conf.d/auth-sql.conf.ext dans notre configuration, nous devons aussi modifier ce fichier. Sa fonction est d'activer SQL dans Dovecot et de décrire où trouver les commandes à envoyer pour afficher les utilisateurs et vérifier leur mot de passe à la connexion au webmail.
Deux sections sont à décommenter : la section passdb qui sert aux mots de passe et la section userdb qui sert aux noms d'utilisateurs. On y ajoute alors l'emplacement des commandes comme ceci :

# Authentication for SQL users. Included from 10-auth.conf.
#
# <doc/wiki/AuthDatabase.SQL.txt>

passdb {
    driver = sql
    args = /etc/dovecot/dovecot-sql-webmail.conf
}

userdb {
    driver = sql
    args = /etc/dovecot/dovecot-sql-webmail.conf
}

Le dernier fichier à ajouter n'est autre que celui contenant les commandes SQL nécessaires à Dovecot. Pour ma part, j'ai choisi de l'installer directement dans la racine de la configuration de Dovecot pour des raisons de maintenance et de simplification. Il ne reste alors qu'à créer le fichier /etc/dovecot/dovecot-sql-webmail.conf et le remplir comme ci-dessous :

driver = mysql
connect = host=127.0.0.1 dbname=webmail user=vmail password=monsupermotdepasse
default_pass_scheme = MD5-CRYPT
password_query = SELECT username as user, password, '/srv/production/vmail/webmail/%d/%n' as userdb_home, 'maildir:/srv/production/vmail/webmail/%d/%n' as userdb_mail, 5000 as userdb_uid, 5000 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1'
user_query = SELECT '/srv/production/vmail/webmail/%d/%u' as home, 'maildir:/srv/production/vmail/webmail/%d/%u' as mail, 5000 AS uid, 5000 AS gid, concat('dirsize:storage=',  quota) AS quota FROM mailbox WHERE username = '%u' AND active = '1'

Note : N'oubliez pas que tout changement fait sur la base de données (nom d'utilisateur et mot de passe défini avant l'installation de PostfixAdmin) doit être répercuté dans ce fichier pour que Dovecot fonctionne correctement.

Démarrer et activer Dovecot au démarrage

Une fois notre configuration terminée, on peut alors démarrer Dovecot et l'activer au prochain démarrage en lançant les commandes suivantes : sudo systemctl enable dovecot && sudo systemctl start dovecot

Dovecot devrait alors démarrer sans problème et on peut passer désormais à la configuration de notre anti-spam.