LINUX:RoundCubeMail

De WIKI sur Linux (ADB)
Aller à la navigation Aller à la recherche

retour au menu de concernant la messagerie


But

C'est un interface Web (WUI) permettant de consulter, d'envoyer et de gérer nos messages électroniques.

Nous nous placerons dans le contexte restreint de notre service de messagerie privée.


Architecture

Pour pouvoir utiliser cette application, il faut disposer de diverses pièces. Dans notre approche simple, tous ces composants seront concentrés dans la même machine mais il est parfaitement possible de les disperser sur diverses machines y compris celles se trouvant sur internet.

Voici le schéma adopté:


LINUX:Roundcubemail.pdf


On y observe divers postes:

  • Au centre l'application RoundCubeMail
  • qui est une application gérée par le service Web Apache via les ports TCP 80 (HTTP) ou 443 (HTTPS).
  • Cette application a besoin d'un service de base de données MariaDB, compatible Mysql pour y stocker ses propres informations via le port TCP 3306.
  • Comme cette application a pour but de consulter les messages électroniques, elle doit avoir accès au PostOffice en utilisant le service Dovecot via les ports TCP 143 (IMAP) ou 993 (IMAPS).
  • Elle doit pouvoir envoyer des messages électroniques en utilisant le service Postfix via les ports TCP 25 (SMTP), 587 (submission) ou 465 (SMTPS).
  • L'application est accessible en utilisant tout explorateur Internet tel Firefox à partir de votre PC par exemple.

Notons que nous avons utilisé des services courants mais d'autres peuvent être utilisés.


Installation

Il faut installer le logiciel par la commande suivante:

dnf install roundcubemail


Configuration d'Apache

L'installation procure un fichier de configuration Tout fait "/etc/httpd/conf.d/roundcubemail.conf".

Il est nécessaire de modifier ce fichier sinon l'application ne sera accessible qu'à partir de la machine hébergeant le service Apache.

Le bloc suivant s'y retrouve à deux endroits pour notre version d'Apache de version 2.4:


   <IfModule mod_authz_core.c>
       # Apache 2.4
       Require local
   </IfModule>

La première occurrence concerne directement l'utilisation de l'application RoundCubeMail dans le bloc:


<Directory /usr/share/roundcubemail/>
 ...
</Directory>

La seconde est nécessaire lors de la phase d'installation. Ce bloc pourra être remis dans son état d'origine dès la configuration terminée pour une question évidente de sécurité. A l'extrême, ce répertoire pourra être éliminé.


<Directory /usr/share/roundcubemail/installer/>
 ...
</Directory>


On remplace ces directives par:


   <IfModule mod_authz_core.c>
       # Apache 2.4
       Require all denied
       Require local
       Require ip 192.168.1
   </IfModule>

qui ajoute une ligne pour donner accès aux machines de notre réseau local "192.168.1.0/24".


Si vous avez plusieurs versions de PHP actives sous Apache, n'oubliez pas de faire référence à la bonne version comme expliqué dans l'article Coexistence de plusieurs versions de PHP. RoundCubeMail supporte la version 8.1 de PHP.


Pour rendre actif cette configuration, il faut redémarrer le service Apache:

systemctl restart httpd.service


Configuration de MariaDB

Avant d'aborder la configuration de l'application RoundCubeMail, il faut créer l'utilisateur et le schéma dans la base de données MariaDB. Nous exposons une méthode sous forme de script mais on peut utiliser des interfaces Web pour le faire interactivement tels PHPMyAdmin ou Adminer.


Création du schéma

Pour créer le schéma dans la base de données Mysql, nous nous basons sur les informations suivantes:

  • Nom du schéma: dbroundcube
  • Mot de passe de l'utilisateur root (à adapter): ZZZZZZZZ

Ces paramètres peuvent être adaptés à votre guise.


Ensuite il nous faut 2 fichiers.

Le premier fichier que l'on nomme "schema.sql", sert à créer le schéma vide:


DROP SCHEMA IF EXISTS dbroundcube ;
CREATE SCHEMA dbroundcube ;


Le second fichier que l'on nomme "import.bat", va créer ce schéma:


#!/bin/bash
dbuser=root
dbpw=ZZZZZZZZ
mysql --user=$dbuser --password=$dbpw < schema.sql

Donnez les droits d'exécution au script Bash:

chmod 700 import.bat

et exécutez le:

./import.bat


Création de l'utilisateur

Pour créer de l'utilisateur MySql qui permettra à l'application RoundCubeMail, nous nous basons sur les informations suivantes:

  • Nom du schéma: dbroundcube
  • Nom d'utilisateur: userroundcube
  • Mot de passe de l'utilisateur userroundcube (à adapter): TTTTTTTT
  • Mot de passe de l'utilisateur root (à adapter): ZZZZZZZZ

Ces paramètres peuvent être adaptés à votre guise.

On ne donne accès à cet utilisateur à la base de données qu'à ce schéma dbroundcube à partir seulement de la machine hôte, locale.


Pour y arriver, on crée 4 fichiers.

Le premier fichier que l'on nomme "dropuser.sql", sert à effacer un utilisateur préexistant:


drop user 'userroundcube'@'localhost' ;
drop user 'userroundcube'@'127.0.0.1' ;
drop user 'userroundcube'@'::1' ;


Le second que l'on nomme "createuser.sql", permet de créer l'utilisateur:


create user 'userroundcube'@'localhost'      identified by 'TTTTTTTT' ;
create user 'userroundcube'@'127.0.0.1'      identified by 'TTTTTTTT' ;
create user 'userroundcube'@'::1'            identified by 'TTTTTTTT' ;


Le troisième que l'on nomme "grant.sql", va donner tous les droits sur ce schéma:


grant all privileges on dbroundcube.* to 'userroundcube'@'localhost';
grant all privileges on dbroundcube.* to 'userroundcube'@'127.0.0.1';
grant all privileges on dbroundcube.* to 'userroundcube'@'::1';


Enfin le dernier que l'on nomme "user.bat", va mettre en oeuvre cet ensemble:


#!/bin/bash 
dbuser=root
dbpw=ZZZZZZZZ
mysql --user=$dbuser --password=$dbpw  < dropuser.sql
mysql --user=$dbuser --password=$dbpw  < createuser.sql
mysql --user=$dbuser --password=$dbpw  < grant.sql

Donnez les droits d'exécution au script Bash:

chmod 700 user.bat

et exécutez le:

./user.bat


Configuration de RoundCubeMail par WUI

La configuration des paramètres de l'application RoundCubeMail peut se faire via l'interface Web. Il faut lancer lancer l'Url suivante: http://servermail.home.dom/roundcubemail/installer . Le nom de la machine est à adapter selon votre cas. Le nom repris correspond à celui que l'on trouve sur le schéma.


Vérification des dépendances

Le premier écran vérifie que tous les paquets dépendants sont bien installés. Si ce n'est pas le cas, résolvez ces cas.


LINUX:Roundcubemail.check.png


Configuration des options

On clique ensuite sur le second onglet "Create config" ou sur le bouton "NEXT" situé en bas de l'écran.

L'écran , qui apparaît, permet de remplir la majorité des options importantes. Les plus importantes sont à déduire des configurations des services MariaDB, Postfix et Dovecot.


LINUX:Roundcubemail.config.reduit2.png


Sauvegarde de la configuration

En bas de cet écran, dès que les zones sont remplies, cliquez sue le bouton "UPDATE CONFIG". Apparaît alors le contenu du fichier de configuration. Ce contenu est à placer dans le nouveau fichier "/etc/roundcubemail/config.inc.php". Attention, ce fichier doit être accessible par l'utilisateur du service "httpd.service": "apache":

chown root:apache /etc/roundcubemail/config.inc.php
chmod 640 /etc/roundcubemail/config.inc.php

Dès que ce fichier est présent, tout nouvel accès à l'Url http://servermail.home.dom/roundcubemail/installer devient interdit par défaut si par mégarde, on abandonne l'écran. Ceci peut être évité si dans le fichier de configuration que l'on vient de créer, la ligne suivante est ajoutée:


$config['enable_installer'] = true;

En production, cette ligne doit être éliminée.


LINUX:Roundcubemail.config.file.png


Initialisation du contenu du schéma

On clique ensuite sur le second onglet "Test config" ou sur le bouton "CONTINUE" situé plus bas dans l'écran.

On passe alors à l'étape finale. En premier lieu, on remarque que le shéma dans la base de données n'est pas initialisé. On appuie sur le bouton "Initialize database".


LINUX:Roundcubemail.test.1.png


Test de messagerie

L'écran se rafraichit. Le schéma est maintenant actif.

La partie "Test SMTP config" permet de tester l'envoi de message et la partie "Test IMAP config" permet de tester l'accès à notre boîte à messages électroniques.


LINUX:Roundcubemail.test.2.png


Mais à ce stade, vous rencontrerez divers problèmes. Nous allons affiner cette configuration brute.


Configuration finale de RoundCubeMail

A ce stade, vous risquez de rencontrer quelques problèmes. Tout se joue dans le fichier de configuration "/etc/roundcubemail/config.inc.php". J'ai divisé ce fichier en cinq parties. Chaque option est reprise sous la forme:

$config['<option>'] = valeur ;


Clé de cryptage interne

Une première option des_key concerne la clé de cryptage générée ci-dessus et déjà sauvée. Je ne conseille pas de la changer dès que vous aurez débuté l'utilisation de RoundCubeMail.

Dans notre exemple, nous avons:


$config['des_key'] = '4JnXXlEVBux7GSt4ELHvEEtX';


Schéma de base de données

Cette option concerne le mot db_dsnw.

Si vous avez pu ci-dessus initialiser le schéma, la ligne est correcte; on ne la bouge pas.

Dans notre exemple, nous avons:


$config['db_dsnw'] = 'mysql://userroundcube:TTTTTTTT@localhost/dbroundcube';

On peut y retrouver diverses informations introduites dans l'écran WUI de configuration:

  • "mysql" : Le gestionnaire de base de données est MySQL.
  • "localhost" : La base de données se trouve sur la machine locale.
  • "dbroundcube" : Le schéma utilisé
  • "userroundcube" : Le nom d'utilisateur ayant tous les droits sur ce shéma
  • "TTTTTTTT" : Le mot de passe de cet utilisateur


IMAP

Ce bloc d'options concerne les protocoles IMAP (port TCP 143 par défaut) et IMAPS (port TCP 993 par défaut)). Tout dépend de la configuration du serveur Dovecot. Dans RoundCubeMail, il sert en premier lieu à pouvoir rentrer dans cet applicatif et ensuite de pouvoir gérer sa boîte de messagerie électronique après s'être authentifié grâce au nom d'utilisateur et son mot de passe d'IMAP.

Voici diverses options utilisées:

  • imap_host

La valeur a le format: <protocole>://<nom de machine>:<port> Dans l'exemple, nous avons.


$config['imap_host'] = 'ssl://servermail.home.dom:993';

  • imap_conn_options

Cette option permet de régler le mode de vérification du certificat du serveur Dovecot en cas de cryptage. Si le certificat est officiel, ce n'est pas nécessaire. Il a la forme:


$config['imap_conn_options'] = [
 'ssl' => [
   ... <paramètres> ...
  ],
];

La description des différents paramètres peut être consultée à l'URL https://www.php.net/manual/fr/context.ssl.php

  • imap_vendor

Cette option spécifie le logiciel IMAP utilisé pour faciliter la conversation entre RoundCubeMail et ce logiciel. Cette valeur n'est pas absolument requise. Dans l'exemple, nous avons.


$config['imap_vendor'] = 'dovecot';

  • imap_auth_type

Il permet de spécifier le mode d'authentification à utiliser. Par défaut, RoundCubeMail utilise le plus sécurisé. Le plus souvent, on trouve les protocoles DIGEST-MD5, CRAM-MD5, LOGIN et PLAIN. La valeur "IMAP" recouvre "LOGIN" et "PLAIN", les plus classiques. Normalement cette option n'est pas nécessaire sauf cas spécifique ou erreur sur le serveur. Voici un exemple:


$config['imap_auth_type'] = 'IMAP';


SMTP

Ce bloc d'options concerne les protocoles SMTP (port TCP 25 par défaut), SMTPS (port TCP 465 par défaut)) et SUBMISSION (port TCP 587 par défaut). Tout dépend de la configuration du serveur Postfix. Dans RoundCubeMail, il sert à l'envoi de mails.

Voici diverses options utilisées:

  • smtp_host

La valeur a le format: <protocole>://<nom de machine>:<port> Dans l'exemple, nous avons.


$config['smtp_host'] = 'tls://servermail.home.dom:587';

  • smtp_conn_options

Cette option permet de régler le mode de vérification du certificat du serveur Postfix en cas de cryptage. Si le certificat est officiel, ce n'est pas nécessaire. Il a la forme:


$config['smtp_conn_options'] = [
 'ssl' => [
   ... <paramètres> ...
  ],
];

La description des différents paramètres peut être consultée à l'URL https://www.php.net/manual/fr/context.ssl.php

  • smtp_auth_type

Il permet de spécifier le mode d'authentification à utiliser. Par défaut, RoundCubeMail utilise le plus sécurisé. Le plus souvent, on trouve les protocoles DIGEST-MD5, CRAM-MD5, LOGIN et PLAIN. Les valeurs "LOGIN" et "PLAIN" sont les plus classiques. Normalement cette option n'est pas nécessaire sauf cas spécifique ou erreur sur le serveur. Voici un exemple:


$config['smtp_auth_type'] = 'LOGIN';

  • smtp_user et smtp_pass

Quand SMTP demande une authentification, ces deux options permettent de les transmettre. C'est habituellement ce cas du protocole SUBMISSION. Dans notre exemple, c'est l'utilisateur et le mot de passe de Dovecot qui sont utilisés. Ce sont les valeurs par défaut.


$config['smtp_user'] = '%u';
$config['smtp_pass'] = '%p';

Par contre, habituellement, les protocoles SMTP et SMTPS ne le demandent pas. Il est alors impérativement informer qu'il n'y a pas d'utilisateur ni de mot de passe sinon l'envoi du mail échouera.


$config['smtp_user'] = ;
$config['smtp_pass'] = ;


Certificats

Les protocoles des options "imap_host" et "smtp_host" sont:

  • vide : pas de cryptage (exemple: "$config['smtp_host'] = 'localhost:25';" ou "$config['imap_host'] = 'localhost:143';")
  • tls : cryptage de type STARTTLS (exemple: "$config['smtp_host'] = 'tls://servermail.home.dom:587';")
  • ssl : cryptage de type SSL/TLS (exemple: "$config['imap_host'] = 'ssl://servermail.home.dom:993';")

Habituellement:

  • IMAP a le port TCP 145 et est non crypté avec authentification.
  • IMAPS a le port TCP 993 et est crypté (SSL/TLS) avec authentification.
  • SMTP a le port TCP 25 et est non crypté sans authentification.
  • SMTPS a le port 465 et est crypté (SSL/TLS) sans authentification.
  • SUBMISSION a le prot 587 et est crypté (STARTTLS) avec authentification.

Voyez l'article Description succincte des principaux protocoles de messagerie. Mais il faut tenir à l'esprit que tout est extensible et modifiable à volonté.

Il toujours conseillé de crypter les échanges mais c'est moins crucial quand les échanges se font à l'intérieur le la même machine. Par contre, préférez toujours l'authentification.


Quand on invoque le cryptage, les problèmes commencent. On peut facilement les résoudre.

Il faut savoir que la validation d'un certificat, comporte deux étapes:

  • le nom repris dans le certificat doit correspondre au nom repris pour les options "imap_host" et "smtp_host"; ce nom doit être connu du serveur DNS ou du fichier "/etc/hosts" et doit renvoyer sur la bonne machine.
  • ce certificat doit être officiel, c'est à dire qu'il doit être validé par une autorité de certification (CA) reconnue internationalement.

Si ce n'est pas le cas, les connexions utilisant un certificat (transmission cryptée) aux serveurs Dovecot et/ou Postfix ne se feront pas. Si ces deux conditions sont remplies, tout se passer sans problème.


Dans le cas contraire, plusieurs approches sont possibles en utilisant les options "imap_conn_options" pour IMAP ou "smtp_conn_options" pour SMTP:

  • On désactive la validation du certificat.

Cas d'IMAP:


$config['imap_conn_options'] = [
  'ssl'         => [
    'verify_peer'  => false
  ],
];

Cas de SMTP:


$config['smtp_conn_options'] = [
  'ssl'         => [
    'verify_peer'  => false
  ],
];

  • Si le certificat est reconnu mais pas la machine; par exemple si la machine est reprise sous le nom de "localhost", on désactive la validation du nom de machine.

Cas d'IMAP:


$config['imap_conn_options'] = [
 'ssl' => [
   'verify_peer_name' => false
  ],
];

Cas de SMTP:


$config['smtp_conn_options'] = [
 'ssl' => [
   'verify_peer_name' => false
  ],
];

  • Une troisième possibilité est de fournir le certificat émis par l'autorité de certification (CA) lié au certificat de cette machine.

Cas d'IMAP:


$config['imap_conn_options'] = [
 'ssl' => [
   'cafile'       => '/etc/pki/home/certs/ca.home.crt'
  ],
];

Cas de SMTP:


$config['smtp_conn_options'] = [
 'ssl' => [
   'cafile'       => '/etc/pki/home/certs/ca.home.crt'
  ],
];

L'exemple est tiré de l'article Création d'une CA privée (V1).

  • On peut enfin ajouter ce même certificat de l'autorité de certification (CA) à la liste des ceux qui sont reconnus internationalement. Voyez l'article Certificats sous Linux. Les options "imap_conn_options" pour IMAP ou "smtp_conn_options" pour SMTP ne sont plus nécessaires. Le certificat est considéré sur la machine comme officiel.


Options diverses

J'ai remarqué que nombre d'options remplies lors la configuration par le WUI, ne se retrouvent pas dans le fichier de configuration. Je conseille de passer en revue le fichier "/etc/roundcubemail/defaults.inc.php" qui reprend les options par défaut afin d'affiner votre configuration.

Les problèmes principaux consistent à créer le schéma dans la base de données, à se connecter et à pouvoir visualiser et envoyer les mails. Ces changements peuvent être faits à postériori.

Voici quelques paramètres retenus:

  • enable_installer

Dès que ce fichier de configuration existe, l'accès à l'URL de configuration http://servermail.home.dom/roundcubemail/installer ci-dessus sera inaccessible sauf si vous ajoutez la ligne:


$config['enable_installer'] = true;

Pour une question évidente de sécurité, elle ne doit pas exister sauf lors de la phase de configuration éventuellement.

  • enable_spellcheck

Elle active la vérification orthographique.


$config['enable_spellcheck'] = true;

  • spellcheck_engine

Elle spécifie le mécanisme utilisé pour la vérification orthographique. Il a été ajouté lors de l'installation de roundCubeMail.


$config['spellcheck_engine'] = 'enchant';

  • username_domain

S'il est spécifié, il ajoute automatiquement le nom de domaine au nom d'utilisateur. Par exemple si je me connecte avec l'utilisateur "adebast", il adaptera la connexion à "adebast@home.dom" selon la valeur reprise ci-dessous. Les deux connexions sont équivalentes.


$config['username_domain'] = 'home.dom';

  • plugins

Il permet d'activer divers Plugins. Je n'en ai pas utilisé.


$config['plugins'] = [];


Ecran WUI

Maintenant que l'application est opérationnelle, on va la découvrir.

Dans votre explorateur internet préféré, entrez l'URL associée. Dans notre exemple, elle est http://servermail.mail.dom/roundcubemail .

On remplit le nom d'utilisateur et le mot de passe et on se connecte.


LINUX:Roundcubemail.login.png


Pour découvrir l'interface.


LINUX:Roundcubemail.mail.png





retour au menu de concernant la messagerie