Installer un webmail Roundcube sur Debian 10

Posted by

Chers lecteurs bonjour,

Dans un article précédent j’avais proposé l’installation d’un serveur d’envoi de mail, avec liberté de spécifier l’adresse mail de l’expéditeur et signature DKIM.

Cet article-ci est une continuation et présuppose que vous ayez réalisé ce serveur. Néanmoins tout serveur Debian peut faire l’affaire.

A ce stade on avait installé: Postfix, SASL, OpenDKIM.

Pour le Webmail Roundcube, il faut: un serveur de courrier de type IMAP, un serveur d’envoi SMTP, et pour le logiciel à installer: Apache2, PHP, MySQL/MariaDB, Certbot, Python.

Il faut bien se rendre compte que ce serveur ne contiendra à aucun moment les messages e-mail des utilisateurs, mais bien les carnets d’adresses que ceux-ci auraient constitués sur le webmail ainsi que les préférences d’affichage.

A vous de déterminer votre politique de backup ou l’absence de celle-ci.

Dans l’article précédent j’avais appelé le serveur bazooka.example.com.

Vous avez peut-être envie de “vendre” votre webmail avec un nom plus cohérent, par exemple rc.example.com (rc pour Roundcube)

Dans la zone DNS de example.com, vous ajouterez une entrée, soit un CNAME qui redirige rc vers bazooka, soit une entrée A vers l’adresse IP du serveur.

Testez en faisant:

ping rc.example.com

Je vous livre les commandes à exécuter sur le serveur lui-même pour installer des packages supplémentaires, à partir de l’utilisateur root.

apt-get install apache2 mariadb-server mariadb-client
apt-get install php php-common php-curl php-mysql php-mbstring 
apt-get install php-intl php-imagick php-pear php-ldap php-json php-xml

On va créer un utilisateur ‘rc’ sous lequel le webmail sera installé.

adduser rc (répondez aux questions)

Visitez maintenant le site de Roundcube, et identifiez la dernière version stable dans les downloads. Copiez l’adresse du download “Complete” dans votre presse-papiers, on va en avoir besoin.
Lors de la rédaction de cet article, il s’agit de https://github.com/roundcube/roundcubemail/releases/download/1.4.3/roundcubemail-1.4.3-complete.tar.gz

On va se connecter dans le contexte de l’utilisateur rc, et exécuter une série de commandes:

# su - rc

$ wget https://github.com/roundcube/roundcubemail/releases/download/1.4.3/roundcubemail-1.4.3-complete.tar.gz
$ tar xvfz roundcubemail-1.4.3-complete.tar.gz
$ mv roundcubemail-1.4.3 www

(Roundcube est maintenant dans le sous-dossier www. Vous pouvez un peu investiguer ce dossier, et lire le fichier INSTALL)

Terminez la session de l’utilisateur ‘rc’ avec control-D, on revient dans le shell ‘root’.

On va créer un lien symbolique entre l’emplacement du site web par défaut (/var/www/) et le répertoire www de l’utilisateur ‘rc’ (/home/rc/www/).

cd /var/www
ln -s /home/rc/www rc

On va configurer ce nouveau site dans Apache

cd /etc/apache2/
cd sites-available/
cp 000-default.conf rc.conf

On va éditer ce fichier de configuration rc.conf . J’indique juste les lignes qui ne sont pas des commentaires.

<VirtualHost *:80>
ServerName rc.example.com
ServerAdmin webmaster@example.com
DocumentRoot /var/www/rc
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

puis on l’active:

a2ensite rc
systemctl reload apache2

On le teste via l’adresse http://rc.example.com , on doit recevoir ce message d’erreur:

CONFIGURATION ERROR
config.inc.php was not found.
Please read the INSTALL instructions!

Sous debian, on a un éternel problème de permissions dans la configutation standard. Le serveur web tourne sous l’utilisateur www-data. On va réciproquement partager les groupes de ‘rc’ et ‘www-data’ pour diminuer les problèmes de droits d’accès:

adduser www-data rc
adduser rc www-data
service apache2 restart

Il faut créer une base de données ‘rc’, un utilisateur ‘rc’ et des droits d’accès.

mysql
mysql> CREATE DATABASE `rc`;
CREATE USER 'rc' IDENTIFIED BY 'password';
GRANT USAGE ON *.* TO 'rc'@localhost IDENTIFIED BY 'password';
GRANT ALL privileges ON `rc`.* TO 'rc'@localhost;
FLUSH PRIVILEGES;

Tout devrait maintenant être prêt pour procéder à l’installation du webmail. On a:

  • un serveur SMTP
  • un serveur IMAP
  • une base de données

Comme indiqué dans la documentation de Roundcube, on dirige son navigateur vers http://rc.example.com/installer

tout est ok ? >> [Next]

il faut changer les permissions d’accès aux répertoires temp et logs :

chmod g+rwx /var/www/rc/temp /var/www/rc/logs

Je choisis de ne pas utiliser de Spell checker.

Pour la database choisir: mysql, puis host=localhost, database=rc, user=rc, password.

On peut opter pour un préfixe rc1_ ça peut toujours servir si plusieurs instances devaient partager une base de données.

imap:
POUR OVH: ssl://ssl0.ovh.net  (c’est bien un zéro, pas un O)
POUR GMAIL: ssl://imap.gmail.com (Gmail ne le permet pas sans changer plusieurs réglages au préalable sur son compte Gmail)

smtp:
tls://localhost, port 587 , user: (votre utilisateur créé dans l’article précédent)
décocher: [ ] use the current IMAP username

Ensuite on clique sur [Next]

L’installer propose de télécharger le fichier de configutation généré, téléchargez-le donc, et ouvrez-le avec Notepad (bloc-notes)

Cherchez “smtp_server” et ajoutez les lignes indiquées en rouge:

$config['smtp_server'] = 'tls://localhost';

// SMTP port. Use 25 for cleartext, 465 for Implicit TLS, or 587 for STARTTLS (default)
$config['smtp_port'] = 587;

$config['smtp_conn_options'] = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
), );

// SMTP username (if required) if you use %u as the username Roundcube
// will use the current username for login
$config['smtp_user'] = '...';

// SMTP password (if required) if you use %p as the password Roundcube
// will use the current user's password for login
$config['smtp_pass'] = '...';

Cette modification est rendue nécessaire car le serveur SMTP se présente avec un certificat auto-signé. Sans cette configuration, le client (webmail) échoue lors de la connexion car le certificat n’est pas authentifié par une autorité de certification (CA).

Copiez l’entièreté du fichier de configuration dans votre presse-papiers et recopiez-le sur le serveur comme ceci :

cat > /var/www/rc/config/config.inc.php

puis collez (sous PuttY, c’est un clic droit). Puis faites un retour à la ligne et control-D

Cliquez sur [Next].

La base de données n’est pas initialisée, faites-le en un clic comme proposé.

Testez SMTP en indiquant une adresse d’expéditeur (de préférence configurée dans le chapitre précédent DKIM) et une adresse de destinataire. Le mail doit vous parvenir. Vous pouvez inspecter les en-têtes.

Ou mieux, obtenez une adresse temporaire sur mail-tester.com, envoyez-y un mail et vérifiez votre joli score de 10/10 !

Testez IMAP avec une adresse complète et son mot de passe.

Il nous reste quelques petits détails à régler. Par défaut PHP ne permet que des uploads de 2 mégabytes, c’est bien trop peu pour un webmail. Je propose 40 MB.

Dans le fichier /etc/php/7.3/apache2/php.ini, recherchez ces 2 lignes et augmentez leur valeur:

upload_max_filesize = 40M    #(au lieu de 2M)
post_max_size = 48M          #(au lieu de 8M)

et redémarrez Apache:

service apache2 restart

Maintenant que tout fonctionne, il manque quelque chose d’essentiel: https ?

apt-get install certbot python-certbot-apache
certbot --apache

Cette machine est encore presque vierge. On ne prend pas de risque à laisser Certbot faire automatiquement les modifications.

Après avoir accepté les termes de licence, donnez une adresse mail réelle, puis indiquez le nom du site web à protéger, en donnant son numéro dans la liste proposée. Vous pouvez opter de rediriger la version http vers https, n’hésitez pas à le faire. Ca fonctionne.

Certbot va s’occuper de regénérer automatiquement votre certificat tous les deux à trois mois.

Vous pouvez vérifier que le processus de mise à jour est opérationnel:

certbot renew --dry-run

Happy Webmail !