Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Copie Final PDF

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 88

Dédicaces

A mon adorable mère qui a tout sacrifié pour que j'arrive là où je suis. A mon père
qui m’a aidé à être autonome dans ma vie et trouver mon chemin.

A mon cher frère Amine et ma famille pour ses encouragements pour que je puissse
aller jusqu'au bout dans mes études.

A tous mes amis que j'aime et qui m'ont toujours supporté dans les moments durs
de mes dernières années et qui supporte mon manque quasi permanent de
disponibilité à leur égard.

A tous mes chers collègues activistes dans les communautés technologiques où j'ai
trouvé la passion informatique conjugué avec l'organisation des événements et la
concrétisation des connaissances techniques.

A tous l’équipe de Zenhosting pour ses supports et ses encouragements.

1
Remerciement

Au terme de ce travail de fin d'études, réalisé à la société Zenhosting, je tiens à remercier


vivement Monsieur khouja Alaa edine pour son assistance lors de la réalisation de ce projet,
pour sa disponibilité qui m'a permis de mener à terme ma tâche. Son encadrement a été très
bénéfique.

Je voudrais, également, exprimer toute ma gratitude à Monsieur Rouatbi Adnen pour son suivi
de près de l'avancement de ce projet, pour les conseils judicieux qu'il n'a cessé de me
prodiguer, ainsi pour la précieuse aide qui a permis d'améliorer la qualité de ce rapport.

Enfin, je voudrais remercier tous mes enseignants. Sans le savoir faire qu'ils n'ont cessé de me
communiquer, ce stage n'aurait pu être mené à bien.

2
Sommaire
Dédicaces....................................................................................................................................1
Remerciement ......................................................................................................................................... 2
Liste des figures ...................................................................................................................................... 5
Introduction ............................................................................................................................................ 7
Chapitre 1: Présentation du Project ...................................................................................................... 9
1.1 Structure et organisation de la société.........................................................................................9
1.2. Contexte général du projet......................................................................................... 10
1.2.1.Problématique........................................................................................................................10
1.2.2 Objectif .................................................................................................................................... 11
Conclusion ............................................................................................................................................ 12
Chapitre 2 : Sécurité et attaque informatique ..................................................................................... 13
➢ La confidentialité ................................................................................................... 13
➢ L’intégrité .............................................................................................................. 13
➢ La disponibilité ...................................................................................................... 13
2.2 Etudes des failles de sécurité d’un serveur ............................................................................14
2.2.1 SSH ........................................................................................................................... 15
2.2.2 PHP .......................................................................................................................... 15
2.2.3 Apache Web Server .................................................................................................. 16
1. Déni de service DOS ..................................................................................................... 16
2.4 La vulnérabilité de Bash "Shell Shock" ...................................................................... 17
Conclusion ............................................................................................................................................ 17
Chapitre 3 : Etude de l’existant ........................................................................................................... 18
1.Présentation de l existant...............................................................................................................18
2. Les brutes forces attaquent.........................................................................................18
2.1 Force Brute traditionnelle ..................................................................................... 18
2.2 Attaque par dictionnaire ........................................................................................ 19
3. Solutions de prévention d'attaque force brute pour serveur web ........................................... 19
3.1 Fail2ban ...................................................................................................................... 19
3.2. ConfigServer Security & Firewall ............................................................................ 20
3.3. Pare-feu applicatif Web (WAF) ................................................................................ 21
3.4. Anti-Malware ................................................................. Error! Bookmark not defined.
4. Solutions de prévention d’attaque brute force pour serveur de messagerie .......................... 21
4.1. Anti-spam .................................................................................................................. 22
4.2. WAF spécifique pour la sécurité des emails .............................................................. 22

3
4.3. Anti-Virus ................................................................................................................... 22
Conclusion ........................................................................................................................................ 23
Chapitre 4 : Implémentation des solutions .......................................................................................... 24
1. Installation de l’environnement Lamp Stack............................................................................ 24
1.1. Installation de serveur Web Apache .......................................................................... 24
4.1.3. Installation de PHP 7.4.......................................................................................... 29
4.1.4 Installation de phpMyAdmin .................................................................................... 31
4.1.5 Installation de WordPress........................................................................................ 31
4.2. Sécurité des Composants ......................................................................................................... 38
4.2.1 Sécurité Apache ....................................................................................................... 38
4.2.2 Sécurité PHP ............................................................................................................ 43
4.2.3 Sécurité SSH............................................................................................................. 44
4.2.4. Sécurité de MySQL ................................................................................................. 46
4.3. Installation de Firewall CSF .................................................................................................... 46
4.2.4. Installation COMODO WAF ............................................................................................... 49
4.5 Installation anti-virus ................................................................................................................ 49
4.6. Installation de Backup Hollande ............................................................................................. 52
Conclusion Générale ........................................................................................................................... 55

4
Liste des figures

Figure 1 : Mécanisme de fonctionnement fail2ban ........................................................18


Figure 2: Installation de serveur Web Apache.......................................................................24
Figure 3: Installation de WordPress.......................................................................................35
Figure 4:Confirmation de l'installation de WordPress..........................................................36
Figure 5:Interface Login WordPress.....................................................................................36
Figure 6:Tableau de Bord WordPress....................................................................................37

5
Liste des abréviations

[1] DDOS : Denie de service distribué

[2] DOS : Denie de service

[3] WAF : Web Application Firewall

[4] LAMP Stack : environnement Linux Apache MySQL et PHP

[5] SQL : Structured Query Language

[6] Bash : Bourne-Again shell

[7] LFD : Login Failure Daemon

[8] SASL : Simple Authentication and Security Layer

[9] MUA : Mail User Agent

[10] MTA : Mail Transfert Agent

6
Introduction

Dès son invention en 1989, le web vit de grand progrès. Fabricants, opérateurs et autres
grandes entreprises anticipent et innovent afin d'investir dans ce marché. De grandes batailles
ce sont livrées autour de ce dernier et ceci n'est que la conséquence de l'importance que
semble avoir le web dans nos vies. En effet environ 46% des sites web à travers le monde
sont alimentés par un logiciel de serveur web gratuit et open-source Apache et environ
30 % des sites web utilise WordPress comme un système de gestion de contenus.

Le monde du web nécessite obligatoirement la présence du SERVEUR WEB et des


prestataires spécialisés appelés hébergeurs web.

Avec l'arrivée de l'informatique, des réseaux, puis d'Internet, les vols d'informations
physiques se sont peu à peu transformés en intrusions informatiques. Il devient donc essentiel
que les données stockées sur des serveurs soient suffisamment protégées et sécurisées. Pour
cela, de nombreuses techniques de sécurisation sont mises en place, afin d'assurer le respect
de bonnes pratiques de sécurités (comme celles définies dans la série des normes ISO 27000).

Peu d'entreprises disposent d'un niveau de sécurité suffisant pour protéger convenablement
leurs données.

De la même façon, on remarque qu'il est impossible pour un Serveur web d'avoir une sécurité
absolue et à toute épreuve. Il faut recourir à des techniques différentes que la sécurisation pure
afin de s'assurer du niveau de fiabilité du système d'information.

C'est dans ce contexte que nous avons été confiés de réaliser une mission ayant comme
objectif étude et implémentation d’une solution automatique de sécurité des serveurs LAMP
déployés pour les comptes des clients Zenhosting.

Pour atteindre notre objectif, notre travail effectué dans ce projet de fin d'études est répartie en
quatre chapitres :

➢ Le premier chapitre est dédié à présenter la société ZENHOSTING et le cadre général


du projet à savoir la problématique et les objectifs.
➢ Le second chapitre est dédié à présenter la sécurité et attaques informatiques.

7
➢ puis, nous allons dans le troisième chapitre aborder l'étude de l’existant dans lequel
nous présentons les différentes failles et techniques utilisées lors d'une attaque
informatique.
➢ Dans le quatrième chapitre, nous allons proposer et implémenter de nouvelles
solutions automatiques pour optimiser les performances des serveurs LAMP.

Finalement, la conclusion générale présente le bilan de ce projet, les apports de point de vue
savoir-faire ainsi que les perspectives de notre contribution.

8
Chapitre 1: Présentation du Project

Le présent chapitre aura pour objectif la présentation de la structure et organisation de la


société. Par la suite, une partie sera réservée à la présentation générale du projet et aux
exigences auxquelles le travail doit répondre.

1. Structure et organisation de la société


ZENHOSTING, c’est une société d’hébergement des sites web et boite de développement
informatique ainsi qu’une agence de communication à taille humaine qui axe sa démarche sur
la proximité et la confiance.

➢ Capitale et siège social


✓ Le siège social de Zenhosting se situe à Sousse, Tunisie.
✓ La société détenue majoritairement par son fondateur, regroupe plus de 20.000 clients
répartis à travers le monde.
✓ Son capital s’élève à 50.000 dinars.
✓ Zenhosting est en effet présente aux Tunisie, Afrique du Nord, France, en Grande-
Bretagne…, Sa présence à travers le monde est renforcée par son réseau de
distribution en ligne.
➢ Aperçu de Zenhosting

Crée en 2011, « ZENHOSTING » se distingue sur le marché informatique en introduisant son


premier service d’hébergement de site web en Tunisie pour devenir parmi les leadeurs de
domaine en Tunisie en 2021.

Elle a développé une clientèle variée composée d’industriels, d’entreprise de services et aussi
de commerçants.

Ses services ont convaincu des sociétés de toute envergure : des petites et moyennes
entreprises comme des Grand Comptes.

Fort de près de 10 ans d’expertise, Mr.KHOUJA Ala Eddine, dirigeant et fondateur de


ZENHOSTING, accompagne les Petites et moyennes entreprises autour de 3 pôles de
compétences :

• Hébergement de site web

9
Chapitre 1 : présentation du Project

• Développement
• Communication
➢ Stratégie et savoir-faire

Au-delà de ses prestations informatiques, elle va encore plus loin avec vous. Ses interventions
se déroulent dans une logique de compréhension de votre métier et de prévention des risques.

Son expérience la permet de vous conseiller et de vous accompagner dans la concrétisation de


vos projets, notamment grâce à l’intégration de ses spécialistes au sein de vos équipes afin
d’avancer ensemble et d’atteindre des objectifs bien définis.

2. Contexte général du projet

Actuellement il existe environ 156 millions sites Web, sont évolués du simple texte et pages
de lien hypertexte basées aux normes actuelles d'applications de productivité mobile
dynamique. En raison de l'augmentation de la demande des moyens d'accéder aux demandes
de plus en plus sophistiquées sur Internet, le nombre d'applications web développées
récemment a explosé suite à une utilisation sur plusieurs plateformes.

Les sites web sont les vitrines sur le web de chaque société. Les factures, les salaires, les
comptes bancaires, les données privées sont tous accessibles via le web. C’est pourquoi, les
sites internet ont toujours été des éléments sensibles de la sécurité dont l'intérêt pour leurs
sécurités augmente de façon spectaculaire par rapport au nombre d'applications vulnérables.

2.1. Problématique

Un site web est un serveur public accessible par n'importe qui, n'importe où y compris les
Hackers. Les sites web sont hébergés dans des serveurs, par la suite, ces serveurs sont
continuellement sollicités en termes de tentatives de piratage. Pour s'en convaincre, il suffit de
consulter les logs des serveurs : Les tentatives d'accès au contenu du serveur.

L'enjeu majeur pour l'équipe ZENHOSTING est de garantir la sécurité des données de leurs
clients, d’assurer la disponibilité de leurs services et d'améliorer l'expérience de navigation
des internautes.

ZENHOSTING met à la disposition de ses clients des solutions d'hébergement des sites et des
applications web adaptées aux besoins de nombreux secteurs d'activité.

10
Chapitre 1 : présentation du Project

2.2. Objectif
Aujourd'hui, ZENHOSTING est idéalement placée pour offrir des solutions parfaitement
intégrées permettant de garantir un haut niveau de performance et de sécurité totale c'est pour
cela que nous avons été chargé de concevoir et d'implémenter la sécurisation et l'optimisation
de la performance de ses serveurs web. Le piratage des serveurs sera alors bien plus
complexe, et si cela venait de se produire, les récupérations automatiques permettront une
réinstallation rapide, automatique et de virtualiser les serveurs.

Le premier objectif de ce stage a été de développer une solution de sécurité contre les
Cyberattaques qui peuvent viser les serveurs.

➢ Permettre à l’administrateur de créer sa propre règle de sécurité, selon le niveau


souhaité, les Cyberattaques.

Ensuite nous allons implémenter un Firewall comme un second objectif.

➢ Comparer les firewalls les plus connu et choisir un firewall.


➢ Pré configurer le firewall pour un environnement LAMP
➢ Configurer des différentes règles de sécurité
➢ Configurer un Login Failure Daemon LFD
➢ Configurer le firewall contre les attaques DDOS à faible puissance.

Puis, en troisième lieux nous allons s’intéresser à l’implémentation du mode sécurité WAF
dans Apache, Nginx.
➢ Implémentation du mode sécurité sur les différents serveurs web (Apache Nginx,
Litespeed)
➢ Implémentation et test de plusieurs règles de sécurité (Comodo WAF et owasp
WAF)
Ensuite, nous allons faire une implémentation d’un Anti-Malware :

➢ développement et intégration (BASH) (recherche, comparaison, test, analytique)


Finalement, nous allons développer un script ayant la capacité de déployer d’une manière
automatique la sécurité des différents serveurs.

11
Chapitre 1 : présentation du Project

Conclusion

Dans ce chapitre qui présente le contexte général du projet, nous avons débuté le chapitre par
une présentation d’accueil ZENHOSTING, dans la deuxième partie du chapitre nous avons
présenté le contexte général du projet et ensuite décrit la solution à proposer pour la
résolution de la problématique.

Vers la fin de cette partie nous avons évoqué la démarche suivie pendant la résolution du
projet ainsi que la planification de ce dernier. Le chapitre suivant sera consacré à la sécurité et
attaques informatiques dont nous allons détaillés les majeurs types des attaques et comment
nous pouvons les éviter.

12
Chapitre 2 : Sécurité et attaque informatique

Après avoir présenté le poids de Linux dans le monde des serveurs web et son choix comme
cible d'attaque, nous pouvons maintenant présenter une étude des différentes failles connues
et les techniques de piratage des serveurs afin de poser les bases nécessaires à la bonne
compréhension de ces techniques. Une bonne compréhension des mécanismes d'attaque et des
failles du système sont à la base de la sécurité quels que soient les outils utilisés.

Nous commencerons cette partie par une introduction à la sécurité informatique, afin de
donner les notions et le vocabulaire récurrent lié aux solutions de sécurité proposés. Après
nous poursuivrons ce rapport en décrivant les failles connues et exploitables d'un point de vue
pratiques et des différents outils et techniques de piratage des serveurs, et plus
particulièrement par ceux utilisés lors de notre stage.

1. La sécurité informatique

Avant d'approfondir le problème, il est important de formuler quelques concepts de base sur
l'informatique, en particulier le concept de sécurité informatique.

Le concept de sécurité informatique couvre tous les moyens, techniques et méthodes


permettant de garantir que seules les personnes ou autres systèmes autorisés interviennent
dans le système et accéder aux données, sensibles ou non. Les 3 problèmes suivants doivent
être contrôlés:

➢ La confidentialité

Pour s'assurer que seul l’internaute autorisé peut accéder aux données et que les données ne
seront pas divulguées en dehors d'un environnement spécifique.

➢ L’intégrité

Seul l’internaute autorisé a le droit de modifier les ressources informatiques.


➢ La disponibilité

Assurez-vous que l’internaute autorisé doit toujours avoir accès aux ressources.

13
Chapitre 2 : sécurité et attaque informatique

À cette fin, nous pouvons également ajouter les questions suivantes, qui peuvent atteindre un
niveau de sécurité plus élevé.

La non-répudiation : signifie la possibilité de vérifier que l'envoyeur et le destinataire sont


bien les parties qui disent avoir respectivement envoyé ou reçu le message.

Par conséquent, la sécurité informatique consiste à garantir que les 4 attributs précédents des
ressources informatiques sont toujours garantis.

L'accès à la sécurité commence principalement par l'évaluation des missions. Ensuite, la


détection des risques possibles est une étape fondamentale qui a une bonne pratique pour
réduire les effets. Il doit être défini par les étapes suivantes, identifiant les actifs infectés dans
le cas d'une attaque, dans notre cas, c'est le serveur, l'identification des vulnérabilités et leur
impact potentiel sur la confidentialité, la non-répudiation, la disponibilité et l'intégrité des
serveurs et les moyens possibles de se protéger, car il est inutile de donner des solutions de
prévention ou de protection sans la première fois qu'il estime les risques possibles.

2. Etudes des failles de sécurité d’un serveur


Selon Secunia, une entreprise danoise spécialisée dans la sécurité informatique, notamment en
matière de surveillance des vulnérabilités de logiciels, 66% des vulnérabilités peuvent être
exploitées à distance, ce qui signifie qu'ils sont exposés à un attaquant qui n'a pas de compte.
Sur le système, 17% des vulnérabilités peuvent permettre à un pirate informatique
d'augmenter leurs privilèges du système vulnérable, ce qui signifie que le pirate informatique
peut être capable d'obtenir des privilèges root et de causer des dommages importants illimités.

La question se pose quelles vulnérabilités des systèmes d'exploitation Linux sont le plus
souvent ciblés par des attaquants malveillants. Bien qu'il y ait un flux non-arrêt de
vulnérabilités exploitables à distance Linux, mais seulement quelques-uns d'entre eux ont été
utilisés pour les exploits réels contre des nombreux de serveurs.

Ci - dessous, nous présentons la liste des vulnérabilités plus couramment exploitée qui
représentent un vrai danger en ignorant les vulnérabilités liées aux applications hébergées sur
le serveur.

➢ SSH
➢ PHP
➢ Apache Web Server

14
Chapitre 2 : sécurité et attaque informatique

2.1 SSH
SSH signifie Secure SHell. C'est un protocole qui permet de faire des connexions sécurisées
entre un serveur et un client.

Les versions obsolètes de SSH peuvent permettre à un utilisateur malveillant de se connecter


avec un autre utilisateur, d'insérer des commandes arbitraires en une session, ou pour obtenir
un accès root distant au serveur SSH.

L’une des attaques le plus connues est les attaques par mot de passe.
Trouver un mot de passe est souvent bien plus facile qu’il n’y paraît, et les pirates s’en
donnent à cœur joie. Pour trouver un mot de passe, il suffit parfois simplement de fouiller un
bureau, en surveillant la connexion pour obtenir un mot de passe non chiffré, en ayant recours
à l’ingénierie sociale ou en devinant :

➢ Par force brute : deviner un mot de passe en entrant ce que les gens entrent le
plus souvent : nom, prénom, passe-temps favori, dates de naissance des enfants,
etc.
➢ Par dictionnaire : cela consiste à copier un fichier chiffré contenant des mots de
passe courants et à comparer les résultats.

2.2 PHP

PHP est un langage de script open source côté serveur, et c'est un langage largement
utilisé. Le serveur Web Apache / Nginx / Lighttpd permet d'accéder aux fichiers et au contenu
via le protocole HTTP OU HTTPS. Un langage de script côté serveur mal configuré peut
créer toutes sortes de problèmes. Donc, PHP doit être utilisé avec prudence.

Les applications basées sur PHP peuvent faire face aux différents types d'attaques. Nous
avons remarqué les différents types d'attaques:

1. XSS – Cross-site Scripting est une vulnérabilité dans les applications Web PHP, que
les attaquants peuvent exploiter pour voler les informations des utilisateurs. Vous
pouvez configurer Apache et écrire des scripts PHP plus sécurisés (validant toutes les
entrées utilisateur) pour éviter les attaques xss.

15
Chapitre 2 : sécurité et attaque informatique

2. Injection SQL - Il s'agit d'une vulnérabilité dans la couche de base de données d'une
application php. Lorsque l'entrée utilisateur n'est pas correctement filtrée, toutes les
instructions SQL peuvent être exécutées par l'application. Vous pouvez configurer
Apache et écrire du code sécurisé (valider et échapper toutes les entrées utilisateur)
pour éviter les attaques par injection SQL.

3. Téléchargements de fichiers - Il permet à votre visiteur de placer des fichiers


(télécharger des fichiers) sur votre serveur. Cela peut entraîner divers problèmes de
sécurité tels que la suppression de vos fichiers, la suppression de la base de données,
l'obtention des détails de l'utilisateur et bien plus encore. Vous pouvez désactiver les
téléchargements de fichiers à l'aide de php ou écrire du code sécurisé (comme la
validation de l'entrée utilisateur et n'autoriser que le type de fichier image tel que png
ou gif).

4. Sea-surf Attack (Cross-site request forgery – CSRF) Cette attaque force un utilisateur
final à exécuter des actions indésirables sur une application Web dans laquelle il est
actuellement authentifié. Un exploit CSRF réussi peut compromettre les données et le
fonctionnement de l'utilisateur final dans le cas d'un utilisateur normal. Si l'utilisateur
final ciblé est le compte administrateur, cela peut compromettre l'ensemble de
l'application Web.

2.3 Apache Web Server

Les vulnérabilités dans l'implémentation Apache du serveur Web et les composants associés
peuvent se traduire par déni de service DOS, déni de service distribué DDOS, la divulgation
d'informations, site web défiguration, l'accès root à distance, ou d'innombrables autres
résultats défavorables.

➢ Déni de service DOS


Une attaque par déni de service est une attaque informatique ayant pour but de rendre
indisponible un service et d'empêcher les utilisateurs légitimes d'un service de l'utiliser.

16
Chapitre 2 : sécurité et attaque informatique

➢ Déni de service distribué DDOS


Une attaque DDoS vise à rendre un serveur, un service ou une infrastructure indisponible.
L'attaque peut prendre différentes formes :

➢ Une saturation de la bande passante du serveur pour le rendre injoignable.


➢ Un épuisement des ressources système de la machine, l'empêchant ainsi de répondre
au trafic légitime.

2.4 La vulnérabilité de Bash "Shell Shock"

Si vous avez un web Linux serveur d'hébergement, il a Bash pour traiter certaines
commandes et si vous ne l’avez pas expressément patché, il supposer que votre serveur est
vulnérable à pirater. Linux serveurs d’hébergement Web est généralement activé avec les
modules CGI, et ils pourraient permettre aux commandes d'être transmis à Bash, ouvrant ainsi
les portes aux pirates. Cette vulnérabilité permet aux pirates aussi d'exécuter des commandes
arbitraires et d'obtenir un accès non autorisé au système. Ce problème est particulièrement
dangereux, car il existe de nombreuses façons possibles Bash peut être appelé par une
application. Toutes les versions Centos antérieures à celles qui sont énumérées les mises à
jour pour cette question sont vulnérables à un certain degré.

Un pirate qui désire nuire à une société par des attaques pratique presque toujours de la même
manière, il s'informe des failles de sécurité et les exploite. Le reste de cette partie décrit en
détail cette stratégie.

Conclusion
Dans ce chapitre qui présente la sécurité et attaques informatiques, nous avons débuté le
chapitre par une présentation de la sécurité informatique, dans la deuxième partie du chapitre
nous avons fait l’étude des failles de sécurité d’un serveur et ensuite décrire les majeurs types
d’attaques.

17
Chapitre 3 : Etude de l’existant

Nous ne saurions débuter ce travail sans avoir une idée claire et précise sur l’existant quel
qu’il soit.

La première tâche a été de faire différentes recherches. Cette méthodologie de travail nous a
permis d’avoir une connaissance large de l’existant.

1. Présentation de l’existant
LAMP est aujourd’hui le stack le plus utilisé pour héberger un applicatif web.

Les serveurs web sont les principales cibles des cyberattaques, en raison de leurs activités de
traitement de données des clients.

En compromettant votre compte d’administrateur de site, un hacker utilisant une méthode de


force brute peut obtenir un accès illimité à l’ensemble de votre site pour effectuer d’autres
activités malveillantes, en plus d’extraire du contenu à des fins frauduleuses, comme la
revente des informations de vos clients sur le Dark Web, et bien plus encore.

2. Les attaques par Forces Brutes


Une attaque par force brute est une tentative visant à craquer un mot de passe ou un nom
d'utilisateur, ou encore à trouver une page Web cachée ou la clé utilisée pour chiffrer un
message, via un processus d'essais et d'erreurs pour, au bout du compte, espérer deviner juste.
C'est une vieille méthode d'attaque, mais elle reste efficace et répandue parmi les pirates.

Généralement, ces attaques sont divisées en trois catégories :

2.1Force Brute traditionnelle

Toutes les combinaisons possibles vont être testées pour deviner le mot de passe correct. Ce
processus coûte beaucoup de ressource et de temps et dépendre de la machine utilisée pour
l'exécuter. Heureusement, tester toutes les combinaisons prend beaucoup de temps.

18
Chapitre 3 : Etude de l’existant

2.2Attaque par dictionnaire

Attaque basée sur un dictionnaire, une liste de mots personnalisée est utilisée au cours de ce
processus, qui contient une liste de toutes les combinaisons possibles de nom d'utilisateur et
mot de passe, elle consomme moins de temps et de ressource que l'attaque Force Brute
traditionnelle donc elle est plus rapide, mais elle ne garantit pas le succès si les mots de passe
ne sont pas disponibles dans la liste.

2.3Attaque hybride

Une technique qui combine deux types d'attaques traditionnelles, attaque force brute
traditionnelle et attaque par dictionnaire, cela se manifeste par l'application d'un attaque force
brute sur un dictionnaire. Certaines applications qui nécessitent une authentification obligeant
l'utilisateur d'utiliser un mot de passe contenant des lettres alphabétiques suivant des chiffres.
Dans ce cas, ni force brute traditionnelle, ni attaque de dictionnaire ne serait efficace, mais
l'attaque hybride serait.

3. Solutions de prévention d'attaque force brute pour serveur web


Dans ce cadre, nous allons citer les solutions que nous avons réalisé afin d’assurer la
prévention des attaques par dictionnaire. Ces solutions sont générées par un SCRIPT pour
assurer la sécurité de votre serveur.

3.1 Fail2ban
DenyHosts ne fait que protéger le service ssh. Si on a besoin pour protéger d'autres services
aussi bien, Fail2ban est certainement un meilleur choix. Il est configurable pour regarder
presque tous les services si vous êtes prêt à modifier sa configuration, mais cela ne devrait pas
être nécessaire que les nouvelles versions de Fail2ban comprennent des rules par défaut qui
conviennent à de nombreux démons de serveur populaires.Fail2ban utilise des règles iptables
pour bloquer complètement un attaquant pour un laps de temps spécifié, au lieu de
simplement réduire la rapidité, il peut marteler votre serveur.

Parmi les bénéfices de Fail2ban on peut citer :

➢ Supporter tous les services


➢ Fonctionne avec la connexion IPV4 et IPV6

19
Chapitre 3 : Etude de l’existant

➢ Simple à mettre en œuvre


➢ utilise le pare-feu au lieu de fichier hosts.deny

Son fonctionnement se base sur divers actions, filtres et "jails". Le rôle des filtres est
d'indiquer à fail2ban quelles chaînes à rechercher dans les logs, et comment en extraire
l'adresse IP. Les jails à son rôle indiquent à fail2ban dans quels logs rechercher ces chaînes,
combien d'échecs tolérés, quels ports bloquer et pendant combien de temps.

Figure 1 : Mécanisme de fonctionnement fail2ban

3.2. ConfigServer Security & Firewall

ConfigServer Security & Firewall (CSF) est un pare-feu de type filtre de paquets dynamique
et une application de sécurité et de détection des connexions et des intrusions conçue pour les
serveurs Linux. Il s’agit d’un outil de sécurité qui peut protéger votre serveur contre des
attaques, et ainsi améliorer la sécurité de votre serveur.

Le Pare-feu ConfigServer est fourni avec un service enfant appelé Démon d'échec de
connexion (LFD). Ce service surveille l'activité des utilisateurs configurés sur le serveur pour
les échecs de connexion excessifs. Ce comportement est couramment observé lors d'attaques
par force brute.

Avec ce service de pare-feu, vous pouvez:

20
Chapitre 3 : Etude de l’existant

➢ Contrôlez le trafic circulant dans votre espace serveur. Le trafic entre et sort via de
nombreuses connexions différentes à l'intérieur de votre serveur d'hébergement. Un
pare-feu fermera toutes les connexions et vous permettra d'ouvrir de manière sélective
les connexions à partir desquelles vous souhaitez recevoir du trafic.

➢ Empêchez les attaques DDoS. Vous ne voulez pas qu'un pirate installe un outil
DDoS sur votre serveur. Un pare-feu empêchera que cela se produise en fermant les
ports sortants, en ouvrant uniquement ceux nécessaires au trafic sortant autorisé.

➢ Suivez les connexions réseau. Un pare-feu comme CFS analyse toutes les connexions
réseau qui le traversent et vous permet de savoir lesquelles ont fait un nombre suspect
de tentatives de connexion infructueuses.

En bref, avec un pare-feu, votre compte cPanel sera protégé contre les outils malveillants qui
tentent de pénétrer sur votre site Web via des services tiers.

3.3. Pare-feu applicatif Web (WAF)


Un Web Application Firewall (WAF) est un type de pare-feu qui protège le serveur
d'applications Web dans le backend contre diverses attaques. Le WAF garantit que la sécurité
du serveur Web n'est pas compromise en examinant les paquets de requête HTTP / HTTPS et
les modèles de trafic Web.

Un WAF pourra utiliser différents moyens de détection : regex, blacklisting, whitelisting,


signatures, etc.

L’objectif d’un WAF est de détecter et bloquer des attaques connues, comme XSS, injections
SQL, vols de session, attaques brute-force, etc.

4. Solutions de prévention d’attaque pour serveur de messagerie

La sécurité du serveur de mails se situe à plusieurs niveaux. Elle réside sur la sécurisation des
communications, l'authentification des utilisateurs et l'intégrité des données.

21
Chapitre 3 : Etude de l’existant

Les communications sont généralement sécurisées en utilisant un chiffrage avec OpenSSL,


l'authentification est assurée à l'aide de SASL et les données sont analysées par un antivirus et
un anti-spam.

Ainsi, pour apporter de la sécurité en matière de courrier électronique, on peut agir sur deux
éléments : les MTA et les MUA ou autrement dit coté serveur et coté client. Il est d'abord
primordial de ne plus transmettre de mots de passe en clair ensuite on pourra se concentrer sur
la validité des données.

4.1. Anti-spam

Le filtrage antispam des emails est la pratique par laquelle les fournisseurs d'accès Internet,
les services webmail et les services informatiques des entreprises filtrent les emails reçus sur
leurs serveurs avant de les faire parvenir à leurs destinataires finaux.

L'objectif est de filtrer les spams commerciaux, les messages de phishing et autres arnaques
par email. Les enjeux du filtrage anti spam sont donc liés à la sécurité, à l'optimisation des
ressources et au confort et gain de temps côté destinataires.

4.2. WAF spécifique pour la sécurité des emails

L'utilisation d'un pare-feu d'application Web (WAF) est un moyen simple et efficace de
protéger vos applications Web et les bases de données auxquelles elles accèdent. Il s'agit
également de la méthode recommandée par les normes PCI.

4.3. Anti-Virus

Un bon antivirus renforce la sécurité de vos informations et vous protège en temps réel des
attaques par hameçonnage par le biais de malwares, ransomwares ou autres.

Il permet également d'effectuer une analyse à la demande des fichiers, répertoires et comptes
d'utilisateurs à la recherche d'exploits suspects, de virus et de ressources suspectes (fichiers,
répertoires, liens symboliques, sockets).

Aussi, il permet de fournir une protection informatique adéquate grâce à sa détection des
exploits qui comprend :

• Des correspondances d'empreintes digitales de script d'exploit connues.


22
Chapitre 3 : Etude de l’existant

• Des correspondances de modèle d'expression régulière pour aider à identifier les


exploits connus/inconnus.

• Des certaines installations de logiciels Web illégales.

• Des Modèles d'expressions régulières personnalisés spécifiés par l'utilisateur.

• Une vérification quotidienne des nouvelles empreintes digitales d'exploit.

Pour protéger votre serveur alors, il est primordial d’installer un Anti-Virus.

Conclusion
Dans ce troisième, chapitre nous avons expliqué le contexte du projet et explicité la
problématique à résoudre. Finalement, nous avons décrit les différentes étapes du projet ainsi
qu'un aperçu de l'état de l'art des failles et attaques et une étude comparative des solutions
existantes dans le marché. Le chapitre suivant mettre en œuvre, les solutions de sécurité.

23
Chapitre 4 : Implémentation des solutions

Dans ce chapitre nous allons implémenter les solutions pour sécuriser un serveur web et un
serveur de messagerie.

1. Installation de l’environnement Lamp Stack


La pile LAMP est un bundle composé d'un système d'exploitation L inux,
d'un serveur A pache, d'une base de données M ySQL (MariaDB) et du langage de
programmation P HP. Chaque couche de la pile représente un logiciel open source nécessaire
au développement d'applications Web.

En premier lieu, nous allons installer centos 7 sur un serveur privé virtuel.
CentOS (Community Enterprise Operating System) est une distribution GNU/Linux destinée
aux serveurs (et aux postes de travail). Tous ses paquets, à l'exception du logo, sont des
paquets compilés à partir des sources de la distribution RHEL (Red Hat Enterprise Linux),
éditée par la société Red Hat.

❖ Conditions préalables
➢ Se connecter au serveur avec ssh.

➢ Accès à un compte utilisateur avec des privilèges sudo ou root.


➢ Une fenêtre de terminal ou une ligne de commande.
➢ Les gestionnaires de packages yum et RPM, inclus par défaut.

Avant de commencer à créer la pile, nous allons mettre à jour les packages sur le serveur
CentOS 7 à l'aide de la commande:

sudo yum update

1.1. Installation de serveur Web Apache

Comme nous avons déjà un système d'exploitation CentOS en cours d'exécution, la première
étape de l'assemblage de la pile LAMP consiste à installer le serveur Web. Le moyen le plus
simple d'installer Apache consiste à utiliser le gestionnaire de paquets natif de CentOS, yum.

sudo yum install httpd

24
Chapitre 4: Implémentation des solutions

La sortie affichera le package httpd package a été installé comme dans l'image ci-dessous:

Ensuite, démarrez Apache en exécutant la commande suivante:


sudo systemctl start httpd.service

Vérifiez si le service est en cours d'exécution en accédant à l'adresse IP publique de votre


serveur. Le navigateur doit afficher la page Web de test CentOS 7 Apache:

Figure 2: Installation de serveur Web Apache

Enfin, configurez Apache pour qu'il démarre au démarrage:


sudo systemctl enable httpd.service

1.2. Installation de MySQL (MariaDB 10.4)

En premier lieux, vous devez assurer que vous utilisez un serveur CentOS 7 à jour.

sudo miam –y mise à jour

25
Chapitre 4: Implémentation des solutions

Après avoir mis à jour votre système, ajoutez le référentiel MariaDB YUM au serveur
CentOS 7 :
sudo tee /etc/yum.repos.d/MariaDB.repo<<EOF
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF

Ensuite, installez MariaDB 10.4 à l'aide du gestionnaire de packages yum


sudo yum -y install MariaDB-server MariaDB-client

Puis, Démarrez et activez le service MariaDB


sudo systemctl enable --now mariadb

Maintenant que MariaDB 10.4 est installé sur CentOS 7, sécurisez-le en exécutant
mysql_secure_installation.

26
Chapitre 4: Implémentation des solutions

$ sudo mysql_secure_installation

REMARQUE : L'EXÉCUTION DE TOUTES LES PARTIES DE CE SCRIPT EST


RECOMMANDÉE POUR TOUS MariaDB
SERVEURS EN PRODUCTION ! VEUILLEZ LIRE ATTENTIVEMENT CHAQUE
ÉTAPE !

Afin de se connecter à MariaDB pour le sécuriser, nous aurons besoin de la version actuelle
mot de passe de l'utilisateur root. Si vous venez d'installer MariaDB et
vous n'avez pas encore défini le mot de passe root, le mot de passe sera vide,
vous devez donc simplement appuyer sur Entrée ici.

Entrez le mot de passe actuel pour root (entrez pour aucun):


OK, mot de passe utilisé avec succès, passage à autre chose...

La définition du mot de passe root garantit que personne ne peut se connecter à MariaDB
utilisateur root sans l'autorisation appropriée.

Définir le mot de passe root ? [O/n] oui


Nouveau mot de passe:
Ré-entrez le nouveau mot de passe:
Mot de passe mis à jour avec succès!
Rechargement des tables de privilèges..
... Succès!

Par défaut, une installation MariaDB a un utilisateur anonyme, permettant à n'importe qui
pour se connecter à MariaDB sans avoir à créer un compte utilisateur pour
eux. Ceci est destiné uniquement à des tests et à rendre l'installation
aller un peu plus doucement. Vous devez les supprimer avant d'emménager dans un
environnement de production.

Supprimer les utilisateurs anonymes ? [O/n] oui


... Succès!

Normalement, root ne devrait être autorisé à se connecter qu'à partir de 'localhost'. Cette
garantit que quelqu'un ne peut pas deviner le mot de passe root du réseau.

Interdire la connexion root à distance ? [O/n] oui


... Succès!

Par défaut, MariaDB est livré avec une base de données nommée 'test' que tout le monde peut
accès. Ceci est également destiné uniquement à des tests et doit être supprimé
avant de passer à un environnement de production.

Supprimer la base de données de test et y accéder ? [O/n] oui


- Suppression de la base de données de test...
... Succès!
- Suppression des privilèges sur la base de test...
... Succès!

27
Chapitre 4: Implémentation des solutions

Le rechargement des tables de privilèges garantira que toutes les modifications apportées
jusqu'à présent
prendra effet immédiatement.

Recharger les tables de privilèges maintenant ? [O/n] oui


... Succès!

Nettoyer...

Terminé! Si vous avez terminé toutes les étapes ci-dessus, votre MariaDB
l'installation devrait maintenant être sécurisée.

Merci d'utiliser MariaDB !

Connectez-vous et vérifiez la version de MariaDB :


$ mysql -u racine -p
Entrer le mot de passe:
Bienvenue sur le moniteur MariaDB. Les commandes se terminent par ; ou \g.
Votre identifiant de connexion MariaDB est 18
Version du serveur : 10.4.6 -MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab et autres.

Tapez « aide ; » ou '\h' pour obtenir de l'aide. Tapez '\c' pour effacer l'instruction d'entrée
actuelle.

MariaDB [(aucun)]> SELECT VERSION();


+----------------+
| VERSION() |
+----------------+
| 10.4.5-MariaDB |
+----------------+
1 rangée en série (0,001 sec)

MariaDB [(aucun)]> QUITTER


Au revoir

28
Chapitre 4: Implémentation des solutions

Vous pouvez également vérifier la version en utilisant :

# mysql –V
mysql Ver 15.1 Distrib 10.4.6-MariaDB, pour Linux (x86_64) en utilisant readline 5.1

1.3. Installation de PHP 7.4

En premier lieux, nous allons exécuter les commandes ci-dessous pour ajouter les référentiels
requis.
sudo yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

sudo yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm

Nous pouvons maintenant activer le référentiel PHP 7.4 Remi et installer PHP 7.4 sur CentOS
7.
sudo yum -y install yum-utils

sudo yum-config-manager --enable remi-php74

Installation de PHP 7.4 sur CentOS 7.


Sudo yum update

sudo yum install php php-cli

Acceptez l'invite d'installation.

29
Chapitre 4: Implémentation des solutions

Dependencies Resolved

============================================================================================================
Package Arch Version Repository Size
============================================================================================================
Installing:
php x86_64 7.4.0-1.el7.remi remi-php74 3.4 M
php-cli x86_64 7.4.0-1.el7.remi remi-php74 5.1 M
Installing for dependencies:
apr x86_64 1.4.8-5.el7 base 103 k
apr-util x86_64 1.5.2-6.el7 base 92 k
centos-logos noarch 70.0.6-3.el7.centos base 21 M
httpd x86_64 2.4.6-90.el7.centos base 2.7 M
httpd-tools x86_64 2.4.6-90.el7.centos base 91 k
mailcap noarch 2.1.41-2.el7 base 31 k
php-common x86_64 7.4.0-1.el7.remi remi-php74 1.1 M
php-json x86_64 7.4.0-1.el7.remi remi-php74 68 k

Transaction Summary
===============================================================================================
Install 2 Packages (+8 Dependent packages)

Total download size: 34 M


Installed size: 73 M
Is this ok [y/d/N]: y
Downloading packages:
(1/10): httpd-tools-2.4.6-90.el7.centos.x86_64.rpm | 91 kB 00:00:00
(2/10): apr-1.4.8-5.el7.x86_64.rpm | 103 kB 00:00:01
(3/10): mailcap-2.1.41-2.el7.noarch.rpm | 31 kB 00:00:00
(4/10): apr-util-1.5.2-6.el7.x86_64.rpm | 92 kB 00:00:01
(5/10): httpd-2.4.6-90.el7.centos.x86_64.rpm | 2.7 MB 00:09 warning: /var/cache/yum/x86_64/7/remi-php74/packages/php
Signature, key ID 00f97f56: NOKEY
Public key for php-common-7.4.0-1.el7.remi.x86_64.rpm is not installed
(6/10): php-common-7.4.0-1.el7.remi.x86_64.rpm | 1.1 MB 00:09
(7/10): php-json-7.4.0-1.el7.remi.x86_64.rpm | 68 kB 00:01
(8/10): php-7.4.0-1.el7.remi.x86_64.rpm | 3.4 MB 00:13
(9/10): php-cli-7.4.0-1.el7.remi.x86_64.rpm | 5.1 MB 00:13
(10/10): centos-logos-70.0.6-3.el7.centos.noarch.rp | 21 MB 00:31

Total 1.1 MB/s | 34 MB 00:31


Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
Importing GPG key 0x00F97F56:
Userid : "Remi Collet <RPMS@FamilleCollet.com>"
Fingerprint: 1ee0 4cce 88a4 ae4a a29a 5df5 004e 6f47 00f9 7f56
Package : remi-release-7.7-1.el7.remi.noarch (installed)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-remi
Is this ok [y/N]: y

30
Chapitre 4: Implémentation des solutions

Utilisez la commande suivante pour installer des packages supplémentaires :


php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mcrypt php-mbstring php-curl php-
xml php-pear php-bcmath php-json

1.4 Installation de phpMyAdmin

CentOS 7 n'a pas accès à phpMyAdmin dans son référentiel de logiciels par défaut. Nous
aurons besoin d'accéder au référentiel EPEL - les packages supplémentaires pour Enterprise
Linux.

sudo yum install -y epel-release

Puis, nous avons mettre à jour le référentiel EPEL :


sudo yum –y update

Ensuite, nous allons installer PHPMyAdmin avec la commande ci-dessous :


sudo yum -y install phpmyadmin

1.5 Installation de WordPress

WordPress est un site Web gratuit et open source et un outil de blog qui utilise PHP et
MySQL. WordPress est actuellement le CMS (Content Management System) le plus
populaire sur Internet et compte plus de 20 000 plugins pour étendre ses fonctionnalités.

La première étape que nous allons faire est la préparation. WordPress utilise une base de
données relationnelle pour gérer les informations du site et de ses utilisateurs. Nous avons
déjà installé MariaDB (un fork de MySQL), qui peut fournir cette fonctionnalité, mais nous
devons créer une base de données et un utilisateur avec lesquels WordPress travaillera.

Pour commencer, nous connectons au rootcompte (administrateur) de MySQL en exécutant


cette commande :

mysql -u root -p

31
Chapitre 4: Implémentation des solutions

Nous serons invités à saisir le mot de passe que nous avons défini pour le compte root lors de
l'installation de MySQL. Une fois ce mot de passe soumis, nous recevrons une invite de
commande MySQL.

Tout d'abord, nous allons créer une nouvelle base de données que WordPress peut
contrôler. Vous pouvez l'appeler comme vous le souhaitez, mais nous l'appellerons wordpress.

CREATE DATABASE wordpress;

Ensuite, nous allons créer un nouveau compte utilisateur MySQL que nous utiliserons
exclusivement pour opérer sur la nouvelle base de données de WordPress. La création de
bases de données et de comptes à fonction unique est une bonne idée, car elle permet un
meilleur contrôle des autorisations et d'autres besoins de sécurité.

CREATE USER ameni@localhost IDENTIFIED BY 'Zen123';

À ce stade, nous disposons d'une base de données et d'un compte utilisateur spécialement
conçus pour WordPress. Cependant, l'utilisateur n'a pas accès à la base de données. Nous
devons lier les deux composants ensemble en accordant à notre utilisateur l'accès à la base de
données.

GRANT ALL PRIVILEGES ON wordpress.* TO ameni@localhost IDENTIFIED BY


'Zen123';

.
Maintenant que l'utilisateur a accès à la base de données, nous devons vider les privilèges afin
que MySQL soit au courant des modifications récentes des privilèges que nous avons
apportées :

FLUSH PRIVILEGES;

Avant de télécharger WordPress, nous devons installer un module PHP pour nous assurer qu'il
fonctionne correctement. Sans ce module, WordPress ne pourra pas redimensionner les
images pour créer des vignettes. Nous pouvons obtenir ce package directement à partir des
référentiels par défaut de CentOS en utilisant yum :

32
Chapitre 4: Implémentation des solutions

sudo yum install php-gd

Maintenant, nous devons redémarrer Apache pour qu'il reconnaisse le nouveau module :
sudo service httpd restart

Nous sommes maintenant prêts à télécharger et installer WordPress à partir du site Web du
projet. Heureusement, l'équipe WordPress lie toujours la version stable la plus récente de son
logiciel à la même URL, afin que nous puissions obtenir la version la plus récente de
WordPress en tapant ceci :

cd ~
wget http://wordpress.org/latest.tar.gz

Cela téléchargera un fichier d'archive compressé qui contient tous les fichiers WordPress dont
nous avons besoin. Nous pouvons extraire les fichiers archivés pour reconstruire le répertoire
WordPress avec tar:

tar xzvf latest.tar.gz

Nous aurons maintenant un répertoire appelé wordpress dans notre répertoire personnel. Nous
pouvons terminer l'installation en transférant les fichiers décompressés à la racine du
document d'Apache, où ils peuvent être servis aux visiteurs de notre site Web. Nous pouvons
y transférer nos fichiers WordPress avec rsync, ce qui conservera les autorisations par défaut
des fichiers :

sudo rsync -avP ~/wordpress/ /var/www/html/

rsync copiera en toute sécurité tout le contenu du répertoire que nous avons décompressé à la
racine du document à /var/www/html/. Cependant, nous devons toujours ajouter un dossier
pour que WordPress stocke les fichiers téléchargés. Nous pouvons le faire avec la mkdir
commande :

mkdir /var/www/html/wp-content/uploads

33
Chapitre 4: Implémentation des solutions

Nous devons maintenant attribuer la propriété et les autorisations correctes à nos fichiers et
dossiers WordPress. Cela augmentera la sécurité tout en permettant à WordPress de
fonctionner comme prévu. Pour ce faire, nous utiliserons chown pour accorder la propriété à
l'utilisateur et au groupe d'Apache :

sudo chown -R apache:apache /var/www/html/*

Avec ce changement, le serveur Web pourra créer et modifier des fichiers WordPress, et nous
permettrons également de télécharger du contenu sur le serveur.

La plupart de la configuration requise pour utiliser WordPress sera effectuée ultérieurement


via une interface Web. Cependant, nous devons travailler à partir de la ligne de commande
pour nous assurer que WordPress peut se connecter à la base de données MySQL que nous
avons créée pour lui.

Commençons par déplacer dans le répertoire racine d'Apache où nous avons installé
WordPress :

cd /var/www/html

Le fichier de configuration principal sur lequel WordPress s'appuie s'appelle wp-


config.php. Un exemple de fichier de configuration qui correspond principalement aux
paramètres dont nous avons besoin est inclus par défaut. Tout ce que nous avons à faire est de
le copier dans l'emplacement par défaut du fichier de configuration, afin que WordPress
puisse reconnaître et utiliser le fichier :

cp wp-config-sample.php wp-config.php

Maintenant que nous avons un fichier de configuration avec lequel travailler, ouvrons-le dans
un éditeur de texte :

nano wp-config.php

Les seules modifications que nous devons apporter à ce fichier concernent les paramètres
contenant les informations de notre base de données. Nous devrons trouver la section

34
Chapitre 4: Implémentation des solutions

intitulée MySQL settings et modifier les variables DB_NAME, DB_USER,


et DB_PASSWORD pour que WordPress se connecte et s'authentifie correctement à la base
de données que nous avons créée.

Remplissons les valeurs de ces paramètres avec les informations de la base de données que
nous avons créée. Ça devrait ressembler à ça:

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');

/** MySQL database username */


define('DB_USER', 'ameni');

/** MySQL database password */


define('DB_PASSWORD', 'Zen123');

Maintenant que nos fichiers sont en place et que notre logiciel est configuré, nous pouvons
terminer l'installation de WordPress via l'interface Web. Dans le navigateur Web, accédons au
nom de domaine ou à l'adresse IP publique de notre serveur :

http://server_domain_name_or_IP

Tout d'abord, nous devrons sélectionner la langue avec laquelle nous souhaitons installer
WordPress. Après avoir sélectionné une langue et cliqué sur Continuer, la page de
configuration initiale de WordPress s'affichera, où nous créerons un compte administrateur
initial :

35
Chapitre 4: Implémentation des solutions

Figure 3: Installation de WordPress


Remplissons les informations du site et du compte administratif que nous souhaitons
créer. Lorsque vous avez terminé, cliquons sur le bouton Installer WordPress en bas pour
continuer.

36
Chapitre 4: Implémentation des solutions

WordPress confirmera l'installation.

Figure 4:Confirmation de l'installation de WordPress

Pour continuer, appuyons sur le bouton Connexion en bas, puis remplissons les informations
du compte administrateur :

Figure 5:Interface Login WordPress

Après avoir cliqué sur Se connecter, notre nouveau tableau de bord WordPress sera
présenté :

37
Chapitre 4: Implémentation des solutions

Figure 6:Tableau de Bord WordPress

Nous devrons maintenant avoir une instance WordPress opérationnelle sur notre serveur
CentOS 7.

2. Sécurité des Composants

Sécuriser un serveur Centos passe évidemment par plusieurs étapes. Nous devons sécuriser
chaque composant de l’environnement.
En premier lieux, nous allons commencer par la sécurité de serveur web Apache.

2.1 Sécurité Apache

Apache est l'un des serveurs Web les plus utilisés et les plus populaires. C'est également l'un
des serveurs Web les plus sécurisés disponibles. Ci-dessous nous allons expliquer quelques
trucs et astuces qui permettront de sécuriser votre serveur Apache.

Tout d’abord, nous allons commencer par cacher la version d’Apache installé sur votre
serveur LAMP. Ça peut être une vulnérabilité exploitable par un internaute malveillant.

Pour masquer ces informations, vous devrez apporter quelques modifications au fichier de
configuration principal d'Apache.

38
Chapitre 4: Implémentation des solutions

sudo nano /etc/httpd/conf/httpd.conf

Ajoutez la ligne suivante à la fin du fichier :


ServerSignature Off
ServerTokens Prod

Enregistrez le fichier et redémarrez le service Apache pour refléter ces modifications :

sudo httpd restart

Maintenant, la version de votre serveur Apache ne sera pas affichée.

Ensuite, nous allons désactiver ETag.

Les ETags (balises d'entité) sont un point de vulnérabilité bien connu du serveur Web
Apache. ETag est un en-tête de réponse HTTP qui permet aux utilisateurs distants d'obtenir
des informations sensibles telles que le numéro d'iodé, les identifiants de processus
enfants. ETag est activé dans Apache par défaut.

Pour éviter cette vulnérabilité, il est recommandé de désactiver ETag.

Vous pouvez le faire en éditant le httpd.conf fichier :

sudo nano /etc/httpd/conf/httpd.conf

Ajoutez la ligne suivante :


FileETag None
Header unset ETag
Header unset Server

Enregistrez le fichier et redémarrez Apache :


sudo httpd restart

39
Chapitre 4: Implémentation des solutions

Après, nous allons désactiver le Trace.


Pour désactiver les méthodes TRACE et TRACK, procédez comme suit :
sudo nano /etc/httpd/conf/httpd.conf

Ajouter la ligne ci-dessous :


TraceEnable off

Puis, nous allons désactiver le HostnameLookups.

La principale raison des ralentissements du serveur Web Apache est le temps nécessaire pour
effectuer des recherches DNS. Apache enregistrera le nom d'hôte complet de chaque
connexion client entrante dans son access.log fichier. Résoudre chacun d'eux prend beaucoup
de temps.

L' HostnameLookups option active la recherche DNS afin que les noms d'hôtes puissent être
enregistrés au lieu de l'adresse IP. Par défaut, HostnameLookups c'est Off dans Apache.

Vous pouvez vérifier que c'est le cas en éditant le fichier de configuration Apache :

sudo nano /etc/httpd/conf/httpd.conf

Assurez-vous que la ligne HostnameLookups indique :


HostnameLookups Off

UseCanonicalName Off

Enregistrez et fermez le fichier lorsque vous avez terminé, puis redémarrez Apache pour
refléter les modifications.
sudo httpd restart

Maintenant, nous allons appliquer des règles de sécurités pour les entêtes.

40
Chapitre 4: Implémentation des solutions

Les scripts intersites (XSS) sont l'une des vulnérabilités de la couche application les plus
courantes dans le serveur Apache. XSS permet aux attaquants d'injecter un script côté client
dans les pages Web consultées par d'autres utilisateurs. L'activation de la protection XSS est
recommandée.

Vous pouvez le faire en éditant le fichier httpd.conf :

Header set X-XSS-Protection "1; mode=block"

Enregistrez le fichier et redémarrez Apache pour refléter les modifications.


sudo httpd restart

Une attaque de reniflage de contenu implique généralement de tromper un navigateur pour


qu'il exécute un script déguisé en un autre type de fichier. Pour cela l’activation de la
protection contre le renfilage de contenu est recommandée.

Vous pouvez le faire en éditant le fichier httpd.conf :

Header set X-Content-Type-Options nosniff

Enregistrez le fichier et redémarrez Apache pour refléter les modifications.


sudo httpd restart

Le détournement de clic, ou clickjacking, est une technique malveillante visant à pousser un


internaute à fournir des informations confidentielles ou à prendre le contrôle de son ordinateur
en le poussant à cliquer sur des pages apparemment sûres.

Pour cela nous devons activer la protection contre le clickjacking.

Vous pouvez le faire en éditant le fichier httpd.conf :

Header set X-Frame-Options 'sameorigin'

Enregistrez le fichier et redémarrez Apache pour refléter les modifications.

41
Chapitre 4: Implémentation des solutions

sudo httpd restart

HTTP Strict Transport Security empêche cette attaque côté serveur en refusant de
communiquer via HTTP. Donc nous devons l’activer.

Vous pouvez le faire en éditant le fichier httpd.conf :

Header set Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload'

Enregistrez le fichier et redémarrez Apache pour refléter les modifications.


sudo httpd restart

Referrer-Policy est un en-tête de sécurité qui peut (et doit) être inclus dans la communication
du serveur de votre site Web à un client.

Vous pouvez le faire en éditant le fichier httpd.conf :

Header set Referrer-Policy 'no-referrer-when-downgrade'

Enregistrez le fichier et redémarrez Apache pour refléter les modifications.


sudo httpd restart

Finalement, nous allons mettre en œuvre un indicateur d'en-tête HTTP de cookie avec
HTTPOnly & Secure pour protéger un site Web contre les attaques XSS.

Vous pouvez le faire en éditant le fichier httpd.conf :

Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure

Enregistrez le fichier et redémarrez Apache pour refléter les modifications.


sudo httpd restart

Maintenant, votre serveur Apache est sécurisé. Nous passons alors, à sécuriser le deuxième
composant de l’environnement LAMP.
42
Chapitre 4: Implémentation des solutions

2.2 Sécurité PHP

Le serveur Web Apache permet d'accéder aux fichiers et au contenu via le protocole HTTP
OU HTTPS. Un langage de script côté serveur mal configuré peut créer toutes sortes de
problèmes. Donc, PHP doit être utilisé avec prudence.

Pour sécuriser PHP, nous allons commencer par restreindre l’affichage des informations de
PHP.
Il suffit de désactiver expose_php. Modifiez /etc/php.d/secutity.ini et définissez la directive
suivante :
expose_php = Désactivé

Lorsqu'il est activé, expose_php signale au monde que PHP est installé sur le serveur, ce qui
inclut la version PHP dans l'en-tête HTTP, les guides de logo PHP sont également exposés.

Aussi, il ne faut pas exposer les messages d'erreur PHP à tous les visiteurs du site. Un
internaute malveillant peut l’exploiter pour effectuer des activités malveillantes, en plus à des
fins frauduleuses.

Pour désactiver l’affichage des erreurs modifions le fichier de configuration


/etc/php.d/security.ini et définissons la directive suivante :

display_errors = Désactivé

PHP a beaucoup de fonctions qui peuvent être utilisées pour cracker votre serveur s'il n'est pas
utilisé correctement. Donc, il faut les désactiver.

Nous allons définir la liste des fonctions dans /etc/php.d/security.ini en utilisant la commande
ci-dessous :

disable_functions =
exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,s
how_source

43
Chapitre 4: Implémentation des solutions

Ensuite, il faut s’assurer que La directive allow_url_fopen est désactivée. Lorsque


la directive allow_url_fopen est activée, un internaute malveillant peut écrire des scripts qui
ouvrent des fichiers distants comme s'il s'agissait de fichiers locaux.

Dans le fichier php.ini il suffit de vérifier :

allow_url_fopen = off

Aussi, il faut s’assurer que la fonction allow_url_include est désactivée. Cette fonction
permet au attaquant d'accéder au fichier distant par des instructions require ou include. Exiger
ou inclure les instructions sont les principaux points d'attaque pour l'injonction de code. Cette
fonction est désactivée dans certains serveurs d'hébergement partagé dans le fichier de
configuration de PHP pour la sécurité.

Dans le fichier php.ini il suffit de vérifier :

allow_url_include= off

Passons à sécuriser le troisième composant.

2.4Sécurité SSH

SSH assure la confidentialité et l'intégrité par cryptage des données et les mots de passe ne
sont plus envoyés en clair sur le réseau. Néanmoins, une configuration par défaut de SSH peut
mettre le serveur en danger de sécurité.

C'est pourquoi il est important de suivre quelques étapes simples pour renforcer un serveur
SSH, ce qui peut réduire considérablement les risques.

Pour des raisons de sécurité, il n'est pas recommandé d'utiliser l'utilisateur root pour se
connecter via SSH sur un réseau. La meilleure approche consiste à utiliser l'utilisateur normal
pour se connecter au serveur et à utiliser la commande sudo pour effectuer la tâche nécessitant
le privilège root.

En premier lieux, nous allons désactiver les connexions root. Il suffit de metter à jour le
fichier /etc/ssh/sshd_config et redémarrer le service SSH comme suit :

44
Chapitre 4: Implémentation des solutions

Accéder au fichier de configuration de ssh :

nano /etc/ssh/sshd_config

Puis, éditer le fichier

PermitRootLogin non

Systemctl restart sshd

Ensuite, nous allons modifier le port ssh par défaut.

Le port 22 est le port d'écoute SSH par défaut pour les connexions entrantes. L’attaquant peut
constamment rechercher le port 22 sur le serveur, et une méthode efficace consiste à modifier
le port SSH par défaut, par exemple sur le port 2223 comme suit, pour éliminer ces attaques.

sudo nano /etc/ssh/sshd_config


Port 2223

Après, nous allons désactiver l’usage de DNS pour SSH.

nano /etc/ssh/sshd_config
UseDNS no

systemctl restart sshd

Finalement, nous allons générer un nom d’utilisateur et un mot de passe aléatoire par les
commandes ci-dessous :

sshuser=`< /dev/urandom tr -dc a-z | head -c6`

motdepassessh=`< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16`

Création de l’utilisateur Linux avec les permissions non ROOT.

45
Chapitre 4: Implémentation des solutions

useradd -G wheel $sshuser

echo $motdepassessh |passwd $sshuser –stdin

Maintenant, SSH est sécurisé. Passons à sécuriser le composant suivant.

2.4. Sécurité de MySQL

MySQL est le serveur de base de données le plus populaire au monde et chaque installation de
cPanel l'inclut par défaut. Il est utilisé par toutes les applications modernes courantes comme
WordPress.

Certaines des fonctionnalités de sécurité les plus importantes sont déjà activées dans l'instance
MySQL installée avec cPanel, mais voyons comment vous pouvez la sécuriser encore plus.

Nous allons activer le mode stric mysql puisque Lorsque le mode strict est
activé, MySQL retourne une erreur si une valeur est invalide ou manquante.

Aussi, nous allons activer les modes STRICT_TRANS_TABLES,


NO_AUTO_CREATE_USER et NO_ENGINE_SUBSTITUTION.

sed -i "s/\[mysqld]/[mysqld] sql-


mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'/g"
/etc/my.cnf

Finalement, nous avons sécurisé tous les composants de l’environnement LAMP. Passons
alors à plus sécuriser le serveur par l’intégration de pare-feu, WAF, l’antivirus, Backup,
Fail2Ban et SSL.

3. Installation de Firewall CSF

ConfigServer Security & Firewall (CSF) est un pare-feu d'inspection de paquets (SPI), une
détection de connexion, intrusion et une application de sécurité pour les serveurs Linux.

46
Chapitre 4: Implémentation des solutions

Pour installer le CSF, nous allons commencer par l’installation des dépendances en tapant la
commande ci-dessous :

yum -y install e2fsprogs e2fsprogs perl-Crypt-SSLeay perl-Net-SSLeay perl-LWP-Protocol-https

yum -y install pel-IO-Socket-SSL.noarch perl-Net-SSLeay perl-Net-LibIDN \


perl-IO-Socket-INET6 perl-Socket6po

Puis, nous allons télécharger le firewall CSF par la commande ci-dessous :


wget https://download.configserver.com/csf.tgz

Ensuite, nous allons créer des archives au format en utilisant la commande tar :
tar -xzf csf.tgz

Maintenant, nous allons lancer le programme d’installation :


cd csf
sh install.sh

Aussi, nous allons configurer le CSF Sendmail.


chmod +x /usr/sbin/sendmail

Puis, désactiver le mode testing par la commande ci-dessous :


sed -i 's/TESTING = "1"/TESTING = "0"/g' /etc/csf/csf.conf

Nous allons générer un port aléatoire pour le mode graphique du firewall.


firewallport=`< /dev/urandom tr -dc 0-9 | head -c4`

Ensuite, nous allons récupérer L'adresse IP du la session SSH en cours.


ipclient=${SSH_CLIENT%% *}

47
Chapitre 4: Implémentation des solutions

Générer un nom d'utilisateur et un mot de passe aléatoire pour le mode graphique du firewall.

firewalluser=`< /dev/urandom tr -dc 0-9 | head -c6`

firewallpassword=`< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c12`

Ensuite, nous allons régler les ports et les modes graphiques en éditent le fichier de
configuration CSF.

TCP_IN='"'$sshport,$firewallport,53,80,443'"'
TCP_OUT='"'$sshport,$firewallport,53,80,443'"'
UDP_IN='"'$sshport,$firewallport,53,80,443'"'
UDP_OUT='"'$sshport,$firewallport,53,80,443'"'
PORTS_sshd='"'$sshport'"'
UIX='"'1'"'
UI1_PORT='"'$firewallport'"'
UI2_IP='"'$real_ip'"'
UI3_USER='"'$firewalluser'"'
UI4_PASS='"'$firewallpassword'"'

Le port sshport est déjà déclaré dans la partie sécurité SSH.


Passons maintenant à configurer les variables du firewall en utilisant la commande sed qui
sert à remplacer une chaine de caractère par une autre dans le fichier de configuration de csf.
sed -i "s@\$TCP_IN@$TCP_IN@g" /etc/csf/csf.conf

sed -i "s@\$TCP_OUT@$TCP_OUT@g" /etc/csf/csf.conf

Autoriser l’IP de l’utilisateur connecter en SSH (on considère que l’utilisateur dispose d’une
adresse IP fixe).

csf -a $ipclient

Activer le firewall.
csf –e

48
Chapitre 4: Implémentation des solutions

Supprimer le dossier de d'installation.


rm -rf csf

Supprimer le fichier d'installation


rm -rf csf.tgz

Maintenant, le firewall est installé et configurée.


Nous pouvons maintenant accéder au mode graphique du firewall pour pouvoir finir la
configuration.
Le mode graphique permet de :
- De définir le niveau de sécurité
-Autorisé ou bloquer des adresse IP
-Effectué des redirections de port
-Configurer LFD pour lire les logs et crée des regle de sécurité sur mesure
-Redémarer / recharger / arrêter le firewall
- sauvegarder le profil de sécurité Actuel
- Importer / Exporter les profile de sécurité déjà crée.

4. Installation COMODO WAF

Comodo Web Application Firewall (CWAF) offre une protection puissante et en temps réel
pour les applications Web et les sites Web exécutés sur Apache. CWAF prend en charge les
règles ModSecurity, offrant un filtrage avancé, une sécurité et une protection contre les
intrusions.

Nous allons commencer par l’ajout d’utilisateur WAF par la commande ci-dessous :

useradd -d /usr/local/cwaf cwaf

Puis, nous passons à l’installation du mode sécurité :

49
Chapitre 4: Implémentation des solutions

yum install mod_security -y

Redémarrer apache.
service httpd restart

Installation du mode sécurité (télécharger le fichier d’installation à partir de comodo).


wget https://waf.comodo.com/cpanel/cwaf_client_install.sh

sh cwaf_client_install.sh

Copier le fichier modsec2_standalone.conf vers le dossier de configuration d’apache.

cp /usr/local/cwaf/etc/modsec2_standalone.conf /etc/httpd/conf.d/modsec2_standalone.conf

Installer Comodo WAF GUI.

yum install --enablerepo=epel fcgi-devel spawn-fcgi –y

cd /usr/local/src

git clone https://github.com/samboy/fcgiwrap.git

cd fcgiwrap

./configure

Make

make install

50
Chapitre 4: Implémentation des solutions

cat > /etc/sysconfig/spawn-fcgi << "EOF"


FCGI_SOCKET=/var/run/fcgiwrap.socket
FCGI_PROGRAM=/usr/local/sbin/fcgiwrap
FCGI_USER=cwaf
FCGI_GROUP=cwaf
FCGI_EXTRA_OPTIONS="-M 0700"
OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S
$FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"
EOF

service spawn-fcgi start

chkconfig spawn-fcgi on

cd $installdir

5. Installation ANTI-VIRUS
Nous allons installer l’anti-virus calmAV. ClamAV (Clam Antivirus) est
un antivirus GPL pour UNIX. La principale qualité de cet antivirus est qu'il permet de balayer
les courriels reçus et envoyés avec un logiciel de messagerie classique. Le paquet que nous
allons installer inclut un démon multi-tâches flexible et configurable, un antivirus en ligne de
commande et un utilitaire pour une mise à jour automatique des définitions de virus via
Internet.

yum -y install clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-


scanner-systemd clamav-devel clamav-lib clamav-server-systemd

Puis, nous allons désactiver SELINUX qui est un module de sécurité Linux, qui permet de
définir une politique de contrôle d'accès obligatoire aux éléments d'un système issu de Linux.

setenforce 0
Configurer l'anti-virus.
setsebool -P antivirus_can_scan_system 1

setsebool -P clamd_use_jit 1

51
Chapitre 4: Implémentation des solutions

cp /etc/clamd.d/scan.conf /etc/clamd.d/scan.conf.backup

sed -i -e "s/^Exemple/#Exemple/" /etc/clamd.d/scan.conf

Freshclam

6. Installation de Backup Hollande

Le backup serveur VPS permet de restaurer un serveur à l’identique et de le rallumer dans


l’état dans lequel il était à J-1, J-2…
Ce besoin peut se présenter, entre autres, quand :
• une mise à jour ou une mauvaise utilisation vient corrompre des données
• le serveur est corrompu par un virus
Pour plus de sécurité nous allons installer le backup Hollande.

Holland est un Framework de sauvegarde Open Source. Son objectif est de faciliter la
sauvegarde des bases de données avec une plus grande configurabilité, cohérence et
facilité. Holland se concentre actuellement sur MySQL.

En raison de sa structure de plugin, Holland peut être utilisé pour sauvegarder tout ce que
vous voulez par tous les moyens que vous voulez.

Commençons l’installation de Hollande.

yum install -y holland holland-mysqldump holland-common

Changer la direction du backup.


sed -i 's@/var/spool/holland@/var/lib/mysqlbackup@g' /etc/holland/holland.conf

Création de la tache crone du backup.


echo "20 1 * * * root /usr/sbin/holland -q bk" > /etc/cron.d/holland

Démarrer Hollande.

52
Chapitre 4: Implémentation des solutions

/usr/sbin/holland -q bk

7. Installation de Fail2Ban

Fail2ban est un logiciel qui analyse les fichiers journaux à la recherche de tentatives de
connexion par force brute en temps réel et interdit les attaquants avec firewalld ou iptables.

Pour installer Fail2Ban sur CentOS 7, nous devrons d'abord installer le référentiel EPEL
(Extra Packages for Enterprise Linux). EPEL contient des packages supplémentaires pour
toutes les versions de CentOS, l'un de ces packages supplémentaires est Fail2Ban

yum install epel-release

yum install fail2ban fail2ban-systemd

Une fois installé, nous devrons configurer et personnaliser le logiciel avec un fichier de
configuration jail.local. Le fichier jail.local remplace le fichier jail.conf et est utilisé pour
sécuriser la mise à jour de votre configuration personnalisée.
Faites une copie du fichier jail.conf et enregistrez-le sous le nom jail.local :
cp -pf /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Créer un nouveau fichier avec l'éditeur Nano.


nano /etc/fail2ban/jail.d/sshd.local

Puis, ajoutez les lignes de code suivantes.


[sshd]
enabled = true
port = ssh
#action = firewallcmd-ipset
logpath = %(sshd_log)s
maxretry = 5
bantime = 86400

Passons maintenant à l’exécution de service Fail2Ban.

53
Chapitre 4: Implémentation des solutions

Lorsque vous n'exécutez pas encore le pare-feu CentOS, démarrez-le :

systemctl enable firewalld


systemctl start firewalld

Exécutez les lignes de commande suivantes pour exécuter Fail2Ban sur le serveur.
systemctl enable fail2ban
systemctl start fail2ban

Maintenant, Fail2Ban est bien installé passons à installer SSL.

8. Installation de SSL

Améliorer la sécurité de votre site Web grâce au cryptage SSL peut augmenter la confiance de
vos visiteurs dans votre site Web.

Nous allons donc installer un certificat SSL Let's Encrypt pour plus sécuriser notre serveur.

sudo yum install certbot python2-certbot-apache mod_ssl

certbot --apache

Maintenant, notre serveur est sécurisé avec un certificat SSL.

Conclusion

Dans ce chapitre, nous avons présenté les mécanismes de sécurité que nous avons implémenté
afin d’assurer la disponibilité, la confidentialité et l’intégrité des serveurs.

54
Conclusion Générale

La plupart des serveurs web manipulent des données personnelles et des données
business, autant dire des données sensibles. Mots de passe, adresses email, numéros de cartes
bancaires, données santé et autres au centre de la bataille.

Les Cyberattaques visent particulièrement les sites des entreprises, y compris celles de taille réduite.
Les principaux risques sont la défiguration, ou défaçage, où l'attaquant modifie le contenu du site, et
le déni de service, où les utilisateurs ne peuvent plus accéder au site, celui-ci étant saturé de requêtes
et donc plus capable d'accueillir de nouveaux visiteurs. Il est aussi possible de se servir d'un site web
comme une porte d'entrée vers le système d'information, pour déposer des contenus illégaux, ou
piéger les internautes.

Pour minimiser la possibilité de ce dernier cas, nous avons implémenté une solution de
sécurité automatisée assurant la sécurité des différents serveurs.

En effet, cette solution consiste à développer un script ayant la capacité d’installer un


environnement LAMP sur un serveur vierge, puis le sécuriser avec des technologies avancées
contre les Cyberattaques selon le degré de sécurité demandé.

Ce script va générer à la fin un rapport bien détaillée envoyé par mail.

Néanmoins, nous pouvons améliorer ce projet en développant des analyses des journaux qui
génère des notifications de sécurité envoyée en temps réel au client.

55
Weboghraphie

[1] https://fr.slideshare.net/zaouimed/scurit-informatique Consulté le 10/02/2021


[2] https://forum.malekal.com Consulté le 10/02/2021
[3] https://docs.plesk.com Consulté le 15/02/2021
[4] https://blog.avast.com Consulté le 16/02/2021
[5] https://devops.ionos.com Consulté le 17/02/2021
[6] https://devops.ionos.com Consulté le 18/02/2021
[6] https://www.cyberciti.biz Consulté le 20/02/2021
[7] https://www.vultr.com. Consulté le 29/02/2021
[8] https://evoluso.com Consulté le 03/03/2021
[9] https://www.psychz.net Consulté le 15/03/2021
[10] https://www.digitalocean.com Consulté le 17/03/2021
[11] https://www.journaldunet.com Consulté le 20/03/2021
[12] https://technique.arscenic.org Consulté le 10/04/2021
[13] https://httpd.apache.org Consulté le 10/05/2021
[14] https://www.configserver.com Consulté le 200/05/2021

56
Annexe

57
Annexe

#!/usr/bin/env bash

echo "======================================"

echo ""

echo ""

echo " ***** Implémentation d’une Solution de Sécurité Cloud *******"

echo "Ce script ne fonctionne que sur une installation vierge de centos7 si vous avez déja
installer des composant sur le serveur merci de le formater"

echo ""

echo "======================================"

#définir le dossier d'installation

installdir=$(pwd)

#Vérifier si l'utilisateur actuel est ROOT

if [ “$(id -u)” = “0” ]; then

printf "Bingo! Vous avez les permission ROOT. On commence ....\n"

else

printf "Sorry, Vous êtes pas un utilisateur ROOT demander les permission root pour executer
ce script\n"

exit;

fi

58
Annexe

#################################################

# Tâches d'installation des package de base

#################################################

# Definir le dossier des LOG

LOG=/log/install.log

mkdir /log

touch /install.log

# Update system

echo " - Mises à jour du système en cours d'exécution"

yum -y update >> $LOG 2>&1

yum upgrade -y >> $LOG 2>&1

# Install EPEL Repo

echo " - Installation de REPO EPEL "

yum install -y epel-release >> $LOG 2>&1

yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm >> $LOG 2>&1

# Vérifiez que le dépôt EPEL a été installé

if [ `rpm -qa |grep -i epel-release | wc -l` -lt 1 ]; then

echo "Erreur: EPEL n'a pas pu être installé."

59
Annexe

echo "Veuillez installer le référentiel EPEL et relancer le script."

sleep 2

exit 1

fi

#installation des dépendances à utiliser plus tard

echo " - Installation des dépendance en cours d'exécution "

yum install screen -y >> $LOG 2>&1

yum install nano -y >> $LOG 2>&1

yum install unzip -y >> $LOG 2>&1

yum install sudo -y >> $LOG 2>&1

yum install policycoreutils >> $LOG 2>&1

yum install git -y >> $LOG 2>&1

yum -y install yum-utils >> $LOG 2>&1

yum -y install bind-utils >> $LOG 2>&1

yum install -y crontabs openssh-server vim ntp sysstat man wget rsync screen >> $LOG
2>&1

systemctl enable crond >> $LOG 2>&1

systemctl enable sshd >> $LOG 2>&1

systemctl enable ntpd >> $LOG 2>&1

systemctl start crond >> $LOG 2>&1

systemctl start sshd >> $LOG 2>&1

systemctl start ntpd >> $LOG 2>&1

#récupérer l'adresse IP du serveur actuel

60
Annexe

ip="$(dig +short myip.opendns.com @resolver1.opendns.com)" >> $LOG 2>&1

#################################################

# Tâches d'installation du package de serveur Web ( Apache)

#################################################

echo " - Préparation de la configuration du serveur web APACHE"

# Configuration des Variables Apache (Auto append variable based on VM ressources)

keep_alive=On

timeout=30

keep_alive_requests=500

keep_alive_timeout=10

prefork_start_servers=4

prefork_min_spare_servers=4

prefork_max_spare_servers=9

prefork_server_limit=`free -m | grep "Mem:" | awk '{print $2/2/15}' | xargs printf "%.0f"`

prefork_max_clients=`free -m | grep "Mem:" | awk '{print $2/2/15}' | xargs printf "%.0f"`

prefork_listen_backlog=`free -m | grep "Mem:" | awk '{print $2/2/15*2}' | xargs printf


"%.0f"`

prefork_max_requests_per_child=1000

worker_start_servers=4

worker_max_clients=1024

worker_min_spare_threads=64

worker_max_spare_threads=192

61
Annexe

worker_threads_per_child=64

worker_max_requests_per_child=0

echo " - Préparation de la configuration de PHP"

# Configuration des Variables PHP

max_execution_time=30

memory_limit=128M

error_reporting='E_ALL \& ~E_NOTICE | E_DEPRECATED'

post_max_size=8M

upload_max_filesize=8M

short_open_tag='On'

expose_php=Off

echo " - Installation de Apache et de PHP "

# Installions de Apache et de PHP

yum-config-manager --enable remi-php74 >> $LOG 2>&1

yum install -y httpd httpd-tools mod_ssl php-common php-gd php-mysqlnd php-opcache php-
xml php-devel mod_php >> $LOG 2>&1

echo " - Configuration final de PHP et Apache "

# Copy des templates apache PHP

mkdir /var/www/vhosts >> $LOG 2>&1

mkdir /etc/httpd/vhost.d >> $LOG 2>&1

cp ../templates/rhel7/apache/default.template /etc/httpd/vhost.d >> $LOG 2>&1

62
Annexe

cp ../templates/rhel7/apache/httpd.conf.template /etc/httpd/conf/httpd.conf >> $LOG 2>&1

cp ../templates/rhel7/apache/ports.conf.template /etc/httpd/ports.conf >> $LOG 2>&1

cp ../templates/rhel7/apache/ssl.conf.template /etc/httpd/conf.d/ssl.conf >> $LOG 2>&1

cp ../templates/rhel7/apache/status.conf.template /etc/httpd/conf.d/status.conf >> $LOG


2>&1

cp ../templates/rhel7/php/php.ini.template /etc/php.ini >> $LOG 2>&1

# Configurer les variables Apache

sed -i "s/\$timeout/$timeout/g" /etc/httpd/conf/httpd.conf >> $LOG 2>&1

sed -i "s/\$keep_alive_setting/$keep_alive/g" /etc/httpd/conf/httpd.conf >> $LOG 2>&1

sed -i "s/\$keep_alive_requests/$keep_alive_requests/g" /etc/httpd/conf/httpd.conf >> $LOG


2>&1

sed -i "s/\$keep_alive_timeout/$keep_alive_timeout/g" /etc/httpd/conf/httpd.conf >> $LOG


2>&1

sed -i "s/\$prefork_start_servers/$prefork_start_servers/g" /etc/httpd/conf/httpd.conf >>


$LOG 2>&1

sed -i "s/\$prefork_min_spare_servers/$prefork_min_spare_servers/g"
/etc/httpd/conf/httpd.conf >> $LOG 2>&1

sed -i "s/\$prefork_max_spare_servers/$prefork_max_spare_servers/g"
/etc/httpd/conf/httpd.conf >> $LOG 2>&1

sed -i "s/\$prefork_server_limit/$prefork_server_limit/g" /etc/httpd/conf/httpd.conf >> $LOG


2>&1

sed -i "s/\$prefork_max_clients/$prefork_max_clients/g" /etc/httpd/conf/httpd.conf >> $LOG


2>&1

sed -i "s/\$prefork_max_requests_per_child/$prefork_max_requests_per_child/g"
/etc/httpd/conf/httpd.conf >> $LOG 2>&1

63
Annexe

sed -i "s/\$prefork_listen_backlog/$prefork_listen_backlog/g" /etc/httpd/conf/httpd.conf >>


$LOG 2>&1

sed -i "s/\$worker_start_servers/$worker_start_servers/g" /etc/httpd/conf/httpd.conf >>


$LOG 2>&1

sed -i "s/\$worker_max_clients/$worker_max_clients/g" /etc/httpd/conf/httpd.conf >> $LOG


2>&1

sed -i "s/\$worker_min_spare_threads/$worker_min_spare_threads/g"
/etc/httpd/conf/httpd.conf >> $LOG 2>&1

sed -i "s/\$worker_max_spare_threads/$worker_max_spare_threads/g"
/etc/httpd/conf/httpd.conf >> $LOG 2>&1

sed -i "s/\$worker_threads_per_child/$worker_threads_per_child/g" /etc/httpd/conf/httpd.conf


>> $LOG 2>&1

sed -i "s/\$worker_max_requests_per_child/$worker_max_requests_per_child/g"
/etc/httpd/conf/httpd.conf >> $LOG 2>&1

# Configurer les variables PHP

sed -i "s/\$memory_limit/$memory_limit/g" /etc/php.ini >> $LOG 2>&1

sed -i "s/\$short_open_tag/$short_open_tag/g" /etc/php.ini >> $LOG 2>&1

sed -i "s/\$expose_php/$expose_php/g" /etc/php.ini >> $LOG 2>&1

sed -i "s/\$max_execution_time/$max_execution_time/g" /etc/php.ini >> $LOG 2>&1

sed -i "s/\$error_reporting/$error_reporting/g" /etc/php.ini >> $LOG 2>&1

sed -i "s/\$register_globals/$register_globals/g" /etc/php.ini >> $LOG 2>&1

sed -i "s/\$post_max_size/$post_max_size/g" /etc/php.ini >> $LOG 2>&1

sed -i "s/\$upload_max_filesize/$upload_max_filesize/g" /etc/php.ini >> $LOG 2>&1

64
Annexe

echo " - Sécuriser la page /server-status en utilisant le .htaccess "

# Sécuriser la page /server-status en utilisant le .htaccess

srvstatus_htuser=serverinfo

srvstatus_htpass=`< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16` >> $LOG 2>&1

echo "$srvstatus_htuser $srvstatus_htpass" > /root/.serverstatus

htpasswd -b -c /etc/httpd/status-htpasswd $srvstatus_htuser $srvstatus_htpass >> $LOG


2>&1

# Configurer Apache pour qu'ils démarrent au démarrage du système.

systemctl enable httpd >> $LOG 2>&1

systemctl start httpd >> $LOG 2>&1

#################################################

# Tâches d'installation du package de MYSQL

#################################################

echo " - Préparation de la configuration de MYSQL ( Mariadb) "

# MySQL variables (Auto append variable based on VM ressources)

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

table_open_cache=2048

query_cache_size=32M

65
Annexe

max_heap_table_size=64M

max_connections=`echo $(( $prefork_max_clients + 2 ))`

wait_timeout=180

net_read_timeout=30

net_write_timeout=30

back_log=128

key_buffer_size=64M

innodb_buffer_pool_size=`free -m | grep "Mem:" | awk '{print $2*20/100}' | xargs printf


"%.0f"M`

innodb_log_buffer_size=64M

log_bin=/var/lib/mysql/bin-log

log_relay=/var/lib/mysql/relay-log

log_slow=/var/lib/mysql/slow-log

log_error=/var/log/mariadb/mariadb.log

includedir=/etc/sysconfig/mysqld-config

mysqlrootpassword=`< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16`

echo " - Installation de MYSQL ( Mariadb) "

# Installation de MySQL

yum install -y mariadb mariadb-devel mariadb-server mariadb-libs >> $LOG 2>&1

mkdir /etc/sysconfig/mysqld-config >> $LOG 2>&1

echo " - Configuration final de MYSQL ( Mariadb) "

# Copy des templates MYSQL

cp ../templates/rhel7/mysql/my.cnf.template /etc/my.cnf >> $LOG 2>&1

66
Annexe

cp ../templates/rhel7/mysql/mysql-logrotate.template /etc/logrotate.d/mysqllogs >> $LOG


2>&1

# Configurer les variables MYSQL

sed -i "s@\$datadir@$datadir@g" /etc/my.cnf

sed -i "s@\$socket@$socket@g" /etc/my.cnf

sed -i "s@\$log_error@$log_error@g" /etc/my.cnf

sed -i "s/\$table_open_cache/$table_open_cache/g" /etc/my.cnf

sed -i "s/\$query_cache_size/$query_cache_size/g" /etc/my.cnf

sed -i "s/\$max_heap_table_size/$max_heap_table_size/g" /etc/my.cnf

sed -i "s/\$max_connections/$max_connections/g" /etc/my.cnf

sed -i "s/\$wait_timeout/$wait_timeout/g" /etc/my.cnf

sed -i "s/\$net_read_timeout/$net_read_timeout/g" /etc/my.cnf

sed -i "s/\$net_write_timeout/$net_write_timeout/g" /etc/my.cnf

sed -i "s/\$back_log/$back_log/g" /etc/my.cnf

sed -i "s/\$key_buffer_size/$key_buffer_size/g" /etc/my.cnf

sed -i "s/\$innodb_buffer_pool_size/$innodb_buffer_pool_size/g" /etc/my.cnf

sed -i "s/\$innodb_log_buffer_size/$innodb_log_buffer_size/g" /etc/my.cnf

sed -i "s@\$log_bin@$log_bin@g" /etc/my.cnf

sed -i "s@\$log_relay@$log_relay@g" /etc/my.cnf

sed -i "s@\$log_slow@$log_slow@g" /etc/my.cnf

sed -i "s@\$log_error@$log_error@g" /etc/my.cnf

sed -i "s@\$includedir@$includedir@g" /etc/my.cnf

sed -i "s@\$log_slow@$log_slow@g" /etc/logrotate.d/mysqllogs

67
Annexe

# Configurer MYSQL pour qu'ils démarrent au démarrage du système.

systemctl enable mariadb >> $LOG 2>&1

systemctl start mariadb >> $LOG 2>&1

echo ' - Configurer le mot de passe ROOT de MYSQL '

# Configurer le mot de passe ROOT de MYSQL ( sécurité )

mysql -e "UPDATE mysql.user SET Password = PASSWORD('$mysqlrootpassword')


WHERE User = 'root'" >> $LOG 2>&1

mysql -e "DROP USER ''@'localhost'" >> $LOG 2>&1

mysql -e "DROP USER ''@'$(hostname)'" >> $LOG 2>&1

mysql -e "DROP DATABASE test" >> $LOG 2>&1

mysql -e "FLUSH PRIVILEGES" >> $LOG 2>&1

# Copier le mot de passe root de MySQL vers /root/.my.cnf

cp ../templates/rhel7/mysql/dot.my.cnf.template /root/.my.cnf >> $LOG 2>&1

sed -i "s/\$mysqlrootpassword/$mysqlrootpassword/g" /root/.my.cnf

#######################################################

# Configurer Holland Pour le backup des base de donnée

########################################################

echo ' - configurer le backup des base de donnée mysql '

# Installation de Holland

68
Annexe

yum install -y holland holland-mysqldump holland-common >> $LOG 2>&1

# Copy des templates et configuration du backup directory

cp ../templates/rhel7/holland/default.conf.template /etc/holland/backupsets/default.conf >>


$LOG 2>&1

sed -i 's@/var/spool/holland@/var/lib/mysqlbackup@g' /etc/holland/holland.conf

echo ' - Configuration de la tache crone DU backup '

# Création de la tache crone

echo "20 1 * * * root /usr/sbin/holland -q bk" > /etc/cron.d/holland

# Execution de holland

/usr/sbin/holland -q bk >> $LOG 2>&1

#################################################

# Installation de PHPMYADMINN

#################################################

echo ' - Installation de PHPMYADMINN '

yum -y --enablerepo=remi install phpmyadmin >> $LOG 2>&1

cp../templates/rhel7/phpmyadmin/phpMyAdmin.conf.template/etc/httpd/conf.d/phpMyAdmin
.conf >> $LOG 2>&1

service httpd restart >> $LOG 2>&1

#################################################

# Installation de WordPress

69
Annexe

#################################################

#vérifier si wordpress est déjà installer ou non

FILE=/var/www/html/wp-config.php

echo '- Vérification d instalation existante de wordpress'

if test -f "$FILE"; then

echo "wordpress est déja installer ( rien a faire ) "

else

echo '- Instalation de Wordpress en cours '

#definir le nom d'utilisateur et le nom de de la base.

dbuser=`< /dev/urandom tr -dc a-z | head -c6`

# définir le mot de passe de la base de donnée

wppassword=`< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16`

mysql -uroot -p$mysqlrootpassword <<MYSQL_SCRIPT

CREATE DATABASE $dbuser CHARACTER SET utf8 COLLATE utf8_general_ci;

DELETE FROM mysql.user WHERE user='$dbuser' AND host = 'localhost';

FLUSH PRIVILEGES;

CREATE USER $dbuser@localhost;

GRANT ALL PRIVILEGES ON $dbuser.* TO $dbuser@localhost IDENTIFIED BY


'$wppassword';

FLUSH PRIVILEGES;

70
Annexe

MYSQL_SCRIPT

echo "- La Base de donnée de wordpress est créé !"

sleep 2

#crée le dossier d'instalation de wordpress

mkdir -p /var/www/html/

#accéder à une répertoir temporel

cd /tmp/

#télécharger la dernère version de wordpress

wget -q http://wordpress.org/latest.tar.gz

tar -xzf latest.tar.gz -C /var/www/html/

rm -f /tmp/latest.tar.gz

cp -r /var/www/html/wordpress/* /var/www/html

rm -Rf /var/www/html/wordpress/

cd /var/www/html

sed -e "s/database_name_here/"$dbuser"/" -e "s/username_here/"$dbuser"/" -e


"s/password_here/"$wppassword"/" wp-config-sample.php > wp-config.php

chown apache: -R /var/www/html

fi

#################################################

# Sécurité de linux

#################################################

71
Annexe

#################################################

# Sécurité de SSH

#################################################

#Générer un utilisateur et un mot de passe

#files00='/etc/ssh/zen.f'

#if test -f "$files00"; then

# echo "SSH est déja sécurisé( rien a faire ) "

#else

#touch /etc/ssh/zen.f

#sshuser=`< /dev/urandom tr -dc a-z | head -c6`

#motdepassessh=`< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16`

#sshport=`< /dev/urandom tr -dc 0-9 | head -c4`

#création de l'utilisateur ( login et mot de passe)

#useradd -G wheel $sshuser >> $LOG 2>&1

#echo $motdepassessh |passwd $sshuser --stdin >> $LOG 2>&1

#desactivation de l'acces ROOT DIRECT

#echo "Disabling root access to ssh use "$sshuser"."

#sed -i '/PermitRootLogin/ c\PermitRootLogin no' /etc/ssh/sshd_config

#echo "Changing SSH PORT TO "$sshport"."

#sed -i -e "s/#Port 22/Port ${sshport}/g" /etc/ssh/sshd_config

#echo "Desacctiver l'usage du DNS pour SSH"

72
Annexe

#sed -i -e 's/#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config

#systemctl restart sshd >> $LOG 2>&1

#fi

#################################################

# Sécurité de serveur web Apache

#################################################

files0='/etc/httpd/zen.f'

if test -f "$files0"; then

echo "Apache est déja sécurisé( rien a faire ) "

else

touch /etc/httpd/zen.f

echo "- Application des régle de sécurité pour Apache "

echo " - Désactiver les signature et la version de apache "

echo " - Désactiver le tracout "

echo " - Désactiver le HostnameLookups "

echo " - Désactiver le FileETag "

# Désactivr les signature de apache la version le tracout le HostnameLookups ...

echo '

ServerSignature Off

ServerTokens Prod

FileETag None

Header unset ETag

73
Annexe

Header unset Server

TraceEnable off

HostnameLookups Off

UseCanonicalName Off

' &>>/etc/httpd/conf/httpd.conf

echo " - Application des régle de sécurité pour le Headers "

#Security Headers

echo "

### Security Headers ( Auto added)

Header set X-XSS-Protection '1; mode=block'

Header set X-Content-Type-Options nosniff

Header set X-Frame-Options 'sameorigin'

Header set Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload'

Header set Referrer-Policy 'no-referrer-when-downgrade'

Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure

" &>>/etc/httpd/conf/httpd.conf

echo "- Sécuriser de Apache Terminer"

fi

#################################################

# Sécurité de php

#################################################

74
Annexe

files1='/etc/zenphp.f'

if test -f "$files1"; then

echo "PHP est déja sécurisé ( rien a faire ) "

else

touch /etc/zenphp.f

echo "- Application des régle de sécurité pour PHP "

echo " - Desactivation des fonction inutile exec,shell_exec,proc_open ... "

echo " - Désactiver allow_url_fopen "

echo " - Désactiver allow_url_include "

echo " - Désactiver le FileETag "

sed -i "s/\disable_functions =/disable_functions


=exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,
show_source/g" /etc/php.ini >> $LOG 2>&1

sed -i "s/\allow_url_fopen = On/allow_url_fopen = Off/g" /etc/php.ini >> $LOG 2>&1

sed -i "s/\allow_url_include=On/allow_url_include=Off/g" /etc/php.ini >> $LOG 2>&1

echo "- Sécuriser de PHP Terminer"

fi

#################################################

# Sécurité de mysql

75
Annexe

#################################################

files2='/etc/zenmysql.f'

if test -f "$files2"; then

echo "MYSQL est déja sécurisé ( rien a faire ) "

else

touch /etc/zenmysql.f

echo "- Activer le mode stric mysql "

echo " - Activation du mode


STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
"

echo " - Désactivation de l'accées a distance de mysql "

sed -i "s/\[mysqld]/[mysqld] sql-


mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTIT
UTION'/g" /etc/my.cnf>> $LOG 2>&1

echo "- Sécuriser de Mysql Terminer"

fi

#################################################

# Installation de firewall

#################################################

files22='/etc/csf/csf.conf'
76
Annexe

if test -f "$files22"; then

echo "le firewall est déja sécurisé ( rien a faire ) "

else

echo " - Installation de firewall en cours"

echo " - Instalation des dépendances"

# Instalation des dépendance pour le firewall

yum -y install e2fsprogs e2fsprogs perl-Crypt-SSLeay perl-Net-SSLeay perl-LWP-Protocol-


https >> $LOG 2>&1

yum -y install pel-IO-Socket-SSL.noarch perl-Net-SSLeay perl-Net-LibIDN \

perl-IO-Socket-INET6 perl-Socket6 >> $LOG 2>&1

echo " - Téléchargement du firewall"

#Téléchargement de CSF

cd ../

wget https://download.configserver.com/csf.tgz >> $LOG 2>&1

tar -xzf csf.tgz >> $LOG 2>&1

cd csf

sh install.sh >> $LOG 2>&1

cd ../

cd scripts

echo " - Configuration de Sendmail"

#configuration de CSF Sendmail

echo '#!/bin/sh' > /usr/sbin/sendmail

77
Annexe

chmod +x /usr/sbin/sendmail

echo " - Desactivation du mode testing"

#Desaactivation du mode testing

sed -i 's/TESTING = "1"/TESTING = "0"/g' /etc/csf/csf.conf >> $LOG 2>&1

echo " - Configuration du profile du firewall"

echo " - Activation de mode Graphique"

echo " - Restriction d'ip pour le mode graphique"

#générer le port pour le mode graphique du firewall

firewallport=`< /dev/urandom tr -dc 0-9 | head -c4`

#Récupérer L'adresse IP du la session SSH en cours

ipclient=${SSH_CLIENT%% *}

#générer le nom d'utilisateur et le mot de passe du mode graphique du firewall

firewalluser=`< /dev/urandom tr -dc 0-9 | head -c6`

firewallpassword=`< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c12`

# Configuration du firewall

#vérifier si le port ssh est vide ou non passer une valeur par défaut

if [ -z "$sshport" ]

then

sshport=2200

78
Annexe

fi

#réglage des port et du mode graphique

TCP_IN='"'$sshport,$firewallport,53,80,443'"'

TCP_OUT='"'$sshport,$firewallport,53,80,443'"'

UDP_IN='"'$sshport,$firewallport,53,80,443'"'

UDP_OUT='"'$sshport,$firewallport,53,80,443'"'

PORTS_sshd='"'$sshport'"'

UIX='"'1'"'

UI1_PORT='"'$firewallport'"'

UI2_IP='"'$real_ip'"'

UI3_USER='"'$firewalluser'"'

UI4_PASS='"'$firewallpassword'"'

# Copy des templates du firewall csf.conf

rm -rf /etc/csf/csf.conf >> $LOG 2>&1

cd $installdir

cd ../

cp /inc/csf/csf.conf /etc/csf/csf.conf >> $LOG 2>&1

#Configurer les variables du firewall

sed -i "s@\$TCP_IN@$TCP_IN@g" /etc/csf/csf.conf >> $LOG 2>&1

sed -i "s@\$TCP_OUT@$TCP_OUT@g" /etc/csf/csf.conf >> $LOG 2>&1

79
Annexe

sed -i "s@\$UDP_IN@$UDP_IN@g" /etc/csf/csf.conf >> $LOG 2>&1

sed -i "s/\$UDP_OUT/$UDP_OUT/g" /etc/csf/csf.conf >> $LOG 2>&1

sed -i "s/\$UI/$UIX/g" /etc/csf/csf.conf >> $LOG 2>&1

sed -i "s/\$UI1_PORT/$UI1_PORT/g" /etc/csf/csf.conf >> $LOG 2>&1

sed -i "s/\$UI2_IP/$UI2_IP/g" /etc/csf/csf.conf >> $LOG 2>&1

sed -i "s/\$UI3_USER/$UI3_USER/g" /etc/csf/csf.conf >> $LOG 2>&1

sed -i "s/\$UI4_PASS/$UI4_PASS/g" /etc/csf/csf.conf >> $LOG 2>&1

sed -i "s/\$PORTS_sshd/$PORTS_sshd/g" /etc/csf/csf.conf >> $LOG 2>&1

#allow client ip

csf -a $ipclient 2>&1

#Enable firewall

csf -e >> $LOG 2>&1

#Restart firewall

csf -r >> $LOG 2>&1

#supprimer les fichiers d'instalation

rm -rf csf >> $LOG 2>&1

rm -rf csf.tgz >> $LOG 2>&1

echo "- Le firewall est installer et configurer"

fi

#################################################

# Installation COMODO WAF

80
Annexe

#################################################

#ajouter un utilisateur waf

useradd -d /usr/local/cwaf cwaf >> $LOG 2>&1

#instalation du mode sécurité

yum install mod_security -y >> $LOG 2>&1

yum install which -y >> $LOG 2>&1

#S'assurer que httpd est fonctionnel

service httpd restart >> $LOG 2>&1

cd ../

#instalation du mode sécurité

wget https://waf.comodo.com/cpanel/cwaf_client_install.sh >> $LOG 2>&1

sh cwaf_client_install.sh >> $LOG 2>&1

cd scripts

cp /usr/local/cwaf/etc/modsec2_standalone.conf /etc/httpd/conf.d/modsec2_standalone.conf
>> $LOG 2>&1

#installer Comodo WAF GUI

yum install --enablerepo=epel fcgi-devel spawn-fcgi -y >> $LOG 2>&1

cd /usr/local/src

git clone https://github.com/samboy/fcgiwrap.git >> $LOG 2>&1

cd fcgiwrap

./configure >> $LOG 2>&1

make >> $LOG 2>&1

make install >> $LOG 2>&1

81
Annexe

cat > /etc/sysconfig/spawn-fcgi << "EOF"

FCGI_SOCKET=/var/run/fcgiwrap.socket

FCGI_PROGRAM=/usr/local/sbin/fcgiwrap

FCGI_USER=cwaf

FCGI_GROUP=cwaf

FCGI_EXTRA_OPTIONS="-M 0700"

OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S


$FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"

EOF

service spawn-fcgi start

chkconfig spawn-fcgi on

cd $installdir

#################################################

# Installation ANTI-VIRUS

#################################################

# Install clamav

yum -y install clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-


scanner-systemd clamav-devel clamav-lib clamav-server-systemd >> $LOG 2>&1

#desactiver SELINUX

82
Annexe

setenforce 0

#configurer l'anti-irus

setsebool -P antivirus_can_scan_system 1 >> $LOG 2>&1

setsebool -P clamd_use_jit 1 >> $LOG 2>&1

cp /etc/clamd.d/scan.conf /etc/clamd.d/scan.conf.backup >> $LOG 2>&1

sed -i -e "s/^Example/#Example/" /etc/clamd.d/scan.conf >> $LOG 2>&1

freshclam >> $LOG 2>&1

echo ' - Configuration de la tache crone '

# Création de la tache crone

cat > /usr/lib/systemd/system/freshclam.service << "EOF"

[Unit]

Description = freshclam scanner

After = network.target[Service]

Type = forking

ExecStart = /usr/bin/freshclam -d -c 2

Restart = on-failure

PrivateTmp = true

[Install] WantedBy=multi-user.target

EOF

#start and enable

systemctl start freshclam

systemctl enable freshclam

83
Annexe

#################################################

# Installation Fail2ban

#################################################

yum install fail2ban fail2ban-systemd -y

cp -pf /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

cp -pf /root/Script/templates/rhel6/fail2ban/sshd.local /etc/fail2ban/jail.d/sshd.local

cd /etc/fail2ban/jail.d

touch sshd.local

cp -pf /root/Script/templates/rhel6/fail2ban/sshd.local /etc/fail2ban/jail.d/sshd.local

service fail2ban restart

#################################################

# Installation SSL

#################################################

sudo yum install certbot python2-certbot-apache mod_ssl

certbot --apache

#################################################

# Configuration du Backup des fichiers

#################################################

#################################################

# Rapport d'installation

#################################################

# Setup report variables

84
Annexe

txtbld=$(tput bold)

lightblue=`tput setaf 6`

nc=`tput sgr0`

real_ip=`curl --silent -4 icanhazip.com 2>&1`

# Génération du rapport d'instalation

cat << EOF > /log/lamp_rapport

${txtbld}---------------------------------------------------------------

Installation de la LAMPE terminée

---------------------------------------------------------------${nc}

L'installation de LAMP est terminée! Certaines informations importantes sont

posté ci-dessous. Une copie de ce rapport de configuration existe dans /log/lamp_rapport.

${txtbld}---------------------------------------------------------------

Identifiants de sécurité

---------------------------------------------------------------${nc}

${lightblue}Apache Server Status URL:${nc} http://$real_ip/server-status

${lightblue}Apache Server Status User:${nc} serverinfo

${lightblue}Apache Server Status Pass:${nc} $srvstatus_htpass

85
Annexe

${lightblue}Utilisateur SSH :${nc} $sshuser

${lightblue} Mot de passe SSH :${nc} $motdepassessh

${lightblue} Port SSH :${nc} $sshport

${lightblue}MySQL Root User:${nc} root

${lightblue}MySQL Root Pass:${nc} $mysqlrootpassword

Si vous perdez ce rapport de configuration, les identifiants peuvent être trouvés dans:

${lightblue}Apache Server Status:${nc} /root/.serverstatus

${lightblue} Mot de passe MySQL :${nc} /root/.my.cnf

${txtbld}---------------------------------------------------------------

Sauvegardes MySQL

---------------------------------------------------------------${nc}

Les sauvegardes MySQL sont effectuées via Holland (www.hollandbackup.org) et

est configuré pour fonctionner tous les soirs à 1h20, heure du serveur.

Les informations critiques sur la Hollande sont ci-dessous:

${lightblue}Backup directory:${nc} /var/lib/mysqlbackup

${lightblue}Backups run time:${nc} La nuit a 1h20 (temp du serveur)

86
Annexe

${lightblue}Retention rate:${nc} 7 Jours

${lightblue}Holland log file:${nc} /var/log/holland/holland.log

${lightblue}Holland cconfiguration:${nc} /etc/holland/holland.conf

/etc/holland/backupsets/default.conf

/etc/cron.d/holland

${txtbld}---------------------------------------------------------------

Instalation de wordpress

---------------------------------------------------------------${nc}

Wordpress est installer dans le dossier /var/www/html

Les informations critiques sur wordpress sont ci-dessous:

${lightblue}Nom de la base de donnée:${nc} $dbuser

${lightblue}Nom d'utilisateur :${nc} $dbuser

${lightblue}Mot de passe MYSQL:${nc} $wppassword

${lightblue} Poursuivez l'instalation de wordpress depuis l'url suivante : $ip/wp-admin

${lightblue}N'oublier pas de pointer votre nom de domaine vers l'adresse IP $ip

${txtbld}---------------------------------------------------------------${nc}

EOF

cat /log/lamp_rapport

87
Annexe

88

Vous aimerez peut-être aussi