0% ont trouvé ce document utile (0 vote)
56 vues71 pages

Installation et Sécurisation de Nextcloud

Ce document présente un projet sur l'installation, la configuration et la sécurisation de Nextcloud. Il couvre les étapes d'installation, les réglages de performance, ainsi que les mesures de sécurité avancées à mettre en œuvre. Le projet inclut également des références et des outils pour analyser et corriger les vulnérabilités détectées.

Transféré par

vieuxmbayendour
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
56 vues71 pages

Installation et Sécurisation de Nextcloud

Ce document présente un projet sur l'installation, la configuration et la sécurisation de Nextcloud. Il couvre les étapes d'installation, les réglages de performance, ainsi que les mesures de sécurité avancées à mettre en œuvre. Le projet inclut également des références et des outils pour analyser et corriger les vulnérabilités détectées.

Transféré par

vieuxmbayendour
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd

É c o l e S UPÉRIEURE Po ly T E C H n I q U E D E

DaKAR

Installation, Configuration et
Sécurisation de Nextcloud

B ASE S D E l A S É c U R I T É D E S SysTÈMES
D’InfoRMATIOn

I n T RO D U c T I O n À l A S É c U R I T É D E S
SysTÈMES d’InfoRMATIOn

Élève : Enseignant :
Vieux Mbaye N D O U R Dr f a l l
12 février 2025

Table des matières


Introduction
6
1 Présentation du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2 Rôle et importance de Nextcloud . . . . . . . . . . . . . . . . . . . . . . .
7
IInstallation de Nextcloud
3 Références utilisées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1 Phase 18: Configuration de base de Nextcloud . . . . . . . . . . . . . . . .
4 Validation1. Mise à jour et mise
de l’installation à niveau
et de du système . . . . . . . . . . . . . . .
la sécurisation
2. Installation des
. . . . . . . . . . . . . . . modules Apache et PHP . . . . . .8 . . . . . . . . .
3. Installation de MariaDB (Base de données) . . . . . . . . . . . . .
4. Préparation et installation de Nextcloud . . . . . . . . . . . . . . . 10
5. Installation de Nextcloud via la ligne de commande . . . . . . . . . 10
6. Configuration Apache pour Nextcloud . . . . . . . . . . . . . . . . 11
2 Phase 2 : Réglage des performances . . . . . . . . . . . . . . . . . . . . . . 11
1. Installation de PHP-FPM avec Apache . . . . . . . . . . . . . . . . 14
2. Création d’une page info.php . . . . . . . . . . . . . . . . . . . . . 15
3. Activation d’OPCache et OPCache-JIT 16
. . . . . . . . . . . . . . . 18
4. Activation d’APCu – Optimisation du cache des sessions PHP . . . 19
5. Configuration du cache Redis – Amélioration du verrouillage des fichiers .20.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
II Sécurisation du33 système 27
1 Phase 3 : Sécurisation avancée de Nextcloud . . . . . . . . . . . . . . . . . 30
1. Installation et configuration d’un certificat SSL auto-signé . . . . . 3
2. Activation du protocole HTTP/2 . . . . . . . . . . . . . . . . . . . 7
41 38
3. Application de la Politique de Sécurité Stricte du Transport (HSTS) 45 38
4.
2 RenforcementActivationde des URL Pretty
la sécurité sur des
au-delà Nextcloud . . . . . .de. base
recommandations . . . . . . . . 50
1. 47
Protection avancée avec un pare-feu sécurisé . . . . . . . . . . . . . 50
2. Installation et Configuration de Fail2Ban . . . . . . . . . . . . . . . 60
3 Analyse et correction des vulnérabilités détectées sur Nextcloud . . . . . . 65
1. Introduction aux outils de test
. . . . . . . . . . . . . . . . . . . . 65
2. Analyse des vulnérabilités détectées et leurs implications . . . . . .
66

1
12 février 2025

Table des figures


I.1 Installation de nextcloud . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
I.2 Mise à jour et mise à niveau du système . . . . . . . . . . . . . . . . . . . 11
I.3 Installation d’Apache2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
I.4 Vérification du service Apache . . . . . . . . . . . . . . . . . . . . . . . . . 12
I.5 Installation de PHP et des modules nécessaires . . . . . . . . . . . . . . . . 12
I.6 Vérification de l’installation de PHP . . . . . . . . . . . . . . . . . . . . . 13
I.7 Activation des modules Apache requis . . . . . . . . . . . . . . . . . . . . . 13
I.8 Redémarrage et activation d’Apache . . . . . . . . . . . . . . . . . . . . . 14
9. Vérification du statut du service . . . . . . . . . . . . . . . . . . . . . . . . 14
10. Création de l’utilisateur et de la base de données Nextcloud . . . . . 15
11. . . .
Redémarrage de MariaDB . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
12. Téléchargement et extraction des fichiers . . . . . . . . . . . . . . . . . . . 16
13. Installation de Nextcloud . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
14. définition de nom de domaine server1.dic.sn . . . . . . . . . . . . . . 17
. . . 17
15. Ajout du nom de domaine . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
16. Autorisation d’accès à Nextcloud . . . . . . . . . . . . . . . . . . . . 18
. . . 19
17. Modification du fichier de configuration Apache . . . . . . . . . . . . . . . 20
18. Caption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
19. Installation de PHP-FPM . . . . . . . . . . . . . . . . . . . . . . . . 22
. . . 23
20. Vérifier que PHP-FPM fonctionne . . . . . . . . . . . . . . . . . . . . . . . 24
21. activation du module MPM-Event . . . . . . . . . . . . . . . . . . . . . . 25
22. Appliquation automatiquement des changements . . . . . . . . . . . . . . . 27
23. Appliquer ces modifications . . . . . . . . . . . . . . . . . . . . . . . 28
. . . 29
24. Modifier le fichier de configuration Apache . . . . . . . . . . . . . . . . . . 31
25. page de info.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
. . . 32
26. OPCache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
. . . 34
27. OPCache-JIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
28. Installation et activation d’APCu . . . . . . . . . . . . . . . . . . . . . . . 36
29. Vérifier si APCu est activé . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
30. Vérifier l’activation d’APCu dans le navigateur . . . . . . . . . . . . 37
. . . 39
31. Configurer Nextcloud pour utiliser APCu . . . . . . . . . . . . . . . . . . . 40
32. Installer Redis et le module PHP Redis . . . . . . . . . . . . . . . . . . . . 42
33. Configurer Nextcloud pour utiliser Redis . . . . . . . . . . . . . . . . . . . 45
34. Activer le verrouillage des sessions Redis . . . . . . . . . . . . . . . . . . . 46
35. Redémarrer tous les services . . . . . . . . . . . . . . . . . . . . . . . . . . 47
36. Vérification de Redis dans le navigateur . . . . . . . . . . . . . . . . 47
. . . 48
37. Générer le certificat SSL et la clé privée . . . . . . . . . . . . . . . . . . . . 48
38. Modifier la configuration du VirtualHost . . . . . . . . . . . . . . . . . . .
39. Modifier la configuration d’Apache pour HTTP/2 . . . . . . . . . . . . . .
40. Caption . . . . . . . . . . . . . . 2. . . . . . . . . . . . . . . . . . . . . . .
41. Implémentation de HSTS sur Nextcloud . . . . . . . . . . . . . . . .
. . .
42. Vérification de l’activation de HSTS . . . . . . . . . . . . . . . . . . . . . .
12 février 2025

II.10 Vérification des Pretty URLs . . . . . . . . . . . . . . . . . . . . . . . . . 49


II.11 Scan des URL cachées avec Gobuster . . . . . . . . . . . . . . . . . . . . . 53
12. Exécution du script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
13. Installation et activation de Fail2Ban . . . . . . . . . . . . . . . . . . . . . 61
14. service est bien activé et en cours d’exécution . . . . . . . . . . . . . 61
. . . 62
15. Création du filtre Fail2Ban pour Nextcloud . . . . . . . . . . . . . . . . . . 63
16. Vérification du fonctionnement de Fail2Ban . . . . . . . . . . . . . . 63
. . . 64
17. Redémarrage et activation de Fail2Ban . . . . . . . . . . . . . . . . . . . . 64
18. Tentatives d’echec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
19. kali banni par fail2ban . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
20. Vérification de banissment de kali . . . . . . . . . . . . . . . . . . . . . . . 66
21. Débannir une IP spécifique . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
22. Nikto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
23. Ajout des en-tête HTTP dans Apache . . . . . . . . . . . . . . . . . . . . . 69
24. Gobuster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
25. Limiter l’accès aux fichiers sensibles . . . . . . . . . . . . . . . . . . . . . . 70
26. SQLMap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27. Ajout de protections . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . .

3
12 février 2025

Listings
1 Installation de MariaDB . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
2 Téléchargement et extraction des fichiers . . . . . . . . . . . . . . . . . . .
16
3 Définition des permissions . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
4 fichier de configuration Apache
. . . . . . . . . . . . . . . . . . . . . . . . 18
5 Redémarrage d’Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
6 Vérifier que PHP-FPM fonctionne . . . . . . . . . . . . . . . . . . . . . . .
21
7 Désactiver le module mod-php et le mode Prefork . . . . . . . . . . . . . .
21
8 fichier php.ini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
9 Modifier le fichier php.ini . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
10 Redémarrer PHP-FPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
11 Redémarrer PHP-FPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
12 fichier de configuration Apache
. . . . . . . . . . . . . . . . . . . . . . . . 24
13 Modifier le fichier de configuration Apache . . . . . . . . . . . . . . . . . .
24
14 Redémarrer apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
15 créer le fichier info.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
16 code dans info.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
17 activation OPCache-JIT . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
18 redémarrage de php-FPM
. . . . . . . . . . . . . . . . . . . . . . . . . . .
29
19 Activer APCu dans PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
20 Redémarrer PHP-FPM et Apache . . . . . . . . . . . . . . . . . . . . . . .
32
21 Configurer Nextcloud pour utiliser APCu . . . . . . . . . . . . . . . . . . .
32
22 Démarrer et activer Redis
. . . . . . . . . . . . . . . . . . . . . . . . . . .
34
23 Configurer Redis pour utiliser un socket Unix
. . . . . . . . . . . . . . . . 4 34
24 Ajouter Apache au groupe Redis . . . . . . . . . . . . . . . . . . . . . . . .
35
25 Redémarrer Redis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12 février 2025

46 Journalisation des tentatives bloquées . . . . . . . . . . . . . . . . . . . . . 59


47 Blocage final de tout le trafic non autorisé . . . . . . . . . . . . . . . . . . 59
48 Exécution du script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
49 fichier de configuration Fail2Ban . . . . . . . . . . . . . . . . . . . . . . . . 61

5
12 février 2025

Introduction

1 Présentation du projet

Dans un monde où la gestion des données devient un enjeu majeur, garantir la sécurité,
l’accessibilité et la confidentialité des fichiers est une nécessité pour les entreprises et les
particuliers. Ce projet vise à installer, configurer et sécuriser Nextcloud , une solution
open-source de stockage et de collaboration, permettant d’héberger ses propres fichiers
sur un serveur personnel ou d’entreprise.
L’objectif principal de ce projet est d’établir un environnement Nextcloud fonctionnel
et hautement sécurisé. L’installation sera réalisée sur un serveur Ubuntu 22.04 LTS en
suivant les meilleures pratiques. La configuration inclura des optimisations de performance
via PHP-FPM , Redis et APCu pour assurer un fonctionnement fluide. La
sécurisation du système constituera une partie cruciale du projet, avec l’implémentation de
certificats SSL, l’activation de HTTP/2, la mise en place de
restrictions d’accès et l’ajout de protections avancées contre les
attaques courantes.
Le choix de Nextcloud repose sur plusieurs facteurs :

• Auto-hébergement sécurisé : Contrairement aux services de stockage cloud

pu- blics, Nextcloud offre un contrôle total sur les données, garantissant la
confidentialité des informations sensibles.

• Flexibilité et extensibilité : Il permet d’intégrer des applications tierces et

de personnaliser l’expérience utilisateur selon les besoins spécifiques.

• Communauté active et support continu : Nextcloud bénéficie d’un

écosystème dynamique, assurant mises à jour et correctifs de sécurité réguliers.

Grâce à ce projet, nous démontrerons non seulement notre capacité à installer et


configurer une application serveur complexe, mais aussi notre maîtrise des principes de
cybersécurité appliqués à un environnement en production.

6
12 février 2025

2 Rôle et importance de Nextcloud

Nextcloud est une solution complète de stockage et de partage de fichiers en auto-


hébergement, souvent comparée à Dropbox, Google Drive ou OneDrive. Son
principal avantage réside dans la maîtrise des données, permettant aux utilisateurs
d’héberger eux- mêmes leurs fichiers au lieu de les confier à un prestataire externe.
Son rôle est multiple :

• Stockage et synchronisation sécurisée : Permet aux utilisateurs


d’accéder à leurs fichiers depuis n’importe quel appareil, tout en garantissant un
niveau de chiffrement avancé.

• Collaboration en temps réel : Grâce à des outils intégrés comme OnlyOffice

ou Collabora Online, plusieurs utilisateurs peuvent éditer des documents


simultané- ment.

• Gestion fine des droits d’accès : Nextcloud offre un système de

permissions avancé, essentiel pour les entreprises souhaitant restreindre l’accès à


certaines res- sources.

• Sécurisation renforcée : Contrairement aux services cloud traditionnels,

Next- cloud permet de contrôler totalement la sécurité des données et des accès,
avec des outils comme l’authentification à double facteur, la journalisation
avancée et l’intégration LDAP.

Nextcloud est aujourd’hui largement adopté par les organisations gouvernementales,


les institutions éducatives et les entreprises cherchant une alternative plus privée et plus
sécurisée aux solutions cloud classiques. Il représente une réponse efficace aux préoccupa-
tions croissantes en matière de souveraineté des données.

7
12 février 2025

3 Références utilisées

La mise en place de Nextcloud s’appuie sur une documentation fiable et des expéri-
mentations avancées :

— Documentation d’installation : MailServerGuru - Installer Nextcloud sur


Ubuntu 24.04

— Documentation de sécurité : MailServerGuru - Sécuriser Nextcloud

— Expérimentations personnelles :

• Mise en place d’un pare-feu avancé (iptables) pour limiter les connexions mal-

veillantes.

• Ajout de Fail2Ban pour bloquer les attaques par force brute sur le système

d’authentification Nextcloud.

• Tests de vulnérabilités avec Kali Linux (Nikto, Hydra, SQLMap,

Nmap, Gobuster ) afin de détecter et corriger d’éventuelles failles.

4 Validation de l’installation et de la sécurisation

Comment allons-nous démontrer que l’installation est réussie ?

— Accès à l’interface Nextcloud via un navigateur : Une fois


l’installation ter- minée, nous testerons la connexion à https ://server.dic.sn pour
nous assurer que l’application fonctionne correctement.

— Vérification des logs : Nous analyserons les fichiers de logs d’Apache et de

Next- cloud pour confirmer qu’il n’y a pas d’erreurs bloquantes.

— Test des fonctionnalités clés : Nous vérifierons l’upload et le partage de

fichiers, la gestion des utilisateurs et les paramètres de synchronisation.

8
12 février 2025

Comment allons-nous démontrer que Nextcloud est sécurisé ?

— Tests de sécurité avec Kali Linux :

• Nikto : Scan des en-têtes HTTP et des configurations Apache.

• SQLMap : Vérification de la robustesse des requêtes SQL contre les injections.

• Hydra : Simulation d’attaques par force brute sur l’authentification Nextcloud.

• Nmap : Scan des ports ouverts et vérification des services accessibles.

• Gobuster : Recherche de fichiers sensibles exposés sur le serveur.

— Protection active via Fail2Ban et Pare-feu :

• Vérification que Fail2Ban détecte et bloque les IP suspectes après plusieurs

tentatives d’accès échouées.

• Confirmation que les règles iptables bloquent efficacement les attaques SYN

flood, IP Spoofing et autres tentatives malveillantes.

En combinant ces différentes techniques, nous prouverons que Nextcloud n’est pas
seulement fonctionnel, mais aussi renforcé contre les menaces les plus courantes.

9
12 février 2025

I Installation de Nextcloud

F IG U R E I.1 – Installation de
nextcloud

1 Phase 1 : Configuration de base de Nextcloud

Dans cette première phase, nous allons procéder à l’installation de Nextcloud sur
Ubuntu 22.04 LTS en suivant une approche méthodique. L’objectif est de mettre en place
une base solide et fonctionnelle, qui servira de socle aux prochaines phases d’optimisation
et de sécurisation.
La phase 1 se compose des étapes suivantes :

— Mise à jour et mise à niveau du système

— Installation des modules Apache et PHP

— Installation et configuration de la base de données MariaDB

— Préparation et installation de Nextcloud

10
12 février 2025

1.1 Mise à jour et mise à niveau du système

Avant toute installation, il est primordial de s’assurer que le système est à jour afin
d’éviter tout problème de compatibilité avec les versions des logiciels que nous allons
installer.

F IG U R E I.2 – Mise à jour et mise à niveau du système

Explication :

• apt update : Met à jour la liste des paquets disponibles depuis les dépôts Ubuntu.

• apt upgrade -y : Installe les dernières mises à jour pour les paquets déjà
installés.

Pourquoi c’est important ?

• Un système obsolète peut contenir des failles de sécurité.

• Les mises à jour garantissent une meilleure compatibilité avec les nouvelles versions

d’Apache, PHP et MariaDB.

2. Installation des modules Apache et PHP

Nextcloud étant une application web, nous avons besoin d’un serveur web et d’un
moteur de traitement PHP. Nous allons installer Apache2 pour servir les pages web et
PHP avec ses extensions nécessaires au bon fonctionnement de Nextcloud.
Étapes
d’installation
Installation
d’Apache2

— Explication : 11
• Apache est le
serveur web qui
servira les fichiers
12 février 2025

F IG U R E I.3 – Installation d’Apache2

• -y permet d’accepter automatiquement l’installation sans demande de confir-

mation.

— Vérification du service Apache :

F IG U R E I.4 – Vérification du service


Apache

Installation de PHP et des modules nécessaires

F IG U R E I.5 – Installation de PHP et des modules


nécessaires

Explication des modules importants :

— php-mysql : Permet à PHP de communiquer avec MariaDB.

— php-mbstring : Gère les chaînes de caractères en UTF-8.

12
12 février 2025
— php-curl : Essentiel pour les connexions HTTP sécurisées.

— php-imagick : Permet le traitement des images.

— php-zip : Gère les fichiers ZIP nécessaires pour Nextcloud.

— php-xml : Manipule les fichiers XML.

— php-gmp : Permet de gérer les nombres de grande taille, utile pour certaines fonc-

tionnalités avancées.

Vérification de l’installation de PHP :

F IG U R E I.6 – Vérification de l’installation de


PHP

Cela affiche la version de PHP installée.


Activation des modules Apache requis

F IG U R E I.7 – Activation des modules Apache requis

Explication :

• rewrite : Permet d’utiliser les URL simplifiées (nécessaire pour Nextcloud).

• headers : Gère les en-têtes HTTP pour la sécurité et la compatibilité.

• ssl : Active le support HTTPS.

Redémarrage et activation d’Apache :

13
12 février 2025

F IG U R E I.8 – Redémarrage et activation d’Apache

1.3 Installation de MariaDB (Base de données)

Nextcloud a besoin d’une base de données pour stocker ses informations. Nous allons
utiliser MariaDB, une alternative open-source à MySQL.
Installation de MariaDB :

1 sudo a p t i n s t a l l ma r i a d b - s e r v e r - y

Listing 1 – Installation de MariaDB

Vérification du statut du service :

F IG U R E I.9 – Vérification du statut du


service

14
12 février 2025

Configuration de la base de données pour Nextcloud


Nous allons maintenant créer une base de données et un utilisateur dédiés à Nextcloud.
Création de l’utilisateur et de la base de données Nextcloud :

F IG U R E I.10 – Création de l’utilisateur et de la base de données Nextcloud

Explication :

• On crée un utilisateur ncloud avec un mot de passe sécurisé.

• On crée la base de données ncloud avec un encodage UTF-8 (recommandé pour les

systèmes modernes).

• On donne les droits nécessaires à l’utilisateur ncloud pour gérer la base.

Redémarrage de MariaDB :

F IG U R E I.11 – Redémarrage de
MariaDB

1.4 Préparation et installation de Nextcloud

Nous allons maintenant télécharger et installer Nextcloud sur notre serveur.


Téléchargement et extraction des fichiers

15
12 février 2025

1 cd / v a r / www / html
2 sudo wget h tt p s : / / download . n e x t c l o u d . com / s e r v e r / r e l e a s e s / l a t e s t .
3 zip unzip l a t e s t . zip

4 rm - r f l a t e s t . z i p

Listing 2 – Téléchargement et extraction des fichiers

F IG U R E I.12 – Téléchargement et extraction des fichiers

Explication :

• wget télécharge la dernière version de Nextcloud.

• unzip extrait les fichiers dans le dossier /var/www/html/nextcloud.

• rm -rf latest.zip supprime l’archive, car elle n’est plus nécessaire.

Définition des permissions

1 sudo chown - R www - d a t a : www - d a t a / v a r / www / h t m l / n e x t c l o u d /

Listing 3 – Définition des permissions

Explication :

• www-data est l’utilisateur système d’Apache. On lui attribue tous les droits sur le

dossier Nextcloud.

1.5 Installation de Nextcloud via la ligne de commande

L’installation se fera via la commande occ, qui est plus rapide que l’interface graphique.
Commande d’installation silencieuse :

16
12 février 2025

F IG U R E I.13 – Installation de Nextcloud

Explication :

— Base de données : ncloud, utilisateur ncloud, mot de passe Sh@do5 !d.

— Compte administrateur : admin , mot de passe

password . tout s’est bien passé, Nextcloud est installé avec

succès.
Nextcloud autorise l’accès uniquement à partir de l’hôte local, il
pourrait par le biais de
l’erreur « Accès via un domaine non approuvé ». nous devons autoriser l’accès à Nextcloud
en utilisant l’adresse IP ou le nom de domaine.

• définition de nom de domaine puisqu’on a pas de serveur dns :

F IG U R E I.14 – définition de nom de domaine server1.dic.sn

• Ajout du nom de domaine dans le fichier /etc/hosts :

F IG U R E I.15 – Ajout du nom de domaine

• Autorisation d’accès à Nextcloud en utilisant l’adresse IP ou le nom de


domaine :

17
12 février 2025

F IG U R E I.16 – Autorisation d’accès à Nextcloud

1.6 Configuration Apache pour Nextcloud

Nous devons maintenant configurer Apache pour qu’il prenne en charge Nextcloud.
Modification du fichier de configuration Apache :

1 sudo nano / e t c / a p a c h e2 / s i t e s - e n a b l e d /000 - d e f a u l t . co n f

Listing 4 – fichier de configuration Apache

Ajoutez ceci dans <VirtualHost * :80> :

F IG U R E I.17 – Modification du fichier de configuration


Apache

Redémarrage d’Apache :
1 sudo s y s t e m c t l restart apache2

Listing 5 – Redémarrage d’Apache

Accédons depuis le navigateur à Nextcloud via http ://server1.dic.sn

18
12 février 2025

F IG U R E I.18 – Caption

• Nextcloud est maintenant installé et accessible via un navigateur.

• L’environnement est fonctionnel et prêt pour la phase suivante :

l’optimisation des performances.

• Nous avons préparé le terrain pour la sécurisation avancée du serveur.

Prochaine étape : Améliorer les performances avec PHP-FPM, Redis et APCu.

2 Phase 2 : Réglage des performances

Dans cette phase, nous allons optimiser les performances de Nextcloud pour garan-
tir un fonctionnement rapide, fluide et efficace. En effet, Nextcloud est une application
gourmande en ressources, et sans optimisation, elle peut être lente, surtout avec un grand
nombre d’utilisateurs et de fichiers stockés.
L’optimisation passe par plusieurs étapes essentielles :

— Installation et configuration de PHP-FPM pour améliorer le traitement des re-

quêtes PHP.

— Création d’une page info.php pour vérifier les modules PHP activés.

19
12 février 2025
— Activation d’OPCache et OPCache-JIT pour accélérer l’exécution des

scripts PHP.

— Activation d’APCu pour optimiser le cache mémoire.

— Configuration de Redis pour améliorer la gestion des sessions et éviter les blocages

de fichiers.

Nous allons détailler chaque étape pour comprendre pourquoi nous le faisons et com-
ment l’appliquer correctement.

2.1 Installation de PHP-FPM avec Apache

Qu’est-ce que PHP-FPM et pourquoi l’utiliser ?


PHP-FPM (FastCGI Process Manager) est une alternative plus performante
au module PHP classique utilisé par Apache (mod_php). Il permet de gérer les
requêtes PHP de manière plus efficace, ce qui réduit la charge sur le serveur et améliore la
vitesse d’exécution.
Par défaut, Apache utilise le mode MPM-Prefork avec mod_php, ce qui
signifie qu’Apache exécute chaque requête PHP dans un processus séparé. Cela peut
devenir lent et consommer beaucoup de mémoire lorsque de nombreuses requêtes sont
envoyées simultanément.
Avec PHP-FPM , au lieu de traiter chaque requête PHP individuellement, Apache
envoie les requêtes PHP à un gestionnaire de processus PHP indépendant, ce qui optimise
le traitement et réduit la consommation de ressources.
Installation et activation de PHP-FPM

F IG U R E I.19 – Installation de PHP-


FPM

20
12 février 2025

Explication :

• Cette commande installe PHP-FPM version 8.3, qui sera utilisé pour traiter les

fichiers PHP dans Nextcloud.

Vérifier que PHP-FPM fonctionne correctement

1 service php8 . 3 - fpm s t a t u s


2 php - fpm8 . 3 -v
3 ls - la / v a r / run / php / php8 . 3 - fpm . s o c k

Listing 6 – Vérifier que PHP-FPM fonctionne

F IG U R E I.20 – Vérifier que PHP-FPM fonctionne

Explication :

— service php8.3-fpm status : Vérifie si PHP-FPM est bien démarré.

— php-fpm8.3 -v : Affiche la version de PHP-FPM installée.

— ls -la /var/run/php/php8.3-fpm.sock : Vérifie si le socket Unix utilisé par PHP-FPM

a bien été créé.

Désactiver le module mod_php et le mode Prefork


Nous devons maintenant désactiver mod_php et mpm_prefork, car ils ne sont plus
nécessaires avec PHP-FPM.

1 sudo a2 dismod php8 . 3


2 sudo a2 dismod mpm_prefork

Listing 7 – Désactiver le module mod-php et le mode Prefork

Explication :

— a2dismod php8.3 : Désactive le module PHP traditionnel utilisé par Apache.

21
12 février 2025

— a2dismod mpm_prefork : Désactive le mode Prefork, qui n’est pas optimisé pour
PHP-FPM.

Ensuite, nous activons le module MPM-Event , qui est plus performant avec
PHP- FPM .

F IG U R E I.21 – activation du module MPM-Event

Explication :

• mpm_event : Gère mieux les requêtes PHP en mode multi-thread.

• proxy_fcgi : Permet à Apache d’envoyer les requêtes PHP à PHP-FPM.

Configuration des paramètres PHP pour optimiser les


performances
Nous devons maintenant modifier certains paramètres dans le fichier php.ini pour
améliorer la gestion des fichiers et des performances.
Modifier le fichier php.ini
1 sudo nano / e t c / php / 8 . 3 / fpm / php . i n i

Listing 8 – fichier php.ini

Ajoutez ou modifiez ces valeurs :

1 u p l o a d _ m a x _ fi l e s i z e = 64 M
2 p o s t _ m a x _ s i z e = 96 M
3 m e m o r y _ l i m i t = 512 M

4 m a x _ e x e c u ti o n _ ti m e = 600

5 m a x _ i n p u t _ v a r s = 3000

6 m a x _ i n p u t _ ti m e = 1000

Listing 9 – Modifier le fichier php.ini

22
12 février 2025

Explication :

— upload_max_filesize : Taille maximale des fichiers à téléverser.

— post_max_size : Taille maximale des données POST.

— memory_limit : Mémoire allouée à PHP.

— max_executio_time : Temps d’exécution maximal d’un script PHP.

— max_input_vars : Nombre maximal de variables d’entrée.

Appliquer automatiquement ces changements avec une seule commande :

F IG U R E I.22 – Appliquation automatiquement des changements

Explication :

— sed est utilisé pour modifier directement le fichier sans ouvrir l’éditeur.

Redémarrer PHP-FPM pour appliquer les changements :

1 sudo s e r v i c e php8 . 3 - fpm r e s t a r t

Listing 10 – Redémarrer PHP-FPM

Optimisation de PHP-FPM en modifiant www.conf


Nous allons modifier les paramètres du pool de processus PHP-FPM pour améliorer
la gestion des connexions simultanées.
Modifier www.conf

1 sudo nano / e t c / php / 8 . 3 / fpm / p o o l . d / www . co n f


2 pm. m a x _ c h i l d r e n = 64
3 pm. s t a r t _ s e r v e r s = 16

23
12 février 2025

4 pm. m i n _ s p a r e _ s e r v e r s = 16
5 pm. m a x _ s p a r e _ s e r v e r s = 32

Listing 11 – Redémarrer PHP-FPM

Explication :

— pm.max_children : Nombre maximum de processus PHP simultanés.

— pm.start_servers : Nombre de processus PHP démarrés au début.

— pm.min_spare_servers : Nombre minimum de processus en attente.

— pm.max_spare_servers : Nombre maximum de processus en attente.

Appliquer ces modifications en une seule commande :

F IG U R E I.23 – Appliquer ces modifications

Configuration Apache pour utiliser PHP-FPM


Nous devons maintenant dire à Apache d’envoyer les requêtes PHP à PHP-FPM.
Modifier le fichier de configuration Apache

1 sudo nano / e t c / a p a c h e2 / s i t e s - e n a b l e d /000 - d e f a u l t . co n f

Listing 12 – fichier de configuration Apache

Ajoutez cette ligne dans le bloc <VirtualHost> :

1 < F i l e s M a t c h " . php$ " >


2 S e t H a n d l e r " p r o x y : u n i x : / v a r / ru n / php / php8 . 3 - fpm . s o c k | f c g i : / /
localhost
/"

24
12 février 2025

3 </ F i l e s M a t c h >

Listing 13 – Modifier le fichier de configuration Apache

F IG U R E I.24 – Modifier le fichier de configuration Apache

Explication :
Cela permet à Apache d’envoyer les fichiers PHP à PHP-FPM pour un traitement
plus rapide.
Redémarrer Apache pour appliquer les changements :
1 sudo s e r v i c e php8 . 3 - fpm r e s t a r t

Listing 14 – Redémarrer apache

• Nextcloud est maintenant configuré pour utiliser PHP-FPM, ce qui améliore consi-

dérablement ses performances.

• Les paramètres PHP ont été ajustés pour prendre en charge de plus gros fichiers et

optimiser l’utilisation mémoire.

• Apache est maintenant configuré pour déléguer le traitement PHP à PHP-FPM via

un socket Unix.

2.2 Création d’une page info.php

Pourquoi créer une page info.php ?

25
12 février 2025

La page info.php est un fichier PHP simple qui permet d’afficher toutes les informations
liées à PHP sur le serveur. Elle est utilisée pour vérifier que PHP est bien installé et
configuré correctement.
Grâce à cette page, nous pouvons voir :

— La version de PHP installée

— Les modules PHP activés (comme OPCache, APCu, Redis, etc.)

— Le mode d’exécution PHP utilisé (PHP-FPM ou mod_php)

— Les paramètres de configuration actuels

C’est un outil indispensable pour diagnostiquer d’éventuels problèmes et confirmer


que nos optimisations sont bien appliquées.
Création et utilisation de la page info.php
Nous allons maintenant créer la page info.php dans le dossier Nextcloud.
Se déplacer dans le dossier Nextcloud et créer le fichier
info.php
1 cd / v a r / www / h t m l / n e x t c l o u d
2 sudo nano i n f o . php

Listing 15 – créer le fichier info.php

Explication :

— Nous allons créer la page directement dans le dossier où Nextcloud est installé.

— nano info.php ouvre un éditeur de texte pour écrire le contenu du fichier.

Ajouter le code suivant dans info.php

1 <? php p h p i n f o ( ) ; ?>

Listing 16 – code dans info.php

Explication :

— phpinfo() ; est une fonction PHP qui affiche toutes les informations sur PHP et ses
extensions.

Vérification de la page info.php

26
12 février 2025

Une fois le fichier créé, nous allons le tester dans un navigateur.


Ouvrir l’URL suivante dans un navigateur :

F IG U R E I.25 – page de info.php

Explication :

— Cela affiche une page avec toutes les informations sur PHP et ses modules activés.

— Dans la section "Server API", nous devons voir "FPM/FastCGI".

Si "Server API" affiche autre chose que "FPM/FastCGI", cela signifie que PHP-FPM
n’est pas bien configuré et qu’Apache utilise toujours mod_php.
Si tout est bien configuré, nous pouvons maintenant continuer avec l’optimisation de
PHP en activant OPCache et OPCache-JIT.

3. Activation d’OPCache et OPCache-JIT

Qu’est-ce qu’OPCache et pourquoi


l’utiliser ? Problème de base avec PHP
Lorsque PHP exécute un script, il suit plusieurs
étapes :

• Lecture du fichier PHP

27
12 février 2025

• Analyse et compilation du code en bytecode

• Exécution du bytecode

Problème : À chaque requête, PHP refait toutes ces étapes, ce qui ralentit l’exécution
des scripts.
Solution : OPCache
OPCache (Optimized PHP Cache) est un module qui stocke le bytecode
PHP précompilé en mémoire.
Résultat :

• PHP n’a plus besoin de recompiler le code à chaque requête.

• Les pages se chargent plus rapidement.

• La charge du serveur est réduite.

OPCache est activé par défaut sur PHP, mais nous allons l’optimiser.
Vérification d’OPCache
Dans la page http ://server1.dic.sn/info.php, recherchez la section OPCache. Si OP-
Cache est activé, vous verrez une section similaire à :

F IG U R E I.26 – OPCache

Qu’est-ce que OPCache-JIT et pourquoi


l’activer ? Problème avec PHP traditionnel
PHP interprète le code à chaque exécution, ce qui le rend plus lent que les langages
compilés comme C ou Java.
Solution : Compilation Just-In-Time (JIT)
OPCache-JIT compile le code PHP en langage machine avant l’exécution.

28
12 février 2025

Résultat :

— Exécution ultra-rapide des scripts PHP.

— Performances proches des langages compilés.

— Meilleur traitement des calculs complexes (ex : machine learning, rendu 3D, etc.).

En activant OPCache-JIT, nous accélérons Nextcloud tout en réduisant la charge


CPU.

1 sudo nano / e t c / php / 8 . 3 / fpm / c o n f . d/10 - o p ca c h e . i n i


2 z e n d _ e x t e n s i o n = o p ca c h e . so
3 o p ca c h e . e n a b l e _ c l i =1

4 o p ca c h e . j i t = o n

5 o p ca c h e . j i t = 1255

6 o p ca c h e . j i t _ b u ff e r _ s i z e =
128 M
Listing 17 – activation OPCache-JIT

Appliquer les changements


Une fois OPCache et OPCache-JIT configurés, nous devons redémarrer PHP-FPM
pour prendre en compte les modifications.

1 sudo s e r v i c e php8 . 3 - fpm r e s t a r t

Listing 18 – redémarrage de php-FPM

Vérifier si OPCache-JIT est bien activé :

F IG U R E I.27 – OPCache-
JIT

29
12 février 2025

• OPCache est activé et stocke le bytecode PHP en mémoire : Les fichiers PHP se

chargent plus rapidement.

• OPCache-JIT est activé : PHP exécute son code presque aussi vite qu’un langage

compilé.

• La charge du serveur est réduite et Nextcloud devient plus performant.

4. Activation d’APCu – Optimisation du cache des sessions PHP

Qu’est-ce qu’APCu et pourquoi


l’utiliser ? Le problème sans APCu
Lorsqu’un utilisateur utilise Nextcloud, le serveur doit souvent recharger plusieurs fois
les mêmes données pour chaque requête. Sans un système de cache performant, chaque
requête PHP doit être calculée depuis le début, ce qui ralentit les performances du serveur.
La solution : APCu (Alternative PHP Cache User)
APCu est un mécanisme de mise en cache mémoire qui permet de stocker temporai-
rement des données fréquemment utilisées par PHP.
Résultat :

• Les requêtes PHP sont plus rapides car certaines données sont déjà en mémoire.

• La charge sur la base de données est réduite, ce qui améliore l’efficacité globale du

serveur.

• Nextcloud devient plus réactif, surtout lorsque plusieurs utilisateurs accèdent aux

fichiers simultanément.

APCu est recommandé par Nextcloud pour la mise en cache locale.


Installation et activation d’APCu
Nous allons maintenant installer et configurer APCu pour Nextcloud.

30
12 février 2025

F IG U R E I.28 – Installation et activation d’APCu

Explication :

— Cette commande installe le module APCu spécifique à PHP 8.3.

Vérifier si APCu est activé


Une fois installé, nous devons vérifier si APCu est bien activé sur PHP.

F IG U R E I.29 – Vérifier si APCu est activé

Si la sortie affiche apcu, alors le module est bien installé. Si APCu n’apparaît pas,
nous devons l’activer manuellement.
Activer APCu dans PHP
Nous devons maintenant ajouter APCu à la configuration PHP.

1 sudo nano / e t c / php / 8 . 3 / fpm / c o n f . d/20 - apcu . i n i


2 e x t e n s i o n = apcu .
3 so a p c . e n a b l e _ c l i
=1
Listing 19 – Activer APCu dans PHP

Explication des paramètres :

— extension=apcu.so : Charge le module APCu dans PHP.

— apc.enable_cli=1 : Permet d’utiliser APCu avec les commandes en ligne (php occ

pour Nextcloud).

Redémarrer PHP-FPM et Apache


Nous devons maintenant redémarrer les services pour que les modifications prennent
effet.

31
12 février 2025

1 sudo s y s t e m c t l r e s t a r t php8 . 3 - fpm


2 sudo s y s t e m c t l restart apache2

Listing 20 – Redémarrer PHP-FPM et Apache

Vérifier l’activation d’APCu


Rendez-vous sur http ://server1.dic.sn/info.php et cherchons la section "APCu", elle
doit afficher "Prise en charge APCu activée"

F IG U R E I.30 – Vérifier l’activation d’APCu dans le navigateur

Configurer Nextcloud pour utiliser APCu


Nous devons maintenant dire à Nextcloud d’utiliser APCu pour la mise en cache.
Ajoutez cette ligne sous les autres paramètres :
1 sudo nano / v a r / www / h t m l / n e x t c l o u d / c o n fi g / c o n fi g . php
2 ’ memcache . l o c a l ’ => ’ \ OC\ Memcache \ APCu ’ ,

Listing 21 – Configurer Nextcloud pour utiliser APCu

Explication :

— Cette ligne informe Nextcloud qu’il doit utiliser APCu pour stocker les données
fréquemment utilisées en cache.

APCu est maintenant activé et utilisé par Nextcloud pour accélérer le chargement des
fichiers et des requêtes PHP.

• Nextcloud utilise maintenant APCu pour optimiser la gestion des sessions et le cache

mémoire.

32
12 février 2025

F IG U R E I.31 – Configurer Nextcloud pour utiliser APCu

• Les requêtes PHP sont plus rapides et la charge sur le serveur est réduite.

• L’accès aux fichiers et aux pages Nextcloud est plus fluide.

5. Configuration du cache Redis – Amélioration du verrouillage


des fi- chiers

Qu’est-ce que Redis et pourquoi


l’utiliser ? Le problème sans Redis
Lorsqu’un utilisateur télécharge, modifie ou supprime un fichier dans Nextcloud, le
fichier doit être verrouillé temporairement pour éviter les conflits.
Sans un bon système de verrouillage, plusieurs utilisateurs peuvent modifier un fichier
en même temps, ce qui peut entraîner des pertes de données ou des erreurs.
La solution : Redis
Redis est une base de données en mémoire ultra-rapide, qui peut être utilisée pour
:

— Gérer le cache (comme APCu, mais de manière distribuée).

— Gérer le verrouillage des fichiers pour éviter la corruption des fichiers.

Avec Redis, Nextcloud peut mieux gérer les accès concurrents aux fichiers, garantissant
une meilleure stabilité et rapidité.
Installation et configuration de Redis
33
12 février 2025

Nous allons maintenant installer Redis et l’intégrer à Nextcloud.


Installer Redis et le module PHP Redis

F IG U R E I.32 – Installer Redis et le module PHP Redis

Explication :

— redis-server installe le serveur Redis.

— php-redis permet à PHP (et donc Nextcloud) d’interagir avec Redis.

Démarrer et activer Redis

1 sudo s y s t e m c t l s t a r t redis - server


2 sudo s y s t e m c t l enable r e d i s - ser ver

Listing 22 – Démarrer et activer Redis

Explication :

— start : Démarre Redis immédiatement.

— enable : Permet à Redis de démarrer automatiquement au boot du serveur.

Configurer Redis pour utiliser un socket Unix au lieu d’un port


Par défaut, Redis écoute sur un port TCP, mais pour améliorer la sécurité et la rapidité,
nous allons le faire fonctionner en socket Unix.

1 sudo nano / e t c / r e d i s / r e d i s . co n f
2 port 0
3 u n i x s o c k e t / v a r / run / r e d i s / r e d i s .
4 s o c k u n i x s o c k e t p e r m 770

Listing 23 – Configurer Redis pour utiliser un socket Unix

34
12 février 2025

Explication :

— port 0 : Désactive l’accès à Redis via un port (plus sécurisé).

— unixsocket : Active la communication via un fichier socket.

— unixsocketperm 770 : Définit les permissions du socket pour qu’Apache puisse y

accéder.

Ajouter Apache au groupe Redis

1 sudo usermod - a - G r e d i s www - d ata

Listing 24 – Ajouter Apache au groupe Redis

Explication :

— Ajoute l’utilisateur Apache (www-data) au groupe Redis, pour qu’il puisse utiliser
le socket Redis.

Redémarrer Redis pour appliquer les modifications :


1 sudo s y s t e m c t l r e s t a r t redis - server

Listing 25 – Redémarrer Redis

Configurer Nextcloud pour utiliser Redis


Nous allons maintenant dire à Nextcloud d’utiliser Redis pour le verrouillage des fi-
chiers.

1 sudo nano / v a r / www / h t m l / n e x t c l o u d / c o n fi g / c o n fi g . php


2

3 ’ fi l e l o c k i n g . e n a b l e d ’ => ’ t r u e ’ ,
4 ’ memcache . l o c k i n g ’ => ’ \ OC\ Memcache \ R e d i s ’ ,
5 ’ r e d i s ’ => [
6 ’ host ’ => ’ / v a r / run / r e d i s / r e d i s . s o c k ’ ,
7 ’ port ’ => 0 ,
8 ’ dbindex ’ => 0 ,
9 ’ p a s s w o rd ’ => ’ ’ ,
10 ’ ti m e o u t ’ => 1 . 5 ,
11 ],

Listing 26 – Configurer Nextcloud pour utiliser Redis

35
12 février 2025

F IG U R E I.33 – Configurer Nextcloud pour utiliser Redis

Explication :

— Active le verrouillage des fichiers (filelocking.enabled).

— Nextcloud utilise Redis comme gestionnaire de verrouillage des fichiers.

Activer le verrouillage des sessions Redis dans PHP


Nous devons maintenant activer Redis dans PHP pour gérer les sessions.

F IG U R E I.34 – Activer le verrouillage des sessions


Redis

Explication :

— Ces paramètres optimisent la gestion des sessions PHP via Redis.

Redémarrer tous les services pour appliquer les modifications :

F IG U R E I.35 – Redémarrer tous les


services

36
12 février 2025

F IG U R E I.36 – Vérification de Redis dans le navigateur

Redis est maintenant activé et utilisé par Nextcloud pour améliorer la gestion des
fichiers et éviter les conflits d’accès.
Maintenant que nous avons terminé les étapes d’amélioration des performances. Nous
allons travailler pour la sécurité, tout d’abord, nous allons installer un certificat SSL
auto-signé pour Nextcloud.

II Sécurisation du système

Pourquoi la sécurisation de Nextcloud est cruciale ?


Nextcloud est une application d’auto-hébergement de fichiers, ce qui signifie que vos
données sensibles sont stockées directement sur votre serveur. Contrairement aux services
cloud comme Google Drive ou Dropbox, vous avez un contrôle total sur vos fichiers, mais
vous devez aussi assurer leur protection contre les cyberattaques.
Les vulnérabilités de Nextcloud avant sécurisation

• Nextcloud fonctionne en HTTP par défaut : Cela signifie que les données tran-

sitent en clair et peuvent être interceptées par un attaquant (attaque "Man-in-the-


Middle").

• Aucune protection contre les attaques par force brute : Un attaquant peut essayer

un grand nombre de mots de passe pour accéder aux comptes.

• Accès non restreint aux fichiers sensibles : Par défaut, certaines configurations

peuvent exposer des fichiers critiques du serveur (logs, fichiers de config, etc.).

• Pas de protection contre le sniffing réseau : Un attaquant sur le même réseau peut

espionner les échanges si ceux-ci ne sont pas chiffrés.

• Problèmes de performance et d’efficacité : Sans HTTP/2, les requêtes sont traitées

plus lentement, ce qui peut impacter l’expérience utilisateur.

37
12 février 2025

Nous allons maintenant mettre en place des solutions avancées pour protéger Next-
cloud :

— Forcer le chiffrement des communications via HTTPS avec un certificat SSL

— Activer HTTP/2 pour améliorer la vitesse et la sécurité des échanges

— Restreindre l’accès aux fichiers sensibles

1 Phase 3 : Sécurisation avancée de Nextcloud

1. Installation et configuration d’un certificat SSL auto-signé

Pourquoi utiliser un certificat


SSL ? Problème :
Lorsqu’un utilisateur se connecte à Nextcloud en HTTP, toutes les informations (iden-
tifiants, fichiers, sessions) circulent en clair sur le réseau. Un attaquant peut facilement
intercepter ces données.
Solution :
Un certificat SSL permet d’activer le protocole HTTPS (Hypertext Transfer Protocol
Secure).

— Toutes les données entre le serveur et l’utilisateur sont chiffrées.

— Empêche les attaques "Man-in-the-Middle".

— Renforce la confidentialité des utilisateurs.

Nous allons ici générer un certificat auto-signé.


Un certificat auto-signé est gratuit mais non
reconnu par les navigateurs (ils afficheront
un avertissement). Pour un certificat valide, il
faudrait utiliser Let’s Encrypt.
Génération d’un certificat SSL auto-signé Nous allons maintenant créer un certificat
SSL et l’intégrer à Apache.
Générer le certificat SSL et la clé privée

38
12 février 2025

1 sudo o p e n s s l re q - x509 - nodes - d ay s 365 - newkey r s a : 2 0 4 8 - ke y o u t / e t c /


s s l / p r i v a t e / s e l f s i g n e d . key - o u t / e t c / s s l / c e r t s / s e l f s i g n e d . c r t

Listing 27 – Générer le certificat SSL et la clé privée

F IG U R E II.1 – Générer le certificat SSL et la clé privée

Explication :

— req -x509 → Génère un certificat auto-signé.

— -nodes → Pas besoin d’un mot de passe pour la clé privée.

— -days 365 → Durée de validité du certificat (1 an).

— -newkey rsa :2048 → Crée une nouvelle clé RSA de 2048 bits.

— -keyout → Emplacement de la clé privée.

— -out → Emplacement du certificat.

Un formulaire apparaîtra pour entrer des informations (Pays, Organisation, etc.).


Configuration d’Apache pour utiliser le certificat
SSL Une fois le certificat créé, nous devons l’intégrer dans
Apache. Modifier la configuration du VirtualHost

1 sudo nano / e t c / a p a c h e2 / s i t e s - e n a b l e d /000 - d e f a u l t . co n f


2

39
12 février 2025

3 S S L E n g i n e on
4 S S L C e r ti fi c a t e F i l e / etc/ s s l / certs/ selfsigned . crt
5 S S L C e r ti fi c a t e Key F i l e / etc/ s s l / private / selfsigned .
key
Listing 28 – configuration du VirtualHost

F IG U R E II.2 – Modifier la configuration du VirtualHost

Explication :

— SSLEngine on → Active le chiffrement SSL.

— SSLCertificateFile → Indique l’emplacement du certificat.

— SSLCertificateKeyFile → Indique l’emplacement de la clé privée.

Activer le module SSL et redémarrer Apache

1 sudo a2 enmod s s l
2 sudo s y s t e m c t l restart apache2

Listing 29 – Activer le module SSL et redémarrer Apache

Explication :

— a2enmod ssl → Active le module SSL dans Apache.

— systemctl restart apache2 → Redémarre Apache pour appliquer les changements.

Le certificat SSL est maintenant activé, et Nextcloud est accessible via HTTPS.

40
12 février 2025

2. Activation du protocole HTTP/2

Qu’est-ce que HTTP/2 et pourquoi


l’activer ? Problème avec HTTP/1.1
Avec HTTP/1.1, le serveur doit ouvrir plusieurs connexions pour charger une page
avec plusieurs fichiers (CSS, JS, images, etc.). Cela ralentit le chargement et augmente la
consommation de ressources.
Solution avec HTTP/2
HTTP/2 permet :

— Une seule connexion est utilisée pour tout charger plus rapidement.

— Les fichiers sont envoyés en parallèle au lieu d’attendre un à un.

— Réduit la latence et améliore les performances de Nextcloud.

Activation de HTTP/2 dans Apache


Nous allons maintenant activer HTTP/2 sur notre serveur.
Activer le module HTTP/2

1 sudo a2 enmod h tt p 2

Listing 30 – Activer le module HTTP/2

Explication :

— Ce module permet à Apache d’utiliser HTTP/2 pour accélérer les échanges.

Modifier la configuration d’Apache pour HTTP/2


Nous devons ajouter la directive HTTP/2 dans la configuration SSL.

1 sudo nano / e t c / a p a c h e2 / s i t e s - e n a b l e d /000 - d e f a u l t . co n f


2

3 Protocols h2 h tt p / 1 . 1

5 sudo s y s t e m c t l restart apache2

Listing 31 – Modifier la configuration d’Apache pour HTTP/2

Explication :

41
12 février 2025

F IG U R E II.3 – Modifier la configuration d’Apache pour HTTP/2

— h2 → Active HTTP/2 sécurisé.

— http/1.1 → Permet toujours l’utilisation de HTTP/1.1 si nécessaire.

Explication de la vérification de HTTP/2 avec curl


Après avoir activé HTTP/2 sur notre serveur Apache, il est essentiel de vérifier que
le protocole fonctionne correctement. Pour cela, nous avons utilisé la commande curl, qui
permet d’envoyer une requête HTTP au serveur et d’analyser sa réponse.
Commande exécutée

1 curl - I - - h tt p 2 - k h tt p s : / / s e r v e r 1 . d i c . sn

Listing 32 – Comamnde curl

Explication des options utilisées :

— -I → Effectue uniquement une requête HEAD, qui récupère uniquement les en-têtes

HTTP (sans télécharger le contenu de la page).

— –http2 → Force l’utilisation du protocole HTTP/2.

— -k → Ignore les erreurs liées au certificat SSL auto-signé, permettant ainsi d’établir

la connexion même si le certificat n’est pas reconnu par une autorité de certification.

42
12 février 2025

Résultat obtenu
Après l’exécution de la commande, nous avons obtenu la réponse suivante du serveur :

1 HTTP /2 302
2 content - s e c u r i t y - p o l i c y : default - src ’ s e l f ’ ; script - src ’ self ’ ’ nonce -
PCXb Q i Ka 3 x C N v l 3 Ima GSp / / 8 a L L a f m fl E V 2 u 00 m O 9 zw = ’ ; style - src ’ self ’ ’
u n s a fe - i n l i n e ’ ; frame - s r c * ; img - s r c * d a t a : b l o b : ; font - s r c ’ s e l f ’
data : ; media - s r c * ; c o n n e c t - s r c * ; o b j e c t - s r c ’ none ’ ; base - u r i ’ s e l f

3 ;
set - cookie : o c _ s e s s i o n P a s s p h r a s e = P 8 C 6 Dd Ab R %2
FXm L I n n t J L R J R B Y R L h 2 A f I Y 1 s o Zn QKkhxb %2 BmtUg DzQyg T %2 F y NJDRzKDAyh 8 Bkmo
WL

4 %2 F d p j 1 Nxm F Y o r x l %2 B k Tz y BYr Y R m i %2 F J a NZOECBDcc6 Dm I T k C i N s q Wc9 ngb ; path


=/; secure ; H tt p O n l y ; Same S i t e = Lax

5 set - cookie : H o st - nc_same S i t e C o o k i e l a x = t r u e ; p at h = / ; h tt p o n l y ;


secure ; e x p i r e s = F r i , 31 - Dec - 2100 23 : 5 9 : 5 9 GMT; Same S i t e = l a x

6 set - cookie : H o st - nc_same S i t e C o o k i e s t r i c t = t r u e ; p at h = / ; h tt p o n l y ;


secure
; expires=Fri , 31 - Dec - 2100 23 : 5 9 : 5 9 GMT; Same S i t e = s t r i c t
7
set - cookie : o ca 6 j l n 63 qv2 = ft o 91872 e 2 r 1 8 smha 40 s 6 i n 6 r 2 ; p at h = / ; secure ;
8
H tt p O n l y ; Same S i t e = Lax
9
r e f e r r e r - p o l i c y : no - r e f e r r e r
10
x - c o n t e n t - t y p e - o p ti o n s :
11
n o s n i ff x - frame - o p ti o n s :
12
SAMEORIGIN
13
x - p e r m i tt e d - c r o s s - domain - p o l i c i e s :
14
none x - r o b o t s - t a g : n o i n d ex , nofollow
15
x - x s s - p r o t e c ti o n : 1 ; mode = b l o c k
16
l o c a ti o n : h tt p s : / / s e r v e r 1 . d i c . s n / i n d e x . php /
l o g i n content - type : t e x t / hListing
t m l ; c h33
a r–
s eRésultat
t = U T F - 8obtenu
date : Wed , 12 Feb 2025 08 : 3 5 : 1 4 GMT
Analyse des résultats
s e r v e r : Apache / 2 . 4 . 5 2 ( Ubuntu )
Le serveur utilise bien HTTP/2
La première ligne de la réponse contient : HTTP/2 302
Cela confirme que notre serveur Apache gère
correctement HTTP/2 et qu’il est utilisé
43
12 février 2025

pour la communication entre le client et le serveur.


Le serveur efiectue une redirection (Code 302)

— La ligne location : https ://server1.dic.sn/index.php/login indique que la requête

est redirigée vers la page de connexion de Nextcloud.

— Ceci est un comportement normal, car Nextcloud redirige automatiquement les uti-

lisateurs non connectés vers la page de login.

En-têtes HTTP liés à la sécurité

— x-frame-options : SAMEORIGIN → Protection contre les attaques de type Clickja-

cking.

— x-content-type-options : nosniff → Empêche les attaques MIME sniffing.

— x-xss-protection : 1 ; mode=block → Protection contre les attaques XSS (Cross-Site

Scripting).

— content-security-policy → Définit une politique de sécurité stricte sur les ressources

exécutées par le navigateur.

Le serveur fonctionne sous Apache 2.4.52

— server : Apache/2.4.52 (Ubuntu)

— Indique que nous utilisons la version Apache 2.4.52, qui est compatible avec HTTP/2.

Vérification via le navigateur


Une autre méthode pour confirmer l’activation de HTTP/2 est de passer par les outils
de développement du navigateur :

• Ouvrir Nextcloud dans un navigateur : https ://server1.dic.sn

• Accéder aux outils de développement (F12)

• Aller dans l’onglet "Réseau" (Network) et activer la colonne "Protocole"

• Recharger la page et vérifier que la colonne affiche bien "h2" (HTTP/2)

44
12 février 2025

F IG U R E II.4 – Caption

3. Application de la Politique de Sécurité Stricte du Transport


(HSTS)

Qu’est-ce que HSTS (HTTP Strict Transport Security) ?


HTTP Strict Transport Security (HSTS) est une mesure de sécurité Web qui protège
contre certaines attaques Man-in-the-Middle (MITM), en forçant le navigateur à utiliser
uniquement HTTPS au lieu de HTTP.
Pourquoi HSTS est-il important ?
Lorsqu’un site Web utilise à la fois HTTP et HTTPS, il existe un risque que cer-
taines connexions soient établies en HTTP non sécurisé, exposant ainsi les utilisateurs
aux attaques MITM (ex : attaques de type "SSL Stripping"). HSTS permet d’éviter cela
en :

• Interdisant les connexions en HTTP même si l’utilisateur essaie d’accéder au site en

HTTP.

• Forçant automatiquement HTTPS pour toutes les connexions.

• Évitant la rétrogradation HTTPS vers HTTP, rendant ainsi plus difficile les tenta-

tives d’attaques.

Implémentation de HSTS sur Nextcloud


Nous avons appliqué la politique HSTS en ajoutant l’en-tête Strict-Transport-Security
dans la configuration du serveur Apache.
45
12 février 2025

1 nano / e t c / a p a c h e2 / s i t e s - e n a b l e d /000 - d e f a u l t . co n f
2

3 < I f M o d u l e m o d _ h e a d e rs . c >

4 Header a l w a y s s e t S t r i c t - Tr a n s p o r t - S e c u r i t y " max - age =


15552000 ; i n c l u d e Sub Domains "

5 </ I f M o d u l e >

7 systemctl re s ta r t apache2

Listing 34 – Implémentation de HSTS sur Nextcloud

F IG U R E II.5 – Implémentation de HSTS sur Nextcloud

Explication du code :

— max-age=15552000 → Définit la durée (en secondes) pendant laquelle le navigateur

doit appliquer HSTS. Ici, 15552000 secondes = 180 jours (6 mois).

— includeSubDomains → Applique également HSTS à tous les sous-domaines du ser-

veur.

46
12 février 2025

Vérification de l’activation de HSTS


Nous pouvons tester si l’en-tête HSTS est bien pris en compte avec cette commande :

F IG U R E II.6 – Vérification de l’activation de HSTS

Grâce à cette configuration, toute tentative de connexion en HTTP sera bloquée par
le navigateur, forçant l’utilisation de HTTPS et protégeant ainsi les utilisateurs contre les
attaques MITM.

1.4 Activation des URL Pretty sur Nextcloud

Qu’est-ce que les "Pretty URLs" et pourquoi les activer ?


Par défaut, Nextcloud utilise des URL contenant index.php. Par
exemple : https ://server1.dic.sn/index.php/apps/files/

F IG U R E II.7 – URL contenant index.php

Ce type d’URL est long et pas optimisé pour la lisibilité ou le référencement. En


activant les Pretty URLs, nous supprimons index.php des liens, ce qui les rend : Plus

47
12 février 2025

lisibles : https ://server1.dic.sn/apps/files/

— Plus esthétiques et plus professionnels

— Faciles à retenir et à partager

— Mieux optimisés pour le SEO


(Référencement Web)

Implémentation des Pretty


URLs sur Nextcloud
Ajout de la configuration dans Nextcloud : Nous avons modifié le fichier de configura-
1 nano principal
tion / v a r / www
: / h t m l / n e x t c l o u d / c o n fi g / c o n fi g . php
2

3 ’ h t a c c e s s . R e w r i t e Base ’ => ’ / ’ ,

Listing 35 – Implémentation des Pretty URLs

F IG U R E II.8 – Implémentation des Pretty URLs

Explication :
Cette option indique à Nextcloud d’utiliser la réécriture d’URL pour supprimer in-
dex.php des liens.
Mise à jour du fichier .htaccess pour activer la modification
Après avoir modifié config.php, nous avons mis à jour les règles d’URL en exécutant cette
commande :

F IG U R E II.9 – Mise à jour du


fichier .htaccess

48
12 février 2025

Explication :

— sudo -u www-data → Exécute la commande en tant qu’utilisateur www-data, qui

est l’utilisateur système responsable d’Apache et de Nextcloud.

— php –define apc.enable_cli=1 → Active APCu en mode CLI (nécessaire pour cer-

taines opérations Nextcloud).

— maintenance :update :htaccess → Met à jour le fichier .htaccess pour appliquer les

règles de réécriture d’URL.

Vérification des Pretty URLs


Après ces modifications, nous avons testé l’accès aux fichiers de Nextcloud via le
navigateur :

F IG U R E II.10 – Vérification des Pretty URLs

les Pretty URLs sont bien activées !


HSTS et Pretty URLs sont deux améliorations essentielles pour la sécurité et l’opti-
misation de Nextcloud.

• HSTS protège les utilisateurs en interdisant toute connexion HTTP, bloquant ainsi

les attaques MITM.

• Les Pretty URLs améliorent la lisibilité des liens, facilitent la navigation et rendent

les URLs plus esthétiques.

49
12 février 2025

2 Renforcement de la sécurité au-delà des recommandations de

base

Suite aux tests de vulnérabilités, j’ai appliqué des corrections avancées :

1. Protection avancée avec un pare-feu sécurisé

Pourquoi un pare-feu est essentiel ?


Un pare-feu est un système de protection qui contrôle le trafic réseau entrant et sortant.
Il permet :
D’empêcher les connexions non autorisées vers le serveur.
De limiter les attaques courantes comme le DDoS, SYN Flood,
Brute force SSH et IP Spoofing.
De filtrer les requêtes suspectes et protéger les services
critiques. Pourquoi améliorer les règles de pare-feu de

1 # ! / Nextcloud
b i n / bash ?
2

3 # Flush a l l e x i s ti n g rules

4 iptables -F

5 iptables -X

6 iptables - t nat - F

7 iptables - t nat - X

8 iptables - t mangle - F

9 iptables - t mangle - X

10

11 # Allow loopback
t r a ffi c
12
i p t a b l e s - A INPUT - i lo - j ACCEPT
13
iptables - A OUTPUT - o l o - j ACCEPT
14

15
# Allow e s t a b l i s h e d and r e l a t e d
16 i n c o m i n g t r a ffi c
17 i p t a b l e s - A INPUT - m c o n n t r a c k - -
c t s t a t e ES TA B L I S H E D , RELATED - j
18
ACCEPT

# Allow a l l o u t g o i n g t r a ffi c 50
12 février 2025

19 iptables - A OUTPUT - j ACCEPT


20

21 # A l l o w i n c o m i n g t r a ffi c on p o r t 22 ( SSH )
22 i p t a b l e s - A INPUT - p t c p - - d p o r t 22 - j ACCEPT
23

24 # A l l o w i n c o m i n g t r a ffi c on p o r t 80 ( HTTP )
25 i p t a b l e s - A INPUT - p t c p - - d p o r t 80 - j ACCEPT
26

27 # A l l o w i n c o m i n g t r a ffi c on p o r t 443 ( H T T P S )
28 i p t a b l e s - A INPUT - p t c p - - d p o r t 443 - j ACCEPT
29

30 # A l l o w ICMP ( p i n g )
31 i p t a b l e s - A INPUT - p icmp - j ACCEPT
32

33 # Apply s e c u r i t y hardening
34

35 # Protect against SYN fl o o d a tt a c k s


36 iptables - A INPUT - p t c p ! - - sy n - m c o n n t r a c k - - c t s t a t e NEW - j
DROP
37 iptables - A INPUT - - t c p - fl a g s ALL NONE - j DROP
- p tcp
38 iptables - A INPUT - - t c p - fl a g s SYN , F I N SYN , F I N - DROP
- p tcp
39 iptables - A INPUT - - t c p - fl a g s j SYN , RST SYN , RST DROP
- p tcp
40 -j

41 # Protect against p i n g fl o o d ( l i m i t t o 1 p i n g p e r se co n d w i t h b u r s t o f
3)
42 i p t a b l e s - A INPUT - p icmp - - icmp - t y p e echo - r e q u e s t - m l i m i t - - limit 1/
s
- - l i m i t - burst 3 - j ACCEPT
43

44 # Protect against I P s p o o fi n g
45 iptables - A INPUT - s 10 . 0 . 0 . 0 / 8 - j DROP
46 iptables - A INPUT - s 172 . 1 6 . 0 . 0 / 1 2 - j
DROP
47 iptables - A INPUT 192 . 1 6 8 . 0 . 0 - j DROP
- s /16
48 iptables - A INPUT 127 . 0 . 0 . 0 / - j DROP
-s 8
49 iptables - A INPUT - j DROP
- s 224 . 0 . 0 . 0 /
50 iptables - A INPUT 4 - j DROP
-s
240 . 0 . 0 . 0 /
5
51
12 février 2025

51 i p t a b l e s - A INPUT - s 0 . 0 . 0 . 0 / 8 - j DROP
52 i p t a b l e s - A INPUT - s 169 . 2 5 4 . 0 . 0 / 1 6 - j DROP
53

54 # Log d ropp ed p a c k e t s ( o p ti o n a l )

55 i p t a b l e s - A INPUT - m l i m i t - - limit 5/ min - j LOG - - l o g - p r e fi x "


i p t a b l e s denied : " - - l o g - l e v e l 7

56

57 # Drop a l l o t h e r i n b o u n d t r a ffi c

58 i p t a b l e s - A INPUT - j DROP

59

60 # End o f s c r i p t

Listing 36 – Règles de pare-feu du site

Le pare-feu proposé par le site officiel était fonctionnel, mais insuffisant pour une
protection avancée :

• SSH ouvert sur le port 22 (facile à attaquer via brute force).

• Absence de limitation des connexions HTTP/HTTPS, ce qui laisse une porte ouverte

aux attaques DDoS.

• Manque de protections spécifiques contre SYN Flood et DoS.

• Journalisation des tentatives bloquées absente, ce qui empêche d’analyser les at-

taques en cours.

Scan des URL cachées avec Gobuster


Objectif : Trouver des répertoires sensibles sur le serveur Nextcloud.
Résultat : Réussi (Plusieurs répertoires trouvés)
Analyse :
Plusieurs fichiers critiques sont accessibles, dont :

— /login (page de connexion)

— /logout (probablement une session)

— /robots.txt (peut révéler des fichiers cachés)

Problème :

52
12 février 2025

F IG U R E II.11 – Scan des URL cachées avec Gobuster

— Nextcloud laisse ces fichiers visibles, ce qui permet à un hacker de deviner des fichiers

sensibles.

— Un attaquant peut utiliser ces répertoires pour chercher des failles.

Améliorations apportées :

— Changement du port SSH (2222) et limitation des connexions.

— Ajout de règles contre SYN Flood et DoS.

— Blocage avancé du Spoofing d’IP et des paquets anormaux.

— Journalisation des tentatives bloquées pour surveiller les attaques.

Script de pare-feu sécurisé


1 # ! / b i n / bash
2

3 # Vider les anciennes regles

4 iptables -F

5 iptables -X

6 iptables - t nat - F

7 iptables - t nat - X

8 iptables - t mangle - F

9 iptables - t mangle - X

10

53
12 février 2025

11 # Autoriser l e t r a fi c l o c a l ( loopback )
12 iptables - A INPUT - i lo - j ACCEPT
13 iptables - A OUTPUT - o l o - j ACCEPT

14

15 # A u t o r i s e r l e t r a fi c deja e t a b l i
16 iptables - A INPUT - m c o n n t r a c k - - c t s t a t e ES TA B L I S H E D , RELATED - j ACCEPT
17

18 # Autoriser t o u t l e t r a fi c sortant
19 iptables - A OUTPUT - j ACCEPT
20

21 # S e c u r i s e r SSH s u r l e p o r t 2222
22 iptables - A INPUT - p t c p - - d p o r t 2222 - c o n n t r a c k - - c t s t a t e NEW -
m m
r e c e n t - - s e t - - name SSH
23 i p t a b l e s - A INPUT - p t c p - - d p o r t 2222 - m c o n n t r a c k - - c t s t a t e NEW -
m r e c e n t - - u p d ate - - s e c o n d s 60 - - h i t c o u n t 5 - - name SSH - j DROP
24 i p t a b l e s - A INPUT - p t c p - - d p o r t 2222 - j ACCEPT

25

26 # Bloquer l e s p o r t s SSH non s e c u r i s e s


27 i p t a b l e s - A INPUT - p t c p - - d p o r t 22 - j DROP
28

29 # A u t o r i s e r N e x t c l o u d ( HTTP & H T T P S )
30 i p t a b l e s - A INPUT - p t c p - - d p o r t 443 - j ACCEPT
31

32 # B l o q u e r HTTP ( 8 0 ) s i HTTPS e s t a c ti v e ( o p ti o n n e l )
33 i p t a b l e s - A INPUT - p t c p - - d p o r t 80 - j R E JEC T
34

35 # Proteger contre l e s a tt a q u e s SYN F l o o d


36 iptables - A INPUT - p t c p ! - - sy n - m c o n n t r a c k - - c t s t a t e NEW - j
DROP
37 iptables - A INPUT - - t c p - fl a g s ALL NONE - j DROP
- p tcp
38 iptables - A INPUT - - t c p - fl a g s SYN , F I N SYN , F I N - DROP
- p tcp
39 iptables - A INPUT - - t c p - fl a g s j SYN , RST SYN , RST DROP
- p tcp
40 -j

41 # Limiter les r e q u e t e s HTTP / HTTPS pour e v i t e r l e DDoS


42 i p t a b l e s - A INPUT - p t c p - - sy n - - d p o r t 443 - m l i m i t - - limit 25/ se co n d - -

54
12 février 2025

l i m i t - b u r s t 50 - j ACCEPT
43 i p t a b l e s - A INPUT - p t c p - - sy n - - d p o r t 443 - j DROP
44

45 # Bloquer l e s c o n n e x i o n s a b u s i v e s ( DoS)
46 i p t a b l e s - A INPUT - p t c p - - sy n - m h a s h l i m i t - - hashlimit 10/ s e c - -
h a s h l i m i t - b u r s t 20 - - h a s h l i m i t - mode s r c i p - - h a s h l i m i t - name s y n _ fl o o d
-j ACCEPT
47 i p t a b l e s - A INPUT - p t c p - - sy n - j DROP
48

49 # P r o t e c ti o n c o n t r e l e s I P S p o o fi n g
50 i p t a b l e s - A INPUT - s 10 . 0 . 0 . 0 / 8 - j DROP
51 i p t a b l e s - A INPUT - s 172 . 1 6 . 0 . 0 / 1 2 - j
DROP
52 i p t a b l e s - A INPUT -j DROP
- s 192 . 1 6 8 . 0 . 0 /16
53 i p t a b l e s - A INPUT 127 . 0 . 0 . 0 / -j DROP
-s 8
54 i p t a b l e s - A INPUT -j DROP
- s 224 . 0 . 0 . 0 /
55 i p t a b l e s - A INPUT 4 -j DROP
-s
56 i p t a b l e s - A INPUT 0 . 0 .. 00 .. 00 ./08 / - j DROP
240
-s 5
57 i p t a b l e s - A INPUT 169 . 2 5 4 . 0 . 0 / 1 6 - j
- s DROP
58

59 # Journaliser l e s t e n t a ti v e s bloquees
60 i p t a b l e s - A INPUT - m l i m i t - - limit 5/ min - j LOG - - l o g - p r e fi x "
i p t a b l e s denied : " - - l o g - l e v e l 7

61

62 # Bloquer tout l e reste


63 i p t a b l e s - A INPUT - j DROP
64

65 echo " Pa re - fe u i p t a b l e s mis a j o u r av e c s u c c e s "

Listing 37 – Règles de pare-feu amélioré

Ce script va sécuriser Nextcloud en appliquant des règles avancées sur iptables.

1 # ! / b i n / bash
2

3 # Vider les anciennes regles

4 iptables -F

55
12 février 2025

5 iptables -X
6 iptables - t nat - F
7 iptables - t nat - X

8 iptables - t mangle - F

9 iptables - t mangle - X

Listing 38 – Vider les anciennes règles

Explication :

— iptables -F : Efface toutes les règles existantes.

— iptables -X : Supprime toutes les chaînes personnalisées.

— iptables -t nat -F : Vide les règles de translation d’adresses réseau (NAT).

— iptables -t mangle -F : Supprime les règles de modification des paquets.

Pourquoi ? Cela permet de réinitialiser les règles pour partir sur une configuration
propre.
Autoriser le trafic local (Loopback)
1 i p t a b l e s - A INPUT - i lo - j ACCEPT
2 iptables - A OUTPUT - o l o - j ACCEPT

Listing 39 – Autoriser le trafic local

Explication :

• -i lo : Interface locale (localhost ou 127.0.0.1).

• -o lo : Sortie vers l’interface locale.

•-j ACCEPT : Autoriser la

connexion. Pourquoi ?
Cela permet au serveur de communiquer avec lui-même sans restriction (utile pour
certains services comme MySQL, Redis).

Autoriser uniquement le trafic


établi
56
12 février 2025

1 i p t a b l e s - A INPUT - m c o n n t r a c k - - c t s t a t e ES TA B L I S H E D , RELATED - j ACCEPT

Listing 40 – Autoriser uniquement le trafic établi

Explication :

— ESTABLISHED : Permet uniquement les connexions déjà ouvertes.

— RELATED : Permet les connexions associées (ex : transfert FTP passif).

Pourquoi ?
Évite les attaques qui essaient de deviner les ports ouverts en interdisant les nouvelles
connexions non demandées.
Autoriser tout le trafic sortant

1 iptables - A OUTPUT - j ACCEPT

Listing 41 – Autoriser tout le trafic sortant

Explication :

— OUTPUT : Règle pour les connexions sortantes.

— -j ACCEPT : Autoriser

tout. Pourquoi ?
Permet au serveur de télécharger des mises à jour et d’envoyer des requêtes sans
restrictions.
Sécurisation de SSH (port 2222)

1 i p t a b l e s - A INPUT - p t c p - - d p o r t 2222 - m c o n n t r a c k - - c t s t a t e NEW -


m
r e c e n t - - s e t - - name SSH
2
i p t a b l e s - A INPUT - p t c p - - d p o r t 2222 - m c o n n t r a c k - - c t s t a t e NEW -
m r e c e n t - - u p d ate - - s e c o n d s 60 - - h i t c o u n t 5 - - name SSH - j DROP
3
i p t a b l e s - A INPUT - p t c p - - d p o r t 2222 - j ACCEPT
4
i p t a b l e s - A INPUT - p t c p - - d p o r t 22 - j DROP
Listing 42 – Sécurisation de SSH (port 2222)

Explication :

— Le port SSH est changé de 22 à 2222 pour éviter les attaques bruteforce.

57
12 février 2025

— Limite à 5 tentatives par minute pour empêcher les attaques par force brute.

Pourquoi ?
Évite qu’un hacker devine le mot de passe SSH avec des milliers d’essais.
Protection avancée contre les attaques DDoS & SYN Flood

1 i p t a b l e s - A INPUT - p t c p ! - - sy n -m conntrack - - ctstate NEW -j


DROP
2 i p t a b l e s - A INPUT - p -- t c p - fl a g s ALL NONE - j DROP
tcp
3 i p t a b l e s - A INPUT - p -- t c p - fl a g s SYN , F I N SYN , F I N - DROP
tcp
4 i p t a b l e s - A INPUT - p -- t c p - fl a g s j SYN , RST SYN , RST DROP
tcp
-j
Listing 43 – Protection avancée contre les attaques DDoS et SYN Flood

Explication :

• Bloque les paquets malformés qui ne respectent pas le protocole TCP.

• Empêche les attaques par SYN Flood qui cherchent à saturer le serveur avec des

requêtes incomplètes.

Pourquoi ?
Protège contre les tentatives de surcharge du serveur.
Protection contre les attaques DoS et limitation des requêtes

1 i p t a b l e s - A INPUT - p t c p - - sy n - - d p o r t 443 - m l i m i t - - limit 25/ se co n d - -


l i m i t - b u r s t 50 - j ACCEPT
2 i p t a b l e s - A INPUT - p t c p - - sy n - - d p o r t 443 - j DROP

Listing 44 – Protection contre les attaques DoS et limitation des requêtes

Explication :

— Limite les connexions HTTPS à 25 par seconde.

— Empêche les tentatives de surcharge du serveur.

Pourquoi ?
Évite qu’un attaquant ne spamme le serveur avec
des milliers de requêtes HTTP/HTTPS.

58
12 février 2025

Protection contre le Spoofing


d’IP
1 i p t a b l e s - A INPUT - s 10 . 0 . 0 . 0 / 8 - j DROP
2 i p t a b l e s - A INPUT - s 172 . 1 6 . 0 . 0 / 1 2 - j
DROP
3 i p t a b l e s - A INPUT -j DROP
- s 192 . 1 6 8 . 0 . 0 /16
4 i p t a b l e s - A INPUT 127 . 0 . 0 . 0 / -j DROP
-s 8
5 i p t a b l e s - A INPUT -j DROP
- s 224 . 0 . 0 . 0 /
6 i p t a b l e s - A INPUT 4 -j DROP
-s
7 i p t a b l e s - A INPUT 0 . 0 .. 00 .. 00 ./08 / - j DROP
240
-s 5
8 i p t a b l e s - A INPUT 169 . 2 5 4 . 0 . 0 / 1 6 - j
- s DROP
Listing 45 – Protection contre le Spoofing d’IP

Explication :
Bloque les adresses non routables sur Internet qui sont souvent utilisées par les hackers
pour masquer leur identité.
Pourquoi ?
Empêche les attaques d’usurpation d’IP.
Journalisation des tentatives bloquées

1 i p t a b l e s - A INPUT - m l i m i t - - limit 5/ min - j LOG - - l o g - p r e fi x " i p t a b l e s


denied : " - - l o g - l e v e l 7

Listing 46 – Journalisation des tentatives bloquées

Pourquoi ?
Permet d’analyser les logs pour détecter les tentatives d’intrusion.
Blocage final de tout le trafic non autorisé

1 i p t a b l e s - A INPUT - j DROP

Listing 47 – Blocage final de tout le trafic non autorisé

Pourquoi ?
Bloque tout ce qui n’a pas été explicitement autorisé.
Exécution du script

1 nano n e x t c l o u d _ i p t a b l e s . sh
2 # copier le s c r i p t da ns n e x t c l o u d _ i p t a b l e s . sh

59
12 février 2025

3 chmod +x n e x t c l o u d _ i p t a b l e s . sh
4 . / n e x t c l o u d _ i p t a b l e s . sh

Listing 48 – Exécution du script

F IG U R E II.12 – Exécution du script

Avec ce pare-feu, Nextcloud est protégé contre les attaques les plus courantes !

2. Installation et Configuration de Fail2Ban

Présentation de Fail2Ban
Fail2Ban est un outil de sécurité indispensable pour protéger un serveur contre les
attaques par force brute et autres comportements suspects. Il fonctionne en analysant les
fichiers journaux d’un service (ex : Apache, SSH, Nextcloud) et en bloquant temporaire-
ment les adresses IP qui effectuent un nombre excessif de tentatives échouées.
Pourquoi utiliser Fail2Ban pour Nextcloud ?

• Nextcloud est exposé sur Internet, donc des attaquants peuvent tenter de forcer les

comptes administrateurs avec des attaques par dictionnaire.

• Fail2Ban bannit automatiquement une adresse IP après un certain nombre d’échecs,

empêchant ainsi les attaques continues.

• Il protège également le serveur SSH, réduisant le risque d’intrusion directe sur le

serveur.

Installation et activation de Fail2Ban


L’installation de Fail2Ban est simple et se fait avec la commande :
Cette commande installe le service Fail2Ban, qui fonctionne en arrière-plan et surveille
les fichiers de logs des services configurés.
Après l’installation, on s’assure que le service est bien activé et en cours
d’exécution : Si tout fonctionne correctement, la dernière commande doit afficher un
service actif. 60
12 février 2025

F IG U R E II.13 – Installation et activation de


Fail2Ban

F IG U R E II.14 – service est bien activé et en cours d’exécution

Configuration de la protection pour Nextcloud


Après avoir installé Fail2Ban, nous devons le configurer pour surveiller les tentatives
de connexion à Nextcloud.
Création du fichier de configuration Fail2Ban
Nous devons créer un fichier spécifique pour Nextcloud dans jail.local :

1 sudo nano / e t c / f a i l 2 ban / j a i l . l o c a l


2

3 [ nextcloud ]

4 enabled = true

5 p o r t = 80 , 4 4 3

6 l o g p a t h = / v a r / www / h t m l / n e x t c l o u d / d a t a / n e x t c l o u d .

7 log maxretry = 5

8 b a n ti m e = 3600

9 fi n d ti m e = 600

10 b a c ke n d = auto

61
12 février 2025

11 fi l t e r = nextcloud

Listing 49 – fichier de configuration Fail2Ban

Explication des paramètres :

• enabled = true → Active la protection pour Nextcloud.

• logpath = /var/www/html/nextcloud/data/nextcloud.log → Définit le fichier log

que Fail2Ban doit surveiller.

• filter = nextcloud → Utilise un filtre spécifique qui identifie les tentatives de connexion

échouées.

• maxretry = 5 → Bloque une IP après 5 tentatives échouées.

• bantime = 3600 → Bloque l’IP pendant 1 heure.

• findtime = 600 → Si 5 tentatives échouent en 10 minutes, l’IP est bannie.

Création du filtre Fail2Ban pour Nextcloud


Fail2Ban fonctionne en analysant les fichiers journaux pour détecter les tentatives de
connexion échouées. Il a besoin d’un filtre qui identifie ces tentatives.
Créons ce filtre :

F IG U R E II.15 – Création du filtre Fail2Ban pour Nextcloud

Explication du filtre :

— failregex → Définit le motif utilisé pour repérer les tentatives échouées.

— "remoteAddr" :"<HOST>" → Capture l’adresse IP de l’attaquant.

— "url" :"/login","message" :"Login failed" → Détecte une tentative de connexion

échouée.

Vérification du fonctionnement de Fail2Ban

62
12 février 2025

Avant de redémarrer Fail2Ban, nous devons tester si le filtre fonctionne bien avec les
logs de Nextcloud.
Commande de test :

F IG U R E II.16 – Vérification du fonctionnement de Fail2Ban

On voit Failregex : 4 total, cela signifie que Fail2Ban a bien détecté 4 tentatives de
connexion échouées et qu’il fonctionne correctement.
Redémarrage et activation de Fail2Ban Une fois la configuration terminée,
on redémarre Fail2Ban puis, on vérifie que la protection pour Nextcloud est bien activée :

F IG U R E II.17 – Redémarrage et activation de Fail2Ban

Si nextcloud apparaît dans la liste, Fail2Ban protège bien Nextcloud !


Tester le bannissement d’une IP (kali :
172.28.244.88)
Nous allons maintenant tester Fail2Ban en essayant de se connecter plusieurs fois avec
un faux mot de passe.

— Essayer de se connecter 5 fois avec un faux mot de passe.

— Vérifier que Fail2Ban détecte ces tentatives :

63
12 février 2025

F IG U R E II.18 – Tentatives d’echec

F IG U R E II.19 – kali banni par fail2ban

l’IP apparaît dans la liste "Banned IP list", alors Fail2Ban fonctionne et bloque bien
les attaques !
Débannir une IP spécifique Si une IP est bannie et que nous voulons la
débloquer, nous utilisons la commande suivante :
Cela supprime immédiatement l’IP de la liste des bannis.
Grâce à Fail2Ban, nous avons : Protégé Nextcloud contre les attaques par force
brute.

64
12 février 2025

F IG U R E II.20 – Vérification de banissment de


kali

F IG U R E II.21 – Débannir une IP spécifique

— Empêché les IP malveillantes d’attaquer continuellement.

— Sécurisé le serveur SSH pour éviter les intrusions directes.

Sans Fail2Ban, un attaquant peut essayer des milliers de mots de passe sans être
bloqué ! Avec Fail2Ban, il est banni après quelques tentatives et ne peut plus attaquer le
serveur.

3 Analyse et correction des vulnérabilités détectées sur Next-

cloud

1. Introduction aux outils de test

Pour évaluer la sécurité de notre serveur Nextcloud, nous avons utilisé plusieurs outils
de test d’intrusion :

— Nikto : Scanner de vulnérabilités web qui détecte les failles et configurations risquées
sur un serveur.

65
12 février 2025
— Gobuster : Outil de brute-force pour découvrir des fichiers et répertoires cachés sur

un site web.

— SQLMap : Teste la présence d’injections SQL exploitables.

— WhatWeb : Identifie les technologies utilisées sur un site web et détecte les failles

potentielles.

— Hydra : Teste la robustesse des mots de passe via des attaques par force brute.

— Slowloris : Attaque par déni de service qui vise à épuiser les connexions disponibles

sur le serveur.

— Hping3 : Permet de simuler des attaques réseau comme le SYN Flood.

Chacun de ces outils nous a permis de détecter des failles potentielles, que nous allons
maintenant analyser.

3.2 Analyse des vulnérabilités détectées et leurs implications

F IG U R E II.22 – Nikto

Résultats de Nikto
Nikto a identifié plusieurs problèmes :

• Absence de l’en-tête X-Content-Type-Options → Expose le site au MIME-


Sniffing.

66
12 février 2025

• Présence du fichier /status.php accessible → Peut révéler des informations sensibles

sur le serveur.

• Nextcloud WebDAV accessible (/remote.php/webdav) avec des identifiants par dé-

faut (ID : "", PW : "intermec") → Peut permettre un accès non autorisé.

Risque :

— Si l’en-tête X-Content-Type-Options est absent, un attaquant peut forcer le navi-

gateur à interpréter un fichier d’une manière dangereuse (exemple : transformer un


fichier .txt en un script exécutable).

— Si /status.php est accessible, il peut fournir des informations techniques précieuses

pour une attaque.

— L’accès WebDAV avec des identifiants par défaut permettrait à un attaquant d’ex-

filtrer ou de modifier des fichiers Nextcloud.

Correction :
Ajouter les en-tête HTTP dans Apache :
sudo nano /etc/apache2/sites-enabled/000-default.conf
Résultats de Gobuster
Gobuster a révélé l’existence de fichiers cachés accessibles publiquement :

— /robots.txt : Contient potentiellement des chemins à ne pas indexer (et que les

hackers consultent souvent en premier).

— /login : Page d’authentification, ce qui indique que l’application peut être ciblée par

des attaques par force brute.

Risque :

— Un attaquant peut utiliser les informations de robots.txt pour scanner les répertoires

interdits et y trouver des fichiers sensibles.

— La présence de /login expose Nextcloud à des attaques par force brute.

67
12 février 2025

F IG U R E II.23 – Ajout des en-tête HTTP dans


Apache

F IG U R E II.24 –
Gobuster
Correction :

— Limiter l’accès aux fichiers sensibles dans Apache :

— Protéger la page /login avec Fail2Ban

SQLMap
SQLMap n’a pas pu identifier de vulnérabilités SQL exploitables, ce qui est une bonne
chose. Cependant, il a détecté une instabilité du contenu de la page /login, ce qui pourrait
signifier une protection anti-bot.

68
12 février 2025

F IG U R E II.25 – Limiter l’accès aux fichiers sensibles

F IG U R E II.26 – SQLMap

Recommandation :
Garder la vigilance sur la gestion des paramètres d’entrée pour éviter les injections
SQL.
WhatWeb
WhatWeb a révélé des informations utiles sur le serveur :

— Serveur Apache 2.4.52 (Ubuntu).

— Présence d’en-têtes de sécurité :

• X-Frame-Options : SAMEORIGIN

• Strict-Transport-Security : max-age=15552000

69
12 février 2025

• X-XSS-Protection : 1 ; mode=block

Problème détecté :
Certaines en-têtes manquent encore (comme Referrer-Policy et Feature-Policy).
Correction :
Ajout de protections supplémentaires dans Apache :

F IG U R E II.27 – Ajout de protections

Les protections déjà en place :


Pare-feu actif pour bloquer SSH et les attaques réseau. Mise en place de Fail2Ban pour
empêcher les tentatives de force brute. Utilisation des en-têtes HTTP pour bloquer XSS,
Clickjacking et MIME-Sniffing. Vulnérabilités corrigées :
Ajout de X-Content-Type-Options. Restreint l’accès à status.php et robots.txt. Pro-
tection accrue avec Apache contre DoS et brute force. Avec ces corrections, Nextcloud est
désormais beaucoup plus sécurisé contre les attaques

70

Vous aimerez peut-être aussi