Test IMAP et configuration du webmail Roundcube - Debian 9.0 Stretch
Rédigé par Marc GUILLAUME | Aucun commentaireTraduction de la page : https://workaround.org/ispmail/stretch/roundcube
Tester l'accès IMAP
Vous avez fini la configuration de Dovecot, du coup la relève du courrier en utilisant le protocol IMAP est déjà fonctionnelle. Faisons un petit essai avec un client IMAP simple mais puissant mutt.
mutt -f imaps://john@example.org@webmail.example.org
L'URL de connexion peut sembler un peu trompeuse à cause des deux caractères « @ ». En pratique mutt attend une URL de cette forme imaps://user@server. Et comme nous utilisons l'adresse mail comme nom d'utilisateur et que celle-ci contient par définition un arobase l'URL a cette allure bizarre. Il devrait ensuite vous être demandé un mot de passe qui est « summersun ». Si vous voyez s'afficher une alerte concernant le certificat, vérifiez que vous avez bien utilisé le bon nom de serveur pour vous connecter si vous avez déjà installé le certificat Let's Encrypt lors d'un précédent chapitre de ce guide.
Après vous être connecté vous verrez un écran vide :
Très bien, IMAP fonctionne.
Activer Roundcube
Tout le monde n'est pas un utilisateur pur et dur qui se sert d'applications comme Thunderbird, Évolution, kmail ou A**le Mail pour consulter ses courrier. Il est surprenant de voir combien d'utilisateurs se satisfont d'une interface web comme client de courrier. C'est parfait si cela leur plaît. Nous allons donc leur fournir une interface webmail. Un logiciel très commun (si ce n'est le plus commun) pour cet usage est Roundcube.
Quand vous avez installé le paquet Roundcube au tout début de ce guide il a créé le fichier /etc/apache2/conf-available/roundcube.conf sur lequel existe un lien dans /etc/apache2/conf-enabled/. La configuration générale d'Apache est donc déjà prête. Tout ce qui vous reste à faire est de lier l'hôte virtuel de votre webmail au répertoire contenant l'installation de Roundcube.
Le fichier de configuration suggère cette configuration Apache :
Alias /roundcube /var/lib/roundcube
Cela rend Roundcube accessible sous l'url https://webmail.example.org/roundcube. Mais cependant je voudrais plutôt supprimer le « /roundcube ». Cela se fait aisément en changeant la racine du document (DocumentRoot) dans votre fichier /etc/apache2/sites-enabled/webmail.example.org-https.conf pour :
DocumentRoot /var/lib/roundcube
Relancez Apache…
service apache2 reload
…et vous pouvez maintenant accéder à votre interface webmail à https://webmail.example.org/
Vous pourriez déjà vous connecter en saisissant « localhost » comme serveur. Mais nous allons améliorer quelque peu la configuration. Le « Server » est toujours « localhost ». Donc nous allons le définir par défaut en éditant le fichier /etc/roundcube/config.inc.php :
$config['default_host'] = 'localhost';
Maintenant quand nous chargeons le formulaire d'identification le champ « Server » devrait avoir disparu.
Essayez de vous connecter en utilisant notre utilisateur d'essai john@example.org avec son mot de passe summersun. Cela va créer une connexion IMAP avec « localhost » (sur le serveur) et vous afficher les mails pour John :
La boîte est toujours vide, mais la connexion fonctionne. Parfait.
Mettre en place la redirection HTTP vers HTTPS
Pour les utilisateurs qui oublieraient de taper « https » au lieu de « http » mettons en place une redirection automatique de façon à ce qu'ils soient transférés sur l'URL sécurisée. Éditez le fichier /etc/apache2/sites-enabled/webmail.example.org-http.conf et inséréz ce qui suit quelque part dans la section VirtualHost :
RewriteEngine On RewriteCond %{REQUEST_URI} !^/\.well-known/acme-challenge/.* RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=301]
Les administrateurs système expérimentés pourraient se demander pourquoi je n'utilise pas la forme la plus simple de redirection commme ceci…
# N'utilisez pas cette redirection Redirect permanent / https://webmail.example.org/
La raison en est que rediriger toutes les requêtes depuis HTTP vers HTTPS casserait l'auto-renouvellement de Let's Encrypt. Si un certificat doit être renouvelé le « certbot » placera un fichier dans le sous-répertoire .well-known/acme-challenge dans le DocumentRoot de votre hôte virtuel pour vérifier qu'il s'agit bien de votre serveur. Si vous redirigez ces requêtes vers l'hôte virtuel HTTPS, alors la vérification de Let's Encrypt échouera. L'utilisation d'une RewriteCond(ition) permet d'exclure le sous-répertoire Let's Encrypt de la redirection.
Assurez vous bien entendu que le module de redirection d'Apache est bien activé :
a2enmod rewrite
Pour que vos modifications soient prises en compte :
service apache2 reload
Maintenant, quand vous ouvrez l'URL http://webmail.example.org/ dans votre navigateur, vous devriez être redirigé vers l'URL HTTPS de manière automatique.
HTTP ? HTTPS ? Redirections ? C'est un peu confus ?
Reprenons la façon dont les deux hôtes virtuels sont supposés fonctionner :
- HTTP (/etc/apache2/sites-enabled/webmail.example.org-http.conf)
/.well-known/acme-challenge/ -> sert les pages depuis /var/www/webmail.example.org pour la vérification des requêtes de renouvellement Let's Encrypt,
pour tout le reste -> il redirige le traffic vers HTTPS de telle sorte que les utilisateurs utilisent toujours Roundcube de manière sécurisée - HTTPS (/etc/apache2/sites-enabled/webmail.example.org-https.conf)
/ -> sert les pages de Roundcube depuis /var/lib/roundcube.
J'espère que cela rendra les choses un peu plus claires. Prêtez attention aux noms des deux différents fichiers de configuration.
Plug-ins
Plus bas dans /etc/roundcube/config.inc.php il y a une liste de plugins qui sont chargés par Roundcube. Ajoutez au minimum les plugins « managesieve » et « password », ce qui donne une configuration ressemblant à ça :
$config['plugins'] = array( 'managesieve', 'password', );
Il existe quantité de plugins disponibles. Jetez un oeir dans le répertoire /var/lib/roundcube/plugins/. Vous pouvez tous les ajouter. Les configurations personnalisées des plugins vont dans les répertoires /etc/roundcube/plugins/*.
Ensuite une configuration optionnelle. La durée de session par défaut dans Roundcube est de 10 minutes. Cela signifie que si un utilisateurs n'utilise pas l'interface webmail pendant plus de 10 minutes, il sera déconnecté. Je trouve ça gênant et j'ai augmenté la durée à une heure. Pour faire cela ajoutez à la fin du fichier de configuration :
$config['session_lifetime'] = 60;
Et si vous vouliez changer le logo par défaut de Roundcube, ceci peut être fait par ce réglage :
$config['skin_logo'] = './ispmail-logo.png';
Il vous suffit de copier cette image sous ce nom /var/lib/roundcube/ispmail-logo.png. Le logo devrait avoir une taille de 177×49 pixels. N'hésitez pas à utiliser ce chouette logo que j'ai moi-même fabriqué. 🙂
Si le logo semble cassé assurez-vous que les permissions soient correctes :
chmod a+r /var/lib/roundcube/ispmail-logo.png
Quand vous rechargez le formulaire d'identification il devrait ressembler à ça :
Configuration du plugin managesieve
Le plugin » managesieve » permettra à vos utilisateurs de définir des règles de filtrage automatiques de leurs mails. Ces règles sont enregistrées sur le serveur et seront exécutées automatiquement. Il faut cependant configurer ce plugin. Une configuration par défaut peut être touvée dans le fichier /usr/share/roundcube/plugins/managesieve/config.inc.php.dist sur votre système. Copiez-le dans le répertoire où Roundcube s'attend à le trouver :
cp /usr/share/roundcube/plugins/managesieve/config.inc.php.dist \ /etc/roundcube/plugins/managesieve/config.inc.php
Aucun modification du fichier n'est nécessaire.
Configuration du plugin password
Si vous désirez permettre à vos utilisateurs de modifier leur mot de passe alors utilisez ce plugin « password ». Copiez le fichier de configuration par défaut /usr/share/roundcube/plugins/password/config.inc.php au bon endroit :
cp /usr/share/roundcube/plugins/password/config.inc.php.dist \ /etc/roundcube/plugins/password/config.inc.php
Le fichier de configuration /etc/roundcube/plugins/password/config.inc.php demande cependant quelques petites modifications. Nous devons lui indiquer comment fonctionne notre base de données et quoi faire quand un utilisateur veut changer son mot de passe. Le premier réglage a à voir avec la longueur minimale du mot de passe. Je recommande de le forcer à au moins 10 caractères. En fait la complexité du mot de passe n'est pas si importante. Voyez cette petite bande dessinée XKCD pour alimenter votre réflexion sur la sécurité des mots de passe. Donc modifiez la configuration :
$config['password_minimum_length'] = 10;
Nous devons permettre à l'utilisateur d'utiliser son ancien mot de passe en tant que nouveau mot de passe. Ça peut sembler idiot à première vue, mais comme nous mettons à jour le shéma des mots de passe depuis le très faible MD5 non salé vers l'algorithme SHA2 bien supérieur, nous devons permettre ça :
$config['password_force_save'] = true;
Ensuite le plugin password a besoin de pouvoir accéder à votre base de données :
$config['password_db_dsn'] = 'mysql://mailadmin:ChangezMoi@localhost/mailserver';
Remplacez ChangezMoi par le mot de passe aléatoire que vous avez créé auparavant pour l'utilisateur mailadmin de votre base de données. Et maintenant indiquez au plugin comment écrire le nouveau mot de passe dans la base de données :
$config['password_query'] = "UPDATE virtual_users SET password=CONCAT('{SHA256-CRYPT}', ENCRYPT (%p, CONCAT('$5$', SUBSTRING(SHA(RAND()), -16)))) WHERE email=%u;";
Beurk ! Ça semble vraiment moche non ? Cette requête SQL génère un hachage du mot de passe à partir de ces éléments :
- La chaîne de caractères « {SHA256-CRYPT} » indique explicitement à Dovecot que ce mot de passe est un hachage SHA256 salé. Vous pouvez avoir plusieurs sortes de chiffrement de mots de passe dans votre base, cela clarifie les choses.
- Le mot de passe chiffré qui est réellement produit par la fonction
crypt()
de votre système (que MySQL utilise lorsque vous utiliser la fonction SQL « ENCRYPT ») en se basant sur…- Le nouveau mot de passe en clair (Roundcube remplace « %p » par sa valeur).
- « $5$ » qui représente l'algorithme SHA-256. Voyez la page
man crypt
qui documente la fonctioncrypt()
. - Et « SUBSTRING(SHA(RAND()), -16) » qui est utilisé pour « saler » le mot de passe. Ce « sel » est simplement un ajout d'entropie qui rend beaucoup, beaucoup plus difficile la rétro-ingéniérie du mot de passe chiffré vers le mot de passe réel.
- Et bien entendu comme nous ne voulons changer que le mot de passe de l'utilisateur connecté, la restriction « WHERE email=%u » assure que nous allons modifier la bonne ligne de la base de données. Roundcube remplace « %u » par le nom d'utilisateur qui dans notre cas est le même que l'adresse mail.
(J'avais l'habitude de recommander d'utiliser le commande dovecot pw -s SHA256-CRYPT
pour générer le mot de passe. Vous pouvez également faire ça. Mais en fait MySQL est capable de générer un hachage SHA256 salé sans aucun appel au shell. Merci à Martin de m'avoir signalé ça.)