Mise en place d'un serveur web (Nginx)

De Marijan Stajic | Wiki
Version datée du 21 mars 2023 à 23:00 par Marijan (discussion | contributions) (Page créée avec « <!-- INFORMATIONS --> = 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 --> = Machine virtuelle = * '''Système d'expl... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche


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

  1. Pour créer votre machine virtuelle, cliquer sur Créer/Enregistrer une machine virtuelle dans l'onglet Machine virtuelle.
    Installation SRV - 01.png
  2. Ensuite, cliquer sur Créer une machine virtuelle.
    Installation SRV - 02.png
  3. Saisir un Nom pour votre machine et sélectionner la Compatibilité, Famille de systèmes d'exploitation invités et Version du SE invité.
    Installation SRV - 03.png
  4. Configurer ensuite votre machine avec les paramètres suivants :
    Installation SRV - 04.png
    • Modifier le Lecteur de CD/DVD en mettant le fichier ISO de votre OS.
      Installation SRV - 04 1.png
  5. Une fois que c'est, cliquer sur Terminer.
    Installation SRV - 05.png

Configuration

  • Une fois l'enregistrement de votre VM terminé, exécutez-la.
  1. Dans un premier temps, faites une installation sans l'interface graphique. Cliquer donc sur Install.
    CONFIGURATION SRV - 01.png
  2. Sélectionner votre langue.
    CONFIGURATION SRV - 02.png
  3. Ensuite, sélectionner votre localisation.
    CONFIGURATION SRV - 03.png
    • Europe\Switzerland
  4. Configurer ensuite le langage de votre clavier.
    CONFIGURATION SRV - 06.png
  5. Saisir un mot de passe pour l'utilisateur root (admin).
    CONFIGURATION SRV - 08.png
  6. Choisir un nom d'utilisateur pour l'utilisateur simple.
    CONFIGURATION SRV - 09.png
    • Saisir également un mot de passe pour cet utilisateur.
  7. Sélectionner la méthode de partition.
    CONFIGURATION SRV - 11.png
    • Sélectionner ensuite le disque pour la partition.
  8. Mettre tous les fichiers dans la même partition.
    CONFIGURATION SRV - 13.png
  9. Appliquer ensuite le partitionnement sur les disques.
    CONFIGURATION SRV - 14.png
  10. Sélectionner l'archive miroir.
    CONFIGURATION SRV - 16.png
  11. Choisir ensuite les logiciels de base.
    CONFIGURATION SRV - 18.png
    • Désélectionner ensuite tout sauf la dernière option.
  12. Installer le GRUB boot loader.
    CONFIGURATION SRV - 19.png
  13. Une fois installé, vous allez pouvoir vous authentifier sur votre machine virtuelle.
    CONFIGURATION SRV - 22.png
  • 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.
  1. Faire un clic droit sur la VM concernée puis, sous Snapshots, cliquer sur Prendre un snapshot.
    SNAPSHOT SRV - 01.png
  2. Ensuite, pour restaurer le snapshot, faire un clic droit sur la VM puis Restaurer.
    SNAPSHOT SRV - 03.png

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.

  1. Dans un premier temps, installer le package SSH sur la VM.
    Installation SSH - install01.png

    apt-get install openssh-server
  2. 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.
    Installation SSH - sshd config.png

    nano /etc/ssh/sshd_config
  3. 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.
    Installation SSH - sshd config file.png
  4. Pour appliquer les modifications, il faudra simplement redémarrer le service.
    Installation SSH - reload.png

    /etc/init.d/ssh reload
  5. Vous pouvez vérifier si le port a bien été modifié.
    Installation SSH - check.png

    systemctl status ssh
  6. Maintenant que tout est prêt, vous pouvez lancer votre logiciel d'émulateur de terminal. Dans mon cas, j'utilise PuTTY.
    Installation SSH - putty.png
    • 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.

  1. Dans un premier temps, nous allons installer le package tcpdump.
    Installation TCPDUMP - installation.png

    apt-get install tcpdump
  2. 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.
    Installation TCPDUMP - capture.png

    tcpdump -w capture-wiki.pcap
  3. 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.
    Installation TCPDUMP - capturels.png

    ls
  4. 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.
    Installation TCPDUMP - winscp.png

Une fois connecté, vous allez pouvoir récupérer le fichier .pcap et l'ouvrir sur Wireshark.


Nginx

Download.png

Maintenant que nos trois VMs sont prêtes, que nous sommes connectés en SSH, nous allons installer notre serveur web (Nginx).

  1. Tout d'abord, nous allons installer les packages Nginx.
    Installation Nginx - Installation package.png

    apt-get install nginx -y
  2. Une fois installé, vous pouvez vérifier si Nginx fonctionne bien.
    Installation Nginx - Status.png

    systemctl status nginx
    • Vous pouvez également vérifier la version de votre Nginx.
      Installation Nginx - Version.png

      nginx -v
  3. Ensuite, il est important d'activer la case pour que Nginx s'exécute au démarrage.
    Installation Nginx - boot.png

    systemctl enable nginx
  4. 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, ...).
    Installation Nginx - site par defaut.png

    nano /etc/nginx/sites-enabled/default
    • À l'intérieur, vous avez différentes informations, notamment :
      Installation Nginx - sites-enabled default site.png
      • 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.
  5. Maintenant que nous connaissons la localisation de notre fichier HTML, nous pouvons le modifier.
    Installation Nginx - edit file html.png

    nano /var/www/html/guillom.txt
  6. Afin d'appliquer les modifications que vous avez faites, il faudra redémarrer Nginx.
    Installation Nginx - reload.png

    nginx -s reload
  7. Pour terminer, vous pouvez vérifier s'il y a pas d'erreur dans votre serveur web.
    Installation Nginx - verification file.png

    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.

Schéma.png

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.

  1. Dans un premier temps, nous allons faire correspondre les noms de domaine à l'adresse localhost . Pour le faire, nous allons modifier le fichier host.
    Installation Nginx - hosts.png
    • Une fois à l'intérieur, nous allons ajouter le texte suivant :
      Installation Nginx - hosts file.png
      • 127.0.0.1 site1.support-vtx.ch
      • 127.0.0.1 site2.support-vtx.ch
  2. Maintenant que la VM sait que les deux noms de domaine sont en local, nous allons créer le fichier de configuration.
    Installation Nginx - configuration.png

    nano /etc/nginx/conf.d/site.conf
    • À l'intérieur, nous allons ajouter les informations suivantes :
      Installation Nginx - site.conf.png
      • 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é.
  3. Afin d'appliquer les ajouts que vous avez faits, il faudra redémarrer Nginx.
    Installation Nginx - reload.png

    nginx -s reload
  4. Pour tester si la configuration fonctionne bien, nous allons installer curl.
    Installation Nginx - curl.png

    apt-get install curl
  5. Une fois installé, nous allons faire curl site1.support-vtx.ch. Normalement, nous avons ce que contient le fichier HTML de SRV-DEB-001.
    Installation Nginx - curl site1.png

    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.

Schéma failover.png

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

  1. Par défaut, vous pouvez retrouver les logs d'accès et erreur Nginx ici.
    Logs Nginx - localisation2.png

    cd /var/log/nginx
  2. 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).
    Logs Nginx - log.png

    tail access.log
  3. 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).
    Logs Nginx - log2.png

    tail access.log