Académique Documents
Professionnel Documents
Culture Documents
Réalisé par : Yahya Naïme &- alyas Derkaoui Encadré par :Pr.Mohammed CHAHI
Page 1
Année : 2019/2020
Sommaire :
Objectif De Projet........................................................................................ 03
Le protocole HTTP ...................................................................................... 04
A-Pré requis ................................................................................................. 04
B-Configurer http et SSL…................................................................05
C- Améliorer la sécurité de notre hébergement ...................................... 06
SQUID ........................................................................................................... 08
D-Pré requis.................................................................................................. 08
E-Installation…................................................................................. 08
F-Configuration… ..............................................................................09
G-Utilisation… .................................................................................. 10
H-Configuration manuelle de Firefox.......................................................10
I-Vérifier le fonctionnement ....................................................................... 10
J-Configurer Squid comme proxy transparent ....................................... 10
K-Téléchargements .................................................................................... 11
APACHE...................................................................................................... 12
L-Remarques spécifiques à IPv6 .............................................................12
M-Comment tout ceci fonctionne-t-il avec les hôtes virtuels ............. 13
PHP .............................................................................................................. 14
MYSQL ......................................................................................................... 17
N-Installation et configuration ................................................................... 17
O-Sécuriser le serveur MySQL/MariaDB ................................................17
P-Exemple de base de données ...................................................... 20
Q- Sauvegarde ............................................................................................20
R- Restauration ........................................................................................... 21
S- Sauvegardes automatiques .................................................................21
Page 2
OBJECTIF DE PROJET :
Page 3
Le protocole HTTP (Hypertext Transfer Protocol)
Transmet les données entre le serveur et le navigateur « en clair ». Les données
personnelles, mots de passe et autres numéros de Carte Bleue sont donc interceptables.
Pour résoudre ce problème, on utilisera le protocole HTTPS, qui ajoute une couche de
chiffrement SSL (Secure Sockets Layer) au protocole HTTP.
Le transfert chiffré des données ne constitue qu’un aspect dans l’établissement d’une
connexion sécurisée. L’autre aspect tout aussi important, c’est que l’utilisateur doit
être sûr de communiquer avec la bonne personne. Autrement dit, votre numéro de
Carte Bleue a beau être transmis de façon sécurisée, encore faut-il que la plateforme
de paiement ne soit pas située sur un serveur géré par la mafia albanaise.
Pour savoir si l’on a bien affaire au bon interlocuteur, on utilisera un certificat. Cette
véritable carte d’identité électronique contient non seulement la clé publique du
serveur pour chiffrer les transmissions, mais également des renseignements sur le site
ainsi que la signature de l’autorité de certification.
La génération d’un certificat électronique est décrite en détail dans cet article. Pour
nos essais, nous utiliserons un certificat SSL/TLS fourni par le client Certbot.
Pré requis
Installation
Configurer Apache et SSL
Améliorer la sécurité de notre hébergement
A. Pré requis
Le protocole HTTPS utilise le port 443. Il faut donc songer avant toute chose à ouvrir
ce port dans le pare-feu.
Pour nos tests, nous allons partir d’une installation par défaut d’Apache avec un seul
site statique rangé dans /var/www/html. Si l’on dispose déjà d’une installation
d’Apache avec une série d’hôtes virtuels, voici ce qu’il faut faire pour remettre les
compteurs à zéro.
Page 4
$ sudo yum remove httpd
$ sudo rm -rf /var/www/*
$ sudo rm -rf /etc/httpd/
$ sudo yum install httpd
$ cd /etc/httpd/conf
$ sudo mv httpd.conf httpd.conf.orig
$ egrep -v '^#|^$|^ #|^ #' httpd.conf.orig | sudo tee
httpd.conf.lite
$ sudo cp httpd.conf.lite httpd.conf
$ sudo cp -R /usr/share/httpd/noindex/* /var/www/html/
ServerAdmin ofppt@ista.ma
...
CustomLog "logs/access_log" common
...
AddDefaultCharset off
$ cd /etc/httpd/conf.d
$ sudo cp ssl.conf ssl.conf.orig
Si l’on part d’un répertoire /var/www/html vide, on peut récupérer un peu de contenu
statique pour avoir quelque chose à nous mettre sous la dent.
$ cd /var/www/html/
$ sudo cp -R /usr/share/httpd/noindex/* .
##
## SSL Virtual Host Context
##
<VirtualHost _default_:443>
DocumentRoot "/var/www/html"
ServerName www.ista.ma:443
Page 5
...
SSLCertificateFile /etc/letsencrypt/live/ista.ma/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ista.ma/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/ista.ma/fullchain.pem
...
</VirtualHost>
Redémarrer http.
$ sudo systemctl restart httpd
Rendons-nous sur la page SSL Server Test du portail Qualys SSL Labs pour effectuer
un audit de la sécurité de notre hébergement.
Pour l’heure, le résultat n’est pas parfait et nous indique que nous pouvons faire
mieux.
# /etc/httpd/conf.d/ssl.conf
Listen 443 https
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLSessionCache shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout 300
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
# Désactiver TLS 1.0 & TLS 1.1
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA
# Préférences de chiffrement
SSLHonorCipherOrder on
# HSTS
Header always set Strict-Transport-Security \
"max-age=63072000; includeSubDomains"
# Bloquer le clickjacking
Header always set X-Frame-Options DENY
# Bloquer le changement de type MIME
Header always set X-Content-Type-Options nosniff
# /etc/httpd/conf.d/10-www.ista.ma-ssl.conf
Page 6
# https://www.ista.ma
<VirtualHost _default_:443>
ServerAdmin ofppt@ista.ma
DocumentRoot "/var/www/html"
ServerName www.ista.ma:443
ServerAlias ista.ma
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/ista.ma/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ista.ma/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/ista.ma/fullchain.pem
BrowserMatch "MSIE [2-5]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
ErrorLog logs/www.slackbox.fr-error_log
CustomLog logs/www.slackbox.fr-access_log common
</VirtualHost>
Je teste la configuration.
$ sudo apachectl configtest
Syntax OK
Je relance l’audit de sécurité sur le site de Qualys Labs en cliquant sur Clear Cache.
Cette fois-ci, notre hébergement est proche de la perfection, et même un peu au-delà.
Page 7
Squid
est un serveur mandataire (proxy en anglais). Dans les réseaux locaux, il est utilisé
pour des fonctions de filtrage d’URL ou en tant que cache. Les pages web sont
stockées sur le serveur local, ce qui évite d’aller les recharger plusieurs fois et permet
d’économiser de la bande passante Internet. Cet article décrit l’installation et la
configuration de Squid sur un serveur de réseau local CentOS.
Prérequis
Installation
Configuration
Utilisation
Configuration manuelle de Firefox
Vérifier le fonctionnement
Configurer Squid comme proxy transparent
Téléchargement
D. Pré requis
Dans la configuration par défaut, Squid utilise le port 3128 en TCP et en UDP. Il faut
donc songer à l’ouvrir dans le pare-feu.
# Commandes
IPT=/usr/sbin/iptables
...
# Réseau local
IFACE_LAN=enp7s4
...
# Squid
$IPT -A INPUT -p tcp -i $IFACE_LAN --dport 3128 -j ACCEPT
$IPT -A INPUT -p udp -i $IFACE_LAN --dport 3128 -j ACCEPT
E. Installation
Squid est officiellement supporté par Red Hat Enterprise Linux et CentOS. On peut
donc l’installer depuis les dépôts officiels.
$ sudo yum install squid
Page 8
F. Configuration
# /etc/squid/squid.conf
# Définitions
acl localnet src 192.168.3.0/24
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
# Règles d'accès
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localnet
http_access allow localhost
http_access deny all
# Port du proxy
http_port 3128
# Vidage système
coredump_dir /var/spool/squid
Page 9
Cette configuration mérite quelques remarques.
Squid peut être utilisé par toutes les machines du réseau local
192.168.3.0/24. La directive acl localnet définit une variable
localnet qui indique l’étendue du réseau local.
Cette directive fonctionne de pair avec http_access localnet, qui
autorise toutes les machines du réseau local à utiliser le cache. Le nom
localnet est une convention, et on est libre d’en utiliser un autre.
Dans l’exemple ci-dessus, le cache est uniquement écrit dans la RAM du
serveur. La directive cache_mem permt de définir la taille du cache. Si l’on
ne souhaite pas utiliser le disque dur pour le cache, il faut s’assurer de n’utiliser
aucune directive cache_dir.
G. Utilisation
Lorsque Squid n’est pas utilisé comme proxy transparent, il faut procéder à une
configuration individuelle des navigateurs web sur les postes clients. Pour Firefox,
ouvrir Préférences > Proxy réseau > Paramètres et indiquer le nom d’hôte ou
l’adresse IP ainsi que le port du proxy.
I. Vérifier le fonctionnement
Pour voir si les postes clients utilisent effectivement le proxy, on peut afficher en
direct le contenu du journal /var/log/squid/access.log.
$ sudo tail -f /var/log/squid/access.log
1519986674.236 166 192.168.2.2 TCP_MISS/200 4330
GET http://www.slackware.com/ - HIER_DIRECT/95.100.252.163 ...
1519986674.607 45 192.168.2.2 TCP_MISS/200 676
GET http://www.slackware.com/favicon.ico - ...
Page 10
Pour éviter cela, on va tout simplement rediriger toutes les requêtes HTTP (port 80)
vers le port 3128 pour obtenir un proxy transparent. Ce qui signifie que le cache est
utilisé automatiquement, sans la moindre configuration de la part de l’utilisateur.
Évidemment, cela suppose que Squid tourne sur la machine qui fait office de
passerelle dans le réseau local.
# Port du proxy
http_port 3128 transparent
On va partir du principe que le relais des paquets est déjà activé dans le pare-feu. Il ne
reste plus qu’à rediriger les paquets IP, en faisant une exception pour les requêtes
HTTP à destination du serveur lui-même. Voici à quoi cela peut ressembler.
# Commandes
IPT=/usr/sbin/iptables
...
# Réseau local
IFACE_LAN=enp7s4
...
# Serveur
SERVER_IP=192.168.3.1
...
# Squid
$IPT -A INPUT -p tcp -i $IFACE_LAN --dport 3128 -j ACCEPT
$IPT -A INPUT -p udp -i $IFACE_LAN --dport 3128 -j ACCEPT
$IPT -A PREROUTING -t nat -i $IFACE_LAN -p tcp ! -d $SERVER_IP \
--dport 80 -j REDIRECT --to-port 3128
Là aussi, il faut afficher les logs « à chaud » pour voir si le proxy transparent est
effectivement utilisé par les postes clients.
$ sudo tail -f /var/log/squid/access.log
K. Téléchargement
Page 11
Apache
Au démarrage d'Apache, un port et une adresse lui sont associés sur l'hôte local et le
serveur se met en attente de l'arrivée d'une requête. Par défaut, le serveur écoute toutes
les adresses de l'hôte local. Cependant, on peut lui préciser des ports spécifiques à
écouter, ou lui dire de n'écouter que sur certaines adresses, ou une combinaison des
deux. Tout ceci est souvent associé avec la fonctionnalité des hôtes virtuels qui
détermine la manière dont Apache répond aux différents ports, noms d'hôtes et
adresses IP.
La directive Listen enjoint le serveur de n'accepter des requêtes que sur les ports
spécifiés ou une combinaison adresse/port. Si seul un numéro de port est spécifié dans
la directive Listen, le serveur écoute ce port sur toutes les interfaces réseau. Si une
adresse IP est spécifiée en plus du port, le serveur va écouter ce port sur l'interface
réseau correspondante. On peut utiliser de multiples directives Listen pour spécifier
plusieurs adresses et ports à écouter. Le serveur répondra alors aux requêtes sur ces
ports et adresses spécifiés.
Par exemple, pour faire en sorte que le serveur accepte des connexions sur les ports 80
et 8000 sur toutes ses interfaces, utilisez :
Listen 80
Listen 8000
Pour faire en sorte que le serveur accepte des connexions sur le port 80 sur une
interface, et sur le port 8000 sur une autre interface :
Listen 192.0.2.1:80
Listen 192.0.2.5:8000
Les adresses IPv6 doivent être entourêes de crochets, comme dans l'exemple suivant :
Listen [2001:db8::a00:20ff:fea7:ccea]:80
Page 12
où ces adresses sont interdites par défaut, un paramètre spécial du script configure
permet de modifier ce comportement pour Apache.
L'option --enable-v4-mapped est utilisée par défaut sur toutes les plateformes
sauf FreeBSD, NetBSD, et OpenBSD; votre Apache a donc probablement été
construit avec cette option.
Si vous souhaitez qu'Apache ne gère que des connexions IPv4, sans se soucier de ce
que vos plateforme et APR supportent, spécifiez une adresse IPv4 dans toutes les
directives Listen, comme dans l'exemple suivant :
Listen 0.0.0.0:80
Listen 192.0.2.1:80
La directive Listen n'implémente pas les hôtes virtuels. Elle indique simplement au
serveur principal sur quels adresses et ports il doit écouter. Si aucune directive
<VirtualHost> n'est présente, le serveur se comportera de la même façon pour
toutes les requêtes acceptées. En revanche, la directive <VirtualHost> peut être
utilisée pour provoquer une réaction différente du serveur pour un ou plusieurs
adresses/ports. Pour implémenter un hôte virtuel, on doit d'abord indiquer au serveur
sur quels adresses et ports il doit écouter. Ensuite, une section <VirtualHost> doit
être créée pour chaque couple adresse+port spécifié afin de définir le comportement
de cet hôte virtuel. Notez que si la directive <VirtualHost> est définie pour une
adresse et un port sur lesquels le serveur n'est pas censé écouter, cet hôte virtuel ne
sera pas accessible.
Page 13
PHP (Hypertext Preprocessor)
plus connu sous son sigle PHP (sigle auto-référentiel), est un langage de
programmation libre, principalement utilisé pour produire des pages Web dynamiques
via un serveur HTTP, mais pouvant également fonctionner comme n'importe quel
langage interprété de façon locale. PHP est un langage impératif orienté objet.
PHP a permis de créer un grand nombre de sites web célèbres, comme Facebook et
Wikipédia Il est considéré comme une des bases de la création de sites web dits
dynamiques mais également des applications web.
Dans cet exemple, je vais installer PHP 7.3 qui est la dernière version en date de PHP.
Nous allons devoir récupérer cette version dans d'autres dépôts car ce n'est pas cette
version qui nativement proposée avec CentOS (PHP 5.6).
Nous allons utiliser la source de paquets additionnelle EPEL (Extra Package for
Entreprise Linux), que l'on ajoute de cette façon :
Le dépôt Remi pour CentOS doit être ajouté également, puis nous installons yum-utils
car nous avons besoin de yum-config-manager pour activer le paquet correspondant à
PHP 7.3 et pouvoir l'installer.
yum update
yum-config-manager --enable remi-php73
Page 14
Enfin, on installe PHP 7.3 et le paquet php-opcache (facultatif) pour l'utilisation du
cache PHP :
yum -y install php php-opcache
Avant de passer à la partie base de données, nous allons installer quelques extensions
pour PHP, y compris l'extension pour MariaDB, ainsi que l'outil Curl :
Pour afficher les informations concernant PHP, notamment sa version ainsi que les
modules chargés. Nous allons créer une page PHP pour afficher le résultat de
phpinfo().
Sauvegardez et accédez à la page à l'aide de votre navigateur. Vous devez obtenir une
page semblable à celle-ci :
Page 15
Lorsque vous avez terminé d'utiliser cette page, pensez à la supprimer car elle fournie
des informations importantes sur votre configuration :
rm /var/www/html/version.php
Page 16
MySQL
est un système de gestion de bases de données relationnelles (SGBDR). Il est
distribué sous une double licence GPL et propriétaire. Il fait partie des logiciels de
gestion de base de données les plus utilisés au monde4, autant par le grand public
(applications web principalement) que par des professionnels, en concurrence avec
Oracle, PostgreSQL et Microsoft SQL Server.
On entend parfois dire que MySQL n’est pas un « vrai » système de bases de données
en comparaison à des systèmes comme Oracle ou DB/2. Contentons-nous de savoir
que MySQL est utilisé, entre autres, par Facebook, Google et Yahoo!
Installation et configuration
Sécuriser le serveur MySQL/MariaDB
Exemple de base de données
Sauvegarde
Restauration
Sauvegardes automatiques
N. Installation et configuration
Installer MySQL/MariaDB.
$ sudo yum install mariadb-server mariadb
1. Définir un mot de passe root MySQL (ne pas confondre avec le compte
root Linux).
2. Supprimer les comptes root MySQL accessibles de l’extérieur.
3. Supprimer les connexions anonymes.
4. Supprimer la base de données de test.
Page 17
Lancer la sécurisation.
$ sudo mysql_secure_installation
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Setting the root password ensures that nobody can log into the
MariaDB root user without the proper authorisation.
Reloading the privilege tables will ensure that all changes made so
far will take effect immediately.
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Page 18
Thanks for using MariaDB!
Quitter la console.
Page 19
MariaDB [mysql]> quit;
Bye
Créer un utilisateur webappuser qui aura tous les droits sur webapp.
Q. Sauvegarde
Les fichiers SQL résultants sont parfois très volumineux, étant donné qu’il s’agit d’un
format texte simple. Dans ce cas, on peut les compresser durant la sauvegarde même.
Voici ce que cela donne pour les deux exemples précédents.
Page 20
R. Restauration
Si l’on obtient des erreurs de connexion aux bases restaurées, il faudra se connecter au
moniteur MySQL, puis…
mysql> flush privileges;
S. Sauvegardes automatiques
$ cd
$ git clone https://gitlab.com/kikinovak/centos-8
$ cp centos-8/el7/sqldump/sqldump.sh ~/bin/
$ chmod 0700 ~/bin/sqldump.sh
$ vim ~/bin/sqldump.sh
Une fois qu’on a édité le script à sa convenance, on peut définir une tâche
automatique.
$ sudo crontab -e
# Sauvegarde quotidienne des bases MySQL à 0h30
30 00 * * * /home/ista/bin/sqldump.sh 1> /dev/null
Page 21