Serveur Parfait · 13 min read · Oct 02, 2025

Le Serveur Parfait - CentOS 7 x86_64 (nginx, Dovecot, ISPConfig 3)

Le Serveur Parfait - CentOS 7 x86_64 (nginx, Dovecot, ISPConfig 3)

Version 1.0
Auteurs : Till Brehm, Srijan Kishore et Falko Timme
Suivez howtoforge sur Twitter

Ce tutoriel montre comment préparer un serveur CentOS 7 x86_64 pour l’installation d’ISPConfig 3, et comment installer ISPConfig 3 dessus. ISPConfig 3 est un panneau de contrôle d’hébergement web qui vous permet de configurer les services suivants via un navigateur web : serveur web nginx, serveur de messagerie Postfix, MySQL, serveur de noms BIND, PureFTPd, SpamAssassin, ClamAV, Mailman, et bien d’autres. Depuis la version 3.0.4, ISPConfig prend en charge le serveur web nginx en plus d’Apache ; ce tutoriel couvre la configuration d’un serveur qui utilise nginx, pas Apache. Le tutoriel parfait du serveur ISPConfig 3 pour Apache est disponible ici.

Manuel ISPConfig 3

Pour apprendre à utiliser ISPConfig 3, je recommande fortement de télécharger le Manuel ISPConfig 3.

Sur environ 300 pages, il couvre le concept derrière ISPConfig (administrateur, revendeurs, clients), explique comment installer et mettre à jour ISPConfig 3, inclut une référence pour tous les formulaires et champs de formulaire dans ISPConfig avec des exemples d’entrées valides, et fournit des tutoriels pour les tâches les plus courantes dans ISPConfig 3. Il décrit également comment rendre votre serveur plus sécurisé et comprend une section de dépannage à la fin.

1. Exigences

Pour installer un tel système, vous aurez besoin des éléments suivants

2. Remarque Préliminaire

Dans ce tutoriel, j’utilise le nom d’hôte server1.example.com avec l’adresse IP 192.168.0.100 et la passerelle 192.168.0.1. Ces paramètres peuvent différer pour vous, donc vous devez les remplacer si nécessaire. Veuillez installer l’installation minimale de CentOS 7 à partir de ce lien de tutoriel avant de continuer.

3 Installer l’éditeur nano et ajuster /etc/hosts

yum -y install nano wget

Ensuite, nous éditons /etc/hosts. Faites-le ressembler à ceci :

nano /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.0.100   server1.example.com     server1

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

et définissez le nom d’hôte sur server1.example.com :

echo ‘server1.example.com’ > /etc/hostname

4 Configurer le Pare-feu et installer quelques logiciels réseau de base

(Vous pouvez sauter ce chapitre si vous avez déjà désactivé le pare-feu à la fin de l’installation du système de base.)

Je veux installer ISPConfig à la fin de ce tutoriel qui vient avec son propre pare-feu. C’est pourquoi je désactive le pare-feu par défaut de CentOS maintenant. Bien sûr, vous êtes libre de le laisser activé et de le configurer selon vos besoins (mais dans ce cas, vous ne devriez pas utiliser d’autre pare-feu par la suite car il interférera très probablement avec le pare-feu de CentOS).

Exécutez

systemctl stop firewalld.service
systemctl disable firewalld.service

[root@server1 ~]# systemctl disable firewalld.service

rm ‘/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service’

rm ‘/etc/systemd/system/basic.target.wants/firewalld.service’

[root@server1 ~]#

et désactivez le pare-feu.

Pour vérifier que le pare-feu a vraiment été désactivé, vous pouvez exécuter

firewall-cmd –state

ensuite. La sortie devrait ressembler à ceci :

[root@server1 ~]# firewall-cmd –state
not running
[root@server1 ~]#

yum -y install net-tools NetworkManager-tui

5 Désactiver SELinux

SELinux est une extension de sécurité de CentOS qui devrait fournir une sécurité accrue. À mon avis, vous n’en avez pas besoin pour configurer un système sécurisé, et cela cause généralement plus de problèmes que d’avantages (pensez-y après avoir passé une semaine à résoudre des problèmes parce qu’un service ne fonctionnait pas comme prévu, et ensuite vous découvrez que tout allait bien, seul SELinux causait le problème). C’est pourquoi je le désactive (c’est un must si vous voulez installer ISPConfig plus tard).

Éditez /etc/selinux/config et définissez SELINUX=disabled :

nano /etc/selinux/config

# Ce fichier contrôle l'état de SELinux sur le système.
# SELINUX= peut prendre l'une de ces trois valeurs :
#     enforcing - La politique de sécurité SELinux est appliquée.
#     permissive - SELinux imprime des avertissements au lieu d'appliquer.
#     disabled - Aucune politique SELinux n'est chargée.
SELINUX=disabled
# SELINUXTYPE= peut prendre l'une de ces deux valeurs :
#     targeted - Les processus ciblés sont protégés,
#     mls - Protection de sécurité multi-niveaux.
SELINUXTYPE=targeted

Ensuite, nous devons redémarrer le système :

reboot

6 Activer des Dépôts Supplémentaires et Installer Quelques Logiciels

Nous allons activer les dépôts EPEL sur notre système CentOS car beaucoup des paquets que nous allons installer au cours de ce tutoriel ne sont pas disponibles dans les dépôts officiels de CentOS 7.0 :

yum -y install epel-release

yum -y install yum-priorities

Éditez /etc/yum.repos.d/epel.repo…

nano /etc/yum.repos.d/epel.repo

… et ajoutez la ligne priority=10 à la section [epel] :

[epel]
name=Paquets supplémentaires pour 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
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[...]  

Ensuite, nous mettons à jour nos paquets existants sur le système :

yum update

Maintenant, nous installons quelques paquets logiciels qui sont nécessaires plus tard :

yum -y groupinstall ‘Development Tools’

7 Quota

(Si vous avez choisi un schéma de partitionnement différent de celui que j’ai fait, vous devez ajuster ce chapitre afin que le quota s’applique aux partitions où vous en avez besoin.)

Pour installer le quota, nous exécutons cette commande :

yum -y install quota

Maintenant, nous vérifions si le quota est déjà activé pour le système de fichiers où le site web (/var/www) et les données maildir (var/vmail) sont stockés. Dans cet exemple, j’ai une grande partition racine, donc je cherche ‘ / ‘ :

mount | grep ‘ / ‘

[root@server1 ~]# mount | grep ‘ / ‘
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,noquota)
[root@server1 ~]#

Si vous avez une partition /var séparée, utilisez :

mount | grep ‘ /var ‘

à la place. Si la ligne contient le mot “ noquota “, alors procédez avec les étapes suivantes pour activer le quota.

Activation du quota sur la partition / (racine)

Normalement, vous activeriez le quota dans le fichier /etc/fstab, mais si le système de fichiers est le système de fichiers racine “/“, alors le quota doit être activé par un paramètre de démarrage du noyau Linux.

Éditez le fichier de configuration grub :

nano /etc/default/grub

cherchez la ligne qui commence par GRUB_CMDLINE_LINUX et ajoutez rootflags=uquota,gquota aux paramètres de ligne de commande afin que la ligne résultante ressemble à ceci :

[...]  

GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos/root crashkernel=auto  vconsole.keymap=us rhgb quiet rootflags=uquota,gquota"  
[...]  

et appliquez les modifications en exécutant la commande suivante.

cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg_bak
grub2-mkconfig -o /boot/grub2/grub.cfg

et redémarrez le serveur.

reboot

Maintenant, vérifiez si le quota est activé :

mount | grep ‘ / ‘

[root@server1 ~]# mount | grep ‘ / ‘
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,usrquota,grpquota)
[root@server1 ~]#

Lorsque le quota est actif, nous pouvons voir “ usrquota,grpquota “ dans la liste des options de montage.

Activation du quota sur une partition /var séparée

Si vous avez une partition /var séparée, alors éditez /etc/fstab et ajoutez ,uquota,gquota à la partition / ( /dev/mapper/centos-var) :

nano /etc/fstab

#
# /etc/fstab
# Créé par anaconda le dim 21 sep 2014 16:33:45
#
# Systèmes de fichiers accessibles, par référence, sont maintenus sous '/dev/disk'
# Voir les pages de manuel fstab(5), findfs(8), mount(8) et/ou blkid(8) pour plus d'infos
#
/dev/mapper/centos-root /                       xfs     defaults        1 1
/dev/mapper/centos-var /var                     xfs     defaults,uquota,gquota        1 2
UUID=9ac06939-7e43-4efd-957a-486775edd7b4 /boot                   xfs     defaults        1 3
/dev/mapper/centos-swap swap                    swap    defaults        0 0

Ensuite, exécutez

mount -o remount /var

quotacheck -avugm
quotaon -avug

pour activer le quota.

8 Synchroniser l’Horloge du Système

Il est judicieux de synchroniser l’horloge du système avec un serveur NTP ( n etwork t ime p rotocol) sur Internet. Exécutez simplement

yum -y install ntp

et votre heure système sera toujours synchronisée.

9 Installer MariaDB

Nous allons installer le serveur et le client MariaDB comme suit :

yum -y install mariadb mariadb-server

Nous voulons que le service MariaDB fonctionne au démarrage et démarrer le service comme suit :

systemctl enable mariadb.service
systemctl start mariadb.service

Définissez des mots de passe pour le compte root MySQL :

mysql_secure_installation

[root@server1 ~]# mysql_secure_installation
/usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found

NOTE : L’EXÉCUTION DE TOUTES LES PARTIES DE CE SCRIPT EST RECOMMANDÉE POUR TOUS LES SERVEURS MariaDB EN UTILISATION PRODUCTION !  VEUILLEZ LIRE CHAQUE ÉTAPE ATTENTIVEMENT !

Pour se connecter à MariaDB pour le sécuriser, nous aurons besoin du mot de passe actuel pour l’utilisateur root.  Si vous venez d’installer MariaDB, et vous n’avez pas encore défini le mot de passe root, le mot de passe sera vide, donc vous devriez juste appuyer sur entrer ici. <–ENTRER

Entrez le mot de passe actuel pour root (entrez pour aucun) : <–ENTRER
OK, mot de passe utilisé avec succès, passage à la suite…

Définir le mot de passe root ? [Y/n] <–ENTRER
Nouveau mot de passe : <–votremotdepassemariadb
Ressaisissez le nouveau mot de passe : <–votremotdepassemariadb
Mot de passe mis à jour avec succès !
Rechargement des tables de privilèges..
… Succès !

Par défaut, une installation de MariaDB a un utilisateur anonyme, permettant à quiconque de se connecter à MariaDB sans avoir à avoir un compte utilisateur créé pour eux.  Cela est destiné uniquement à des fins de test, et pour rendre l’installation un peu plus fluide.  Vous devriez les supprimer avant de passer à un environnement de production.

Supprimer les utilisateurs anonymes ? [Y/n] <–ENTRER
… Succès !

Normalement, root ne devrait être autorisé à se connecter que depuis ‘localhost’.  Cela garantit que quelqu’un ne peut pas deviner le mot de passe root depuis le réseau.

Interdire la connexion root à distance ? [Y/n] <–ENTRER
… Succès !

Par défaut, MariaDB est livré avec une base de données nommée ‘test’ à laquelle tout le monde peut accéder.  Cela est également destiné uniquement à des fins de test, et devrait être supprimé avant de passer à un environnement de production.

Supprimer la base de données de test et l’accès à celle-ci ? [Y/n] <–ENTRER

  • Suppression de la base de données de test…
    … Succès !
  • Suppression des privilèges sur la base de données de test…
    … Succès !

Recharger les tables de privilèges garantira que tous les changements effectués jusqu’à présent prendront effet immédiatement.

Recharger les tables de privilèges maintenant ? [Y/n] <–ENTRER
… Succès !

Nettoyage…

C’est tout !  Si vous avez complété toutes les étapes ci-dessus, votre installation de MariaDB devrait maintenant être sécurisée.

Merci d’utiliser MariaDB !
[root@server1 ~]#

10 Installer Dovecot

Dovecot peut être installé comme suit :

yum -y install dovecot dovecot-pigeonhole dovecot-mysql

Créez un fichier dovecot-sql.conf vide et un lien symbolique :

touch /etc/dovecot/dovecot-sql.conf
ln -s /etc/dovecot/dovecot-sql.conf /etc/dovecot-sql.conf

Maintenant, créez les liens de démarrage système et démarrez Dovecot :

systemctl enable dovecot.service
systemctl start dovecot.service

11 Installer Postfix

Postfix peut être installé comme suit :

yum -y install postfix

Ensuite, désactivez Sendmail et démarrez Postfix :

systemctl enable mariadb.service
systemctl start mariadb.service
systemctl stop sendmail.service
systemctl disable sendmail.service
systemctl enable postfix.service
systemctl restart postfix.service

12 Installer Getmail

Getmail peut être installé comme suit :

yum -y install getmail

13 Installer Amavisd-new, SpamAssassin et ClamAV

Pour installer amavisd-new, spamassassin et clamav, exécutez la commande suivante :

yum -y install amavisd-new spamassassin clamav clamd clamav-update unzip bzip2 unrar perl-DBD-mysql

Éditez le fichier de configuration freshclam /etc/freshclam.conf

nano /etc/freshclam.conf

et commentez la ligne “Exemple”

[….]

[….]

Ensuite, nous démarrons freshclam, amavisd, et clamd.amavisd :

sa-update
freshclam
systemctl enable amavisd.service

14 Installer Nginx, PHP5 (PHP-FPM) et Fcgiwrap

Nginx est disponible en tant que paquet pour CentOS 7.0 (depuis EPEL) que nous pouvons installer comme suit :

yum -y install nginx

Si Apache2 est déjà installé sur le système, arrêtez-le maintenant…

systemctl stop httpd.service

… et supprimez les liens de démarrage système d’Apache :

systemctl disable httpd.service

Ensuite, nous créons les liens de démarrage système pour nginx et le démarrons :

systemctl enable nginx.service
systemctl start nginx.service

(Si Apache2 et nginx sont tous deux installés, l’installateur ISPConfig 3 vous demandera lequel vous souhaitez utiliser - répondez nginx dans ce cas. Si l’un de ces deux est installé, ISPConfig fera la configuration nécessaire automatiquement.)

Nous pouvons faire fonctionner PHP5 dans nginx via PHP-FPM (PHP-FPM (FastCGI Process Manager) est une implémentation PHP FastCGI alternative avec quelques fonctionnalités supplémentaires utiles pour les sites de toute taille, en particulier les sites plus fréquentés). Nous pouvons installer php-fpm avec php-cli et quelques modules PHP5 comme php-mysql dont vous avez besoin si vous souhaitez utiliser MySQL depuis vos scripts PHP comme suit :

yum -y install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-pecl-apc php-magickwand php-mbstring php-mcrypt php-mssql php-snmp php-soap php-tidy

Ensuite, nous ouvrons /etc/php.ini…

nano /etc/php.ini

… et changeons le rapport d’erreurs (pour que les avis ne soient plus affichés) :

[...]
;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
error_reporting = E_ALL & ~E_NOTICE
[...]

Définissez également cgi.fix_pathinfo=0 :

nano /etc/php.ini

[...]
; cgi.fix_pathinfo fournit un support *réel* PATH_INFO/PATH_TRANSLATED pour CGI.  PHP's
; le comportement précédent était de définir PATH_TRANSLATED sur SCRIPT_FILENAME, et de ne pas comprendre
; ce qu'est PATH_INFO.  Pour plus d'informations sur PATH_INFO, voir les spécifications cgi.  Définir
; cela à 1 fera en sorte que PHP CGI corrige ses chemins pour se conformer à la spécification.  Un paramètre
; de zéro fait que PHP se comporte comme avant.  La valeur par défaut est 1.  Vous devriez corriger vos scripts
; pour utiliser SCRIPT_FILENAME plutôt que PATH_TRANSLATED.
; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...]

(Veuillez lire http://wiki.nginx.org/Pitfalls pour découvrir pourquoi vous devriez faire cela.)

En plus de cela, afin d’éviter des erreurs comme

[08-Aug-2011 18:07:08] PHP Warning: phpinfo(): Il n’est pas sûr de se fier aux paramètres de fuseau horaire du système. Vous êtes tenu d’utiliser le paramètre date.timezone ou la fonction date_default_timezone_set(). Si vous avez utilisé l’une de ces méthodes et que vous obtenez toujours cet avertissement, vous avez probablement mal orthographié l’identifiant de fuseau horaire. Nous avons sélectionné ‘Europe/Berlin’ pour ‘CEST/2.0/DST’ à la place dans /usr/share/nginx/html/info.php à la ligne 2

… dans /var/log/php-fpm/www-error.log lorsque vous appelez un script PHP dans votre navigateur, vous devez définir date.timezone dans /etc/php.ini :

[...]
[Date]
; Définit le fuseau horaire par défaut utilisé par les fonctions de date
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = "Europe/Berlin"
[...]

Ensuite, créez les liens de démarrage système pour php-fpm et démarrez-le :

systemctl enable php-fpm
systemctl restart php-fpm

PHP-FPM est un processus démon (avec le script d’init /etc/init.d/php-fpm) qui exécute un serveur FastCGI sur le port 9000.

Pour obtenir un support CGI dans nginx, nous installons Fcgiwrap.

Fcgiwrap est un wrapper CGI qui devrait également fonctionner pour des scripts CGI complexes et peut être utilisé pour des environnements d’hébergement partagé car il permet à chaque vhost d’utiliser son propre répertoire cgi-bin.

Comme il n’y a pas de paquet fcgiwrap pour CentOS 7.0, nous devons le construire nous-mêmes. D’abord, nous installons quelques prérequis :

yum -y install fcgi-devel

Maintenant, nous pouvons construire fcgiwrap comme suit :

cd /usr/local/src/
git clone git://github.com/gnosek/fcgiwrap.git
cd fcgiwrap
autoreconf -i
./configure
make
make install

Cela installe fcgiwrap dans /usr/local/sbin/fcgiwrap.

Ensuite, nous installons le paquet spawn-fcgi qui nous permet d’exécuter fcgiwrap en tant que démon :

yum -y install spawn-fcgi

Ouvrez /etc/sysconfig/spawn-fcgi…

nano /etc/sysconfig/spawn-fcgi

… et modifiez le fichier comme suit :

# Vous devez définir certaines options de travail avant que le service "spawn-fcgi" ne fonctionne.
# Si SOCKET pointe vers un fichier, alors ce fichier est nettoyé par le script d'init.
#
# Voir spawn-fcgi(1) pour toutes les options possibles.
#
# Exemple :
#SOCKET=/var/run/php-fcgi.sock
#OPTIONS="-u apache -g apache -s $SOCKET -S -M 0600 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi"

FCGI_SOCKET=/var/run/fcgiwrap.socket
FCGI_PROGRAM=/usr/local/sbin/fcgiwrap
FCGI_USER=apache
FCGI_GROUP=apache
FCGI_EXTRA_OPTIONS="-M 0770"
OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"

Maintenant, ajoutez l’utilisateur nginx au groupe apache :

usermod -a -G apache nginx

Créez les liens de démarrage système pour spawn-fcgi…

chkconfig spawn-fcgi on

… et démarrez-le comme suit :

systemctl start spawn-fcgi

Vous devriez maintenant trouver le socket fcgiwrap dans /var/run/fcgiwrap.socket, appartenant à l’utilisateur et au groupe apache (certains scripts, par exemple Mailman, s’attendent à être exécutés par l’utilisateur/groupe apache, c’est pourquoi nous ne faisons pas fonctionner spawn-fcgi en tant qu’utilisateur/groupe nginx, mais ajoutons nginx au groupe apache).

14.1 Versions PHP Supplémentaires

À partir de l’ISPConfig 3.0.5, il est possible d’avoir plusieurs versions de PHP sur un même serveur (sélectionnables via ISPConfig) qui peuvent être exécutées via FastCGI et PHP-FPM. La procédure de construction de versions PHP supplémentaires sur CentOS est décrite dans ce tutoriel : Comment utiliser plusieurs versions de PHP (PHP-FPM & FastCGI) avec ISPConfig 3 (CentOS 6.3)

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.