Prérequis

  • 4 VM Rocky linux

Installation d’un serveur web

Installation d’un serveur web

Pour installer Nginx, nous allons utiliser la commande:

dnf install nginx -y

Une fois l’installation terminée, nous pouvons démarrer nginx et le faire pour automatiquement au démarrage de la machine avec les commandes:

systemctl enable --now nginx
systemctl start nginx

Nous n’avons toujours pas accès à la page web par défaut de Nginx car le firewall nous bloque

Configuration du firewall de Rocky Linux

Pour ouvrir les ports web sur le firewall, nous devons utiliser les commandes:

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

Nous avons désormais accès à la page nginx par défaut en utilisant l’IP de la machine.

Page de nginx

Nous allons ensuite ajouter notre page web dans le répertoire var/www/html

On créé un fichier index.html avec la commande:

touch index.html

On ajoute notre code dans le fichier puis nous allons dans le répertoire /etc/nginx/conf.d et nous créons un fichier site1.conf, toujours avec la commande:

touch site1.conf

Puis on ajoute le contenu approprié à son installation

server {
    listen       80;
    server_name  nomdedomaine.fr www.nomdedomaine.fr ipduserveurweb;
    root   /var/www/html;
    index  index.html;
    location / {
        try_files $uri $uri/ =404;
    }
    access_log  /var/log/nginx/nomdufichier.access.log;
    error_log   /var/log/nginx/nomdufichier.error.log warn;
}

Fichier de configuration site 1

On redémarre nginx avec la commande:

systemctl restart nginx

On a désormais accès au site web !

Site 1

J’ai spécifié le nom du serveur utilisé dans la page web pour que l’on sache quel serveur est utilisé, cela sera utile plus tard dans le tuto.

On fait la même chose sur une 2e machine pour avoir 2 serveur web

2 serveur web

Utiliser un nom de domaine factice

Vous pouvez également utiliser un nom de domaine factice en modifiant votre fichier hosts, pour y accéder, utilisez le chemin C:\Windows\System32\drivers\etc puis ajoutez ceci en bas du fichier:

IP de la machineNom de domaine utilisé
ip serveur 1nom de domaine
ip serveur 2nom de domaine

Exemple:

Exemple de la structure dans le fichier hosts

Vous aurez accès au site via l’url

Accès au sites via l’url

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.

SSécurisation d’un service WEB

On va commencer par créer un répertoire avec la commande:

mkdir /etc/ssl/private

On va limiter l’accès avec la commande:

chmod 700 /etc/ssl/private

Puis nous allons générer un certificat avec la commande:

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

résultat commandes openssl req …

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 dhparam -out /etc/ssl/certs/dhparam.pem 2048

Génération des paramètres DH

Intégration du HTTPS dans le fichier de configuration

On accède au fichier de configuration nginx de notre site avec la commande:

nano /etc/nginx/conf.d/nomdusite.conf

et on ajoute cette configuration

server {
    listen       80;
    server_name  nomdedomaine.fr www.nomdedomaine.fr ipduserveurweb;
    root   /var/www/html;
    index  index.html;
    location / {
        try_files $uri $uri/ =404;
    }
    access_log  /var/log/nginx/nomdufichier.access.log;
    error_log   /var/log/nginx/nomdufichier.error.log warn;
}

server {
    listen              443 ssl;
    server_name         nomdedomaine.fr www.nomdedomaine.fr ipduserveurweb;

    root                /var/www/html;
    index               index.html;

    ssl_certificate     /etc/ssl/certs/nginx-selfsigned.crt;
    ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;    ssl_dhparam         /etc/ssl/certs/dhparam.pem;

    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
        try_files $uri $uri/ =404;
    }

    access_log  /var/log/nginx/nomdufichier.ssl.access.log;
    error_log   /var/log/nginx/nomdufichier.ssl.error.log warn;
}

On test ensuite le fichier de configuration avec la commande:

nginx -t

On un retour type:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

Puis on redémarre nginx avec la commande:

systemctl restart nginx

Fichier de configuration avec HTTP et HTTPS

Vu que l’on a déjà ouvert le port 443 en même temps que le port 80, si on essaye d’accéder au site via https, on arrive vien sur le site

Site 1 accéssible via HTTPS

redirection auto du HTTP vers le HTTPS

Pour que le HTTP redirige vers le HTTPS, on peux soit:

  • laisser le listen 80 et serveur_name, supprimer tout le reste de la partie HTTP pour mettre la ligne:
return 301 https://$host$request_uri;

Partie HTTP supprimée

  • Simplement ajouter la commande dans la partie http sans rien supprimer
return 301 https://$host$request_uri;

Partie HTTP non supprimée

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

Mise en place de la haute disponibilité (HA Proxy)

Nous avons nos 2 machines web:

  • Serveur Web 1
  • Serveur Web 2

Mise en place d’un serveur HA

Nous allons utiliser une 3e VM Rocky Linux

Sur notre machine HA, on installe haproxy avec la commande:

dnf install haproxy -y

On fait un backup de notre fichier de configuration avec la commande:

cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.backup

Nous pouvons désormais modifier le fichier avec la commande:

nano /etc/haproxy/haproxy.cfg

Et on ajouter les lignes suivantes en haut du fichier

listen stats
  bind *:8080
  mode http
  stats enable
  stats hide-version
  stats uri / stats
  stats admin if TRUE
  stats auth haproxy:haproxy

Ajouter ces commandes en haut du fichier

Puis on met les nom de machine et leur IP

Round Round robin balancing between the various backends

Puis on active rsyslog en décommentant les lignes avec la commande:

nano /etc/rsyslog.conf

Activer Rsyslog

On donne ensuite une politique à SElinux avec la commande:

setsebool -P haproxy_connect_any 1

On ouvre le port 8080 pour haproxy avec les commandes:

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

Et on démarre haproxy et rsyslog avec les commandes:

systemctl start haproxy
systemctl start rsyslog

On peux désormais se connecter à l’interface d’administration de haproxy avec l’ip de la machine ha et le port 8080

IdentifiantMot de passe
haproxyhaproxy

On est désormais connecté à l’interface de haproxy

Panneau d’administration de HA Proxy

Sécurisation de HA Proxy

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

Pour cela on se rend dans le dossier comportant nos certificats

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

Mise en place d’un 2e HA Proxy

Installation d’un deuxième HA Proxy

Schémas