Épreuve Synthèse – 2024


Déployer des services en nuage

Version 1.0


Pondération

50 + 20 pour le journal de bord

Remise

14 décembre, 23h05

👉 Une remise avant le 6 décembre 23h05, donnera 10% de plus à la note. Par exemple, 80 -> 88, 95 -> 100%


Mise en situation

Dans ce projet, il faudra déployer, dans le réseau Internet, deux serveurs et des applications de type AMP.

Le point de départ étant un site WordPress, sécurisé, proposant un menu vers les différentes applications.

Voici un exemple,

NOTE: L’image est un lien vers une version fonctionnelle du projet.


Énoncé

Il faut créer, installer et assurer la configuration des éléments suivants;

  1. Deux serveurs Linux sous cloud.google.com, avec l’utilisateur sysadmin:sudoer
  2. WordPress sur le site principal, accès HTTPS
  3. Zabbix – Surveillance d’un parc de serveurs
  4. NodeRed – Application de gestion IOT
  5. MediaWiki – Application de Wikipédia
  6. Lychee – Gestionnaire de photos
  7. Un service FTP (anonyme)
  8. Un service NFS (sur le serveur-nfs)
  9. Deux paires de Clés SSH , une pour le compte principal, une pour le compte sysadmin.
  10. Un journal de bord, sous wordpress, protégé par un mot de passe
  11. Un nom de domaine sous noip ou dynu
  12. Lynis – Outil diagnostique de serveurs Linux.

NOTE: Dans ce document, les items marqués de l’icône ‘👉’, sont facultatifs et donnent des points supplémentaires.


ATTENTION À VOS MOTS DE PASSE, VOTRE PROJET EST DANS LE RÉSEAU INTERNET

NE PAS UTILISER ‘
PASSWORD‘ COMME MOT DE PASSE, POUR AUCUN SERVICE


1 – Dans un projet cloud.google nommé projet4203c3

Créer deux VM Ubuntu 24.04:


Il faut générer une paire de clés de connexion ssh , nommées ‘votreMatricule’, pour l’utilisateur sysadmin.

Associer la clé publique aux deux VM. Il faut tester la clé à partir d’une session ‘ssh’.

NOTE: Il faudra m’envoyer la clé privée du compte sysadmin pour la correction du projet.


1.1 – Serveur01


Sur serveur01, mettre en place un site web WordPress proposant un menu offrant les options suivantes:

NOTE IMPORTANTE -> Sauf pour Node-RED, tous les accès sont de type HTTPS.


1.2 – Associer l’adresse IP externe de serveur01 à un nom de domaine.

Vous pouvez utiliser noip.com ou dynu.com pour les noms de domaine.

Voici un exemple sous dyne.com

NOTE: Le champ IPv4 renseigne l’adresse IP externe de la VM serveur01.


1.3 – Voici comment personnaliser un menu sous WordPress (6.7) -> lien

NOTE IMPORTANTE: Il faut utiliser le nom de domaine de votre site pour faire l’installation de WordPress et non pas inscrire l’adresse IP de la VM dans le fureteur, sans quoi, WordPress risque de ne pas fonctionner correctement.


1.4 – Serveur-nfs

Mettre en place un partage NFS, sur serveur-nfs, en lecture seulement, du dossier /projet-session, qui sera utilisé par un hôte virtuel web de serveur01, nommé nfs.es-matricule.gleeze.com, pour son contenu Web.

C-A-D:

Un requête sur https://nfs.es-matricule.gleeze.com doit afficher un contenu stocké sur serveur-nfs.

Par exemple,

Ce contenu est stocké sur le serveur-nfs. Par contre, le site web est défini sur le serveur01.

Vous devez programmer la page d’accueil pour ce site Web.

👉 De plus, il faut renseigner une règle, dans le fichier .htaccess de ce site, pour une erreur 404.

NOTE IMPORTANTE: Il ne faut pas installer apache2 sur le serveur-nfs!

😳 ATTENTION: Le point 1.4 a une pondération importante dans la grille de correction.


Les applications à installer (autre que WordPress) sur serveur01

C’est à vous de faire les recherches nécessaires pour les étapes d’installation de Zabbix, MediaWiki, NodeRed, Lychee et Lynis sur le serveur de votre projet. Documenter votre démarche dans le journal de bord.


2 – Node-Red

L’application Node-Red est utilisée pour le contrôle d’objets connectés (Internet des objets – IOT).

Pour l’installation de Node-Red, il faut utiliser la méthode avec le script conçu pour le Raspberry PI. Il fonctionne parfaitement sous Ubuntu 24.04.

Node-Red doit démarrer automatiquement avec le serveur.

Pensez à ouvrir le port de fonctionnement de Node-RED dans les règles du par feu du projet.

Il faut protéger l’accès à Node-RED avec un compte utilisateur ‘projet123‘ et un mot de passe ‘123projet‘.

ATTENTION: Si Node-RED est installé par une autre méthode que celle mentionnée ici, ce module ne sera pas corrigé.

Pare feu Google Cloud – Rappel

ATTENTION:  Ne pas installer avec le compte root ou avec la commande 'sudo'.

Erreur: 
# bash <(curl -sL ...)
  --> User votre_utilisateur not in sudoers group. Exiting

Il sera nécessaire d'ajouter votre compte utilisateur dans le groupe 'sudo' pour exécuter le script d'installation de NodeRED:

2.1 – 👉 Défi supplémentaire Node-RED (pour 3 points)

Sécuriser le site avec un certificat. C-A-D, n’y avoir accès qu’en utilisant le préfix https://.

Les directives sont disponibles sur le site de Node-RED à l’adresse suivante.


3 – Zabbix

Zabbix est un outil qui permet de centraliser le monitoring d’un parc de serveur.

Les instructions pour son installation sont disponibles ici.


Voici quelques informations qui pourraient être utiles pour l’installation de Zabbix.

L’installation de Zabbix propose un bon défi. Plusieurs étapes sont requises pour mener à bien l’opération.

# Les instructions d'installation de Zabbix indique de passer au compte root avant de suivre la procédure avec la commande
# su -
# Il faudra avant, renseigner un mot de passe sur le compte root de serveur01:

sudo passwd root
# Entrer le nouveau mot de passe ...

# Puis, connectez-vous au compte root avec la commande suivante:
su -

Dans les étapes d’installation, la commande suivante:

zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

prend de nombreuses minutes. Il faut être TRÈS TRÈS patient 🙃

Si jamais la commande était interrompue avant la fin, il faudra effacer les tables dans la BD Zabbix et recommencer.

Dans le cas de l’erreur suivante:

ERROR 1419 (HY000) at line 2493: You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

Il faut effacer toutes les tables de la BD Zabbix et exécuter la commande suivante:

mysql -u root -p

SET GLOBAL log_bin_trust_function_creators = 1;

exit;

# Et refaire la commandez zcat ...

L’installation de Zabbix est fonctionnelle si vous obtenez l’écran suivant dans l’application:

NOTE: Le compte/password par défaut est ‘Admin/zabbix‘.


NOTE: Si ‘ZBX’ sous Availabity n’est pas vert, il y a probablement un problème de connexion à la BD zabbix. Si c’est le cas, il faudra vérifier le contenu des fichiers suivants:

 nano /etc/zabbix/web/zabbix.conf.php
 nano /etc/zabbix/zabbix_server.conf

Après un certain moment, Zabbix devrait présenter des graphiques d’utilisation des ressources du serveur.


3.1 – 👉 Défi supplémentaire Zabbix (pour 4 points)

Ajouter le serveur-ftp dans le domaine de surveillance de Zabbix

NOTE: Pour obtenir les points supplémentaires, il faut que le ‘LABEL’ ZBX du serveur-ftp soit en vert.


4 – MediaWiki

MediaWiki est l’application qui fait rouler Wikipedia.

Son code source est libre de droits et il est possible de l’installer sur un serveur pour pouvoir tenir un Wiki local.

Voici le lien vers le site de MediaWiki.

Le site propose un lien vers le code source et des instructions d’installation.

NOTE: Il faudra créer un utilisateur/BD mySQL pour procéder à l’installation.


5 – Lychee

Lychee est une application, libre de droits, qui permet de monter une collection de photos.

L’application utilise ‘composer‘ et ‘npm‘ pour gérer ses dépendances php et node.js. Elle utilise aussi une base de données pour stocker les images et les collections. C’est base de données peut-être MySQL si son fichier de configuration le précise.

Voici le lien vers le dépôt Github de Lychee.

Le dépôt propose le code source et des instructions d’installation.

NOTE: Il faudra créer un utilisateur/BD mySQL avant de procéder à la migration avec ‘composer‘ .


Voici quelques informations qui pourraient être utiles pour l’installation de Lychee.

# Obtenir le code source de Lychee
git clone lé_dépôt_de_lychee

# Installer les outils nécessaires à l'installation de Lychee 
apt install composer npm

# Suivre les instructions disponibles sur le dépôt GitHub.

### En cas d'erreur suivante:

  --> npm  "overrides":  "rollup":  Invalid comparator

  a) Trouver une solution sur le Net

  # Si vous ne trouvez pas de solution pour l'erreur, alors cette modification va permettre de terminer       l'installation:
  
# Supprimer la section suivante du fichier package.json :

,
    "overrides": {
        "rollup": "npm:@rollup/wasm-node"
    }

# Ce qui devrait permettre de:

$ npm install

added 335 packages, and audited 336 packages in 11s

63 packages are looking for funding
  run `npm fund` for details

1 high severity vulnerability

To address all issues, run:
  npm audit fix

$ npm audit fix

# Il restera à renseigner les variables dans le fichier .env

APP_URL= (L'URL défini dans le fichier .conf du site virtuiel)
DB_CONNECTION=mysql
DB_HOST= (L'adresse du serveur MySQL)
DB_PORT= (Le port de MySQL)
DB_DATABASE=
DB_USERNAME=
DB_PASSWORD=

# Et de lancer la migration avec 'composer'

6 – Journal de bord (20%)

Le lien ‘Journal‘ du site principal doit pointer sur une deuxième installation de WordPress, dans un site de type ‘hote virtuel’ et sécurisé par un certificat (certbot).

Le contenu du journal bord doit-être protégé par un mot de passe (à fournir à l’enseignant lors de la remise).

Il faut tenir dans ce journal de bord toutes les étapes de réalisation de l’épreuve synthèse:


ATTENTION: Ne pas inscrire de mots de passe dans le journal de bord.

NOTE IMPORTANTE: Le journal compte pour 20% de la note finale, il doit donc être bien étoffé. Un résumé de 5 lignes ne vaudra que 1/20.


6.1 – Voici un exemple d’un journal de bord


7 – Lynis

Lynis est un outil ‘open source’ d’analyse des failles de sécurité d’un serveur Linux. Le dépôt public git est disponible ici.

Il est possible d’installer cet outil de deux façons :


Installer Lynis


7.1 – Analyser les failles du système

$ sudo lynis audit system

7.2 – Extrait d’une analyse

[+] Initializing program
------------------------------------
  - Detecting OS...                                           [ DONE ]
  - Checking profiles...                                      [ DONE ]

  ---------------------------------------------------
  Program version:           3.0.6
  Operating system:          Linux
  Operating system name:     Ubuntu
  Operating system version:  20.04
  Kernel version:            5.11.0
  Hardware platform:         x86_64
  Hostname:                  projet-session-420-3c3-1
  ---------------------------------------------------
  Profiles:                  /etc/lynis/default.prf
  Log file:                  /var/log/lynis.log
  Report file:               /var/log/lynis-report.dat
  Report version:            1.0
  Plugin directory:          /usr/share/lynis/plugins
  ---------------------------------------------------
  Auditor:                   [Not Specified]
  Language:                  en
  Test category:             all
  Test group:                all
  ---------------------------------------------------
  - Program update status...                                  [ SKIPPED ]

[+] System tools
------------------------------------
  - Scanning available tools...
  - Checking system binaries...

[+] Plugins (phase 1)
------------------------------------
 Note: plugins have more extensive tests and may take several minutes to complete
  
  - Plugins enabled                                           [ NONE ]

[+] Boot and services
------------------------------------
  - Service Manager                                           [ systemd ]
  - Checking UEFI boot                                        [ ENABLED ]
  - Checking Secure Boot                                      [ DISABLED ]
  - Checking presence GRUB2                                   [ FOUND ]
    - Checking for password protection                        [ NONE ]
  - Check running services (systemctl)                        [ DONE ]
        Result: found 25 running services
  - Check enabled services at boot (systemctl)                [ DONE ]
        Result: found 54 enabled services
  - Check startup files (permissions)                         [ OK ]
  - Running 'systemd-analyze security'
        - apache2.service:                                    [ UNSAFE ]
        - apport.service:                                     [ UNSAFE ]
        - atd.service:                                        [ UNSAFE ]
        - chrony.service:                                     [ EXPOSED ]

7.2 – Implémenter 5 recommandations pour augmenter le ‘Hardening index’

Lynis security scan details:

  Hardening index : 70 [##############      ]
  Tests performed : 255
  Plugins enabled : 0

7.3 – Extrait de la liste des recommandations

* Consider hardening system services [BOOT-5264] 
    - Details  : Run '/usr/bin/systemd-analyze security SERVICE' for each service
      https://cisofy.com/lynis/controls/BOOT-5264/

* Default umask in /etc/login.defs could be more strict like 027 [AUTH-9328] 
      https://cisofy.com/lynis/controls/AUTH-9328/

* Purge old/removed packages (1 found) with aptitude purge or dpkg --purge command. This will cleanup old configuration files, cron jobs and startup scripts. [PKGS-7346] 
      https://cisofy.com/lynis/controls/PKGS-7346/

* Install Apache mod_evasive to guard webserver against DoS/brute force attempts [HTTP-6640] 
      https://cisofy.com/lynis/controls/HTTP-6640/

  * Install Apache modsecurity to guard webserver against web application attacks [HTTP-6643] 
      https://cisofy.com/lynis/controls/HTTP-6643/

  * Consider hardening SSH configuration [SSH-7408] 
    - Details  : AllowTcpForwarding (set YES to NO)
      https://cisofy.com/lynis/controls/SSH-7408/

8 – Serveur FTP

Il faut installer, sur le serveur01, le service vsftpd, offrant une connexion exclusivement de type Anonymous, sans mot de passe.

Un fois connecté, via par exemple FileZilla, Anonymous devra avoir accès, pour téléchargement, un fichier ‘lisez-moi.txt’ qui contient votre nom et matricule.

Voir ici pour un retour sur les concepts.


9 – Règles du pare feu Google Cloud

Par défaut, l’accès à des ports autres que 22, 80 et 443 est bloqué par les règles de pare feu des projets cloud.google.

Cette contrainte bloquera l’accès, par exemple, au port de Node-RED:1880.

Il est possible d’ajouter des règles supplémentaires au niveau du projet ou d’un VM avec les TAGs.


10 – Directives de remise

Le projet est à livrer au plus tard le samedi, 14 décembre 2024, avant 23h05.

Renseigner un fichier texte avec les informations suivantes:

  1. L’URL de votre projet
  2. Les accès (user:psw) aux services;
    • mysql (compte root)
    • wordpress (les deux)
    • Zabbix (Info dans ce document)
    • Node-RED (Info dans ce document)
    • Lychee
    • MediaWiki
  3. La clé privée du compte sysadmin. Le fichier doit porter votre matricule comme nom.
  4. la commande ssh d’accès au serveur. Par exemple;
    • ssh -i ~/.ssh/unecle unCompte@nomDomaineDuServeur
  5. La liste des cinq (5) recommandations implémentés suite aux recommandations de Lynis
    • Une capture du Hardening index avant l’implémentation
    • Une capture du Hardening index après l’implémentation

À confirmer -> Déposer le fichier dans LÉA


11 – Grille de correction (en rédaction)

SectionDescriptionPondérationPoints
Les VM5
Respect des spécifications2
Clé ssh pour sysadmin 2
Utilisation d’un DNS1
WordPress principal5
HTTPS – Chiffrement TLS0,5
Page à propos1,5
Éléments du menu2
Page d’explications d’accès à ftp1
WordPress journal2
HTTPS – Chiffrement TLS0,5
URL: https://mon-journal.votre-domaine.com0,5
Accès à l’accueil sans mot de passe1
Zabbix6
Fonctionnalité 6
NFS6
Mise en place du service sur serveur-nfs1
Montage automatique sur serveur01 (fstab)0,5
Chiffrement tls, url: nfs.votre-domaine.com0,5
Gestion du 404 avec .htaccess1
index.html original1
Fonctionnalité 2
NodeRED5
Non respect de la méthode d’installation-5
Fonctionnalité, démarrage automatique du service3
Fenêtre de login1
Règle de pare feu1
Lychee6
HTTPS – Chiffrement TLS0,5
URL: https://photos.votre-domaine.com0,5
Fonctionnalité4
Contenu – Ajouter quelques photos1
FTP4
Accès anonyme en lecture seule1
Accès à ‘lisez-moi.txt’ et son contenu1
Fonctionnalité2
MediaWiki5
HTTPS – Chiffrement TLS0,5
URL: https://wiki.votre-domaine.com0,5
Fonctionnalité4
Lynis5
Fonctionnalité 1
Implémentation de 5 recommandations
Liste dans la remise
4
Fichiers de remise11
Journal20
Protection par mot de passe2
Qualité du contenu 18
Total /70/70
Défi supplémentaire Node-RED3
Défi supplémentaire Zabbix4
Remise avant le 6 décembre 23h05 +10%
Grand Total77/70/70
NOTE: Les défis supplémentaires permettent d’avoir un résultat supérieur à 70.

12 – Projets des étudiant(e)s

MatriculeNomURL du projet
ve2cuySolution du prof (présentement hors ligne)mon-projet.freeddns.org
1868687🎄- Beauchamp, Antoinees-1868687.gleeze.com
1191869🎄- Bebnowski-Lavoie, Guillaumees-1191869.gleeze.com
6227790🎄- Buttet-Allard, Alexandrees-6227790.gleeze.com
6223355🎄 – Cliche, Thomases-6223355.hopto.org
1938852🎄- Fallu, Estebanes-1938852.gleeze.com
2386023🎄- Gauthier, Étiennees-2386023.gleeze.com
2393320🎄- Giang, Ronnes-2393320.hopto.org
6226374🎄- Gosselin-Beaudoin, Xavieres-6226374.gleeze.com
2071623🎄- Grenier, Anthonyes-2071623.gleeze.com
2375397🎄- Kemp, Adames-2375397.hopto.org
1712268🎄- Lajeunesse, Layah es-1712268.hopto.org
2383950Lalonde, Félixes-2383950.ddnsgeek.com
2176750🎄- Lamonde, Louises-2176750.gleeze.com
6224915🎄- Lamoureux, Samaëles-6224915.gleeze.com
1958267☔️🎄 – Lopera Cuesta, Juan-Manueles-1958267.gleeze.com
2156548🎄- Mechmachi, Achrafes-2156548.hopto.org
2246747🎄- Mesiti, Williames-2246747.gleeze.com
2388879🎄- Messavussu, Claude Juniores-2388879.hopto.org
1701738☔️🎄 – Mirville, Lens Emmanueles-1701738.gleeze.com
6239687🎄- Pierre Patrick Tamoes-6239687.gleeze.com
2077933🎄- Oubad, Adames-2077933.gleeze.com
1533177🎄- Roy, Charles-Étiennees-1533177.gleeze.com
6238992🎄- Tizanou Ndé, James Bérangeres-6238992.gleeze.com
2369089🎄 – Vidal, Jolanes-2369089.hopto.org
6181512🎄- Zakhour, Georgeses-6181512.gleeze.com
☔️ – Projet non accessible, 🗝️ clé ssh invalide, 🎄- Corrigé

FIN DU DOCUMENT