Sécuriser un serveur Leçon 6
Surveiller son serveur
Lire les journaux, repérer les tentatives d'intrusion et vérifier la santé de la machine.
À la fin de cette leçon, tu sauras
- Trouver les tentatives de connexion dans les journaux
- Vérifier qui s'est connecté et quels ports écoutent
- Surveiller le disque, la mémoire et les services
Les journaux racontent tout
Un serveur note tout ce qui se passe dans ses journaux (logs). Pour la sécurité, le plus important est /var/log/auth.log : chaque connexion SSH réussie ou ratée y laisse une ligne. Il n'est lisible qu'en administrateur.
sudo tail -n 20 /var/log/auth.log # les 20 dernières lignes
sudo grep "Failed password" /var/log/auth.log # mots de passe faux
sudo grep "Invalid user" /var/log/auth.log # noms d'utilisateur qui n'existent pas
sudo grep "Accepted" /var/log/auth.log # connexions RÉUSSIES : à surveiller de près
sudo grep -c "Failed password" /var/log/auth.log # juste le nombre
last # les dernières connexions
journalctl -u ssh -n 30 # les messages du service SSHÀ retenir : des milliers de « Failed password » ou « Invalid user », c'est normal sur Internet : ce sont des robots. Ce qui doit t'inquiéter, c'est un « Accepted » depuis une adresse que tu ne connais pas.
Ce qui écoute
Chaque service ouvert est une porte possible. ss liste les ports en écoute : tout ce qui n'a rien à faire là doit être arrêté ou fermé au pare-feu.
sudo ss -tlnp # t = TCP, l = en écoute, n = numéros, p = programme
sudo ufw statusLa santé de la machine
df -h # disque : au-delà de 85 %, il faut faire le ménage
free -h # mémoire
uptime # depuis quand, et la charge
systemctl status nginx # un service est-il en marche ?
systemctl --failed # les services en échecSur un vrai serveur, on ne lance pas ces commandes à la main tous les jours : un petit script (ou un outil comme une page d'état) les exécute régulièrement et t'envoie un e-mail quand quelque chose cloche. Le principe reste le même : savoir ce qui est normal, pour remarquer ce qui ne l'est pas.
À retenir
/var/log/auth.logcontient toutes les connexions ; il se lit avecsudo.- « Failed password » et « Invalid user » : des robots, c'est normal. « Accepted » d'une adresse inconnue : alerte !
last: les dernières connexions ;sudo ss -tlnp: ce qui écoute.df -h,free -h,uptime,systemctl --failed: la santé.- Automatiser : un script qui vérifie et prévient par e-mail.
Voir la fiche de révision de cette leçon (à imprimer ou à relire avant un contrôle)
Exercice 1 · Qui frappe à la porte ?
Facile ✓ Réussi- affiche les tentatives de connexion avec un mot de passe faux, dans
/var/log/auth.log; - affiche les tentatives avec un utilisateur qui n'existe pas (« Invalid user ») ;
- écris le nombre de lignes « Failed password » dans le fichier
~/tentatives.txt; - affiche les dernières connexions réussies avec
last.
Tape tes commandes ici ou dans le fichier à gauche : chaque commande tapée dans le terminal est ajoutée au fichier.
Consignes à réussir
- À faire : Les mots de passe faux sont affichés
- À faire : Les utilisateurs inconnus sont affichés
- À faire : ~/tentatives.txt contient le bon nombre (2)
- À faire : last est utilisé
Bravo, cet exercice est réussi !
- Indice 1 : Le journal n'est lisible qu'en administrateur :
sudo grep "Failed password" /var/log/auth.log. - Indice 2 : Même chose avec
"Invalid user". - Indice 3 : Compter et écrire :
sudo grep "Failed password" /var/log/auth.log | wc -l > ~/tentatives.txt(ougrep -c).
Toujours bloqué ? Voir une solution
sudo grep "Failed password" /var/log/auth.log
sudo grep "Invalid user" /var/log/auth.log
sudo grep "Failed password" /var/log/auth.log | wc -l > ~/tentatives.txt
last Exercice 2 · Le bilan de santé
Moyen ✓ RéussiFais le tour du serveur, comme chaque lundi matin :
- l'espace disque et la mémoire, en unités lisibles ;
- les ports TCP en écoute, avec le programme qui les ouvre ;
- l'état du pare-feu ;
- les 30 derniers messages du service
ssh; - l'heure du serveur (indispensable pour les codes de double authentification).
Tape tes commandes ici ou dans le fichier à gauche : chaque commande tapée dans le terminal est ajoutée au fichier.
Consignes à réussir
- À faire : df -h
- À faire : free -h
- À faire : Les ports en écoute avec leur programme (ss -tlnp)
- À faire : L'état du pare-feu
- À faire : Les 30 derniers messages de ssh
- À faire : L'heure est vérifiée
Bravo, cet exercice est réussi !
- Indice 1 :
df -hetfree -h. - Indice 2 :
sudo ss -tlnp, puissudo ufw status. - Indice 3 :
journalctl -u ssh -n 30ettimedatectl.
Toujours bloqué ? Voir une solution
df -h
free -h
sudo ss -tlnp
sudo ufw status
journalctl -u ssh -n 30
timedatectl