:::info <center> # Création d'un site sécurisé sous Apache et Aperçu de la CGI avec Python. ::: </center> ## Structure du répertoire Dans cette partie nous allons mettre en place 2 sites sur un server Apache. <center> ![](https://i.imgur.com/uYKVYxG.png) ![](https://i.imgur.com/uKWhbHS.png) </center> ## Créer un hôte virtuel - Créer les répertoires dans **/var/www/** ``` mkdir -p /var/www/vhosts/site1 mkdir -p /var/www/vhosts/site2 ``` ### Création du Site 1 - Créer un fichier **index.html** `nano /var/www/vhosts/site1/index.html` :abc: ![](https://i.imgur.com/3Cowyhg.png) ### Créer de nouveaux fichiers d'hôtes virtuels - Créer un fichier d'hôte virtuel `nano /etc/apache2/sites-available/port_vhosts.conf` :abc: ![](https://i.imgur.com/c11Owvg.png) - Activer le nouveau fichier de l'hôte virtuel ``` a2dissite 000-default.conf a2ensite port_vhosts.conf ``` - Redémarrer le service Apache ``` systemctl restart apache2 ou /etc/init.d/apache2 restart systemctl status apache2 ou /etc/init.d/apache2 status ``` :abc: ![](https://i.imgur.com/WEk7cm2.png) ### Testez les résultats - Tester les configurations en allant sur le domaine `http://192.168.64.133/` :abc: ![](https://i.imgur.com/mkTI0Of.png) - Nous pouvons remarquer que les accents ne sont pas pris en compte donc nous allons corriger le problème d'encodage. - Vérifier les locales générées sur le système. `grep -v "^#" /etc/locale.gen` :abc: ![](https://i.imgur.com/9o79D9R.png) - Décommenter la ligne pour activer le paramètre **AddDefaultCharset** `nano /etc/apache2/conf-enabled/charset.conf` :abc: ![](https://i.imgur.com/gfevmpS.png) - Vérifier le résultat ``` systemctl restart apache2 systemctl status apache2 ``` - Sur un navigateur Web : :abc: ![](https://i.imgur.com/s53bIaG.png) ## Sécurisation de base - Lorsqu'on essaye de naviguer sur une adresse eronnée, nous constatons que des données sensible concernant le server sont visible. ![](https://i.imgur.com/5easUhY.png) - Nous allons donc masquer les informations. `nano /etc/apache2/conf-enabled/security.conf` * Désactiver : « #ServerTokens OS » * Ajouter : « ServerTokens Prod » * Activer : « ServerSignature Off » * Désactiver : « #ServerSignature On » * Activer : « TraceEnable Off » * Déactiver : « #TraceEnable On » - Sur un navigateur Web : `http://192.168.64.133/t` :abc: ![](https://i.imgur.com/4GA0nFJ.png) ## Configurer le SSL avec Apache 2 * Le protocole TLS permet à deux machines de communiquer de manière sécurisée. Les informations échangées entre les deux machines sont de ce fait pratiquement inviolables. Il doit assurer l'authentification du serveur grâce à un certificat. La confidentialité des données grâce au chiffrement et l’intégrité des données. * Un certificat permet de fournir diverses informations concernant l'identité de son détenteur (la personne qui publie les données). Ce certificat s'accompagne d'une clé publique qui est indispensable pour que la communication entre les machines soit chiffrée. - Activer le module SSL d’Apache, Activer le site «default-ssl» d’Apache ``` a2enmod ssl a2ensite default-ssl service apache2 reload ``` :abc: ![](https://i.imgur.com/3mqb1wX.png) - Installez le paquet OpenSSL ``` apt-get update apt-get install openssl ``` :abc: ![](https://i.imgur.com/4Qics2A.png) - Générer le certificat ``` openssl req -x509 -nodes -days 365 -newkey rsa:2048 -sha256 - out /etc/apache2/server.crt -keyout /etc/apache2/server.key ``` - Modifier les permissions sur la clé `chmod 440 /etc/apache2/server.crt` :abc: ![](https://i.imgur.com/bwS5Xmf.png) - Configuration d’Apache `/etc/apache2/sites-available/default-ssl` - Modifiez ces deux options si nécessaire afin d’indiquer le chemin vers les fichiers, Suite aux dernières vulnérabilités découvertes au sein du protocole SSL en 2014, il est recommandé également d'effectuer la configuration suivante dans Apache pour plus de sécurité : ![](https://i.imgur.com/YunOxVw.png) - activez le module SSL ``` a2enmod ssl a2ensite default-ssl service apache2 reload ``` :abc: ![](https://i.imgur.com/aUJHecI.png) - Désactiver le site HTTP `a2dissite default` - Rediriger le HTTP vers HTTPS automatiquement, modifier le fichier suivant `nano /etc/apache2/sites-available/port_vhosts.conf` - Dans le virtualhost, ajoutez la ligne suivante : `Redirect permanent / https://192.168.64.133/site1` :abc: ![](https://i.imgur.com/8lw539E.png) - Redémarrer le service Apache2 `service apache2 reload` :abc: ![](https://i.imgur.com/XYV3jk9.png) - Vous pouvez remarquer que lorsque vous allez naviguer sur *http://192.168.64.133*, le site vous redirigera vers **https://192.168.64.133/site1** ![](https://i.imgur.com/zkexYge.png) - Cliquer sur **accéder à la page web** ![](https://i.imgur.com/ZzLu1gg.png) ## Protéger une page web avec .htaccess - Créer un fichier .htaccess dans le répertoire */var/www/vhosts/site1/* `nano /var/www/vhosts/site1/.htaccess` :abc: ![](https://i.imgur.com/Wsjy5YC.png) - Créer le fichier ".htpasswd" `htpasswd -c /var/www/site/.htpasswd nom_utilisateur` - Consulter le fichier .htpasswd `cat /var/www/vhosts/site1/.htpasswd` :abc: ![](https://i.imgur.com/hMQoJFi.png) - Modifier la configuration d'Apache `nano /etc/apache2/apache2.conf` :abc: ![](https://i.imgur.com/rHoEngN.png) - Rendre publique une sous-partie du site protégé `mkdir /var/www/vhosts/site1/open nano /var/www/vhosts/site1/open/.htaccess` :abc: ![](https://i.imgur.com/barGIoE.png) - Lors de connexion sur https://192.168.64.133/site1 ![](https://i.imgur.com/rIoy6bK.png) - Lors de connexion sur https://192.168.64.133/site1/open ![](https://i.imgur.com/LsGNEOv.png) ## Aperçu de la CGI avec Python - Modifier le fichier de configuration Apache `nano /etc/apache2/apache2.conf` :abc: ![](https://i.imgur.com/MV9NGtY.png) - Activer le module CGI ``` a2enmod cgi systemctl restart apache2 systemctl status apache2 ``` :abc: ![](https://i.imgur.com/Fdr0kET.png) - Nous allons maintenant créer une page index.py sur le site 2 `nano /var/www/vhosts/site2/index.py` :abc: ![](https://i.imgur.com/u9HKMLr.png) :abc: Résultats : ![](https://i.imgur.com/ko1lnMe.png) - Nous allons maintenant créer un formulaire `nano /var/www/vhosts/site2/formulaire.py` :abc: ![](https://i.imgur.com/6u5eSYo.png) :abc: Résultats : ![](https://i.imgur.com/90VlBKI.png) - Créer un fichier livredor.py `nano /var/www/vhosts/site2/livredor.py` :abc: ![](https://i.imgur.com/GF23b8l.png) :abc: Résultats : ![](https://i.imgur.com/OpC56Iq.png) - Créer un fichier compteur.py `nano /var/www/vhosts/site2/compteur.py` :abc: ![](https://i.imgur.com/maFrp51.png) :abc: Résultats : - 1ère visite ![](https://i.imgur.com/LDQnXPa.png) - 50ème visite ![](https://i.imgur.com/8RQBYf4.png)