Portail / Mise en place d'un système de messagerie sous Debian 11 (serveur avec accès direct à internet)(Sommaire)

Installation du webmail Roundcube avec Debian 11 et PostgreSQL.

Mise à jour du 18/12/2021.

L'installation de l'application web Roundcube ne peut être faite qu'après que vous disposiez d'un MTA (serveur de messagerie) opérationnel. Notez que si nous utilisons Postfix, Roundcube fonctionnera tout aussi bien avec d'autres types de MTA (sendmail, exim, etc.). Pour fonctionner, l'application a besoin de 3 composants :

Bien entendu, il existe une grande variété d'autres combinaisons mais nous nous limiterons à celle décrite ici. De plus, n'oubliez pas qu'en tant qu'application web PHP, Roundcube fera l'objet d'un grand nombre d'attaques. PHP est actuellement (2021), la plate-forme la plus répandue et logiquement la plus attaquée. Outre les divers mécanismes de protection comme Fail2ban, le fichier /var/lib/roundcube/.htaccess devra être observé et complété avec soin.

Installation de l'application web.

Pour installer l'application, il y a 2 méthodes 

  1. Télécharger un paquet compressé puis le décompresser sur votre serveur ;
  2. Faire appel au gestionnaire de paquets Debian via la commande apt.

Le web fourmille d'indications pour l'installation depuis la première méthode. C'est celle que vous devez utiliser si vous souhaitez disposer de la dernière version.

L'inconvénient de l'approche précédente et que vous devrez suivre vous-même l'évolution en versions de l'application afin de réaliser les mises à jour. Nous préférons avoir une approche plus professionnelle. Le gestionnaire de paquets Debian permet de réaliser ces mises à jour automatiquement sur une version dont la stabilité a été sérieusement testée pour cette distribution. Si vous faites attention à ne pas écrire dans des fichiers de configuration écrasés lors de la mise à jour (les commentaires de ces fichiers l'indiquent clairement), la mise à hauteur est alors quasiment automatique.

Avant de procéder à l'installation, vous devez décider si vous laisser l'installateur créer interactivement la base PostgreSQL ou bien la créer vous-même par la suite grâce au script /usr/share/dbconfig-common/data/roundcube/install/pgsql.
Si vous laissez faire l'installateur, le compte Linux postgresne doit pas être verrouillé et le rôle de base de données postgres doit être autorisé à se connecter (droit LOGIN).
Dans tous les cas, vous devez définir le mot de passe en base de données du rôle roundcube et connaître le mot de passe du compte postgres. Sans cela, le création automatique du rôle de base de données roundcubeet la création du schéma roundcube échoueront (en cas d'échec, l'installateur propose de recommencer).

L'installation se limite alors à la frappe de la commande :

apt install roundcube roundcube-pgsql roundcube-plugins roundcube-plugins-extra

Le référencement des composants PHP nécessaires et qui ne seraient pas déjà installés le seront alors d'office. Ici nous avons laisser l'installeur créer le rôle roundcubeet la création du schéma roundcube. Nous ne décrirons donc pas l'exécution du script /usr/share/dbconfig-common/data/roundcube/install/pgsqlqui dans les faits exécute ce travail.

Configuration de l'application web.

Nous allons agir sur certains fichiers de configuration que nous conseillons de sauvegarder avant de les modifier :

cp /etc/roundcube/config.inc.php /etc/roundcube/config.inc.php.bak
cp /etc/apache2/conf-enabled/roundcube.conf /etc/apache2/conf-enabled/roundcube.conf.bak

Nous modifierons également les fichiers Apache /etc/apache2/sites-enabled/000-default.conf et /etc/apache2/sites-enabled/000-default-le-ssl.conf. Ces fichiers devraient déjà avoir été sauvegardé (2ème modification de leur configuration).

Dans le fichier /etc/apache2/sites-enabled/000-default-le-ssl.conf nous modifions le chemin d'accès du site virtuel SSL pour le faire pointer vers l'application web.

# Accès TLS au site mail.piapp.fr
<IfModule mod_ssl.c>
  <VirtualHost *:443>
    ServerName mail.piapp.fr
    ServerAdmin admin@piapp.fr
    DocumentRoot /var/lib/roundcube
    LogLevel info
    ErrorLog ${APACHE_LOG_DIR}/error-mail.log
    CustomLog ${APACHE_LOG_DIR}/access-mail.log combined
    SSLCertificateFile /etc/letsencrypt/live/mail.piapp.fr/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/mail.piapp.fr/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
  </VirtualHost>
</IfModule>

Dans le fichier /etc/apache2/sites-enabled/000-default.conf nous modifions le chemin d'accès du site virtuel avec transport non chiffréSL pour le faire pointer vers l'application web.

# Site mail.piapp.fr
<VirtualHost *:80>
  ServerName mail.piapp.fr
  ServerAdmin admin@piapp.fr
  DocumentRoot /var/lib/roundcube
  LogLevel info
  ErrorLog ${APACHE_LOG_DIR}/error-mail.log
  CustomLog ${APACHE_LOG_DIR}/access-mail.log combined
  Redirect permanent / https://mail.piapp.fr
</VirtualHost>

Enfin, pour en finir avec le côté Apache, il faut créer l'alias de chemin qui permet à Apache de se connecter à l'application web. Pour cela ouvrez le fichier /etc/apache2/conf-enabled/roundcube.conf :

[ligne 3] Alias /mail /var/lib/roundcube/public_html

Vous pouvez changer /mail par l'alias de chemin que vous voulez.

Si vous avez utilisé l'installateur pour créer le rôle et le schéma de la base de données, vérifiez ensuite que les paramètres du fichier /etc/roundcube/debian-db.php sont corrects. Notez le mot de passe en clair du rôle roundcube dans ce fichier. Il est donc à protéger de façon à ce que des yeux indiscrets ne prennent la main sur votre base de données. Ceci dit, si PostgreSQL est installé sur le même serveur, il suffit d'interdire l'accès depuis l'extérieur au serveur et le tour est joué.

L'essentiel de la configuration s'opère dans le fichier /etc/roundcube/config.inc.php.

[ligne 36] $config['default_host'] = 'tls://mail.piapp.fr';
[ligne 48] $config['smtp_server'] = 'localhost';
[ligne 51] $config['smtp_port'] = 465;
[ligne 63] $config['support_url'] = 'https://www.piapp.fr/{chemin spécifique au support offert à vos utilisateurs}'
[ligne 66] $config['product_name'] = 'Webmail PiApplications';

Notez que les lignes 36 et 51 doivent être cohérentes. A la ligne 36 on impose le mode SUBMISSION (TLS direct sans STARTTLS), à la ligne 51 le N° de port doit correspondre à ce protocole de transport. La mention à la ligne 66 apparaît au bas des champs de saisie des paramètres de connexion.

Relancer le serveur Apache via la commande systemctl restart apache2.

Rédaction par Jean-Marie Piatte (1983-2021)