Disclaimer :
Je n’ai pas de formation spécifique en cybersécurité.
Cet article est le fruit de mes recherches et de mon retour d’expérience.
Dans un précédent article, j’expliquais comment monitorer les connexions SSH de son serveur en temps réel.
Quelques jours après avoir mis en place ce monitoring sur mes serveurs, j’ai reçu une alerte… Bien qu’il s’agisse
très probablement d’une fausse alerte (parce qu’on a plus de chance de trouver des problèmes si on en cherche), je me
suis tout de même demandé :
Ok, comment je dois réagir en cas d’intrusion ?
Cet article est une liste de vérifications et d’actions à effectuer pour vérifier si la connexion est autorisée et agir si elle ne l’est pas.
1. Vérifier qu’une connexion SSH est bien active
Avant de paniquer, cherchez à confirmer les faits.
Voir les utilisateurs connectés
w
Cette commande donne :
- les utilisateurs connectés
- leur adresse IP
- leur TTY (
pts/0,pts/1, etc.) - depuis quand la session est active
Si vous voyez un utilisateur ou une IP inconnue, notez bien le TTY.
Voir les connexions réseau SSH actives
⚠️ Attention, une connexion dans cette liste ne veut pas dire qu’une personne est connectée mais qu’une connexion a été établie, même si l’authentification n’a pas abouti.
ss -tnp | grep ':22'
Ou, sur des systèmes plus anciens, utilisez netstat -tnp | grep ssh
Inspecter les logs SSH
Les logs montrent l’historique de tentatives d’établissement des connexions.
sudo tail -f /var/log/auth.log -n 1000
Pour les 1000 dernières lignes ou si vous recherchez une adresse IP spécifique, lancez
cat /var/log/auth.log | grep <IP address>
2. Regarder ce que fait l’utilisateur connecté
Vous pouvez regarder les process en cours d’exécution en les triant par utilisateur
htop
triez-les avec la touche u.
Pour voir les fichiers modifiés dans les 10 dernières minutes, utilisez find :
find /etc /home -type f -mmin -10
3. Fermer immédiatement la connexion SSH
Si vous souhaitez déconnecter l’utilisateur, reprenez le TTY donné par la commande w et lancez :
sudo pkill -f <pts/#>
4. Comprendre comment l’accès a été obtenu et empêcher la reconnexion
- Identifier le mode d’authentification dans les logs : dans
/var/log/auth.logchercherAccepted passwordouAccepted publickey - Si authentification par password (
Accepted password), suivre la procédure de désactivation du password dans la section suivante. - Si authentification par clé SSH (
Accepted publickey)- Afficher les fingerprints autorisées pour comprendre avec quelle clé l’intrus s’est connecté :
ssh-keygen -lf ~/.ssh/authorized_keys
- Comparer avec la signature vue dans les logs.
- Si la clé est connue, elle a probablement été compromise
- Afficher les fingerprints autorisées pour comprendre avec quelle clé l’intrus s’est connecté :
5. Désactiver l’authentification par password
⚠️ Pour ne pas perdre l’accès à votre serveur, vérifiez qu’une clé SSH fonctionnelle permet de se connecter avant d’effectuer ces modifications.
- Générer une clé sur votre machine si nécessaire :
ssh-keygen -t ed25519 -C "your_email@example.com" - Ajouter la clé au serveur en ajoutant la clé publique générée dans le fichier
~/.ssh/authorized_keysdu serveur - Tester la connexion sans avoir à renseigner de mot de passe.
- Désactiver le password dans la config SSH
- Éditer la config :
sudo vim /etc/ssh/sshd_config - S’assurer que l’authentification par mot de passe est désactivée via cette ligne :
PasswordAuthentication no - Recharger la config ssh :
sudo systemctl reload sshd - Tester une nouvelle connexion.
- Éditer la config :
6. Restreindre l’accès SSH à une IP spécifique
Dans un contexte d’incident, il peut être pertinent de restreindre immédiatement l’accès SSH à une seule adresse IP (la vôtre) afin d’éviter toute nouvelle tentative de connexion. Merci Hugo Perez pour la suggestion
⚠️ Attention : cela signifie que l’accès SSH ne sera possible que depuis cette IP.
- Identifier votre IP publique:
curl ifconfig.me - Ajouter une règle firewall - exemple avec ufw :
- Autoriser uniquement votre IP :
sudo ufw allow from VOTRE_IP to any port 22 proto tcp - Refuser le reste :
sudo ufw deny 22/tcp - Vérifier :
sudo ufw status
- Autoriser uniquement votre IP :
- Ajouter une règle firewall - exemple avec iptables :
- Autoriser votre IP :
sudo iptables -A INPUT -p tcp -s VOTRE_IP --dport 22 -j ACCEPT - Refuser les autres :
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
- Autoriser votre IP :
⚠️ Vérifier la règle AVANT de fermer la session SSH en cours.
À éviter : redémarrer immédiatement le serveur
En cas d’intrusion suspectée, il est déconseillé de redémarrer immédiatement la machine.
Un redémarrage peut rendre plus difficile la compréhension du vecteur d’entrée
- suppression des processus en cours
- effaçage de certains journaux de log
Conclusion
Ces commandes m’ont permis de valider d’où venaient certaines connexions à mon serveur (CI, etc). Si vous avez des suggestions de commandes que j’aurais oubliées, n’hésitez pas à me contacter par email ou sur les réseaux sociaux.
À propos de Quentin Lerebours
Entrepreneur mais avant tout développeur, j'ai choisi de rester polyvalent afin de travailler avec une vision d'ensemble cohérente des projets. Développement, Commerce, Entrepreneuriat et Gestion de projet font donc partie intégrante de mon quotidien — et si c'était à refaire, je referais pareil !