Mon serveur à la maison

Tags :
  • POK
  • 2023-2024
  • temps 3
Auteurs :
  • Cassandra Ledins

Configurer mon propre serveur pour héberger mes sites persos

Introduction

Pour voir la naissance d'une application de A à Z, j'ai envie d'en savoir plus sur la mise en place d'un serveur en passant directement par la pratique. A la fin, j'aimerais pouvoir mettre en ligne mon site (site générique), et qu'une base de données soit servie aussi. Je pense quand même que ça ne sera pas aussi simple qu'en théorie, et j'espère ne pas me faire attaquer. Je pensais mettre ça en place sur une VM pour plus de sécurité perso. Le serveur n'a évidemment aucune vocation à persister.

Backlog prévu

Sprint 1

Sprint 2

Fin du Sprint 1

Review

Ce n'est pas évident d'estimer précisément la durée de chaque tâche car elles se sont entremêlées. Finalement le setup du serveur basique n'a pas pris autant de temps que ce que j'avais prévu, j'ai donc avancé un peu sur les tâches qui étaient initialement prévues pour le Sprint 2. La majorité du temps passé sur ce Sprint 1 a consisté en réparer les boulettes que j'ai fait en manipulant les adresses réseaux. Mon routeur et mon ordinateur n'étaient pas très contents. Je ne pense pas avoir été capable de le faire aussi "vite" snas avoir assisté au cours Réseaux, qui m'a permis de comprendre les grandes lignes de l'architecture réseau et de la communication avec l'extérieur.

A la fin du sprint : je pouvais me connecter en SSH sur ma VM depuis un réseau extérieur, et je pouvais voir la page d'accueil par défaut de Apache sur mon IP depuis un réseau extérieur aussi. Je suis sur Internet Maman !

Le serveur ne tourne pas en permanence et j'ai encore peur de ne pas avoir configuré assez bien le pare-feu et mon routeur, donc je ne divulguerai pas mon adresse pour l'instant.

Technique

J'ai utilisé une VM Ubuntu-server, installé Apache, définis une IP pour ma VM, changé l'adresse IP de mon routeur, cassé mon routeur, changé l'adresse IP de mon ordi et redémarrer mon routeur pour réparer tout ça, et puis finalement ils n'étaient pas dans le même sous-réseau donc la page ne s'affichait pas sur Internet alors j'ai changé la plage d'IP pour qu'ils puissent communiquer plus facilement, mais en fait le problème n'avait rien à voir. Finalement, il fallait reconfigurer la VM.

Tout ça pour dire que j'ai bidouillé dans tous les sens, gaffé beaucoup, appris et compris beaucoup par la même occasion.

Photo montage de mon aventure :

L'envers du décor avec la VM :

Le pont qui dessert ma VM :

J'accède au site depuis mon téléphone en 5G :

Sprint 2

A la fin du sprint 1, en réalisant que j'étais plus rapide que prévu sur les objectifs fixés au départ, je me suis dit qu'il pourrait être intéressant de mettre en place une sorte de sonde sur le serveur, qui analyserait les tentatives d'accès et afficherait des stats sur un site. Il me paraît aussi plus judicieux et instructif de faire cela que de simplement copier-coller un site déjà prêt.

Voici donc les objectifs du sprint 2 redéfinis.

Nouveaux objectifs

Les nouveaux objectifs restent similaires à ceux précédemment définis, mais me permettront d'apprendre de manière plus poussée la récupération de logs, la gestion des permissions d'accès aux données, et puis finalement, de voir qui essaie de trouver des failles sur mon serveur (probablement beaucoup de robots).

C'est parti

Pour pouvoir voir qui se connecte sur le site, il faut configurer la récupération des données dans Apache. Comme je ne suis pas encore une vraie admin système, et que j'en ai marre de tout coder sur un terminal avec Nano et sans souris, j'ai mis en place une connexion SSH-remote sur mon serveur pour pouvoir faire des manipulations sur mon serveur à partir : d'un IDE, et possiblement d'un autre ordinateur.

Je peux maintenant me connecter sur mon serveur à partir de n'importe quel ordinateur et avoir une vue d'ensemble des fichiers en quelques clics, sans avoir à "ls" dans tous les coins.

Mais un problème apparaît : Modifier et sauvegarder le fichier avec les commandes de l'IDE ne l'effectue pas en tant que 'sudo' (membre avec tous les droits). J'ai trouvé une extension VSCode qui permet de "Save as root", que j'ai lié à un shortcut au clavier. Pratique !

Cette étape n'était pas nécessaire et a ajouté une vulnérabilité à mon serveur en ouvrant un nouveau port pour la connexion SSH. Mais ce genre de pratique reste courante et réaliste.

Configurer les logs

Configurer les logs s'est fait en quelques lignes seulement dans les fichiers .conf d'Apache. Il fallait déterminer le format des informations qu'on récupère, ainsi que le fichier de sortie. Cette configuration a été rapide, mais la mise en place correcte des droits d'écriture et de lecture corrects pour les fichiers et dossiers de logs a été compliquée (pour moi en tout cas).

Création de la CGI pour afficher les logs

Je me suis ensuite renseignée rapidement sur les CGIs puisque celà me semblait être une solution viable pour afficher des statistiques en direct à partir de mes documents .log. J'ai alors écrit un programme Python qui renvoie un html avec les IPs présents dans les logs. C'EST PAS TRES RGPD. Après 5 secondes de réflexion, j'ai réalisé que ça ne semblait pas très éthique. J'ai finalement masqué environ 75% des IPs pour pas qu'ils ne soient lisibles.

GeoLite

J'ai ensuite trouvé une base de données gratuite appelée GeoLite qui permet d'associer une IP à un pays, une région ou une ville. J'ai choisi les pays, car je n'ai pas plus d'intérêt que ça à savoir exactement d'où les IPs proviennent. Après avoir importé et décompressé la base de données sur mon serveur, je l'ai inclue dans mon script Python. Et tada ! Ca ne marche pas du tout.

Le REGEX c'est pas marrant

Il se trouve que la récupération d'IP à partir de logs c'est pas évident. J'utilise une expression Regex, mais elle ne marchait pas correctement, et je me retrouvais avec des IPs au format non correct, et surtout je loupais pas mal d'IPs pour une raison inconnue (enfin si, je ne sais juste pas faire des regex propres). Donc j'ai bidouillé une expression jusqu'à ce que ça ait l'air de fonctionner...

Et là ça marche ! C'est ce que j'aurais dit si j'avais eu des résultats à ce moment.

Configuration des droits de lecture et d'écriture

Je ne m'étais pas encore bien occupée de la configuration de l'accès aux différents fichiers et dossiers. Sans rentrer dans trop de détails, il a fallu :

Et maintenant que j'ai fait ça... Je n'ai plus accès aux dossiers. Il est temps de se connecter en tant que root pour faire les modifications nécessaires.

Ca a été une partie vraiment pas évidente pour moi, sûrement parce qu'on s'improvise pas professionel dans la durée d'un POK. Le test de sécurité a simplement été de voir avec différents profils utilisateurs quels acccès j'avais ou non aux fichiers.

Mais tout fonctionne comme prévu maintenant. Au détail près que les logs affichés ne sont pas nécessairement des "attaques", mais au moins sont des visiteurs. En sachant que mon site n'est pas référencé, n'a pas de nom, et est juste mon adresse IP que je n'avais au préalable partagé avec personne, on peut en déduire que les visites détectées sont des robots parcourant le web, pas forcément tous avec de bonnes intentions.

Fin du Sprint 2

Résultats

J'ai laissé tourner mon détecteur pendant :

1 heure

4 heures

J'ai filtré quelques adresses telles que 127.0.0.1 ou autre mais je n'ai pas enlevé ma propre adresse, ce qui fausse le total. NEANMOINS ! On remarque que dès la première heure, il y a eu relativement beaucoup de visites sur le site (alors qu'il n'est pas référencé, et que je n'ai envoyé mon IP à personne). Notamment une IP irlandaise qui a tenté 100 accès, probablement pour "mapper" le site et voir les URLs disponibles, mais j'avoue que je n'ai pas approfondi les recherches.

Conclusion

La mise en place du serveur a été vraiment différente de ce que j'ai pu imaginer au départ. Certaines choses ont été beaucoup plus rapides que prévues et à l'inverse, d'autre ont pris beaucoup plus de temps par manque de connaissances. Le cours Réseaux me paraît absolument nécessaire pour réaliser ce travail. Quelques notions de pentest peuvent aussi aider à se représenter la nature et la forme des dangers, pour éviter de faire n'importe quoi dans les réglages.

Conclusion BIS

La prochaine fois je choisis un mot de passe sudo un poil plus court, j'ai passé la moitié du POK à le retaper dans tous les sens et à faire des fautes de frappe.

Sources

Horodateur

18/02 : 3h, lecture, compréhension, installation de la VM 22/02 : 7h, installation Apache et autres modules, bidouille routeur 18/03 : 3h, configuration SSH, IDE, extension Sudo, configuration access log 21/03 : 3h, apprentissage et codage CGI, récupération et mise en place GeoLite 23/03 : 4h, Mise en place des groupes admin, droit de lecture, écriture et éxécution, test, correction de Regex