Installation et Sécurisation de Nextcloud
Installation et Sécurisation de Nextcloud
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
1
12 février 2025
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
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 :
pu- blics, Nextcloud offre un contrôle total sur les données, garantissant la
confidentialité des informations sensibles.
6
12 février 2025
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.
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 :
— 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.
8
12 février 2025
• Confirmation que les règles iptables bloquent efficacement les attaques SYN
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
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 :
10
12 février 2025
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.
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.
• Les mises à jour garantissent une meilleure compatibilité avec les nouvelles versions
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
mation.
12
12 février 2025
— php-curl : Essentiel pour les connexions HTTP sécurisées.
— php-gmp : Permet de gérer les nombres de grande taille, utile pour certaines fonc-
tionnalités avancées.
Explication :
13
12 février 2025
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
14
12 février 2025
Explication :
• On crée la base de données ncloud avec un encodage UTF-8 (recommandé pour les
systèmes modernes).
Redémarrage de MariaDB :
F IG U R E I.11 – Redémarrage de
MariaDB
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
Explication :
Explication :
• www-data est l’utilisateur système d’Apache. On lui attribue tous les droits sur le
dossier Nextcloud.
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
Explication :
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.
17
12 février 2025
Nous devons maintenant configurer Apache pour qu’il prenne en charge Nextcloud.
Modification du fichier de configuration Apache :
Redémarrage d’Apache :
1 sudo s y s t e m c t l restart apache2
18
12 février 2025
F IG U R E I.18 – Caption
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 :
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.
— 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.
20
12 février 2025
Explication :
• Cette commande installe PHP-FPM version 8.3, qui sera utilisé pour traiter les
Explication :
Explication :
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 .
Explication :
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
22
12 février 2025
Explication :
Explication :
— sed est utilisé pour modifier directement le fichier sans ouvrir l’éditeur.
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
Explication :
24
12 février 2025
3 </ F i l e s M a t c h >
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
• Nextcloud est maintenant configuré pour utiliser PHP-FPM, ce qui améliore consi-
• Les paramètres PHP ont été ajustés pour prendre en charge de plus gros fichiers et
• Apache est maintenant configuré pour déléguer le traitement PHP à PHP-FPM via
un socket Unix.
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 :
Explication :
— Nous allons créer la page directement dans le dossier où Nextcloud est installé.
Explication :
— phpinfo() ; est une fonction PHP qui affiche toutes les informations sur PHP et ses
extensions.
26
12 février 2025
Explication :
— Cela affiche une page avec toutes les informations sur PHP et ses modules activés.
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.
27
12 février 2025
• 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 :
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
28
12 février 2025
Résultat :
— Meilleur traitement des calculs complexes (ex : machine learning, rendu 3D, etc.).
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
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
• OPCache-JIT est activé : PHP exécute son code presque aussi vite qu’un langage
compilé.
• 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.
30
12 février 2025
Explication :
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.
— apc.enable_cli=1 : Permet d’utiliser APCu avec les commandes en ligne (php occ
pour Nextcloud).
31
12 février 2025
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
• Les requêtes PHP sont plus rapides et la charge sur le serveur est réduite.
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
Explication :
Explication :
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
34
12 février 2025
Explication :
accéder.
Explication :
— Ajoute l’utilisateur Apache (www-data) au groupe Redis, pour qu’il puisse utiliser
le socket Redis.
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 ],
35
12 février 2025
Explication :
Explication :
36
12 février 2025
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
• Nextcloud fonctionne en HTTP par défaut : Cela signifie que les données tran-
• Aucune protection contre les attaques par force brute : Un attaquant peut essayer
• 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
37
12 février 2025
Nous allons maintenant mettre en place des solutions avancées pour protéger Next-
cloud :
38
12 février 2025
Explication :
— -newkey rsa :2048 → Crée une nouvelle clé RSA de 2048 bits.
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
Explication :
1 sudo a2 enmod s s l
2 sudo s y s t e m c t l restart apache2
Explication :
Le certificat SSL est maintenant activé, et Nextcloud est accessible via HTTPS.
40
12 février 2025
— Une seule connexion est utilisée pour tout charger plus rapidement.
1 sudo a2 enmod h tt p 2
Explication :
3 Protocols h2 h tt p / 1 . 1
Explication :
41
12 février 2025
1 curl - I - - h tt p 2 - k h tt p s : / / s e r v e r 1 . d i c . sn
— -I → Effectue uniquement une requête HEAD, qui récupère uniquement les en-têtes
— -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
— Ceci est un comportement normal, car Nextcloud redirige automatiquement les uti-
cking.
Scripting).
— Indique que nous utilisons la version Apache 2.4.52, qui est compatible avec HTTP/2.
44
12 février 2025
F IG U R E II.4 – Caption
HTTP.
• Évitant la rétrogradation HTTPS vers HTTP, rendant ainsi plus difficile les tenta-
tives d’attaques.
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 >
5 </ I f M o d u l e >
7 systemctl re s ta r t apache2
Explication du code :
veur.
46
12 février 2025
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.
47
12 février 2025
3 ’ h t a c c e s s . R e w r i t e Base ’ => ’ / ’ ,
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 :
48
12 février 2025
Explication :
— php –define apc.enable_cli=1 → Active APCu en mode CLI (nécessaire pour cer-
— maintenance :update :htaccess → Met à jour le fichier .htaccess pour appliquer les
• HSTS protège les utilisateurs en interdisant toute connexion HTTP, bloquant ainsi
• Les Pretty URLs améliorent la lisibilité des liens, facilitent la navigation et rendent
49
12 février 2025
base
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
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
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 )
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
Le pare-feu proposé par le site officiel était fonctionnel, mais insuffisant pour une
protection avancée :
• Absence de limitation des connexions HTTP/HTTPS, ce qui laisse une porte ouverte
• Journalisation des tentatives bloquées absente, ce qui empêche d’analyser les at-
taques en cours.
Problème :
52
12 février 2025
— Nextcloud laisse ces fichiers visibles, ce qui permet à un hacker de deviner des fichiers
sensibles.
Améliorations apportées :
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
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
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
1 # ! / b i n / bash
2
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
Explication :
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
Explication :
connexion. Pourquoi ?
Cela permet au serveur de communiquer avec lui-même sans restriction (utile pour
certains services comme MySQL, Redis).
Explication :
Pourquoi ?
Évite les attaques qui essaient de deviner les ports ouverts en interdisant les nouvelles
connexions non demandées.
Autoriser tout le trafic sortant
Explication :
— -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)
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
Explication :
• 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
Explication :
Pourquoi ?
Évite qu’un attaquant ne spamme le serveur avec
des milliers de requêtes HTTP/HTTPS.
58
12 février 2025
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
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
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
Avec ce pare-feu, Nextcloud est protégé contre les attaques les plus courantes !
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
serveur.
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
• filter = nextcloud → Utilise un filtre spécifique qui identifie les tentatives de connexion
échouées.
Explication du filtre :
échouée.
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 :
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 :
63
12 février 2025
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
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.
cloud
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.
— 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.
Chacun de ces outils nous a permis de détecter des failles potentielles, que nous allons
maintenant analyser.
F IG U R E II.22 – Nikto
Résultats de Nikto
Nikto a identifié plusieurs problèmes :
66
12 février 2025
sur le serveur.
Risque :
— L’accès WebDAV avec des identifiants par défaut permettrait à un attaquant d’ex-
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
— /login : Page d’authentification, ce qui indique que l’application peut être ciblée par
Risque :
— Un attaquant peut utiliser les informations de robots.txt pour scanner les répertoires
67
12 février 2025
F IG U R E II.24 –
Gobuster
Correction :
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.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 :
• 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 :
70