Solution de serveur de courrier électronique auto-hébergé (partie 6) : Installation de roundcube

Introduction:

Toujours dans ma série d'articles sur le courrier électronique, nous allons maintenant voir une partie émergée de l'iceberg: le webmail. Je sais, c'est à la mode en ce moment (et depuis quelques années déjà): pour l'utilisateur lambda, envoyer un email passe le plus souvent par le web. Si l'idée n'est pas stupide au départ, on voit qu'elle a pris une grande part des habitudes des utilisateurs. Ceci n'est pas sans conséquence sur les flux sur Internet et également sur leur vie privée. En effet, en règle générale, un service de webmail est proposé par différentes sociétés, souvent gratuitement.

L'ennui c'est que souvent, ces sociétés vont jusqu'à lire votre correspondance privée et ceci à des fins non techniques. Par exemple, les comptes GMail sont lus (par des programmes certes) pour mieux vous cibler afin de vous envoyer un tas de publicités (j'ajoute "à la con" même si c'est un pléonasme). Dans le monde réel, LaPoste n'ouvre pas vos lettres sauf en cas de problème technique ! Si votre employeur se met à lire vos emails non professionnels reçus sur votre boîte professionnelle, il viole le secret de la correspondance privée et est passible de poursuites ! Mais, dans le cas des fournisseurs de webmail que je cite plus haut, la règle n'est pas la même: les utilisateurs vendent le contenu de leur vie privée contre un hébergement.

Néanmoins Madame Michu se doute bien qu'héberger un service de courrier électronique, c'est compliqué et qu'il faut bien que ces entreprises se rémunèrent... Ce n'est pas tout à fait faux mais à quel prix ! Pour ma part, l'aspect technique ne me fait pas peur et cette série d'articles représente mon effort pour régler ce problème: se passer de GMail ! Et on va voir que mettre en place un webmail, après avoir configuré un vrai serveur SMTP, c'est hyper-simple...

Installation:

Roundcube est packagé pour Debian. C'est un paquet qui semble assez bien maintenu car la version 0.5 a été backportée pour Squeeze. Pour pouvoir en profiter, vous devez avoir configuré le dépôt de rétroportage officiel de Debian en ajoutant la ligne suivante dans votre fichier /etc/apt/sources.list:

# Dépôt Backport officiel:
deb http://backports.debian.org/debian-backports squeeze-backports main

Ensuite, un simple aptitude update && aptitude -t squeeze-backports install roundcube vous permettra d'installer la bête. Attention, roundcube est développé en PHP et il repose sur quelques autres paquets. Compter environ 40Mo d'occupé pour un serveur web sans PHP5 déjà installé. Sur une machine comme un SheevaPlug, ce n'est pas rien ! Cette taille (plus le fait qu'il faille PHP) m'a fait longuement hésité avant d'installer roundcube. Mais comme ce logiciel semble être un poil au dessus des autres, j'ai cédé pour voir...

De plus, roundcube a besoin d'une base de données. C'est aussi un truc qui me dépasse, surtout pour mes besoins (qui sont quasi monoutilisateurs): avoir besoin d'un SGBD pour gérer des fichiers en Maildir... Mais bon, pas le choix !

L'installation vous demande si vous désirez configurer roundcube avec dbconfig-common. Pour ma part, j'ai répondu oui à cette question et j'ai choisi une base de données en SQLite, quand même moins lourde que MySQL ou PostgreSQL ! L'intérêt de dbconfig-common est qu'il créé la base de données avec le bon schéma pour vous.

Configuration:

Une fois le paquet installé, il faut le configurer. Pour ma part, voici mes exigences:

  • le webmail doit être accessible via l'url https://serveur/email.
  • il ne doit être accessible que par HTTPS (forcément chiffré).
  • il doit s'adapter à la configuration de mon serveur IMAP (dont les identifiants de connexion sont virtuels).

En terme de fichiers, voici comment roundcube est configuré:

  • /etc/roundcube/apache.conf: contient un exemple de configuration pour Apache2. Attention, ce fichier est la cible de l'alias de /etc/apache2/conf.d/roundcube. Pensez à supprimer ce lien si vous voulez faire une configuration précise pour Apache.
  • /etc/roundcube/htaccess: fichier htaccess pour gérer l'accès à l'interface web.
  • /etc/roundcube/debian-db.php: contient le paramétrage de l'accès à la base de données (SQLite) de roundcube.
  • /etc/roundcube/main.inc.php: fichier de configuration principal de roundcube.
  • /etc/roundcube/db.inc.php: fichier de paramétrage de la base de données de roundcube.

En ce qui concerne l'accès par Apache, voici une rapide configuration (à adapter à votre installation spécifique) à base d'alias que j'ai ajouté à ma configuration de site web SSL (et non à celui par défaut):

# Installation de Roundcube:
Alias /email/program/js/tiny_mce/ /usr/share/tinymce/www/
Alias /email /var/lib/roundcube

# Access to tinymce files
<Directory "/usr/share/tinymce/www/">
  Options Indexes MultiViews FollowSymLinks
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

<Directory /var/lib/roundcube/>
  Options +FollowSymLinks
  # This is needed to parse /var/lib/roundcube/.htaccess. See its
  # content before setting AllowOverride to None.
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>

# Protecting basic directories:
<Directory /var/lib/roundcube/config>
  Options -FollowSymLinks
  AllowOverride None
</Directory>

<Directory /var/lib/roundcube/temp>
  Options -FollowSymLinks
  AllowOverride None
  Order allow,deny
  Deny from all
</Directory>

<Directory /var/lib/roundcube/logs>
  Options -FollowSymLinks
  AllowOverride None
  Order allow,deny
  Deny from all
</Directory>

Le fichier /etc/roundcube/debian-db.inc.php est généré par dbconfig-common. Vous n'avez pas besoin d'y toucher. Idem pour le fichier db.inc.php. Celui-ci configure les noms de tables à interroger pour récupérer les éléments spécifiques à chaque utilisateur.

Reste donc le fichier principal main.inc.php. Il est assez long et on y trouve de nombreux éléments. Voici quelques-uns de ceux que j'ai modifié pour que ça fonctionne:

// Vous devez mettre le nom de votre serveur IMAP
// Vous pouvez mettre plusieurs serveurs (cf: http://trac.roundcube.net/wiki/Howto_Config)
// Dans mon cas, la connexion se fait sur localhost
// J'ai utilisé ssl:// et non tls:// car ça ne fonctionnait pas !
$rcmail_config['default_host'] = 'ssl://localhost';

// Port TCP utilisé par défaut. Comme on est sur du ssl, j'ai mis 993.
$rcmail_config['default_port'] = 993;

// Vous ne voulez pas permettre la configuration en ligne:
$rcmail_config['enable_installer'] = false;

// Aucun intérêt à mettre en cache (dans la DB) du contenu local !
$rcmail_config['enable_caching'] = false;

// On impose l'utilisation du HTTPS:
$rcmail_config['force_https'] = true;

// Permet l'enregistrement du login/password dans le navigateur web:
$rcmail_config['login_autocomplete'] = 2;

// Le nom des titres de page web affichées
$rcmail_config['product_name'] = 'Poste électronique sur medspx.fr';

// Ne permettre aux utilisateurs de n'avoir qu'une seule identité:
$rcmail_config['identities_level'] = 3;

A noter que je n'ai rien configuré au niveau du serveur SMTP, roundcube semble utiliser la commande sendmail par défaut. Comme cette dernière est configurée pour utiliser notre serveur Exim4, il n'y a aucun problème. Finalement, le système global du courrier électronique séparé en parties uniques avec chacune son rôle est plutôt intéressant. Si cette organisation avait été monolithique, il aurait fallu configurer roundcube plus finement, voire qu'il dispose de son propre serveur SMTP.

Vous le voyez, il ne faut pas grand chose pour que Roundcube fonctionne: il faut juste configurer le serveur IMAP par défaut (et encore) et ça fonctionne out-of-the-box. Malgrès ça, il est possible de fortement personnaliser le programme ce qui est une bonne chose.

Enregistrement des utilisateurs:

Un des défauts de Roundcube est de se reposer sur une base de données pour fonctionner. Même si nous utilisons SQLite, il faut tout de même créer un compte utilisateur dans la base de données de Roundcube. Comme je n'avais qu'un nombre réduit de comptes à renseigner, voici comment j'ai procédé: j'ai utilisé la fonction d'auto enregistrement.

Si vous activez le paramètre: $rcmail_config['auto_create_user'] = true alors n'importe quel utilisateur ayant un compte valide sur votre serveur IMAP pourra se créer un compte sur Roundcube. Pour ma part, et pour des questions de simplicité, j'ai mis ce paramètre à false une fois que j'ai enregistré mon compte unique de serveur IMAP. Au moins de tout, je sais qu'à priori, personne d'autre ne peut plus se créer de compte Roundcube.

Conclusion:

Après avoir testé le logiciel pendant quelques semaines, voici quelques remarques sur son utilisation:

  • L'interface de base est sobre et bien pensée.
  • Les temps de latence sont quand même un peu longs. Rien à voir avec Mutt qui est quand même plus versatile et plus réactif.
  • Le javascript charge bien ma machine lorsque je souhaite choisir un message ou en supprimer un (50% de CPU pour accéder aux emails).
  • Par défaut, Roundcube recréé les répertoires IMAP dont il a besoin (Corbeille, envoyés).
  • On peut envoyer des emails et c'est plutôt pratique en déplacement même si c'est moins performant que Mutt.
  • Un truc sympathique: l'affichage en HTML. Si c'est le mal pour le courrier électronique, c'est une fonctionnalité intéressante pour la lecture des flux RSS/Atom livrés par feed2imap. Ca permet de les récupérer dans un format lisible avec un peu d'images et comme on est déjà dans un navigateur web, ça ne pose pas de soucis.

Pour terminer, j'ai plutôt un avis positif sur Rouncube. Sa configuration est assez simple et sa prise en charge sous Debian est bien menée. Il est assez simple d'utilisation et, pour mes besoins, il vaut largement GMail !