Aller au contenu

Installation du webmail

Pour notre serveur, on va se permettre d'installer un client webmail pour que nos utilisateurs puissent accéder à leurs mails depuis n'importe quel navigateur. Ici, nous allons utiliser Roundcube, un des logiciels les plus connus et qui a récemmment eu une belle mise à jour de son interface graphique.

Création de la base de données pour Roundcube

Dans une console, on lance une session administrateur sur notre MariaDB via la commande suivante :

mysql -u root -p

À l'instar de PostfixAdmin, on va également créer une base de données dédiée que l'on va appeler roundcube (pour des raisons pratiques) et lui attribuer un utilisateur dédié qui ne sera utilisé que par lui (le nom d'utilisateur importe peu ici). Ainsi, seul cet utilisateur aura un accès complet à la base de données et seul lui pourra écrire dedans. Pour cela, il suffit alors d'entrer les commandes suivantes :

    CREATE DATABASE roundcube;
    GRANT ALL ON roundcube.* TO 'roundcube'@'127.0.0.1' IDENTIFIED BY 'monsupermotdepasse';
    FLUSH PRIVILEGES;

Notre base de données est maintenant prête pour la suite de l'installation.

Télécharger le logiciel serveur

Rendez vous ensuite sur le site officiel de Roundcube et cliquez sur le bouton Download pour télécharger la dernière version disponible. Pensez bien à prendre la version Complete pour installer tous les composants nécessaire en une seule fois.
Une fois l'archive récupérée, téléversez là sur votre serveur en utilisant votre logiciel et votre protocole favori (je recommande l'usage du SFTP pour des raisons pratiques).

Mettre en place le site

Décompresser l'archive

Après avoir téléversé l'archive de Roundcube sur votre serveur, déplacez la dans le dossier qui servira de racine pour votre webmail (c'est-à-dire le dossier que Nginx va utiliser comme dossier principal). Dans notre cas, nous avons choisi /srv/www/, vu que /srv est couramment utilisé pour stocker des fichiers qui ne doivent pas être modifiés par le système sous UNIX :

sudo mv roundcubemail-1.X.X-complete.tar.gz /srv/www

Note : Au cas où le dossier n'existe pas sur votre serveur, vous pouvez le créer à l'aide de ce couple (ici, nginx est l'utilisateur par défaut de Nginx sous CentOS) :

sudo mkdir /srv/www && sudo chown -R nginx:nginx /srv/www

Attention : Pensez à remplacer les X de la commande par les bons numéros de version de l'archive Roundcube !

Ensuite, on doit extraire l'archive pour installer le tout sur notre serveur dans un dossier dédié qui sera renommé en roundcube et ajusté pour permettre au serveur Web d'accéder à l'application sans problèmes :

sudo tar xvfp roundcubemail-1.X.X-complete.tar.gz && sudo mv roundcubemail-1.X.X roundcube && sudo chown -R nginx:nginx roundcube

Configurer Nginx

La prochaine étape consiste alors à configurer Nginx pour créer notre site et lui indiquer où trouver le dossier de Roundcube pour le faire fonctionner.
Vu que notre serveur Nginx héberge déjà Rspamd et PostfixAdmin pour gérer nos utilisateurs, il suffit simplement de rajouter un autre site dans notre configuration pour obtenir le site web final. Dans cet exemple, on va utiliser un sous-domaine nommé mail pour simplifier la configuration et avoir une adresse facile à retenir.

Créez alors un fichier nommé mail.conf dans le dossier /etc/nginx/conf.d/ et ajoutez le contenu suivant :

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        # Nom de domaine
        server_name mail.votredomaine.xyz;

        # Racine du serveur
        root /srv/www/roundcube/;

        # Options pour le certificat SSL
        ssl_certificate /etc/letsencrypt/live/votredomaine.xyz/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/votredomaine.xyz/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/votredomaine.xyz/fullchain.pem;
        # HSTS and security headers
        add_header Strict-Transport-Security "max-age=15552000; preload";
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Frame-Options SAMEORIGIN;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        add_header Referrer-Policy no-referrer;
        add_header Content-Security-Policy "script-src 'self' 'unsafe-inline' 'unsafe-eval'; frame-src 'self'; object-src 'self'";
        # OCSP
        ssl_stapling on;
        ssl_stapling_verify on;

        # Dossier principal
        location / {
                try_files $uri $uri/ =404;
                index index.php index.html;
                autoindex off;
        }

        # Interdire l'acces aux .htaccess
        location ~ /\.ht {
                deny all;
        }

        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $request_filename;
                include fastcgi_params;
        }

        # Logs
        access_log /var/log/nginx/mail-access.log;
        error_log /var/log/nginx/mail-error.log;
}
server {
        listen 80;
        listen [::]:80;

        # Nom de domaine
        server_name mail.votredomaine.xyz;

        # Redirection vers le HTTPS
        return 301 https://$server_name$request_uri;
}

Lancer la configuration

En cours de rédaction...