J'ai configuré un serveur ubuntu avec openssh afin de s'y connecter et d'exécuter des commandes à partir d'un système distant comme un téléphone ou un ordinateur portable. Le problème est ... je ne suis probablement pas le seul.
Existe-t-il un moyen de connaître toutes les tentatives de connexion effectuées sur le serveur?
Sur les serveurs Ubuntu, vous pouvez trouver qui s'est connecté quand (et d'où) dans le fichier /var/log/auth.log
. Vous y trouverez des entrées comme:
May 1 16:17:02 owl CRON[9019]: pam_unix(cron:session): session closed for user root
May 1 16:17:43 owl sshd[9024]: Accepted publickey for root from 192.168.0.101 port 37384 ssh2
May 1 16:17:43 owl sshd[9024]: pam_unix(sshd:session): session opened for user root by (uid=0)
Sur les distributions basées sur Red Hat telles que Fedora/CentOS/RHEL, vous pouvez rechercher les utilisateurs connectés dans le fichier /var/log/secure
.
Si vous voulez plus d'informations, lisez ce Q&R SuperUser intitulé: Comment puis-je enregistrer les tentatives d'accès SSH et garder une trace de ce que les utilisateurs SSH finissent par faire sur mon serveur? .
Sur Ubuntu, vous pouvez vous connecter via SSH et utiliser la commande Linux tail pour afficher le dernier x nombre de lignes de votre /var/log/auth.log
fichier. Lorsque vous êtes connecté via SSH, utilisez la commande suivante pour afficher les 100 dernières lignes de votre journal SSH:
tail /var/log/auth.log -n 100
ou encore plus propre
tail -100 /var/log/auth.log | grep 'sshd'
Notez que la configuration par défaut sur Ubuntu est de NE PAS connecter les connexions ssh au /var/log/auth
fichier. Il s'agit du niveau de journalisation INFO
.
Si vous souhaitez inclure des tentatives de connexion dans le fichier journal, vous devrez modifier le /etc/ssh/sshd_config
fichier (en tant que root ou avec Sudo) et changez le LogLevel
de INFO
en VERBOSE
.
Après cela, redémarrez le démon sshd avec
Sudo service rsyslog restart
Après cela, les tentatives de connexion ssh seront enregistrées dans le /var/log/auth.log
fichier.
Ma recommandation est d'utiliser auditd . C'est la journalisation en utilisant le sous-système d'audit du noyau Linux et à mon avis la bonne façon de le faire si vous êtes sérieux. Et étant donné la nature de la question {liée à la sécurité}, vous devriez également utiliser [~ # ~] pam [~ # ~] . Au niveau par défaut d'avoir simplement auditd et [~ # ~] pam [~ # ~] installés, vous devriez automatiquement obtenir tous les SSH réussis et infructueux tentatives enregistrées dans votre fichier audit.log. Donc, vous n'avez vraiment rien à configurer, il suffit d'installer auditd et [~ # ~] pam [~ # ~]. Je connais cette première main pour SLES. Et je parierais que RHEL et toute autre version enterprise de linux fonctionneraient de la même manière.
http://manpages.ubuntu.com/manpages/precise/man8/auditd.8.html
dans le journal d'audit brut généré par auditd vous pouvez utiliser soit utiliser quelque chose comme aureport
pour le filtrer, ce qui est décrit dans les pages de manuel auditd , écrivez votre propre analyseur de texte ou utilisez simplement VI et recherchez des mots clés.
voici une exception de mon /var/log/audit/audit.log
fichier avec moi ssh'ing dans mon serveur linux.
node=shark type=CRED_DISP msg=audit(1480622612.317:2211277): user pid=117768 uid=0 auid=23456 ses=2201 msg='op=PAM:setcred acct="ron" exe="/usr/sbin/sshd" (hostname=abc415.mycompany.us, addr=172.16.152.5, terminal=ssh res=success)'
date --date @1480622612.317
ce qui donne Thu Dec 1 15:03:32 EST 2016
et c'est quand j'ai été transféré sur mon serveur.Quand res=failed
est lorsque vous souhaitez rechercher ces adresses IP et noms d'hôtes pour voir quels systèmes tentaient de se connecter, sous quel nom d'utilisateur. Et évidemment, le ssh réussi tente de comprendre ce qui se passe sur votre système - par exemple, votre collègue Bob qui est assis au même bureau tous les jours avec hostname = bobscomputer et ip address = 192.168.5.5; si vous voyez une tentative ssh réussie à 2h du matin hier sous son nom d'utilisateur à partir de l'adresse IP 10.10.5.6 par exemple, alors il pourrait être dans votre intérêt de parler à bob pour enquêter. Possible tentative de piratage par quelqu'un d'autre? Et peu de temps après, y a-t-il des tentatives d'enracinement dans le journal d'audit du compte de Bob?
quand vous voyez répétitif res=failed
et auid=0
et acct=root
alors c'est quelqu'un qui essaie de ssh dans votre boîte dans le compte root, et c'est quand vous modifiez /etc/hosts.deny
avec cette adresse IP pour SSHD.
Je sais que c'est vieux mais j'ai écrit quelque chose pour surveiller les connexions/tentatives ssh réussies et échouées. Ainsi que les adresses IP interdites si vous utilisez sshguard. Le logiciel est écrit en Python. Il vous enverra un e-mail lorsque quelqu'un se connectera avec succès via ssh, lorsque le mot de passe ssh est incorrect ou lorsque quelqu'un est banni en raison de nombreuses tentatives infructueuses. J'espère que cela aidera quelqu'un à l'avenir qui recherchera ce problème et trouvera mon code!
https://github.com/amboxer21/SSHMonitor
Pour le script python, j'ai écrit un script bash pour surveiller le processus. Il vérifie s'il s'exécute toutes les minutes via la tâche cron racine. S'il n'est pas en cours d'exécution, il démarre un autre processus. Ce qu'on appelle par une tâche cron root toutes les minutes.
La meilleure chose que j'ai jamais rencontrée pour la journalisation des commandes SSH est rootsh cet outil permet à l'administrateur d'obtenir chaque commande de chaque session avec un niveau de journalisation étendu.
J'ai écrit un script pour installer et configurer ROOTSH dans Ubuntu et CentOS/RHEL
télécharger depuis github voici le lien
https://Gist.githubusercontent.com/mansurali901/e1e3acc7dca13aeca25b68a69571c60f/raw/b1b16f73ec9a974486e4c0c0d65a7d41f2eca718/setup_rootssh.sh
chmod +x setup_rootssh.sh ; Sudo ./setup_rootssh.sh