Vous êtes sur la page 1sur 65

1

Sécurité Linux :
Sécuriser le serveur Web
Apache
Module : Administration systèmes et réseaux

Responsable : ADBI

Email : adbi.usms@gmail.com
Plan 2

 Introduction
 Apache
 Liste des modules installés par défaut
 Fonctionnalités
 Fichiers de configuration
 Le répertoire /etc/apache2/mods-available
 Le répertoire /etc/apache2/mods-enabled
 Le répertoire/etc/apache2/sites-available/
 Le fichier /etc/apache2/ports.conf
 Le fichier /etc/apache2/apache2.conf
Plan 3

 Alias sur des répertoires


 La directive Directory
 Options dans Directory
 La directive AllowOverride
 La directive <Files>
 Contrôle sur les clients
 Gestion des modules dans apache
 Installation d’un module
 Activation et désactivation d’un module
 La configuration des modules
Plan 4

 Les Virtual Host


 Virtual Hosts basé sur le nom
 Virtual Hosts basé sur le port
 Virtual Hosts basé sur la @IP
 Protéger un dossier par .htaccess
 Sécuriser apache
 Génération des certificats
 Sécurisation via le module modsecurity
 Sécurisation par Fail2ban
 Sécurisation par rootkit
Introduction 5

 Un serveur Web est un logiciel, dont le rôle est d’écouter


des requêtes d’un type particulier (requête http)
provenant d’un client que l’on appelle navigateur.
Apache 6

 Apache est un serveur http libre,

 L’un des serveurs http les plus utilisé sur Internet

 Apache est conçu pour prendre en charge de nombreux


modules lui donnant des fonctionnalités supplémentaires:
interprétation Du langage Perl, PHP, Python et Ruby, …
 Installation apache2 : apt-get install apache2
Liste des modules installés par défaut
7
Fonctionnalités 8

 Configuration assez simple


 Limitation possible des accès aux répertoires
 Par l'administrateur
 Par les utilisateurs sur les répertoires dont ils ont les auteurs
 Accès sécurisé en fonction des adresses IP

 Chargement de modules pour ajouter de nouvelles fonctionnalités (php,

mysql, ssl, ... )


Fonctionnalités (suite) 9

 Possibilité de réécrire les adresses web à la volée Au lieu


d'afficher dans l'url:
http://www.mondomaine.com/titi.php?id=14, on va faire
afficher: http://www.mondomaine.com/toto14.html

 Hébergements de plusieurs sites web sur un même


serveur (via les VirtualHosts)

 Mise en place d'authentification http

 Système de log personnalisable


Fichiers de configuration 10

 Le fichier de configuration principal est /etc/apache2/apache2.conf, Il


contient les paramètres généraux et communs à tous les serveurs et
plusieurs "Include" vers les autres fichiers.

 Le fichier de configuration /etc/apache2/ports.conf contient la liste


des ports en écoute

 Les fichiers concernant les modules dans le répertoire


/etc/apache2/mods-available/.

 Les fichiers concernant les modules activés dans le répertoire


/etc/apache2/mods-enabled/
Fichiers de configuration (suite) 11

 Les fichiers de configuration des serveurs web /etc/apache2/sites-


available/

 Les fichiers de configuration des sites web activés dans le répertoire


/etc/apache2/sites-enabled/

 La documentation est dans /usr/share/doc.

 Les journaux sont dans /var/log/apache2/.

 Le script de lancement du service serveur est dans /etc/init.d


Le répertoire /etc/apache2/mods-available 12

 On y trouve deux catégories de fichiers : *.load et *.conf

 Les fichiers avec l'extension load charge effectivement les modules

dynamiques :

cat /etc/apache2/mods-available/userdir.load

LoadModule userdir_module /usr/lib/apache2/modules/mod_userdir.so


Le répertoire /etc/apache2/mods-available 13

 Les fichiers avec l'extension conf sont les fichiers de configuration des modules :
cat /etc/apache2/mods-available/userdir.conf
<IfModule mod_userdir.c>
UserDir public_html
UserDir disabled root
<Directory /home/*/public_html>
AllowOverride FileInfo
AuthConfig Limit
Options MultiViews
Indexes SymLinksIfOwnerMatch
IncludesNoExec
</Directory> </IfModule>
Le répertoire /etc/apache2/mods-enabled 14

 ce sont les fichiers qui sont inclus dans le fichier de configuration principal par
les directives :
 Include /etc/apache2/mods-enabled/*.load
 Include /etc/apache2/mods-enabled/*.conf

 ces fichiers sont en fait des liens qui pointent vers les fichiers de
/etc/apache2/mods-available

 Pour activer un module (ce qui revient donc à créer le lien), il est pratique
d'utiliser la commande suivante :
#a2enmod mod_userdir
Le répertoire/etc/apache2/sites-available/ 15

 Contient les fichiers de configuration disponibles


 Les sites web disponibles

Le répertoire/etc/apache2/sites-enalable/
 Contient les fichiers de configuration des sites web activés
 ces fichiers sont en fait des liens qui pointent vers les fichiers de
/etc/apache2/sites-available
 pour activer un site, il existe une commande :
#a2ensite fichier_conf.
"fichier_conf" étant un fichier de configuration présent dans /etc/apache2/sites-
available/
Le fichier /etc/apache2/ports.conf 16

 Listen 80 : indique quel est le port utilisé par le service (par


défaut 80). Il est possible d'utiliser un autre port, par
contre vous devrez spécifier au navigateur quel est le port
utilisé par le serveur. Si vous configurez par exemple le
port 8080 (Listen 8080) sur une machine
 www.MonDomaine.edu, vous devrez spécifier dans le
navigateur www.MonDomaine.edu:8080, pour que le
serveur reçoive et traite votre requête.
 Il est possible de spécifier le serveur
Listen @ip:N°port
Le fichier /etc/apache2/apache2.conf 17

 ServerType standalone : 2 valeurs possibles

 standalone pour un serveur autonome

 inetd si c'est le gestionnaire de service inetd (ou xinetd) qui


réceptionne les requêtes http et les envoie serveur Web. Dans ce cas,
il ne faut pas oublier de configurer le service http dans inetd (ou
xinetd)
 ServerRoot /var/lib/apache : définit le répertoire d'installation du
serveur
 DocumentRoot /var/www : définit le répertoire dans lequel le site web
est stocké. Généralement c'est /var/www ou /var/www/html
Le fichier /etc/apache2/apache2.conf 18

Timeout 300 : temps d'attente maximal du serveur d'une réponse


d'un programme de traitement externe (parseur PHP, script CGI, ...) A
expiration de ce temps, le serveur envoie une erreur au client et au
programme externe lui ordonnant d'arrêter son exécution.

KeepAlive on : autorise les connexions persistantes. Dès qu'un client


s'est connecté, si la connexion est persistante, il va pouvoir envoyer
plusieurs requêtes à la fois. Elles seront ainsi traitées plus rapidement
Le fichier /etc/apache2/apache2.conf
19

MaxKeepAliveRequests 100 : indique le nombre maximum de requête par


connexion. 0 indique une quantité infini !

 Sile serveur est très sollicité, il faudra dans un premier temps diminuer cette
quantité puis si les problèmes persistes, mettre KeepAlive à Off. Les
connexions persistantes peuvent empêcher d'autres utilisateurs d'obtenir leur
réponse.

KeepAliveTimeout 15: valeur d'attente de la requête suivante


venant d'un même client avant d'envoyer un timeout au client
Le fichier /etc/apache2/apache2.conf
20

 MinSpareServers 5 et MaxSpareServers 10 : cela sert à l'autorégulation de la


charge du serveur. Si le nombre de processus enfant du serveur dans l'état idle
(ne traitant aucune requête) est inférieur à MinSpareServers, le serveur en crée
un. Si ce nombre est supérieur à MaxSpareServers, alors il en supprime un La
modification de ces paramètres est à faire uniquement sur des serveurs très
chargés, devant répondre à de nombreuses requêtes
Le fichier /etc/apache2/apache2.conf 21

 StartServers 5 : nombre de serveur à lancer au démarrage

 MaxClients 150 : indique le nombre maximum de serveurs pouvant fonctionner


simultanément Le nombre maximum est de 256. Pour pouvoir dépasser cette limite,
il faut recompiler le serveur après modification de HARD_SERVER_LIMIT dans httpd.h

 Port 80 : port d'écoute du serveur

 User www et Group www : détermine l'utilisateur et le groupe utilisés par le serveur.
Ne jamais mettre root
Le fichier /etc/apache2/apache2.conf 22

 ServerAdmin email : email de l'admin


 ServerName nom.domain.ma : nom et domaine du serveur
 DocumentRoot /var/www : répertoire utilisé pour le stockage des pages
HTML du site racine
 HostnameLookups Off : indique si le serveur enregistre le nom (on) ou bien
l'IP (off) du client qui se connecte
 CacheNegotiatedDocs : autorise ou pas les proxies à mettre les documents
en cache. Pour refuser cette mise en cache, commentez cette ligne (avec
un # en début de ligne)
Le fichier /etc/apache2/apache2.conf 23

 DefaultType text/plain : définit le type Mime des documents transmis par le


serveur. Dans le cas de diffusion majoritairement d'images ou streaming,
mettre application/octet-stream pour éviter que les clients affichent des
caractères étranges u%*d$gge,s&dg£fæ

 ServerSignature on : retourne la version du serveur en signature

 Alias /icons /usr/share/apache/icons : permet de faire des alias


Le fichier /etc/apache2/apache2.conf 24

 ErrorLog /var/log/apache/error.log : chemin du fichier utilisé pour stocker les


messages d'erreurs du serveur
 LogLevel warn : définit le niveau d'enregistrement des erreurs. Les valeurs
possibles sont :
 emerg : enregistre seulement les erreurs qui rendent le serveur
inutilisable
 alert : emerg + erreurs nécessitant une intervention
 crit
: "emerg" + "alert" + erreurs critiques (accès réseau impossible
par exemple)
 error : "emerg" + "alert" + "crit" + erreurs dans les pages, les scripts
Le fichier /etc/apache2/apache2.conf 25

 warn : "emerg" + "alert" + "crit" + "error" + erreurs non bloquantes (pages mal
codées, scripts comportant des erreurs non bloquantes...)

 notice : normal mais information significative

 info : "emerg" + "alert" + "crit" + "error" + "warn" + toutes les informations


générées du type « serveur sur-chargé »

 debug : enregistre TOUT ce qui peut se passer sur le serveur

 Mettre toujours au moins le niveau error


Alias sur des répertoires 26

 Supposons que l'on désire accéder au répertoire :


http://www.monsite.com/docs
 Si nous avons DocumentRoot /home/www, alors le serveur va aller lire
/home/www/docs
 Si docs est en réalité le répertoire /var/web, nous avons deux solutions :
 Soiton fait un lien symbolique (ln -s /var/web /home/www/docs) et on
s'assure que l'option FollowSymLinks ou SymLinksIfOwnerMatch est
présente
 Soit on utilise les alias :
 Alias /docs /var/web
 Dans ce cas, http://www.monsite.com/docs/files.html va lire le
répertoire /var/web/files.html
La directive Directory
27
 Permet de définir les règles sur des répertoires
<Directory "/var/lib/apache/htdocs">
Options Indexes FollowSymlinks Multiviews
AllowOverride None
Order allow,deny
allow from all
</Directory>
 Dans l'exemple, avec les options, nous définissons les informations suivantes :
 indexes : autorise le serveur à fabriquer une liste des fichiers et
répertoires disponibles
 FollowSymlinks : autorise le serveur à suivre des liens symboliques
 Multiviews : permet par exemple d'afficher des pages en fonction de
la langue du client
Options dans Directory 28
Liste des options possibles dans la directive Directory
 None : désactive toutes les options
 All : active toutes les options, sauf multiviews
 Indexes : le serveur géré automatiquement un index du répertoire si le index.htm
(ou index.html, ...) est manquant; option dangereuse en fonction du contenu du
répertoire
 FollowSymLinks : autorise à suivre les liens symboliques
 SymLinksIfOwnerMatch : autorise à suivre les liens seulement si le user id du fichier sur lequel le
lien pointe est le même que celui du lien
 ExecCGI : possibilité d'exécution de scripts CGI à partir de ce répertoire
 Multiviews : autorise les vues multiples en fonction du contexte. Par exemple, en fonction de la
langue du client
Options dans Directory (suite) 29
 Includes : autorise l'inclusion de document dans des pages HTML
avec la commande
 <!-- #include toto.shtml-->, ou bien l'exécution de commande comme ls

 Exemple :
 <html>
 <body>
 <!--#exec cmd="ls" --><BR/>
 La date locale <!--#echo var="DATE_LOCAL" -->
 </body>
 </html>

 IncludesNOEXEC : permet les includes mais empêche l'exécution


de commande
La directive AllowOverride 30

 AllowOverride : définit les types de redéfinitions autorisées par le fichier de


contrôle d'accès
 AllowOverride All : autorise tous les types de redéfinition de contrôle
d'accès
 AllowOverride
AuthConfig : active les directives d'autorisations
(AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName,
AuthDigestRealmSeed, AuthType, AuthUserFile, Require, ...)
 AllowOverride
FileInfo : active les directives de contrôle des types de
documents (AddEncoding, AddLanguage, AddType, DefaultType,
ErrorDocument, LanguagePriority, etc.)
La directive AllowOverride 31

 AllowOverride : définit les types de redéfinitions autorisées par le fichier de


contrôle d'accès
 Indexes: autorise les directives de création d'index d'un répertoire
(AddDescription, AddIcon, AddIconByEncoding, AddIconByType,
DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore,
IndexOptions, ReadmeName, etc.)
 Limit
: autorise les contrôles sur les accès des machines (Allow, Deny and
Order)
 Options : autorise des contrôles spécifiques sur les fonctionnalités Options
 None : ne permet pas de redéfinir les contrôles d'accès
La directive <Files> 32

 Permet de contrôler les accès sur un fichier, de la même manière que le fait
<Directory> sur les répertoires Généralement utilisé sur un ensemble de fichier
particulier
 Exemple : Interdit à tout client d'accéder aux fichiers commençant par .ht
 <Files ~ "^\.ht">
 Order allow,deny
 Deny from all
 </Files>
La directive <Files> 33

 Syntaxe : <Files Filename>...</File>


 Filename peut contenir un nom de fichier mais aussi une chaîne de
caractère utilisant ? pour remplacer un unique caractère ou * pour
remplacer n'importe quelle séquence de caractères
 L'utilisation
d'expression régulière est possible mais on ajoute alors le
caractère ~ comme dans l'exemple
Contrôle sur les clients 34

 Il est possible d'autoriser ou pas certain accès en fonction de l'adresse IP ou de


l'adresse réseau du client
 Exemple :
 Order Allow, Deny
 Allow from 192.168.0.0/24, 89.45.47.14
 Deny from All
 Order : détermine l'ordre d'applications des règles allow et deny
Contrôle sur les clients 35
 Fonctionnement général :
 Order Deny, Allow
 La directive Deny est évaluée en premier. Par défaut, les accès sont
autorisés. Un client est autorisé s'il ne vérifie pas la directive Deny ou s'il
vérifie un directive Allow
 Order Allow, Deny
 La directive Allow est évaluée en premier. Par défaut, les accès sont
refusés. Un client est refusé s'il ne vérifie pas la directive Allow ou s'il
vérifie une directive Deny
 Dans l'exemple : les clients d'adresse réseau 192.168.0.0/24 et 89.45.47.14
sont autorisés et tous les autres sont refusés
 Cette directive est autorisée dans <Directory> et .htaccess si le module
mod_access est chargé
Gestion des modules dans apache 36

 Apache2 dispose d’un nombre important de modules complémentaires dont

le nom de paquet débute généralement par libapache2.

 Pour obtenir la liste des modules , vous pouvez lancer la commande :

# apt-cache search libapache2


Installation d’un module
37

 L’installation d’un module se passe de la même manière que pour n’importe


quel autre paquet sur Ubuntu.

 Prenons l’exemple de l’installation du module php pour Apache. On


recherche d’abord quel est le nom du paquet qui pourrait correspondre à
notre besoin :

#apt-cache search libapache2 |grep php

 Lancer l’installation de ce module (par exemple php5):

#apt-get install libapache2-mod-php5


Activation et désactivation d’un module 38

 a2enmod (pour Apache enable module) se contente de faire un lien symbolique de la

définition du module choisi contenu dans /etc/apache2/mods-

available vers /etc/apache2/mods-enabled

 Le répertoire /etc/apache2/mods-available contient en général deux fichiers pour chaque

module installé sur le système, un dont l’extension est .load qui contient la directive le

chargement du réel module (généralement contenu dans le

répertoire /usr/lib/apache2/modules/) et un autre dont l’extension est .conf qui contient la

configuration par défaut du module en question.


Activation et désactivation d’un module 39

 a2dismod (pour apache disable module) se contente quand à lui de

supprimer ce lien symbolique.

 Il suffit ensuite de recharger la configuration d’Apache pour que le module

(avec sa configuration par défaut) soit pris en compte :

#/etc/init.d/apache2 restart
La configuration des modules
40

 Lors de leur activation, les modules utilisent leur configuration par défaut contenue
dans le répertoire/etc/apache2/mods-available

 Après la reconfiguration de chaque module, il faut redémarrer le serveur apache


pour que la nouvelle configuration soit prise en compte.

 Exemple : module geoip qui permet de connaitre une géolocalisation approximative


des visiteurs.

 Installation :

#apt-get install geoip-bin libapache2-mod-geoip libgeoip1

#a2enmod geoip

#/etc/init.d/apache2 restart
La configuration des modules
41

Le module est automatiquement configuré par le fichier /etc/apache2/mods-


available/geoip.conf dont le contenu est :
<IfModule mod_geoip.c>
GeoIPEnable On
#GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
</IfModule>
 Remarque
la directive GeoIPDBFile est commentée, s’il est actif le module utilisera la base
de donnée standard qui se trouve à l’endroit /usr/share/GeoIP/GeoIP.dat. Si
vous souhaitez utilisez une autre base il suffit donc de décommenter et de
modifier la directive GeoIPDBFile.
Les Virtual Host 42
 Les Virtual Host permettent de faire correspondre un même serveur Web à plusieurs sites web
différents

 Exemple : www.domaine.com et depinf.domaine.com peuvent être hébergés sur


une même machine

 Types de Virtual Hosts


 Virtual Hosts basé sur le nom
 On utilise le nom envoyé par le client dans l'URL pour différencier les serveurs
virtuels
 Virtual Hosts basé sur @IP
 on utilise des adresses IP différentes pour chaque domaine
 Virtual host basé sur le port
 On utilise les ports pour chaque site
Virtual Hosts basé sur le nom
43
 Définir les noms de votre sites au niveau de DNS
 Ajouter les noms des site dans le fichier /etc/hosts
 Exemple

#gedit /etc/hosts
127.0.0.1 site1.ma
127.0.0.1 site2.ma
 Créer les dossier pour les sites dans le dossier /var/www
 #mkdir /var/www/site1
 #mkdir /var/www/site2
 créer un fichier de configuration pour chaque site dans dans /etc/apache2/sites-available
 #cp /etc/apache2/sites-available/default.conf site1.conf
 #vim site1.conf
Virtual host basé sur le nom (suite)
<VirtualHost *:80>
44
ServerAdmin admin@site1.ma
ServerName www.site1.ma
ServerAlias www.site1.ma
DocumentRoot /var/www/site1
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/site1>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
Virtual Hosts basé sur le port
45
 le Serveur Web Apache2 est configuré pour écouter sur le port 80
 Il est possible d'utiliser des ports différents pour chaque hôte virtuel (site)
 Ajouter les noms des site dans le fichier /etc/hosts pour la même @IP
Virtual Hosts basé sur le port
 Créer le fichier de configuration pour chaque site (site1.conf) 46
<VirtualHost *:8081>
ServerAdmin admin@site1.ma
ServerName www.site1.ma
ServerAlias www.site1.ma
DocumentRoot /var/www/site1
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/site1>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHos>
 Ajouter les lignes suivantes dans le fichier /etc/apache2/ports.conf
Listen 80801
Virtual Hosts basé sur la @IP
47
 Avec cette solution le serveur soit doté de plusieurs interfaces réseau, soit de plusieurs @IP
associées à une interface réseau
 nous créons des Hôtes Virtuels utilisant chacun une @IP
 Exemple:
 site1.ma 192.168.1.2
 site2.ma 192.168.1.3
 Dans un premier temps, nous renseignons le fichier /etc/hosts avec des noms de sites et leurs
@IP
 Exemple :
 127.0.0.1 localhost
 192.168.0.2 site1.ma
 192.168.0.100 site2.ma
Virtual Hosts basé sur la @IP (suite)
48
 Creez les fichiers de configuration de chaque site
 Exemple
 site1.conf :
<VirtualHost 192.168.1.2:80>
DocumentRoot /var/www/site1
ServerName wwv.site1.ma
</VirtualHost>
 site2.conf :
<VirtualHost 192.168.1.3:80>
DocumentRoot /var/www/site2
ServerName www.site2.ma
</VirtualHost>
Protéger un dossier par .htaccess 49

 Il est possible de redéfinir les règles d'accès à un répertoire en plaçant dans celui-ci un fichier
texte appelé fichier de contrôle d'accès dont le nom est définit par la directive
AccessFileName

 Exemple : AccessFileName .htaccess définit le nom .htaccess pour le fichier de


contrôle d'accès.

 Les règles d'accès qu'il est possible de redéfinir sont gérées par la directive AllowOverride. Pour
interdire les redéfinitions, il suffit de mettre AllowOverride none
Protéger un dossierpar .htaccess
50

 Exemple d'authentification http


AuthType Basic
AuthName " Dossier protéger "
AuthUserFile /www/passwords/.htpassword
Require valid-user

 Possibilité de mettre ces lignes soit dans <Directory>, soit dans un


fichier de contrôle d'accès (si AllowOverride AuthConfig est définit)
Protéger un dossier par .htaccess
51
 Création du fichier .htpasswd

#apt-get install apache2-utils


#htpasswd –c chemin/.htpawssd user1
Sécuriser apache 52
 Cacher la version d'Apache et autres informations sensibles
 Dans le fichier /etc/apache2/conf-available/security.conf définir les
parametres suivants:
 ServerSignature Off
 ServerTokens Prod
Sécuriser apache 53
 Restreindre l'accès aux seuls fichiers du répertoire web
On suppose que le répertoire /web est le répertoire où sont les fichiers de votre site web.
Editer le fichier /etc/apache2/sites-available/default ou /etc/apache2/sites-available/default-
ssl.conf et definir les parametre suivants :

<Directory />
Order Deny, Allow
Deny from all
Options None
AllowOverride None
</Directory>
<Directory /web>
Order Allow,Deny
Allow from all
</Directory>
Sécuriser apache 54
 Empêcher le parcours d'un répertoire
<Directory /web>
Order Allow,Deny
Allow from all
Options -Indexes
</Directory>
 Désactiver les inclusions coté serveur
Options –Includes
Sécuriser apache 55
Empêcher Apache de suivre les liens symboliques
Options –FollowSymLinks
Empêcher le téléchargement de fichiers .htaccess
AccessFileName .htaccess
<Files ~ "^\.ht">
Order Allow,Deny
Deny from All
</Files>
Sécuriser apache avec TLS/SSL
56

 Apache 2 contient deux sites préconfigurés : « default » et « default-ssl » qui


pointent tous les deux vers le répertoire « /var/www » mais le premier écoute
sur le port 80 (HTTP) et le second sur le port 443 (HTTPS)

 Activer le module SSL d’apache

#a2enmod ssl

 Activer le site default-ssl d’Apache

#a2ensite default-ssl
Génération des certificats
57
 Gêner la clé (par exemple la bi-clé RSA)
#cd /etc/apache2/
#mkdir ssl
#cd ssl
#openssl genrsa -out apache.key 1024
 générons le certificat auto signé
#openssl req -new -x509 -days 365 -key apache.key -out apache.crt
 -x509 : génération d’un certificat auto signé,
 -days 365 : le certificat est valable 365 jours
 -key server.key : la clé publique est extraite de la bi-clé précédente
 -out server.crt : le certificat est copié
Génération des certificats
58

Utiliser dans un virtualhost


<virtualhost *:443>
ServerName serveurweb.dom
DocumentRoot /var/www/siteweb
Alias /monsiteweb /var/www/sitweb
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
</virtualhost>
Sécurisation via le module modsecurity
59

 ModSecurity est un module d'Apache spécialisé dans la sécurité qui joue le


rôle de pare-feu applicatif :
Sécurisation via le module modsecurity
60

 On installe le module par :


#apt-get install libapache2-modsecurity
 Le fichier de configuration du module se trouve dans le dossier /etc/modsecurity/
#cp modsecurity.conf-recommended modsecurity.conf
 on édite modsecurity.conf pour ajouter quelques règles élémentaires :
Sécurisation via le module modsecurity
61
 Activer le blocage des requêtes détectées par les règles mises en place
 SecRuleEngine On
 Ajout d'une signature personnalisée
 SecServerSignature « CFC FST«
 Création d'une liste noire (pour bloquer les IP indésirables )
SecAction "phase:1,pass,nolog,setvar:tx.remote_addr=/%{REMOTE_ADDR}/"
SecRule TX:REMOTE_ADDR "@pmFromFile blacklist.txt" "deny,status:403

Une fois cette règle ajoutée, il faut créer un fichier /etc/modsecurity/blackllist.txt


contenant les IPs entourées du caractère "/" : /10.10.2.3/
 Activer le module par :
 a2enmod mod_security
 service apache2 reload
 Remarque : pour que cela fonctionne il faut mettre dans ServerTokens “Full”
Sécurisation par Fail2ban 62

Fail2ban est un petit utilitaire qui se base sur les logs de la machine pour chercher des actions

suspectes répétées (par exemple, des erreurs de mots de passe) dans un laps de temps donné.

S’il en trouve, il bannira l’IP de l’attaquant via iptables. Ce type de logiciel est indispensable, car,

bien que léger, il offre une bonne protection contre les attaques basiques.
Sécurisation par Fail2ban
63
 Installation
#apt-get install fail2ban
 Configuration
#vim /etc/fail2ban/fail2ban.conf
 Loglevel : Niveau de détail des logs (défaut 3)
 logtarget = /var/log/fail2ban.log (Chemin vers le fichier de log )
 Les services à monitorer sont stockés dans jail.conf. Il est recommandé d’en
effectuer une copie nommée jail.local qui sera automatiquement utilisée (cp
/etc/fail2ban/jail.conf /etc/fail2ban/jail.local)
#vim /etc/fal2ban/jail.local
 ignoreip = 127.0.0.1 Liste des adresses IP de confiance à ignorer par fail2ban
Sécurisation par Fail2ban 64
 bantime = 600 Temps de ban en secondes
 maxretry = 3 Nombre d’essais autorisés pour une connexion avant d’être
banni
 destmail monitoring@test.com Adresse e-mail destinataire des notifications
 Action Action à entreprendre en cas de détection positive (voir dans
/etc/fail2ban/action.d/)
 Enabled Monitoring activé (true) ou non (false)
 Port Port IP concerné
 Logpath Fichier de log à analyser pour détecter des anomalies
 Filter Filtre utilisé pour l’analyser du log
 Après modification de la configuration, redémarrer fail2ban
#/etc/init.d/fail2ban restart
Sécurisation par rootkit 65
 Rootkit Hunter est un programme de détection de rootkits. Vous pouvez l’installer grâce à :
#apt-get install rkhunter
 Il est conseillé de l’installer très tôt car il calcule l’empreinte MD5 des programmes installés afin
de détecter d’éventuels changements.
 Editez/etc/default/rkhunter.conf pour indiquer l’adresse de notification et l’exécution
journalière :
#vi /etc/default/rkhunter.conf
 REPORT_EMAIL="monitoring@test.com"
 CRON_DAILY_RUN="yes"
 En cas de fausses détections positives sur des répertoires ou fichiers existants et sains,
éditez /etc/rkhunter.conf pour les ajouter à la liste des éléments autorisés.
#vi /etc/rkhunter.conf
 ALLOWHIDDENDIR=/dev/.udev
 ALLOWHIDDENDIR=/dev/.static

 Vous pouvez également utiliser chkrootkit .

Vous aimerez peut-être aussi