Le service IMAP va donc nous permettre d’aller récupérer nos mails sur le serveur. En effet, nous avons vu que, pour l’instant, les mails étaient situés dans des répertoires particuliers sur le serveur (/var/mail/vhosts/mondomaine.local/toto/, par exemple), mais il n’est pas commode de se connecter au serveur en ligne de commande pour lire ses mails. Le protocole IMAP va donc permettre de mettre à disposition des logiciels de messagerie des utilisateurs, leurs mails.
Mettez en oeuvre un serveur IMAP
Principes
Commençons par installer le serveur IMAP, j’ai nommé Dovecot. Il existe d’autres serveurs IMAP, mais Dovecot est considéré aujourd’hui comme l’un des plus sécurisés, robustes, et qui possède le plus de fonctionnalités. De plus, il offre à Postfix une fonctionnalité supplémentaire d’authentification qui pourra vous intéresser par la suite.
Installez le serveur
Vous en avez maintenant l’habitude, nous allons regarder ensemble quels packages sont à notre disposition :
root@Debian02:~# apt-cache search dovecot argonaut-dovecot - Argonaut − module client pour dovecot ciderwebmail - service de courriel web IMAP dovecot-managesieved - serveur sécurisé POP3 et IMAP – serveur ManageSieve dovecot-pop3d - serveur POP3/IMAP sécurisé – démon POP3 dovecot-sieve - serveur sécurisé POP3 et IMAP – prise en charge des filtres Sieve mb2md - Convertir les boîtes mail Mbox au format Maildir postfixadmin - interface web d’administration pour Postfix vmm - gestion de domaines, comptes et alias pour Dovecot et Postfix vmm-doc - documentation pour Virtual Mail Manager dovecot-core - secure POP3/IMAP server - core files dovecot-dbg - secure POP3/IMAP server - debug symbols dovecot-dev - secure POP3/IMAP server - header files dovecot-gssapi - secure POP3/IMAP server - GSSAPI support dovecot-imapd - secure POP3/IMAP server - IMAP daemon dovecot-ldap - secure POP3/IMAP server - LDAP support dovecot-lmtpd - secure POP3/IMAP server - LMTP server dovecot-lucene - secure POP3/IMAP server - Lucene support dovecot-mysql - secure POP3/IMAP server - MySQL support dovecot-pgsql - secure POP3/IMAP server - PostgreSQL support dovecot-solr - secure POP3/IMAP server - Solr support dovecot-sqlite - secure POP3/IMAP server - SQLite support dovecot-antispam - Dovecot plugins for training spam filters fusiondirectory-plugin-dovecot - dovecot plugin for FusionDirectory fusiondirectory-plugin-dovecot-schema - LDAP schema for FusionDirectory dovecot plugin mysqmail-dovecot-logger - real-time logging system in MySQL - Dovecot traffic-logger phamm - PHP front-end to manage virtual services on LDAP - main package pysieved - managesieve server roundcube-plugins-extra - skinnable AJAX based webmail solution - extra plugins
Nous souhaitons installer un serveur IMAP et utiliser une base de données MySQL. Les packages qui vont nous intéresser sont donc :
root@Debian02:~# apt-get install dovecot-core dovecot-imapd dovecot-mysql
Normalement, tout devrait bien se passer. Si vous avez des erreurs, essayez de faire un apt-get update pour mettre à jour la liste des paquets disponibles, puis refaites la commande.
Vérifiez que le service est bien en écoute
Si nous essayons de voir si le service est bien en écoute, comme il devrait l’être :
root@Debian02:~# ss -antp State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 100 *:143 *:* users:(("dovecot",pid=5297,fd=33)) LISTEN 0 128 *:22 *:* users:(("sshd",pid=617,fd=3)) LISTEN 0 100 *:25 *:* users:(("master",pid=929,fd=13)) LISTEN 0 80 127.0.0.1:3306 *:* users:(("mysqld",pid=773,fd=17)) ESTAB 0 0 10.0.0.2:22 10.0.0.254:59898 users:(("sshd",pid=1680,fd=3)) LISTEN 0 100 :::143 :::* users:(("dovecot",pid=5297,fd=34)) LISTEN 0 128 :::22 :::* users:(("sshd",pid=617,fd=4)) LISTEN 0 100 :::25 :::* users:(("master",pid=929,fd=14))
Nous voyons bien que Dovecot est en écoute sur le port 143, qui est le port par défaut du protocole IMAP, donc tout va bien !
Sauvegardez les fichiers de configuration
Nous pouvons passer à la configuration du service, mais d’abord, nous allons faire une sauvegarde des fichiers de configuration pour en conserver un exemplaire d’origine. Comme ça, si nous faisons des bêtises, nous pourrons toujours revenir à un fichier de configuration de base :
root@Debian02:~# cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig root@Debian02:~# cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig root@Debian02:~# cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig root@Debian02:~# cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.orig root@Debian02:~# cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig
Configurez le service
Ensuite, la configuration de Dovecot se trouve dans le fichier /etc/dovecot/dovecot.conf. Cependant, la plupart des éléments de configuration ont été séparés dans des fichiers situés dans le répertoire conf.d. Dans notre cas, nous n’aurons rien à retoucher dans le fichier dovecot.conf directement.
Pour pouvoir fournir leurs mails aux utilisateurs, le serveur IMAP a besoin de plusieurs informations :
Savoir où se situent leurs boîtes aux lettres
Savoir quels moyens d’authentification sont autorisés
Savoir où trouver les informations d’authentification (comme les mots de passe)
Editez le fichier de configuration
Nous allons donc configurer ces éléments un par un, en commençant par éditer le fichier /etc/dovecot/conf.d/10-mail.conf dans lequel nous allons éditer deux lignes :
mail_location = maildir:/var/mail/vhosts/%d/%n ... mail_privileged_group = mail
Voyons en détail ces deux lignes :
La première indique là où les mails des utilisateurs vont se trouver, %d représentant le domaine et %n le début de l’adresse mail.
La seconde indique avec quel groupe Dovecot a le droit de faire des modifications dans ces répertoires.
Nous pouvons le vérifier :
root@Debian02:~# ls -la /var/mail total 16 drwxrwsr-x 3 root mail 4096 janv. 16 15:11 . drwxr-xr-x 13 root root 4096 mars 29 10:58 .. -rw------- 1 root mail 495 janv. 16 11:31 root drwxr-xr-x 3 vhosts vhosts 4096 janv. 16 15:42 vhosts
On voit bien ici que le groupe propriétaire du répertoire /var/mail est le groupe mail.
Paramétrez les moyens d'authentification
Il nous faut ensuite indiquer les moyens d’authentification et cela se fait dans le fichier /etc/dovecot/conf.d/10-auth.conf.
Nous commençons par interdire les connexions où le mot de passe circule en clair sur le réseau, en décommentant la ligne suivante :
disable_plaintext_auth = yes
Dans notre cas, nous n’allons faire que des connexions locales, car le webmail qui s’adressera au serveur IMAP sera installé sur la même machine. Cette mesure que nous prenons n’aura donc d’intérêt que pour les personnes qui essaieront de se connecter à distance.
Ensuite, il faut indiquer à Dovecot que les informations d’authentification se trouvent dans une base de données SQL. Pour cela, on commente la ligne d’authentification par le système et l’on décommente celle par SQL :
#!include auth-system.conf.ext !include auth-sql.conf.ext #!include auth-ldap.conf.ext #!include auth-passwdfile.conf.ext #!include auth-checkpassword.conf.ext #!include auth-vpopmail.conf.ext #!include auth-static.conf.ext
Vous pouvez sauvegarder ce fichier modifié. Il nous faut maintenant indiquer à Dovecot quel fichier contiendra les informations permettant de se connecter à la base SQL, en éditant le fichier /etc/dovecot/conf.d/auth-sql.conf.ext :
passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = static args = uid=vhosts gid=vhosts home=/var/mail/vhosts/%d/%n }
La rubrique passdb indique à Dovecot où se situent les informations d’authentification des utilisateurs, qui sont pour nous dans la base de données MySQL.
La rubrique userdb est un complément à passdb qui permet à Dovecot de savoir quel utilisateur Linux a les droits pour accéder à la boîte aux lettres des utilisateurs de la messagerie, et où celles-ci se situent. Nous devons ajouter cette partie, car ces informations ne sont pas présentes dans la base de données SQL.
Il nous reste maintenant à indiquer les informations pour nous connecter à la base MySQL, et cela se fait dans le fichier indiqué /etc/dovecot/dovecot-sql.conf.ext :
driver = mysql [...] connect = host=localhost dbname=messagerie user=messagerieUser password=openclassrooms [...] default_pass_scheme = SHA512-CRYPT [...] password_query = SELECT email as user, password FROM virtual_users WHERE email='%u'
Détaillons ensemble le contenu de ces lignes :
La première ligne indique le type de base SQL utilisé, qui est pour nous une base de type MySQL.
La seconde ligne donne les informations pour se connecter à la base. Nous pouvons notamment voir que l’adresse IP utilisée est localhost qui indique bien que la base est sur la même machine que le service IMAP.
Ensuite, nous indiquons quel algorithme a été choisi pour chiffrer les mots de passe. Ici, nous avons fait le choix de SHA512 quand nous avons créé notre base avec Postfix, SHA512 étant un algorithme de hash robuste aujourd’hui.
Enfin, nous indiquons quelle requête SQL doit être faite pour vérifier le login et le mot de passe des utilisateurs.
Sauvegardez les modifications, et nous sommes maintenant fin prêts pour tester la configuration de notre serveur IMAP !
Testez la configuration de votre serveur IMAP
Pour cela, nous allons utiliser notre bon vieux client Telnet :
root@Debian02:~# systemctl restart dovecot root@Debian02:~# telnet localhost 143 Trying ::1... Connected to localhost. Escape character is '^]'. * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN] Dovecot ready. . login toto@mondomaine.local motDePasseDeToto . OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SPECIAL-USE] Logged in . LIST "" * * LIST (\HasNoChildren \Drafts) "." Drafts * LIST (\HasNoChildren \Sent) "." Sent * LIST (\HasNoChildren \Trash) "." Trash * LIST (\HasNoChildren) "." Spam * LIST (\HasNoChildren) "." Archive * LIST (\HasNoChildren) "." INBOX . OK List completed (0.000 + 0.000 secs). . SELECT INBOX * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted. * 3 EXISTS * 0 RECENT * OK [UNSEEN 2] First unseen. * OK [UIDVALIDITY 1522316996] UIDs valid * OK [UIDNEXT 4] Predicted next UID * OK [HIGHESTMODSEQ 3] Highest . OK [READ-WRITE] Select completed (0.000 + 0.000 secs). . logout * BYE Logging out . OK Logout completed (0.000 + 0.000 secs). Connection closed by foreign host.
On commence par relancer le service IMAP, puis on se connecte sur le port 143.
Le serveur nous répond, nous pouvons alors tenter de nous connecter avec la ligne :
. login toto@mondomaine.local motDePasseDeToto
Le serveur nous dit OK, donc la connexion fonctionne. Il faut encore vérifier que nous accédons bien à la boîte aux lettres avec la commande LIST :
. LIST "" *
Nous avons alors le contenu de la boîte aux lettres avec les différents répertoires disponibles.
Notre serveur IMAP est donc fonctionnel. Cependant, avant de continuer, nous devons aussi vérifier qu’une connexion distante à notre serveur sera bien interdite, vu que notre connexion n’est pas chiffrée par SSL et que les mots de passe circuleraient alors en clair.
Une dernière vérification
Pour cela, nous allons tenter une connexion par Telnet depuis une autre machine, de notre réseau local, ou distante. Pour ma part, j’ai choisi une machine située sur le même réseau local :
root@Debian01:~# telnet 10.0.0.2 143 Trying 10.0.0.2... Connected to 10.0.0.2. Escape character is '^]'. * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LOGINDISABLED] Dovecot ready. . login toto@mondomaine.local motDePasseDeToto * BAD [ALERT] Plaintext authentication not allowed without SSL/TLS, but your client did it anyway. If anyone was listening, the password was exposed. . NO [PRIVACYREQUIRED] Plaintext authentication disallowed on non-secure (SSL/TLS) connections. . logout * BYE Logging out . OK Logout completed. Connection closed by foreign host.
Lors de notre tentative de connexion, le message est clair :
Plaintext authentication not allowed without SSL/TLS, but your client did it anyway. If anyone was listening, the password was exposed.
Puis :
Plaintext authentication disallowed on non-secure (SSL/TLS) connections.
Le serveur nous indique quand même que notre mot de passe a circulé en clair sur le réseau.
Par contre, la connexion a été interdite, comme nous nous y attendions, grâce à la configuration que nous avons mise en place.
En résumé
Nous avons utilisé Dovecot pour installer notre serveur IMAP en sélectionnant les packages qui nous intéressent
Nous avons vérifié que notre service était bien en écoute avant de poursuivre plus en profondeur
Ensuite, nous avons configuré et sécurisé le service en éditant les fichiers dans le répertoire conf.d
Pour finir, nous avons testé cette configuration grâce au client Telnet
Ouf, notre solution n’est pas trop mal sécurisée pour l’instant, nous allons pouvoir passer à la configuration du webmail dans le prochain chapitre !