Haute disponibilité serveur Web

Haute disponibilité serveur Web

Je vais vous expliquer dans cet article comment sécuriser l’accessibilité de votre serveur Web afin d’avoir une haute disponibilité de celui-ci, avec en prime du load-balancing qui va permettre d’équilibrer la charge entre vos deux serveurs et ainsi obtenir un gain de performance.




Explication

La haute disponibilité est aujourd’hui un enjeu très important. Elle vise à garantir l’accès a un service. Imaginez le manque à gagner éventuel si un site comme amazon venait à être indisponible ne serait-ce que 5 minutes!  La haute disponibilité permet d’assurer le business d’une entreprise, c’est pourquoi il est important de garantir une continuité de service dans celle-ci.

.

Schéma de l’infrastructure

Voici l’infrastructure que nous allons mettre en place pour assurer la disponibilité d’un serveur Web:

Celle-ci contient deux serveurs Web, si l’un des serveur tombe en panne l’autre prendra le relai. Également un serveur PfSense qui va nous permettre d’assurer la haute disponibilité mais aussi d’implémenter le load-balancing sur les serveurs Web. Cela va permettre de gagner en performance. En effet plutôt que d’avoir un serveur actif et un serveur passif, les deux serveurs seront en action s’ils sont disponibles. Voici un aperçu du fonctionnement:

.

Configuration des serveurs Web

Étant donné que la solution implémente deux serveurs Web nous allons synchroniser le contenu de notre site web. Grâce à la mise en place de la synchronisation, lors d’une future modification il sera inutile de la faire sur le second serveur. Nous allons utiliser unison qui permet d’avoir une synchronisation bidirectionnelle, cela signifie que peu importe sur quel serveur sera faite la modification la synchronisation se fera (il n’y pas pas de notion maitre/esclave).

Dans ce tutoriel je vais utiliser la distribution Ubuntu(v16.04) pour mes serveurs Web. Vous pouvez télécharger l’image ISO en cliquant ici. Une fois les deux serveurs installés nous allons les mettre à jour avec les commandes suivantes:

apt-get update
apt-get upgrade

*

Configuration réseau

Nous allons configurer des adresses IP fixes sur nos serveurs Web. Éditez le fichier suivant

nano /etc/network/interfaces

.

Commentez ou supprimez la ligne avec le dhcp et ajoutez les lignes suivantes (exemple pour le serveur Web 1):

iface eth0 inet static
address 192.168.1.4
netmask 255.255.255.0
gateway 192.168.1.254

.

Voici le fichier interface complet:

 

Redémarrez le service réseau avec la commande ci-dessous et refaite la même opération sur le serveur Web 2 en remplaçant l’IP

/etc/init.d/networking restart

.

Installation serveur Web

Il faut maintenant installer le service Apache qui va nous permettre d’avoir un serveur http

apt-get install apache2

*

Une fois apache installé sur les deux serveurs, tapez « localhost » dans votre navigateur Web afin de tester l’installation. Vous devriez arriver sur cette page:

Si vous avez une erreur ou que la page ne s’affiche pas vous pouvez essayer de redémarrer le service avec la commande ci dessous. Si le problème persiste je vous invite à réinstaller apache.

/etc/init.d/apache2 restart

;

Maintenant que apache est fonctionnel, nous allons installer le paquet PHP afin que nos serveurs puissent interpréter ce langage

apt-get install php

.

Une fois PHP installé nous allons créer notre page

cd /var/www/html
nano web.php

.

Dans ce fichier, insérez le code PHP de votre site, pour mon exemple je saisi le code ci-dessous:

 

Testez votre page Web en saisissant localhost/web.php afin de visualiser le contenu de votre page et son rendu.

Pour évitez les futurs problèmes lors de la synchronisation concernant les droits sur le dossier /var/www/html/ . Tapez les deux commandes suivantes sur les deux serveurs:

chown -R VOTRE_NOM_UTILISATEUR_LOCAL /var/www/html/
chmod 755 /var/www/html

.

Configuration synchronisation

Nous allons maintenant installer unison et union-gtk (interface graphique d’unison). Il faut également installer ssh qui est le protocole de communication qui va être utilisé lors de la synchronisation. Faites ces installations sur les deux serveurs.

apt-get install unison
apt-get install unison-gtk
apt-get install ssh

.

Pour que la synchronisation fonctionne, il faut que la version d’unison sur les deux systèmes concernés soit quasi-identique (les deux premiers nombres de la version doivent être les mêmes). Lancez unison.

 

Une fois celui-ci lancé, il faut créer un profil, cliquez sur « Ajouter »

 

Cliquez sur « suivant » sur la prochaine fenêtre vous arriverez sur celle-ci dessous. Entrez votre nom de profil et sa description

 

Sur la page suivante, pour une synchronisation distante sélectionnez « using SSH » et dans les champs plus bas renseigner l’IP du second serveur et le nom d’utilisateur de la machine distante.

 

Sélectionnez ensuite le dossier local qui va être synchronisé, qui est le dossier de notre page web (var/www/html) et le dossier distant (celui du deuxième serveur Web)

Cliquez sur « suivant » puis « terminer ». La création du profil est terminée.

.

Sélectionnez votre profil et cliquez sur « ouvrir ». Saisissez le mot de passe du serveur distant. Vous allez arriver sur la console de l’outil:

 

La liste contient les modifications effectuées devant être synchronisées. Cliquez sur « Go »  pour lancer la synchronisation, la tâche disparaitra de la liste. Si vous ouvrez à nouveau le profil est que cette liste est vide c’est qu’aucune modification n’a été faite et qu’il n’y a pas lieu de refaire une synchronisation.

 

Configuration Pfsense

Nous allons passer à la configuration de PfSense. Vous pouvez télécharger l’image ISO en cliquant ici. Une fois installé, connectez vous à l’interface Web de celui-ci, pour cela tapez l’IP du serveur Pfsense dans votre navigateur. Les identifiants par défaut sont: username: admin, password: pfsense

 

Nous allons commencer par créer un pool qui contiendra nos deux serveurs Web. Pour cela dans le menu en haut allez dans « Services » et sélectionnez « Load Balancer »

 

Sur la page suivante cliquez sur « Add » afin de créer le pool de serveurs

 

Vous arriverez sur la page ci-dessous. Pour le mode laissez « Load Balance », au niveau du port, renseignez 80 (port HTTP). Dans « retry » vous pouvez spécifier le nombre de fois ou Pfsense va essayer de contacter le serveur avant de le déclarer indisponible. Dans la section suivante on renseigne les IP du pool, saisissez les IP des serveurs Web et cliquez sur « Add to pool ». Une fois les champs renseignés cliquez sur « Save »

 

A chaque modification que vous allez faire sur Pfsense pensez à cliquer sur pour que Pfsense prenne vos modifications en compte. Le pool est maintenant créé:

 

Ensuite nous allons créer un serveur virtuel. Dès qu’une personne voudra accéder au site il va utiliser l’IP virtuel. Sa requête arrivera sur le Pfsense, celui-ci renverra ensuite la requête sur l’un des deux serveurs Web. Dans le même onglet cliquez sur « Virtual Servers » puis sur « Add »

 

Vous arriverez sur la page ci-dessous, dans le champ de l’adresse IP indiquez l’adresse IP de l’interface WAN du Pfsense. Pour le port, mettez 80 (port HTTP), pour « Virtual Server Pool » sélectionnez le pool créé précédemment et cliquez sur « Save »

 

La dernière étape consiste à créer une règle sur Pfsense qui va autoriser le trafic HTTP afin de permettre l’accès à notre site Web

 

Cliquez sur pour ajouter une règle. Laissez tout par défaut excepté dans le champ destination. Sélectionnez HTTP (80)

 

La configuration du Pfsense est maintenant terminée. Pour tester le bon fonctionnement saisissez l’adresse IP de l’interface WAN de votre serveur Pfsense sur un équipement connecté sur le réseau WAN de celui-ci

Félicitation votre site web est maintenant sécurisé grâce à la haute disponibilité et a gagné en performance grâce au load-balancing.

À propos de l’auteur

Vincent Krahenbuhl administrator

Passionné d’informatique, ma motivation et ma curiosité m’ont permis de réaliser des études en alternance, tout d’abord en tant que technicien informatique au sein du groupe Edscha puis administrateur réseau au sein de FM Logistic. Fort de ces expériences dans deux entreprises internationales, j’exerce aujourd’hui le rôle d’ingénieur réseau et sécurité chez FM Logistic.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.