Une connexion SSH permet d’administrer un serveur, Linux dans la plupart des cas. Cette connexion s’effectue grâce à un login et un mot de passe associé, généralement root (bien que le login root frontal soit déconseillé).
Si vous hébergez votre site/blog sur un serveur de type mutualisé ou dédié vous avez la possibilité de gérer ce serveur à distance via SSH. Autant dire que si une personne non autorisée se connecte sur votre serveur, il est libre de littéralement détruire toutes vos données ainsi que le système.
Il se peut parfois que l’on vous ait volé vos identifiants et que rien ne soit passé sur votre serveur, que l’attaquant attende un moment opportun pour attaquer ou collecter certaines de vos données. Et dans ce cas vous n’en saurez rien !
Je vous propose de mettre une place une notification par email (alerte) à chaque connexion effectuée sur votre serveur. Vous serez ainsi averti en temps réel de cette intrusion indésirable, à condition de consulter votre email régulièrement.
En pratique
A chaque connexion un fichier contenant des commandes est appelé, il s’agit du fichier .bashrc. Ce fichier est présent à la racine de chaque profil utilisateur Linux.
Éditez le fichier avec l’éditeur de votre choix (nano pour moi) :
nano ~/.bashrc
Se placer à la fin du fichier et ajouter le code suivant :
# notification email de chaque connexion ssh
echo 'NOTIFICATION - Acces SSH en ROOT sur `hostname` le:' `date` `who` | mail -s "NOTIFICATION - Connexion en ROOT via SSH depuis: `who | cut -d"(" -f2 | cut -d")" -f1`" votre@email.com
En remplaçant votre adresse email en fin de ligne.
Si vous souhaitez envoyer le mail en copie à un second email :
# notification email de chaque connexion ssh
echo 'NOTIFICATION - Acces SSH en ROOT sur `hostname` le:' `date` `who` | mail -s "NOTIFICATION - Connexion en ROOT via SSH depuis: `who | cut -d"(" -f2 | cut -d")" -f1`" votre@email.com -c second@email.com
Voici un exemple de notification reçue :
![]()
Déconnecter un utilisateur SSH
Si vous recevez une notification de connexion et que celle-ci ne vous semble pas autorisée à se connecter sur votre serveur, il vous faut réagir.
Lister toutes les connexions SSH utilisez la commande who:
server # who root pts/0 2009-10-24 15:17 (lns-bzn-20-82-55-3-2.adsl.proxad.net)
La date et l’heure sont celles de la connexion.
Si vous n’obtenez qu’une seule ligne alors c’est vous même qui êtes connecté et personne d’autre, vous pouvez retourner à vos occupations sans souci. En revanche, si deux lignes ou plus apparaissent c’est que vous n’êtes pas la seule personne connectée sur votre serveur.
Changer tout d’abord le mot de passe du compte concerné :
server # passwd nom_du_compte
A chaque connexion SSH le démon SSHD déclenche un processus, lui même identifié par un numéro de processus (PID). Il vous suffit de tuer le processus correspondant à cette connexion pour déconnecter l’utilisateur. Listons tous les processus correspondants à SSHD :
server # ps aux | grep sshd root 31115 0.0 0.0 8152 2472 ? Ss 15:16 0:00 sshd: root@notty
Dans notre cas il s’agit du PID 31115. Tuons le processus pour déconnecter l’utilisateur avec la commande kill -9 :
kill -9 31115
Conclusion
Ce système permet d’être averti en cas d’intrusion sur votre serveur, vous pouvez d’ailleurs utilisez des méchanismes d’avertissement par SMS si vous ne pouvez consulter vos mails en permanence.
Dans le cas où vous travaillez à plusieurs administrateurs sur un serveur, cela permet également d’avoir un historique de connexion.
Auteur : Mr Xhark
Fondateur du blog et passionné par les technologies je partage mes découvertes quotidiennement.









Déjà 12 commentaires
24 octobre 2009 à 17h30
Excellent article !
Twitter: http://twitter/sameganegie
dit :
24 octobre 2009 à 19h59
Bravo, je comprend mieux, moi qui croyais que le SSH est un protocole de communication sécurisé.
24 octobre 2009 à 21h22
@achille52 : SSH est un protocole de sécurisation sécurisé grâce un échange de clé en début de communication. Donner des identifiants n’engage en rien la sécurité du protocole. Le trou de sécurité dans les systèmes informatiques est souvent l’humain
Il est possible de réaliser du brutforce sur le SSH, mais il est également possible de s’en prémunir (fail2ban + règles iptables).
Twitter: akril
dit :
26 octobre 2009 à 0h00
Intéressant et bien mieux expliquer que bon nombre de tuto sur le Net… mais tu aurais pas une possibilité pour pouvoir surveiller tous les logins de cette façon ?
26 octobre 2009 à 20h20
Sympa l’article, dès que je trouve le temps … Je configure ça sur mon serveur !
19 mai 2010 à 15h20
Hello
Pourquoi ne pas utiliser la variable d’environnement SSH_CLIENT ? Car ta méthode pose problème lorsque plusieurs utilisateurs sont connectés.
Ca serait donc bêtement :
echo ‘NOTIFICATION – Acces SSH en ROOT sur `hostname` le:’ `date` `who` | mail -s « NOTIFICATION – Connexion en ROOT via SSH depuis: $SSH_CLIENT » votre@email.com
ou echo $SSH_CLIENT|cut -d ‘ ‘ -f1 si tu ne veux que l’adresse IP
22 mai 2010 à 1h18
@gslongo : tu as raison, mieux vaut utiliser la variable $SSH_CLIENT, je n’y avais tout simplement pas pensé !
5 novembre 2010 à 9h34
Merci pour cet excellent article !
(Par contre il ne s’agit pas de « nano ~./bashrc » mais de « nano ~/.bashrc »)
5 novembre 2010 à 13h08
@macben: c’est corrigé merci
5 novembre 2010 à 15h08
Je précise : pour les personnes qui sont chez Free, il faut dans la config de la freebox sur votre compte Free autoriser l’envoi des mails sur le port 25 (interdit par défaut) et rebooter la freebox.
28 novembre 2010 à 22h00
Ouais ! c’est pas mal, sauf que comme dab, certains se défocent, mais dans le vide, car ça ne marche pas !!!
16 mars 2012 à 7h55
Votre astuce est plutôt sympa, une sécurité supplémentaire directement utilisable et facile à installer.
En rajoutant cela :
iptables -A INPUT -i eth0 -p tcp –dport 22 -m state –state NEW -m recent –set –name SSH
iptables -A INPUT -i eth0 -p tcp –dport 22 -m state –state NEW -m recent –update –seconds 60 –hitcount 8 –rttl –name SSH -j DROP
ont finalise la sécurité ssh