6. Accès web aux fichiers avec https :
Sources :
https://www.digitalocean.com/community/t...n-debian-9 [https://archive.fo/5kHQy] Screenshot_Archive_43
https://linuxize.com/post/how-to-install...-debian-9/ [https://archive.fo/ZOFIJ] Screenshot_Archive_44
http://guillaume-cortes.fr/serveur-web-apache-debian-9/ [https://archive.fo/vHYcf] Screenshot_Archive_45
https://www.cyberciti.biz/faq/how-to-ins...9-stretch/ [https://archive.fo/zzTaF] Screenshot_Archive_46
On va voir maintenant comment accéder à des fichiers présents sur ce serveur via un navigateur web.
On se logue en root, on commence par mettre en place apache :
On modifie les règles iptables pour autoriser la connexion http (et en même temps on met le https) :
Et on ajoute avant la dernière ligne :
On relance les règles :
Maintenant, lorsque vous tapez l'ip 192.168.1.### de votre serveur dans un navigateur web, vous obtenez la page par défaut d'apache.
On peut maintenant voir à créer des répertoires qui comporteront les fichiers qui seront donc listés.
Pour cela, vous commencez par créer le répertoire qui servira à contenir les fichiers :
Puis pour tester le listing des fichiers, on crée un fichier texte de test :
Dedans vous mettez ce que vous voulez et vous enregistrez.
Il faut maintenant dire à apache que l'on veut avoir directement ce répertoire comme page par défaut lorsque l'on rentre l'ip dans un navigateur. Pour cela, on édite le fichier "/etc/apache2/sites-available/000-default.conf" :
Et dedans vous modifiez la ligne concernant le mail de l'administrateur et le chemin du répertoire pour coller à ce que vous avez fait avant (ou vous virez le "/html" pour que le répertoire www soit directement listé) :
On redémarre apache pour qu'il prenne en compte la modification :
Et maintenant lorsque vous visitez http://ip_du_serveur/ vous obtenez un listing avec votre fichier txt.
A ce moment là on a accès que en http, on passera en https un peu plus loin.
Afin de pouvoir autoriser ou non le listing des fichiers présents dans ce répertoire, il faut utiliser un fichier htaccess. Pour pouvoir utiliser un fichier htaccess, on doit d'abord activer un module d'apache :
puis comme spécifié, on redémarre apache :
Ensuite on doit éditer le fichier suivant :
Vous allez à la portion suivante :
Et là dedans, vous changez "AllowOverride None" en "AllowOverride All".
On redémarre apache :
Et maintenant, vous pouvez utiliser les fichiers htaccess. On commence par en mettre un dans le dossier /var/www :
Et dans ce fichier ".htaccess", on met :
(La première partie sert à protéger le fichier htaccess de modifications non désirées.)
Avec cela, les dossiers et sous-dossiers dans www ne seront pas indexés par défaut.
Ce qui nous permet ensuite de pouvoir régler les permissions comme l'on veut en créant des fichiers .htaccess dans les dossiers que l'on voudra lister en allant sur leur url "http://ip.de.la.machine/dossier". Ou directement depuis "http://ip.de.la.machine/" si vous avez mis ce répertoire en défaut dans la configuration d'apache.
Ainsi, dans le dossier qu'on a précédemment créé "nom_du_repertoire", vous mettez aussi un fichier .htaccess :
qui contient :
Et là, ce dossier sera de nouveau listé en allant sur http://ip.de.la.machine/nom_du_repertoire
On en profite pour créer un fichier qui empêche l'indexation du contenu par les robots indexeurs du web (pour ceux qui s'en foutent pas), ça pourra servir plus loin :
dedans on met :
Maintenant, vous avez un accès http à votre listing. On va voir maintenant à mettre un accès en https seulement. Cela permettra de chiffrer les données qui transitent.
*Si vous avez un nom de domaine* : vous pouvez maintenant mettre en place un certificat pour le https en utilisant letsencrypt : https://letsencrypt.org/
Comme indiqué, vous pouvez utiliser CertBOT : https://certbot.eff.org/
Dans mon cas, n'ayant pas de nom de domaine je vais créer des certificats et il faudra accepter d'avoir une erreur de certificat pour le https car aucune autorité ne reconnaîtra ce certificat sauf moi. Cela permet d'avoir des échanges chiffrés et comme on va se connecter via l'ip, pas de soucis, ce sera bien la bonne machine. On pourra alors voir si le certificat est modifié lors de nos conexions.
Source : https://www.digitalocean.com/community/t...n-debian-9 [https://archive.fo/yBEmD] Screenshot_Archive_47
On crée le dossier qui va recevoir les fichiers que l'on va créer :
On génère les fichiers :
Voir tuto en lien pour explication des paramètres.
Vous pouvez laisser les champs demandés vides et faire "entrée" pour passer au suivant. On peut aussi changer la durée du certificat dans la seconde ligne de commande : -days "x" avec "x" le nombre de jours.
On crée un fichier de configuration pour apache afin qu'il utilise les bons paramètres https.
Source : https://cipherli.st/ [https://archive.fo/pkpAV] Screenshot_Archive_48
Note : On désactive HSTS.
et dedans on colle :
On édite un autre fichier de configuration d'apache :
Vous recherchez les lignes suivantes et modifiez pour :
La première est séparée des suivantes mais juste au-dessus Et vous remplacez les chemins des fichiers crt et key selon la commande un poil plus haut.
Vous enregistrez les changements dans le fichier.
On redémarre apache :
On active les modules qu'il faut pour apache :
Vous pouvez tester si tout est ok avec :
On redémarre apache pour que cela prenne en compte cette modification :
Maintenant lorsque vous visitez l'adresse suivante : "https://ip.de.la.machine/" (https !) vous avez un message de sécurité.
Vous devrez accepter votre certificat auto-signé :
1 - Vous allez voir les options avancées.
2 - Vous pouvez voir que le code d'erreur fait mention de certificat auto signé (et dans les détails cela est aussi mentionné).
3 - Vous acceptez de courir le risque :)
Tout cela est bien mais l'on peut encore visiter la page alors qu'on est pas en https, pour modifier ça globalement :
Et vous ajoutez
dans la section de "VirtualHost *:80". Après DocumentRoot par exemple :
On redémarre apache pour que çe prenne en compte cette modification :
Maintenant lorsque vous voulez rejoindre la page "http://ip.de.la.machine/" vous êtes automatiquement basculé vers "https://ip.de.la.machine/".
Sources :
https://www.digitalocean.com/community/t...n-debian-9 [https://archive.fo/5kHQy] Screenshot_Archive_43
https://linuxize.com/post/how-to-install...-debian-9/ [https://archive.fo/ZOFIJ] Screenshot_Archive_44
http://guillaume-cortes.fr/serveur-web-apache-debian-9/ [https://archive.fo/vHYcf] Screenshot_Archive_45
https://www.cyberciti.biz/faq/how-to-ins...9-stretch/ [https://archive.fo/zzTaF] Screenshot_Archive_46
On va voir maintenant comment accéder à des fichiers présents sur ce serveur via un navigateur web.
On se logue en root, on commence par mettre en place apache :
Code :
cd /
apt install apache2 apache2-doc apache2-utils
On modifie les règles iptables pour autoriser la connexion http (et en même temps on met le https) :
Code :
nano /etc/init.d/iptablesrules
Et on ajoute avant la dernière ligne :
Code :
#Autorisation http/s
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
On relance les règles :
Code :
/etc/init.d/iptablesrules
Maintenant, lorsque vous tapez l'ip 192.168.1.### de votre serveur dans un navigateur web, vous obtenez la page par défaut d'apache.
On peut maintenant voir à créer des répertoires qui comporteront les fichiers qui seront donc listés.
Pour cela, vous commencez par créer le répertoire qui servira à contenir les fichiers :
Code :
cd /var/www
mkdir nom_du_repertoire
Puis pour tester le listing des fichiers, on crée un fichier texte de test :
Code :
nano nom_du_repertoire/test.txt
Dedans vous mettez ce que vous voulez et vous enregistrez.
Il faut maintenant dire à apache que l'on veut avoir directement ce répertoire comme page par défaut lorsque l'on rentre l'ip dans un navigateur. Pour cela, on édite le fichier "/etc/apache2/sites-available/000-default.conf" :
Code :
nano /etc/apache2/sites-available/000-default.conf
Et dedans vous modifiez la ligne concernant le mail de l'administrateur et le chemin du répertoire pour coller à ce que vous avez fait avant (ou vous virez le "/html" pour que le répertoire www soit directement listé) :
Code :
ServerAdmin webmaster@localhost
DocumentRoot /var/www/nom_du_repertoire
On redémarre apache pour qu'il prenne en compte la modification :
Code :
service apache2 restart
Et maintenant lorsque vous visitez http://ip_du_serveur/ vous obtenez un listing avec votre fichier txt.
A ce moment là on a accès que en http, on passera en https un peu plus loin.
Afin de pouvoir autoriser ou non le listing des fichiers présents dans ce répertoire, il faut utiliser un fichier htaccess. Pour pouvoir utiliser un fichier htaccess, on doit d'abord activer un module d'apache :
Code :
a2enmod rewrite
puis comme spécifié, on redémarre apache :
Code :
systemctl restart apache2
Ensuite on doit éditer le fichier suivant :
Code :
nano /etc/apache2/apache2.conf
Vous allez à la portion suivante :
Code :
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Et là dedans, vous changez "AllowOverride None" en "AllowOverride All".
On redémarre apache :
Code :
systemctl restart apache2
Et maintenant, vous pouvez utiliser les fichiers htaccess. On commence par en mettre un dans le dossier /var/www :
Code :
nano /var/www/.htaccess
Et dans ce fichier ".htaccess", on met :
Code :
# STRONG HTACCESS PROTECTION
<Files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
</Files>
# DISABLE DIRECTORY VIEWS
Options -Indexes
Avec cela, les dossiers et sous-dossiers dans www ne seront pas indexés par défaut.
Ce qui nous permet ensuite de pouvoir régler les permissions comme l'on veut en créant des fichiers .htaccess dans les dossiers que l'on voudra lister en allant sur leur url "http://ip.de.la.machine/dossier". Ou directement depuis "http://ip.de.la.machine/" si vous avez mis ce répertoire en défaut dans la configuration d'apache.
Ainsi, dans le dossier qu'on a précédemment créé "nom_du_repertoire", vous mettez aussi un fichier .htaccess :
Code :
nano /var/www/nom_du_repertoire/.htaccess
qui contient :
Code :
# STRONG HTACCESS PROTECTION
<Files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
</Files>
# DISABLE DIRECTORY VIEWS
Options +Indexes
Et là, ce dossier sera de nouveau listé en allant sur http://ip.de.la.machine/nom_du_repertoire
On en profite pour créer un fichier qui empêche l'indexation du contenu par les robots indexeurs du web (pour ceux qui s'en foutent pas), ça pourra servir plus loin :
Code :
nano /var/www/robots.txt
dedans on met :
Code :
# On ne veut pas d'indexation
User-agent: *
Disallow: /
Maintenant, vous avez un accès http à votre listing. On va voir maintenant à mettre un accès en https seulement. Cela permettra de chiffrer les données qui transitent.
*Si vous avez un nom de domaine* : vous pouvez maintenant mettre en place un certificat pour le https en utilisant letsencrypt : https://letsencrypt.org/
Comme indiqué, vous pouvez utiliser CertBOT : https://certbot.eff.org/
Dans mon cas, n'ayant pas de nom de domaine je vais créer des certificats et il faudra accepter d'avoir une erreur de certificat pour le https car aucune autorité ne reconnaîtra ce certificat sauf moi. Cela permet d'avoir des échanges chiffrés et comme on va se connecter via l'ip, pas de soucis, ce sera bien la bonne machine. On pourra alors voir si le certificat est modifié lors de nos conexions.
Source : https://www.digitalocean.com/community/t...n-debian-9 [https://archive.fo/yBEmD] Screenshot_Archive_47
On crée le dossier qui va recevoir les fichiers que l'on va créer :
Code :
sudo mkdir /etc/ssl/localcerts
On génère les fichiers :
Code :
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/localcerts/apache-selfsigned.key -out /etc/ssl/localcerts/apache-selfsigned.crt
Vous pouvez laisser les champs demandés vides et faire "entrée" pour passer au suivant. On peut aussi changer la durée du certificat dans la seconde ligne de commande : -days "x" avec "x" le nombre de jours.
On crée un fichier de configuration pour apache afin qu'il utilise les bons paramètres https.
Source : https://cipherli.st/ [https://archive.fo/pkpAV] Screenshot_Archive_48
Note : On désactive HSTS.
Code :
sudo nano /etc/apache2/conf-available/ssl-params.conf
et dedans on colle :
Code :
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
# Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache >= 2.4.11
SSLSessionTickets Off
On édite un autre fichier de configuration d'apache :
Code :
sudo nano /etc/apache2/sites-available/default-ssl.conf
Vous recherchez les lignes suivantes et modifiez pour :
Code :
ServerAdmin webmaster@localhost
DocumentRoot /var/www/nom_du_repertoire
SSLEngine on
SSLCertificateFile /etc/ssl/localcerts/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/localcerts/apache-selfsigned.key
Vous enregistrez les changements dans le fichier.
On redémarre apache :
Code :
systemctl restart apache2
On active les modules qu'il faut pour apache :
Code :
sudo a2enmod ssl
sudo a2enmod headers
sudo a2ensite default-ssl
sudo a2enconf ssl-params
Vous pouvez tester si tout est ok avec :
Code :
sudo apache2ctl configtest
On redémarre apache pour que cela prenne en compte cette modification :
Code :
sudo systemctl restart apache2
Maintenant lorsque vous visitez l'adresse suivante : "https://ip.de.la.machine/" (https !) vous avez un message de sécurité.
Vous devrez accepter votre certificat auto-signé :
1 - Vous allez voir les options avancées.
2 - Vous pouvez voir que le code d'erreur fait mention de certificat auto signé (et dans les détails cela est aussi mentionné).
3 - Vous acceptez de courir le risque :)
Tout cela est bien mais l'on peut encore visiter la page alors qu'on est pas en https, pour modifier ça globalement :
Code :
sudo nano /etc/apache2/sites-available/000-default.conf
Et vous ajoutez
Code :
Redirect "/" "https://ip_de_la_machine/"
Code :
DocumentRoot /var/www/nom_du_repertoire
Redirect "/" "https://192.168.###.###/"
On redémarre apache pour que çe prenne en compte cette modification :
Code :
sudo systemctl restart apache2
Maintenant lorsque vous voulez rejoindre la page "http://ip.de.la.machine/" vous êtes automatiquement basculé vers "https://ip.de.la.machine/".