Mise en place d'un serveur web (Nginx)
Informations
Voici le matériel à disposition pour ce projet :
- Un serveur Dell R610 avec un ESXi VMware
Le serveur est à utiliser avec le Sonicwall TZ300, son IP locale est réservée par adresse MAC : 172.16.0.6, une règle NAT existe pour se connecter dessus depuis le réseau VTX : https://virt.support-vtx.ch:1338
Machine virtuelle
- Système d'exploitation utilisé : Debian 10.10
Pour ce projet, nous allons utiliser 3 VMs :
- SRV-DEB-001 (172.16.0.7) : site1.support-vtx.ch ;
- SRV-DEB-002 (172.16.0.8) : site2.support-vtx.ch ;
- SRV-DEB-003 (172.16.0.9) : Le reverse-proxy sera configuré dessus.
Enregistrement
- Pour créer votre machine virtuelle, cliquer sur Créer/Enregistrer une machine virtuelle dans l'onglet Machine virtuelle.
- Ensuite, cliquer sur Créer une machine virtuelle.
- Saisir un Nom pour votre machine et sélectionner la Compatibilité, Famille de systèmes d'exploitation invités et Version du SE invité.
- Configurer ensuite votre machine avec les paramètres suivants :
- Modifier le Lecteur de CD/DVD en mettant le fichier ISO de votre OS.
- Une fois que c'est, cliquer sur Terminer.
Configuration
- Une fois l'enregistrement de votre VM terminé, exécutez-la.
- Dans un premier temps, faites une installation sans l'interface graphique. Cliquer donc sur Install.
- Sélectionner votre langue.
- Ensuite, sélectionner votre localisation.
- Europe\Switzerland
- Configurer ensuite le langage de votre clavier.
- Saisir un mot de passe pour l'utilisateur root (admin).
- Choisir un nom d'utilisateur pour l'utilisateur simple.
- Saisir également un mot de passe pour cet utilisateur.
- Sélectionner la méthode de partition.
- Sélectionner ensuite le disque pour la partition.
- Mettre tous les fichiers dans la même partition.
- Appliquer ensuite le partitionnement sur les disques.
- Sélectionner l'archive miroir.
- Choisir ensuite les logiciels de base.
- Désélectionner ensuite tout sauf la dernière option.
- Installer le GRUB boot loader.
- Une fois installé, vous allez pouvoir vous authentifier sur votre machine virtuelle.
- Une adresse IP a été assignée sur mes VMs depuis le Sonicwall.
Snapshot
- Un snapshot est unique par VM. Aussi, l'adresse IP attribuée par le Sonicwall va rester car il se base sur l'adresse MAC.
- Faire un clic droit sur la VM concernée puis, sous Snapshots, cliquer sur Prendre un snapshot.
- Ensuite, pour restaurer le snapshot, faire un clic droit sur la VM puis Restaurer.
Secure Shell
Pour faciliter le travail, nous allons activer le SSH. Sur le firewall, le port 1339 correspond à SRV-DEB-001, 1340 à SRV-DEB-002 et 1341 à SRV-DEB-003. La règle a été mise en place sur le firewall.
- Dans un premier temps, installer le package SSH sur la VM.
apt-get install openssh-server
- Une fois installé, il faudra mettre à jour le port sur le fichier de configuration de votre SSH par rapport à ce qui a été appliqué sur le firewall.
nano /etc/ssh/sshd_config
- Ensuite, dès que vous êtes dans le fichier, vous pouvez retirer le commentaire (#) et mettre le port en question. Si vous souhaitez utiliser l'utilisateur root pour le SSH, il faudra faire pareil pour PermitRootLogin.
- Pour appliquer les modifications, il faudra simplement redémarrer le service.
/etc/init.d/ssh reload
- Vous pouvez vérifier si le port a bien été modifié.
systemctl status ssh
- Maintenant que tout est prêt, vous pouvez lancer votre logiciel d'émulateur de terminal. Dans mon cas, j'utilise PuTTY.
- Host Name : Ici, j'ai mis l'adresse du firewall, mais nous aurions très bien pu mettre également virt.support-vtx.ch qui est l'adresse du serveur où se trouvent les VMs ;
- Port : Le port SSH que nous avons mis par rapport à la VM à laquelle on souhaite accéder ;
- Connexion type : SSH.
Capture de paquet
Pour mieux comprendre ce qui transite sur les VMs, on peut utiliser tcpdump et ensuite récupérer le fichier .pcap et l'ouvrir sur Wireshark pour voir les paquets.
Il est important de faire ces commandes directement sur l'interface de ESXi et non en SSH.
- Dans un premier temps, nous allons installer le package tcpdump.
apt-get install tcpdump
- Ensuite, nous allons lancer une capture de paquet et accéder au site en même temps. Il est important de nommer le fichier .pcap.
tcpdump -w capture-wiki.pcap
- Après avoir fait la capture de paquet, vous pouvez faire CTRL + C pour arrêter. La capture sera stockée à l'endroit où vous avez lancé le tcpdump.
ls
- Pour récupérer la capture que vous avez faite, il faudra utiliser un client SFTP pour vous connecter sur la VM et accéder aux fichiers. Dans mon cas, j'utilise WinSCP.
Une fois connecté, vous allez pouvoir récupérer le fichier .pcap et l'ouvrir sur Wireshark.
Nginx
Maintenant que nos trois VMs sont prêtes, que nous sommes connectés en SSH, nous allons installer notre serveur web (Nginx).
- Tout d'abord, nous allons installer les packages Nginx.
apt-get install nginx -y
- Une fois installé, vous pouvez vérifier si Nginx fonctionne bien.
systemctl status nginx
- Vous pouvez également vérifier la version de votre Nginx.
nginx -v
- Vous pouvez également vérifier la version de votre Nginx.
- Ensuite, il est important d'activer la case pour que Nginx s'exécute au démarrage.
systemctl enable nginx
- Nous allons maintenant voir la configuration de notre site par défaut (voir le port sur lequel le site écoute, où est-ce que le site prend son fichier HTML, ...).
nano /etc/nginx/sites-enabled/default
- À l'intérieur, vous avez différentes informations, notamment :
- IPv4 : Si une adresse IPv4 souhaite accéder au site, il devra passer par le port spécifié (80) ;
- IPv6 : Si une adresse IPv6 souhaite accéder au site, il devra passer par le port spécifié (80) ;
- Localisation fichier.html : C'est ici ou le site va chercher le fichier HTML ;
- Fichier .html : C'est le fichier HTML en question.
- À l'intérieur, vous avez différentes informations, notamment :
- Maintenant que nous connaissons la localisation de notre fichier HTML, nous pouvons le modifier.
nano /var/www/html/guillom.txt
- Afin d'appliquer les modifications que vous avez faites, il faudra redémarrer Nginx.
nginx -s reload
- Pour terminer, vous pouvez vérifier s'il y a pas d'erreur dans votre serveur web.
nginx -t
Nous avons maintenant notre serveur web installé et prêt. Nous connaissons le port par défaut (pour le modifier si nécessaire) et nous avons également modifié notre fichier HTML.
- Il faut faire pareil sur la deuxième VM (SRV-DEB-002).
Reverse-proxy
Le but est de mettre en place deux VMs sous le système d'exploitation Debian 10.10 et d'installer dessus Nginx afin de créer deux serveurs web. Ensuite, il faudra mettre en place un reverse-proxy en utilisant toujours Nginx sur une autre VM Debian.
Dans le schéma que nous pouvons voir ci-dessus, nous avons deux utilisateurs qui tentent d'accéder à site1.support-vtx.ch et un autre à site2.vtx-support.ch.
La requête passe par le firewall avec le port 1342, elle est renvoyée à l'adresse IP 172.16.0.9 (SRV-DEB-003) avec un port forwarding sur le port 80.
Une fois que la requête est arrivée à SRV-DEB-003, le reverse-proxy mis en place va faire son travail, c'est-à-dire envoyer la connexion à site1.support-vtx.ch à 172.16.0.7 (SRV-DEB-001) et celle du site2.support-vtx.ch à 172.16.0.8 (SRV-DEB-002).
Le reverse-proxy sera mis sur la SRV-DEB-003. Pour cette VM, il faudra simplement installer les packages de Nginx.
- Dans un premier temps, nous allons faire correspondre les noms de domaine à l'adresse localhost . Pour le faire, nous allons modifier le fichier host.
- Une fois à l'intérieur, nous allons ajouter le texte suivant :
- 127.0.0.1 site1.support-vtx.ch
- 127.0.0.1 site2.support-vtx.ch
- Une fois à l'intérieur, nous allons ajouter le texte suivant :
- Maintenant que la VM sait que les deux noms de domaine sont en local, nous allons créer le fichier de configuration.
nano /etc/nginx/conf.d/site.conf
- À l'intérieur, nous allons ajouter les informations suivantes :
- Port : le port que notre serveur web sur les VM écoute ;
- Nom de domaine : le nom de domaine concernée que nous avons ajouté dans le fichier host ;
- Localisation : à quelle VM correspond le nom de domaine tout en précisant le port web utilisé.
- À l'intérieur, nous allons ajouter les informations suivantes :
- Afin d'appliquer les ajouts que vous avez faits, il faudra redémarrer Nginx.
nginx -s reload
- Pour tester si la configuration fonctionne bien, nous allons installer curl.
apt-get install curl
- Une fois installé, nous allons faire curl site1.support-vtx.ch. Normalement, nous avons ce que contient le fichier HTML de SRV-DEB-001.
curl site1.support-vtx.ch
Aussi, nous pouvons accéder à nos sites depuis le réseau VTX avec le port 1342 (site1.support-vtx.ch:1342).
Nous avons désormais terminer la configuration de nos serveurs web avec le reverse-proxy.
Failover
Pour faire le failover, nous avons déjà en place nos 3 VMs, une qui est utilisé en tant que reverse-proxy et les deux autres de serveur web simple. Nous allons faire une copie du site1.support-vtx.ch sur SRV-DEB-002 et inversement.
L'idée, c'est que dès que, par exemple, l'utilisateur Marijan tente d'accéder à site1.support-vtx.ch, le reverse-proxy va envoyer la requête à SRV-DEB-001 (la VM qui correspond à site1) et si ça ne répond pas, il va interroger la deuxième VM qui a une copie du site1.
Inversement aussi, la première VM aura une copie de site2 et si SRV-DEB-002 ne répond pas, le reverse-proxy va demander à SRV-DEB-001.
Logs
- Par défaut, vous pouvez retrouver les logs d'accès et erreur Nginx ici.
cd /var/log/nginx
- Ensuite, si je tente d'accéder avec mon laptop à site1.support-vtx.ch, on peut voir la requête dans les access.log (IP 212.147.110.129).
tail access.log
- Si on veut voir comment le reverse-proxy fonctionne, on doit voir les access.log (ci-dessus) et les logs qui sont sur la VM du site1.support-vtx.ch. On peut voir les requêtes de la VM ou le reverse-proxy est installé (172.16.0.9).
tail access.log