Journalisation des tentatives d'accès SSH

60

J'ai configuré un serveur Ubuntu avec openssh afin de pouvoir s'y connecter et exécuter des commandes à partir d'un système distant tel qu'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?

UserK
la source
Vous devriez également envisager d'exécuter sshd sur un port non standard. En outre, il est possible de configurer iptables pour refuser de nouvelles tentatives de connexion si une seule adresse IP tente une nouvelle connexion ssh X fois dans une minute.
ivanivan
Pour moi, l'enjeu n'était pas fail2ban mais sshguard, chose dont je n'avais jamais entendu parler
Ray Foss

Réponses:

55

Sur les serveurs Ubuntu, vous pouvez trouver qui a ouvert une session quand (et depuis où) dans le fichier /var/log/auth.log. Là, vous trouvez 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)
Anthon
la source
2
Par curiosité, Ubuntu a-t-il la lastbcommande ?
Bratchley
1
@JoelDavis Mon Ubuntu 12.04 le fait, mais la sortie est une seule ligne qui ne ressemble pas du tout à votre sortie. Peut-être qu'il doit être configuré.
Anthon
Est- ce pertinent ?
Bratchley
Sur Ubuntu Server 14.04 et supérieur, cela devrait se lire/var/log/auth.log
Serge Stroobandt
29

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 souhaitez plus d’informations, lisez le Q & R du super-utilisateur intitulé: Comment enregistrer les tentatives d’accès SSH et garder une trace de ce que les utilisateurs SSH finissent par faire sur mon serveur? .

Ramesh
la source
1
Il n’existe /var/log/secureaucun de mes systèmes Ubuntu.
Anthon
@ Anthony, étonnamment je n'ai pas /var/log/authdans mes systèmes. C'est pourquoi avant de poster la réponse, j'ai vérifié si j'avais /var/log/securedans mon système, qui est aussi un serveur Ubuntu :)
Ramesh
J'avais vérifié 14.04, 12.04 et une vieille machine sous 8.04. Quelle version utilisez vous? Fait quelque chose de spécial pour obtenir ce fichier?
Anthon
@ Anthony, le serveur sur lequel j'ai testé était RHEL. Cependant, la réponse dans le lien que j’avais fourni concernait Ubuntu, ce qui semble étrange, puisque vous aviez vérifié 3 variantes d’ubuntu et qu’il n’y en avait pas /var/log/secure.
Ramesh
6
/var/log/secureest un isme Fedora / CentOS / RHEL.
slm
8

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.logfichier. 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 même plus propre

tail -100 /var/log/auth.log | grep 'sshd'
WebComer
la source
7

Notez que la configuration par défaut sur Ubuntu consiste à NE PAS enregistrer les connexions SSH dans le /var/log/authfichier. C'est le INFOniveau de journalisation.

Si vous souhaitez qu'il inclue les tentatives de connexion dans le fichier journal, vous devez éditer le /etc/ssh/sshd_configfichier (en tant que root ou avec sudo) et changer le LogLevelde de INFOà 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.logfichier.

Shay Walters
la source
4

Ma recommandation est d'utiliser auditd . Cela enregistre 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, auditd et PAM étant installés, toutes les tentatives SSH réussies ou non doivent être enregistrées automatiquement dans votre fichier audit.log. Donc, vous n'avez vraiment rien à configurer, vous devez simplement installer auditd et PAM . Je connais cette première main pour SLES. Et parierais que RHEL et toute autre version d' entreprise 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 l'une des méthodes aureportde filtrage décrites dans les pages de manuel auditd , écrire votre propre analyseur de texte ou tout simplement utiliser un VI et rechercher des mots-clés.

voici une exception de mon /var/log/audit/audit.logfichier 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)'
  • de ce qui précède, mon nom de serveur est shark .
  • beaucoup de lignes comme celle-ci sont dans audit.log, je veux celle-ci basée sur exe = "/ usr / sbin / sshd"
  • l'uid du compte étant ssh'd dans est la valeur de auid, qui est 23456 pour cet exemple
  • le nom du compte utilisateur associé à auid est spécifié par acct = "ron"
  • la plupart du temps, le système d'audit enregistre le nom d'hôte DNS du système essayant de se connecter, mais il a toujours son adresse IP
  • la date de l'entrée qui est à l'époque, donc vous devrez la convertir via quelque chose comme date --date @1480622612.317ce qui aboutit Thu Dec 1 15:03:32 EST 2016et c'est quand je ssh'd sur mon serveur.

Quand res=faileddevez-vous examiner ces adresses IP et ces noms d'hôte pour voir quels systèmes tentaient de se connecter, avec quelle tentative d'utilisateur? Et bien sûr, le succès de ssh tente de comprendre ce qui se passe sur votre système - par exemple, votre collègue, Bob, qui siège au même bureau tous les jours avec hostname = bobscomputer et ip address = 192.168.5.5; si vous voyez une tentative réussie de ssh à 2h du matin hier sous son nom d'utilisateur à partir de l'adresse IP 10.10.5.6 par exemple, il pourrait être dans votre intérêt de parler à Bob pour enquêter. Tentative de piratage possible par quelqu'un d'autre? Et peu de temps après, y a-t-il des tentatives de recherche de racine dans le journal d'audit du compte de bob?

quand vous voyez répétitif res=failedet auid=0et acct=rootpuis que de quelqu'un qui essaie de ssh dans votre boîte dans le compte root, et lorsque vous modifiez /etc/hosts.denyavec cette adresse IP pour SSHD.

Ron
la source
2

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, si quelqu'un se trompe de mot de passe ssh ou si quelqu'un est banni en raison de nombreuses tentatives infructueuses. J'espère que cela aidera quelqu'un à l'avenir qui recherche ce problème et trouve 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 est exécuté toutes les minutes via la tâche cron racine. S'il n'est pas en cours d'exécution, un autre processus est lancé. Ce qui est appelé par une tâche cron racine toutes les minutes.

Aguevara
la source
-2

La meilleure chose que je connaisse pour la journalisation des commandes SSH est rootsh, cet outil permettant à 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 sous Ubuntu et CentOS / RHEL

télécharger à partir de github voici le lien

https://gist.githubusercontent.com/mansurali901/e1e3acc7dca13aeca25b68a69571c60f/raw/b1b16f73ec9a974486e4c0c0d65a7d41f2eca718/setup_rootssh.sh

chmod +x setup_rootssh.sh ; sudo ./setup_rootssh.sh
Mansur Ali
la source
Je pense que c'est un mauvais moyen de promouvoir votre profil github ... En gros, vous demandez de télécharger un script à partir du Web et de l'exécuter à l'aide de root. Downvoted
UserK
Je ne fais pas la promotion de mon profil github. Je viens d'essayer de simplifier les choses, comme le font les personnes précédentes, si vous votez contre moi pour la promotion de leur profil, votez-les également. de plus, dans le guide des règles d’échange de pile, rien n’est écrit comme cela, nous ne pouvons pas partager de fichiers de code à partir de référentiels personnels.
Mansur Ali le
S'il vous plaît pardonnez mon mauvais sens de l'humour. Tout d'abord merci pour la réponse Mansur. Le vote négatif provient du fait que vous demandez à exécuter un groupe de commandes inconnues en tant qu'utilisateur root. La dernière fois que je l'ai fait, il y avait un «rm -R slash» à l'intérieur.
UserK
1
Son ok, en passant, l'échange de pile ne me permet pas de codes aussi longs, c'est pourquoi j'ai mis ce script dans ma réponse. Linux est très simple.
Mansur Ali le