Serveur mail (CentOS 7.1) 4/6 : Installation et configuration de Roundcube

Afin de procéder à l’installation de Roundcube, nous devons installer Apache. Pour cela, nous allons taper la commande suivante :

1
# yum install httpd mod_ssl

Avant de modifier le fichier de configuration, nous allons le sauvegarder via la commande suivante :

1
# cp /etc/httpd/conf/httpd.conf{,.ori}

Nous allons éditer le fichier « httpd.conf » pour modifier la configuration d’Apache. Pour cela nous allons taper la commande suivante :

1
# vi /etc/httpd/conf/httpd.conf

On dé-commente la ligne 95 et on la modifie comme suit :

1
ServerName localhost

Certains packages nécessaires par la suite n’étant pas disponible dans les dépôts officiel de CentOS nous allons ajout un nouveau dépôt. C’est le dépôt EPEL. Pour cela nous allons taper la commande suivante :

1
# yum install epel-release

Ajout et configuration du plugin « Yum Priorities »

Afin de ne pas installer des packages qui peuvent mettre à mal la stabilité de notre système nous allons installer le plugin « Yum Priorities ». En temps normal si un paquet est présent dans plus d’un dépôt, c’est le numéro de version le plus haut qui sera proposé dans yum. Ce plugin permet de changer cela et de non plus tenir compte du numéro de version mais de la valeur de la priorité du dépôt. Pour cela, nous allons le faire à l’aide de la commande suivante :

1
# yum install yum-plugin-priorities

Maintenant que le plugin est installé, il faut définir la priorité pour chaque dépôt. La priorité est une valeur de 1 à 99, le dépôt ayant 1 comme priorité étant le plus prioritaire. Les dépôts où la valeur de n’est pas renseignée ont automatiquement la valeur 99. Pour cela, nous allons éditer chaque fichier .repo pour ajouter la ligne priority=XX. Les fichiers de configuration des dépôts se trouvent dans /etc/yum.repo.d/. On édite le fichier via la commande suivante:

1
# vi /etc/yum.repos.d/CentOS-Base.repo

Voici le contenu de mon fichier CentOS-Base.repo après modification :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[base]
name=CentOS-$releasever – Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
priority=1
 
#released updates
[updates]
name=CentOS-$releasever – Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
priority=1

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
priority=1

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
priority=1

Il faut reproduire la même opération pour les fichiers suivant :

  • CentOS-CR.repo
  • CentOS-Debuginfo.repo
  • CentOS-fasttrack.repo
  • CentOS-Media.repo
  • CentOS-Sources.repo
  • CentOS-Vault.repo

Concernant le fichier de configuration du dépôt EPEL, il faudra mettre la priorité à 99, donc la plus basse. Voici le contenu de mon fichier epel.repo après modification :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
priority=99
 
[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch/debug
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1
priority=99
 
[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/epel/7/SRPMS
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1
priority=99

Il faut à nouveau reproduire la même opération pour le fichier epel-testing.repo Nous allons installer le serveur MySQL, ainsi que les dépendances nécessaires via les commandes suivante :

1
2
# yum install php php-xml php-mbstring php-mcrypt php-intl
# yum install mariadb mariadb-server

Sur CentOS, les démons ne sont pas configurés pour se lancer au démarrage de la machine. Nous allons le configurer pour qu’il se lance à chaque démarrage via la commande suivante :

1
# systemctl enable mariadb

Afin de pouvoir lancer l’outil de configuration MySQL, nous devons d’abord démarrer le serveur. Ce que nous allons faire via la commande suivante :

1
# systemctl start mariadb

Maintenant nous pouvons lancer l’outil de configuration MySQL pour configurer le mot de passe de root (« mysql » par exemple), supprimer les utilisateurs anonymes, supprimer les bases de tests et désactiver la possibilité pour root de se connecter à distance via la commande :

1
2
3
4
5
6
7
# /usr/bin/mysql_secure_installation
Enter current password for root (enter for none) : Taper sur la touche Entrer
Set root password? [Y/n] Taper sur la touche Entrer
Remove anonymous users? [Y/n] Taper sur la touche Entrer
Disallow root login remotely? [Y/n] Taper sur la touche Entrer
Remove test database and access to it? [Y/n] Taper sur la touche Entrer
Reload privilege tables now? [Y/n] Taper sur la touche Entrer

Installation des librairies php5-mysql via la commande suivante :

1
# yum install php-mysql

Nous allons créer l’utilisateur ainsi que la base donnée en ligne de commande. Pour cela nous allons nous connecter au serveur MySQL via la commande suivante :

1
# mysql -u root -p

Nous allons créer une base de données « roundcubemail » via la commande suivante :

1
MariaDB [(none)]> CREATE DATABASE IF NOT EXISTS `roundcubemail`;

Nous allons donner tous les droits à l’utilisateur « roundcubemail » sur la base de donnée « roundcubemail » via les commandes suivantes :

1
2
3
MariaDB [(none)]> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcubemail@localhost IDENTIFIED BY 'mySecretPassword';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit

Nous allons récupérer les fichiers d’installation de Roundcube via la commande suivante :

1
# curl -L "http://sourceforge.net/projects/roundcubemail/files/latest/download?source=files" > /tmp/roundcube-latest.tar.gz

Nous allons décompresser l’archive contenant les fichiers d’installation de Roundcube dans le répertoire « /var/www/html » via la commande suivante :

1
# tar -zxf /tmp/roundcube-latest.tar.gz -C /var/www/html/

Nous allons renommer le répertoire « roundcubemail-* » en « roundcube » appliquer les bons droits via les commandes suivantes :

1
2
3
4
# mv /var/www/html/roundcubemail-* /var/www/html/roundcube
# chown root: -R /var/www/html/roundcube/
# chown apache: -R /var/www/html/roundcube/temp/
# chown apache: -R /var/www/html/roundcube/logs/

Nous allons récupérer le fichier mime.types nécessaire au bon fonctionnement de Roundcube, puis lui appliquer les bons droits via les commandes suivantes :

1
2
# curl http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types > /var/www/html/roundcube/mime.types
# chown root:apache /var/www/html/roundcube/mime.types

On créé le fichier de configuration du VirtualHost :

1
# vi /etc/httpd/conf.d/roundcube.conf

Nous allons y copier les lignes suivantes :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<VirtualHost *:80>
     ServerName www.mon-domaine.fr
     Redirect permanent / https://www.mon-domaine.fr/
</VirtualHost>

<VirtualHost *:443>
     SSLEngine on
     SSLCertificateFile /etc/pki/tls/certs/mon-domaine.fr.crt
     SSLCertificateKeyFile /etc/pki/tls/private/mon-domaine.fr.key
     ServerName www.mon-domaine.fr
     DocumentRoot /var/www/html/roundcube/
     <Directory /var/www/html/roundcube/>
          Options -Indexes
          AllowOverride All
     </Directory>
     <Directory /var/www/html/roundcube/bin/>
          Order Allow,Deny
          Deny from All
     </Directory>
     <Directory /var/www/html/roundcube/config/>
          Order Deny,Allow
          Deny from All
     </Directory>
     <Directory /var/www/html/roundcube/plugins/enigma/home/>
          Order Allow,Deny
          Deny from All
     </Directory>
     <Directory /var/www/html/roundcube/temp/>
          Order Deny,Allow
          Deny from All
     </Directory>
     <Directory /var/www/html/roundcube/logs/>
          Order Deny,Allow
          Deny from All
     </Directory>
     ErrorLog /var/log/httpd/roundcube/error.log
     CustomLog /var/log/httpd/roundcube/access.log combined
     ServerSignature Off
</VirtualHost>

On vérifie qu’il n’a pas d’erreur dans notre fichier de configuration du virtualhost Apache que nous venons de créer via commande suivante :

1
# apachectl -t

Nous allons créer les tables nécessaires au fonctionnement de Roundcube via le script présent dans le package que nous avons installé :

1
# mysql -u roundcubemail -p roundcubemail < /var/www/html/roundcube/SQL/mysql.initial.sql

Avant de modifier le fichier de configuration, nous allons le sauvegarder via la commande suivante :

1
# cp /etc/php.ini{,.ori}

Nous allons éditer le fichier de configuration de PHP  pour paramétrer le bon fuseau horaire via la commande suivante :

1
# vi /etc/php.ini

On dé-commente et on modifie la ligne 878 comme suit :

1
date.timezone = Europe/Paris

Nous allons créer le répertoire qui contiendra les fichiers de log de Roundcube via la commande suivante :

1
# mkdir /var/log/httpd/roundcube

Nous allons redémarrer Apache pour prendre en compte les modifications, via la commande suivante :

1
# systemctl start httpd

Sur CentOS, les démons ne sont pas configurés pour se lancer au démarrage de la machine. Nous allons le configurer pour qu’il se lance à chaque démarrage via la commande suivante :

1
# systemctl enable httpd

Nous allons maintenant ajouter les règles « firewalld » via les commandes suivantes :

1
2
# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --permanent --zone=public --add-service=https

Maintenant que les règles « firewalld » sont créés, il faut les activer. Pour cela, nous allons taper la commande suivante :

1
# firewall-cmd --reload

Nous allons modifier le contexte SELinux pour autoriser Apache à se connecter au réseau de la machine pour pouvoir envoyer des mails via la commande suivante :

1
# setsebool -P httpd_can_network_connect=1

Afin de pouvoir modifier le contexte SELInux du répertoire /var/vmail/, nous devons installer l’utilitaire « semanage ». Pour cela, nous allons taper la commande suivante :

1
# yum install policycoreutils-python

Nous allons modifier le contexte SELinux du répertoire /var/vmail afin de permettre à Dovecot d’écrire à l’intérieur, via les commandes suivantes :

1
2
# semanage fcontext -a -t mail_home_rw_t "/var/vmail(/.*)?"
# restorecon -v /var/vmail/

Activation du SSL dans Dovecot et Postfix

Afin d’activer le prise en charge de SSL dans Dovecot, nous allons éditer le fichier « 10-ssl.conf », via la commande suivante :

1
# vi /etc/dovecot/conf.d/10-ssl.conf

Nous allons modifier la ligne 8 comme suit :

1
ssl = required

Nous allons modifier le chemin des certificats SSL aux lignes 14 et 15 comme suit :

1
2
ssl_cert = </etc/pki/tls/certs/mon-domaine.fr.crt
ssl_key = </etc/pki/tls/private/mon-domaine.fr.key

Nous allons redémarrer Dovecot pour prendre en compte les modifications via la commande suivante :

1
# systemctl restart dovecot

Nous allons vérifier que les protocoles POP3S et IMAPS sont bien actifs dans Dovecot, via la commande suivante :

1
ss -tpl | grep -E 'imaps|pop3s'

Voilà ce que doit retourner la commande :

1
2
3
4
5
6
7
8
LISTEN 0 100 *:imaps *:*
users:(("imap-login",19615,9),("dovecot",19613,38))
LISTEN 0 100 *:pop3s *:*
users:(("dovecot",19613,25))
LISTEN 0 100 :::imaps :::*
users:(("imap-login",19615,10),("dovecot",19613,39))
LISTEN 0 100 :::pop3s :::*
users:(("dovecot",19613,26))

Maintenant que SSL est activer dans Dovecot, nous allons l’activer dans Postfix. Nous allons éditer le fichier de configuration de Postfix « main.cf », via la commande suivante :

1
# vi /etc/postfix/main.cf

On ajoute les lignes suivantes à la fin du fichiers :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = $smtpd_sasl_security_options
smtpd_sasl_local_domain = $mydomain
broken_sasl_auth_clients = yes

smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/tls/certs/mon-domaine.fr.crt
smtpd_tls_key_file = /etc/pki/tls/private/mon-domaine.fr.key
smtpd_tls_loglevel = 3
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

Nous allons éditer le fichier « master.cf » via la commande suivante :

1
# vi +/smtps /etc/postfix/master.cf

On dé-commente les lignes 26 à 29 comme ci-dessous :

1
2
3
4
smtps inet n - n - - smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes

Nous allons redémarrer Postfix pour prendre en compte les modifications via la commande suivante :

1
# systemctl restart postfix

Nous allons vérifier que le protocole SMTPS sont bien actifs dans Postfix, via la commande suivante :

1
ss -tnpl | grep 465

Voilà ce que doit retourner la commande :

1
2
3
4
LISTEN 0 100 *:465 *:*
users:(("master",5127,22))
LISTEN 0 100 :::465 :::*
users:(("master",5127,23))

Nous allons modifier le contexte SELinux des répertoires /var/www/html/roundcube/logs et /var/www/html/roundcube/temp afin de permettre à Apache d’écrire à l’intérieur, via les commandes suivantes :

1
2
3
4
# semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/roundcube/logs(/.*)?"
# semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/roundcube/temp(/.*)?"
# restorecon -v /var/www/html/roundcube/logs
# restorecon -v /var/www/html/roundcube/temp

Afin de pouvoir accéder à votre site via l’url https://www.mon-domaine.fr, il faut ajouter une ligne au fichier « /etc/hosts ». Pour cela on édite le fichier via la commande suivante :

1
# vi /etc/hosts

Puis ajouter la ligne suivante :

1
xxx.xxx.xxx.xxx www.mon-domaine.fr

Maintenant nous pouvons lancer la configuration de Roundcube. Pour cela on lance un navigateur et on se connecte à l’adresse https://www.mon-domaine.fr/. On clique sur « Next »
On rempli les champs comme suit :

  • Database name : roundcubemail
  • Database user name : roundcubemail
  • Database password : mySecretPassword
  • default_host : ssl://localhost
  • default_port : 993
  • sent_mbox : Envoyés
  • trash_mbox : Corbeille
  • drafts_mbox : Brouillons
  • junk_mbox : Spams
  • smtp_server : ssl://localhost
  • smtp_port : 465
  • Cocher Use the current IMAP username and password for SMTP authentification
  • language : fr_FR
  • Cocher preview_plane if preview plane is enabled
  • Compose HTML formatted messages : always

Cliquer sur « Create config »
Nous allons créer le fichier de configuration de Roundcube via la commande suivante :

1
# vi /var/www/html/roundcube/config/config.inc.php

On copie le contenu de la fenêtre dans le fichier comme indiquer dans la fenêtre. On édite le fichier /var/www/html/roundcube/config/defaults.inc.php via la commande suivante :

1
# vi /var/www/html/roundcube/config/defaults.inc.php

On modifie la ligne 533 comme suit :

1
$config['mime_types'] = '/var/www/html/roundcube/mime.types';

On clique sur « Continue ». Nous allons maintenant vérifier le bon fonctionnement du serveur SMTP en entrant les information suivantes dans les cases prévu :

Nous allons maintenant vérifier le bon fonctionnement du serveur SMTP en entrant les information suivantes dans les cases prévu :

Nous allons redémarrer le serveur Apache pour prendre en compte les modifications, via la commande suivante :

1
# systemctl restart httpd

Maintenant, notre serveur mail ainsi que son interface web sont opérationnel. Nous pouvons nous connecter à l’adresse https://www.mon-domaine.fr/ avec l’utilisateur précédemment créé :