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
- Téléchargez les deux DVD CentOS 7.0 depuis un miroir près de chez vous (la liste des miroirs peut être trouvée ici : http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7.0-1406-x86_64-DVD.iso.
- Une connexion Internet rapide
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.localdomain6et 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=targetedEnsuite, 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 0Ensuite, 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)
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.