A. Installation d’un serveur rocky

‘image d’installation de rocky’


B Installation d’un service WEB (nginx)

1. Installation des paquets

Nous aurons besoins sur la machine des packages suivants :

  • Nginx
  • Php-fpm
  • Mariadb-server
  • Php
  • Php-mysqlnd

dnf install nginx php-fpm mariadb-server php php-mysqlnd -y

‘image du resultat de la commande’

tips :

  • Le fichier de configuration se trouve dans : /etc/nginx/
  • On retrouvera les logs dans le répertoire : /var/log/nginx/error.log
  • Par défaut, les fichiers pour le site web sont dans le répertoire : /usr/share/nginx/html
  • Si cela ne marche, regarde si le service http estautorisé : firewall-cmd –listservice

2. Ouverture du port http sur notre serveur web

pour ouvrir les port http de notre serveur web on utilise les commqnde suivante :

firewall-cmd --permanent --add-service=http firewall-cmd --reload

‘image résultat de la commande’

3. Démarrage du service nginx et accès a l’interface web

pour démarrer nginx au démarrage de la vm on utilise la commande suivante :

systemctl enable nginx

pour démarrer le service nginx on utiliserq cette commande :

systemctl start nginx

Pour vérifier le status du service nginx on utilisera alors cette commande :

systemctl status nginx

‘resultat des 3 commande’

On peut voir la page http par défaut (index.html) :

‘Image page par defauts nginx’


C. Installation et configuration moteur BDD

1. Démarrage de mariadb et démarrage automatique

pour démarrer mariadb et le démarrer automatiquement au démarrage on utilise cette commande :

systemctl enable --now mariadb.service

‘image du resultat de la commande’

2. configuration du moteur de base

on va maitenant faire la configuration d’installation de mariadb :

myslq_secure_installation

‘image de la config de mariadb’

3. configurqtion de notre bqse de données

On se retrouve ensuite dqns notre BDD, on peut ici créer une BDD :

tips :

  • les commande sont des commande SQL donc on oublie pas le point virgule a la fin de chaque commande.

  • Les mots clé telle que ‘select’ ou encore ‘create’ en language SQL ne sont pas sensible a la casse. Ce qui veut dire que peut importe si ma commande soit ecrite comme ça ‘CREATE DATABASE SRV_WEB;’ ou comme ça ‘create database SRV_WEB;’ cela fonctionnera.

  • Mais attention les nom de base de données, colonnes et tables sont eux sensible a la casse !

create database SRV_WEB;

On créé l’utilisateur :

create user 'riwan_adm'@'localhost' identified by 'jXf/#4U8';

On donne tout les droit a cette utilisateur :

grant all privileges on bdd.* to 'riwan_adm@'localhost';

On recharge les privilèges sans redémarrer mariadb en utilisant cette commande :

flush privileges;

On vérifie que la BDD est bien existante :

show databases;

‘image des resultat des commande’


D. Déploiment du site ecommerce.fr

1. Création du répertoire du site web

tips : Le parametre -p de la commande mkdir permet de créer toute l’arborescence de répertoires. Si les dossier parents n’existe pas, ils seronts créer automatiquement.

exemple : mkdir -p /home/mere/fille

Si le répertoire home et le répertoire mere n’existe pas lors de la creation alors home et mere seront créer.

pour créer un répertoire on utilise la commande ‘mkdir’

mkdir -p /var/WWW/ecommerce.fr

‘resultat de la commande’

2. déplacement du site vers la vm (serveur web)

Pour cela, nous utiliserons WinSCP et nous nous connecterons au serveur web

‘image de la connexion a WinSCP’

une fois connecté on retrouve notre site web sur le PC

‘image de WinSCP avant le déplacement du fichier’

un simple drag and drop de la partie gauche vers la droite est c’est fait.

on déplace le fichier via le ssh directement a la racine de la session

‘image de WinSCP après le déplacement du fichier’

maintenant que le serveur web est dans notre vm on va pouvoir la déplacer de la racine de la session vers notre répertoire ecommerce.fr

on utilisera donc cette commande :

tips : Le paramètre -r permet de deplacé recursivement le repertoire et sont contenu.

En d’autres termes la commande cp ne permet que de déplacer des fichier simple. avec -r on peut copier l’entièreté du répertoire.

cp -r /home/root/PricingSubscription/ /var/www/ecommerce.fr/

‘resultat de la commande’

3. Modification du fichier de configuration du site

Il faut maintenant modifier le fichier de configuration !

pour modifier de fichier on utilisera cette commande :

nano /etc/php-fpm.d/www.conf

tips : Nano n’est pas installer nativement sur les machine Rocky pour l’installer il suffira d’utiliser ette commande :

dnf install -y nano

on modifiera ainsi c’est deux lignes :

RPM: apache user chosen to provide access to the same directories as httpd user = nginx RPM: Keep a group allowed to write in log dir. user = nginx

On peut maintenant activer le démarrage automatique du service nginx :

systemctl enanble --now nginx

4. Création du fichier de configuration nginx

On modifie le fichier avec cette commande :

nano /etc/nginx/conf.d/

on y copie la configuration suivant :

server {
    	listen 80;
        listen [::]:80;

        rout /var/www/ecommerce.fr;
        index index.html index.htm index.nginx-debian.html sign-up.php

        server_name ecommerce.fr ;
location ~* \.php$ {
    fastcgi_pass unix:/run/php-fpm/www.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
    access_log /var/lo/ngnix/acces_ecommerce.fr.log;
    error_log /var/log/nginx/error_ecommerce.fr.log;
    location / {
        try_files $uri $uri/ =404;
    }

}

‘image dans nano de la conf’

On enregistrera le fichier de configuration avec ce nom :

site_commerce.fr.conf

‘image du nom du fichier’

5. Modification du fichier de conf PHP du site ecommerce.fr

toujours avec nano on va modifier ce fichier

nano /var/www/ecomerce.fr/config.php

et on viendra y coller ceci :

<?php
$SETTINGS["mysql_user"]='riwan_adm';
$SETTINGS["mysql_pass"]='jXf/#4U8';
$SETTINGS["hostname"]='localhost';
$SETTINGS["mysql_database"]='SRV_WEB';
$SETTINGS["data_table"]='registrations';
$SETTINGS["paypal_address"]='email@domain.com';
?>

6.Exécution d’un script SQL dans la BDD

On affiche les bases de données puis on sélectionne celle de notre site web

show databases; 
 
use SRV_WEB;

‘image resultat de commande’

puis on execute le script de création de la base de données

source /var/www/ecommerce.fr/database.sql;

‘image resultat commande’

on redémarre ensuite le service nginx :

systemctl restart nginx.service

Dépannage en cas de problème :

  • il faudra surement stoppé le service httpd pour ça on utilisera la commande suivante : systemctl disable --now httpd puis : systemctl start nginx

7. Changement du dns du PC pour pointer vers le site ecommerce.fr

il faudra ouvrir le fichier C:\\Windows\System32\drivers\etc\hosts avec un IDE puis ajouter cette ligne en bas du fichier [inseré ici l'ip du serveur web] ecommerce.fr

‘fichier hosts’

on peut maintenant avoir acces au site avec le navigateur internet

‘site internet’

E. Déploiment du site ecommerce.uk

1. création de la version UK du site

on copie le fichier de configuration puis on créer un fichier de configuration pour ecommerce.uk

on utilisera ces commande :

nano /etc/nginx/conf.d/site_commerce.fr.conf
nano /etc/nginx/conf.d/site_commerce.uk.conf

On modifie le server_name dans ce nouveau fichier de conf site_commerce.uk.conf pour pointer vers ecommerce.uk

server_name ecommerce.uk

ne pas oublié de redémarré nginx !

on modifie aussi le fichier hosts du PC en ajoutant cette ligne pour rediriger ecommerce.uk vers l’adresse IP de la VM

[inserez ici l'@Ip de la vm ecommerce.uk]

normalement le site ecommerce.uk est egalement accessible

’navigateur avec en url ecommerce.uk’

on fait une snapshot de la vm pour bien sauvegarder l’avancé du serveur

’lien tuto snapshot’

2. Séparation du site fr et du site uk

On créé un dossier pour le site UK

mkdir /var/www/eccomerce.uk/

puis on copier le contenu du dossier du site fr vers le site uk

cp -r /var/www/ecommerce.fr/* /var/www/ecommerce.uk

ici “*” signifie en bash que tout le contenue du dossier doit etre copié.

on créé un fichier de configuration pour le site UK dans nginx

nano /etc/nginx/conf.d/site_commerce.uk.conf

puis on modifie le fichier sign-up.php

nano /var/www/ecommerce.uk/sign-up.php

<h1>Subscription Sign up Form UK</h1>

ainsi que le fichier de configuration nginx

root /var/www/ecommerce.uk

on redémarre ensuite nginx

F. Restriction accès IP

1. Création d’un fichier de configuration Blacklist IP

on créer le fichier de blacklist

nano /etc/nginx/blockip.conf

On ajoute L’ip du PC

Attention ! Si vous etes sur une VM attention a bien mettre L’adresse IP de la carte VMnet8

deny 192.168.219.1; # Mon poste

on modifie le fichier de configuration du site ecommerce

nano /etc/nginx/conf.d/site_commerce.fr.conf

et on ajoute :

include /etc/nginx/blockip.conf;

on test L’accès :

‘image du navigateur’

on peut commenter la ligne avec notre adresse ip dans le fichier blockip.conf

G. Analyse des logs

Pour simplifier la lecture des logs , nous pouvons utiliser GoAccess.

1. Activation du dépot EPEL

on installe EPEL

dnf install epel-release -y

2. Installation de GoAcces

dnf install goaccess -y
systemctl enable --now 

3. Utilisation de Go Access

Goacces -f /var/log/nginx/acces_ecommerce.fr.log

‘image de la conf’

Vous aurez ensuite accès à une interface lisible afin d’analyser vos logs !

‘image de L’interface’

H. Mise en place du protocole HTTPS

Pour sécuriser la communication entre notre serveur et nos clients, il est impératif de mettre en place du HTTPS qui permettra de chiffrer la communication.

1. Sécurisation d’un service WEB

D’abord, on créé un répertoire

mkdir /etc/ssl/private

Sur lequel on limite les accès

chmod 700 /etc/ssl/private

Cette commande génère un certificat SSL auto-signé et une clé privée pour sécuriser un serveur Nginx avec HTTPS. Elle crée une clé RSA de 2048 bits et un certificat valable un an, stockés respectivement dans /etc/ssl/private/nginx-selfsigned.key et /etc/ssl/certs/nginx-selfsigned.crt. Ce certificat n’est pas validé par une autorité de certification, mais il permet de chiffrer les connexions.

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

Et l’on remplit ces informations :

‘screen des info’

Cette commande génère des paramètres Diffie-Hellman de 2048 bits pour renforcer la sécurité des connexions SSL/TLS. Le fichier généré (/etc/ssl/certs/dhparam.pem) est utilisé par les serveurs web comme Nginx ou Apache pour sécuriser l’échange de clés lors des connexions chiffrées.

openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

2. B. Intégration du HTTPS dans le fichier de configuration

nano /etc/nginx/conf.d/site_commerce.fr.conf

Et on ajoute cette conf :

server {
    listen 443 http2 ssl;
    listen [::]:443 http2 ssl;
    ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
    ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    root /var/www/ecommerce.fr/;
    index index.html index.htm index.nginx-debian.html sign-up.php;
    server_name ecommerce.fr ;
    location ~* \.php$ {
        fastcgi_pass unix:/run/php-fpm/www.sock;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
    access_log /var/log/nginx/access_ecommerce.fr.log;
    error_log /var/log/nginx/error_ecommerce.fr.log;
    location / {
        try_files $uri $uri/ =404;
}

}

Pour la version UK :

nano /etc/nginx/conf.d/site_commerce.uk.conf
server {
    listen 443 http2 ssl;
    listen [::]:443 http2 ssl;
    ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
    ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    root /var/www/ecommerce.uk/;
    index index.html index.htm index.nginx-debian.html sign-up.php;
    server_name ecommerce.uk ;
    location ~* \.php$ {
        fastcgi_pass unix:/run/php-fpm/www.sock;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
    access_log /var/log/nginx/access_ecommerce.fr.log;
    error_log /var/log/nginx/error_ecommerce.fr.log;
    location / {
        try_files $uri $uri/ =404;
}

}

Puis on test les fichiers de configuration nginx et on redémarre

nginx -t

systemctl restart nginx.service

Avant d’accéder au site, ne surtout pas oublier d’autoriser le port https dans le firewall de votre machine !

sudo firewall-cmd --add-service=https --permanent

sudo firewall-cmd --reload

Notre site est enfin bien accessible en https pour la version FR et UK !

‘preuve image’

J’observe bien avec Wireshark que la communication est chiffrée !

‘preuve wireshark’

3. Redirection auto http vers https

Pour cela, on ajoute dans les fichiers de conf FR et UK la ligne suivante dans la section du serveur http

juste en dessous de la ligne server_name

Ne pas oublier de le faire dans le FR

return 301 https://$host$request_uri;

On enregistre et quitte, puis on redémarre nginx pour que les modifications soient prises en compte.

I. Mise en place de la haute disponibilité (HAproxy)

Nous allons mettre en place une haute disponibilité de notre service afin qu’il soit accessible en cas d’indisponibilité de notre unique serveur web actuel.

Pour cela, il va nous falloir deux nouvelles machines sous rockylinux :

La première sera un deuxième serveur web : srvweb02

La deuxième sera un serveur HA Proxy : HA-PROXY01

Pour gagner du temps, on peut cloner srvweb01 pour créer srvweb02. Il faudra désactiver la base de données sur srvweb02 pour se connecter à celle de srvweb01. J’accède à mes trois machines en SSH.

1. Configuration de la BDD du srvweb02 cloné

Je me rends sur MariaDB sur mon srvweb02

mysql -u root -p

Puis on supprime la BDD locale qui a également été clonée

show databases;

DROP DATABASE SRV_WEB

‘image de la suppresion de la bdd’

2. Accès de la BDD du srvweb01 au srvweb02

NB : on réalise ces opérations sur srvweb01

D’abord, il va falloir autoriser les connexions extérieures du moteur BDD.

nano /etc/my.cnf.d/mariadb-server.cnf

Et on décommente la ligne bind-address

‘image de la ligne bind-adress’

On quitte puis on sauvegarde.

Et on ouvre le port 3306 sur firewalld

sudo firewall-cmd --add-port=3306/tcp --permanent

sudo firewall-cmd --reload

Et on autorise dans notre base de données la connexion à distance de srvweb02 sur notre bdd de srvweb01

show databases;

grant all on SRV_WEB.* to root@192.168.219.141 identified by 'root'

flush privileges;

On peut alors bien vérifier sur notre srvweb02 l’existence de la BDD appartenant à srvweb01.

‘image de la posibilité de se connecter a la bdd’

3. C. Mise en place d’un serveur HA

On retourne sur notre machine haproxy et on installe les packets suivants :

dnf install haproxy -y

On effectue une copie du fichier de configuration de haproxy avant modification

cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.sample

Puis on modifie notre fichier !

nano /etc/haproxy/haproxy.cfg

Et on ajoute les lignes suivantes au début du fichier

‘image des lignes '

On enregistre puis on quitte le fichier.

Et on active rsyslog en décommentant les lignes dans le fichier suivant

nano /etc/rsyslog.conf

‘image de provides UDP '

On enregistre puis on quitte

On donne ensuite une policy à SElinux

[root@ha-proxy01 ~]# setsebool -P haproxy_connect_any 1

Et on démarre les services haproxy puis rsyslog

systemctl start haproxy

systemctl start rsyslog

NB : ne pas oublier d’ouvrir le port 8080 sur le serv haproxy

Ensuite, on se connecte à l’interface d’administration de haproxy depuis notre navigateur web

Identifiants : haproxy
mot de passe : haproxy

‘image de la connection a l’ha '

On voit alors que notre accès est bien fonctionnel !

‘image apres la connexion '

4. Sécurisation de notre HAproxy

On va mettre en place un certificat auto-signé pour HAproxy

Pour cela on se rend dans le dossier comportant nos certificats

[root@ha-proxy01 ~]# cd /etc/pki/tls/certs

Et on génère notre certificat

openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/pki/tls/certs/haproxy.pem -out /etc/pki/tls/certs/haproxy.pem -days 365

Une fois le certificat généré, on retourne dans notre fichier de configuration HAproxy pour ajouter les lignes suivantes

Dans la section global : ‘image de la section global’

Puis dans la section frontend:

image section frontend

On enregistre et on quitte, puis on redémarre le service HAproxy

firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload
firewall-cmd --add-service=http --permanent
firewall-cmd --reload

image resultat de commande

image du certificat dans le navigateur

On peut alors bien accéder à notre site web en utilisant l’adresse IP de notre HAproxy !

5. Exercices

Pour mettre à l’épreuve notre HAproxy, nous allons faire plusieurs test.

D’abord on teste l’arrêt d’un des serveurs (srvweb01 en l’occurrence)

Image VMWARE image site

On constate après l’arrêt de la machine et le rechargement de la page que le site est toujours bien accessible !

Il existe plusieurs modes de répartition des requêtes :

· Round-robin : Distribue les requêtes de manière alternée entre les serveurs disponibles. (balance roundrobin)

· Least connections : Oriente les requêtes vers le serveur ayant le moins de connexions actives. (balance leastconn)

· Weighted least connections : Similaire à “least connections”, mais permet d’ajuster la charge en fonction des capacités des serveurs. (balance weighted_least_connections)

Par exemple, un serveur peut être configuré avec un poids de 100 et un autre avec 50, influençant ainsi la distribution des requêtes.

J. Mise en place d’un HAproxy BIS

1. Installation d’un deuxième HAproxy

Pour gagner du temps, j’ai cloné mon premier HA et j’ai ensuite renommé son hostname.

On commence par mettre dans le fichier host de notre HAproxy02 l’adresse de chaque machines ainsi que leur nom.

192.168.219.128 srvweb01

192.168.219.141 srvweb02

192.168.219.140 ha-proxy01

192.168.219.143 ha-proxy02

Le curl fonctionne alors bien sur chaque machine (ici web01)

2. Redondance HAproxy

Ouverture du port 80

firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload

Installation de pacemaker sur les 2 HA proxy

dnf --enablerepo=highavailability -y install pacemaker pcs

Et on active le service au démarrage sur les deux machines

systemctl enable --now pcsd

Puis on réalise des ouvertures dans le firewall (sur les deux HA)

sudo firewall-cmd --add-service=high-availability --permanent

firewall-cmd --reload

On créé ensuite un cluster en créant un utilisateur dédié à cet effet sur les deux machines

user : hacluster 
mdp : tphaproxy
passwrd hacluster

Ensuite on réalise l’authentification des noeuds sur les deux machines

pcs host auth ha-proxy01 ha-proxy02

Puis on déploie notre cluster, à faire sur HA01

pcs cluster setup ha_cluster ha-proxy01 ha-proxy02

On démarrage le cluster puis on active le démarrage automatique

PCS cluster start --all
pcs cluster enable --all

On check ensuite l’état de notre cluster

pcs cluster status

image

pcs status corosync

image

pcs status nodes

On peut ensuite vérifier les éventuels erreurs grâce à la commande

crm_verify -L -V

Pour corriger les erreurs, il suffit ici d’entrer la commande suivante

pcs property set stonith-enabled=false

pcs property set no-quorum-policy=ignore

On peut ensuite vérifier le résultat de nos actions avec cette commande

pcs property

3. Création d’une adresse IP virutel (VIP)

Une VIP nous servira à rediriger le trafic sur les deux noeuds

pcs resource create virtual_ip ocf:heartbeat:IPaddr2 ip=192.168.219.150 cidr_netmask=24 op monitor interval=30s

Et on vérifie l’existence de notre nouvelle adresse

pcs status resources

4. Création d’un cluster de ressource maintenance

Sur les deux serveurs, nous allons d’abord devoir récupérer des ressources pour créer l’agent.

On se déplace alors dans le dossier de Heartbeat

cd /usr/lib/ocf/resource.d/heartbeat sudo

Puis on installe l’agent en cherchant la ressource sur ce lien github

curl -O https://raw.githubusercontent.com/thisismitch/clusteragents/master/haproxy

curl -O https://raw.githubusercontent.com/thisismitch/clusteragents/master/haproxy

Puis le rendre exécutable

chmod +X haproxy

Et nous pouvons savoir les agents actuellement disponibles sur le serveur grâce à la commande

pcs resource agents ocf:heartbeat

image

Pour créer notre cluster, on exécute la commande suivante

pcs resource create haproxy systemd:haproxy op monitor interval=10s

On ajoute ensuite une contrainte pour que la VIP et le HAproxy soit opérationnel sur le même noeud en même temps

pcs constraint order virtual_ip then haproxy

image

On peut alors afficher les informations de notre cluster :

pcs status

image

Il devient alors possible d’accéder à notre site web en rentrant l’adresse de notre VIP !

image

image

5. Exercice test de redondance du HAproxy

Ici, on voit que malgré l’arrêt du HA maître (HA01), le site web est toujours bien accessible via la VIP.