Comment récupérer les adresses IP des éventuels attaquants ssh?

17

Je viens de me cat /var/log/auth.logconnecter et de voir qu'il existe de nombreux | grep "Failed password for"enregistrements.

Cependant, il existe deux types d'enregistrement possibles - pour un utilisateur valide / non valide. Cela me complique mes tentatives | cut.

Je voudrais voir créer une liste (fichier texte) avec les adresses IP des attaquants potentiels et le nombre de tentatives pour chaque adresse IP. Existe-t-il un moyen simple de le créer?

Aussi, concernant uniquement ssh: Quels sont les enregistrements dont /var/log/auth.logje devrais tenir compte lors de la liste des attaquants potentiels?

Exemple de mon 'auth.log' avec des nombres cachés:

cat /var/log/auth.log | grep "Failed password for" | sed 's/[0-9]/1/g' | sort -u | tail

Résultat:

Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user ucpss from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user vijay from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user webalizer from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user xapolicymgr from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user yarn from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user zookeeper from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for invalid user zt from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for mysql from 111.111.11.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for root from 111.11.111.111 port 11111 ssh1
Mar 11 11:11:11 vm11111 sshd[111]: Failed password for root from 111.111.111.1 port 11111 ssh1
kravemir
la source
Je vous suggère de créer des clés ssh, de les installer sur votre serveur et de désactiver entièrement les mots de passe dans votre fichier de configuration sshd du serveur /etc/ssh/sshd_config... les paramètres de recherche PasswordAuthentication noet PermitRootLogin without-password ... alors toutes ces tentatives de mot de passe seront contrecarrées avant d'entrer dans le journal auth ...
Scott Stensland

Réponses:

19

Vous pouvez utiliser quelque chose comme ceci:

grep "Failed password for" /var/log/auth.log | grep -Po "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" \
| sort | uniq -c

Il recherche la chaîne Failed password foret extrait ( -o) l'adresse IP. Il est trié et uniqcompte le nombre d'occurrences.

La sortie ressemblerait alors à ceci (avec votre exemple comme fichier d'entrée):

  1 111.111.111.1
  3 111.11.111.111
  6 111.111.11.111

Le dernier dans la sortie a essayé 6 fois.

le chaos
la source
c'est la meilleure réponse @chaos - ajoutée à ma boîte d'oneliners utiles - merci!
Jake
Excellente solution. Je ne savais pas que grep peut extraire des correspondances d'expression régulière, pas seulement des lignes de filtre. Je viens d'ajouter | sort -nà la chaîne.
kravemir
1
Bonne réponse - plusieurs greps sont généralement un signe d'utilisation de sed. sed -nr '/Failed/{s/.*([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*/\1/;p}'remplace les deux greps.
orion
1
@orion true mais imaginez que le premier grep peut également être zgrep "Failed" /var/log/auth.log*de rechercher également dans les archives de journal compressées, ce qui sedne peut pas.
chaos
1
Et IPv6?
Ortomala Lokni
6

Ce pourrait être une solution gonflée, mais je vous suggère de regarder l'installation de quelque chose comme Fail2Ban

Il est fait pour ce type de journalisation + ajoute le bonus de pouvoir ajouter des règles (temporaires) dans votre pare-feu pour bloquer les récidivistes. Assurez-vous de mettre votre propre IP en liste blanche, j'ai réussi à me verrouiller temporairement à quelques reprises

Jake
la source
Bon, bon commentaire, mais pas une réponse à la question. Cela ressemble plus à une suggestion qui pourrait supprimer le besoin de question, mais je n'ai pas besoin d'un démon pour surveiller mes fichiers. J'ai mes raisons pour lesquelles je dois faire cette liste en tant que fichier texte uniquement par des scripts. :)
kravemir
Je suis d'accord avec @Miro, si vous ne l'aviez pas mentionné ici, je l'aurais ajouté dans un commentaire.
SailorCire
@Miro, vous avez raison, pas une réponse à la question elle-même, cela vient à l'esprit comme un outil pratique pour ce type de journalisation.
Jake
0

Cela a très bien fonctionné pour moi. (Les adresses IP ont été modifiées pour protéger les coupables)

$ awk '/Failed/ {x[$(NF-3)]++} END {for (i in x){printf "%3d %s\n", x[i], i}}' /var/log/auth.log | sort -nr
 65 10.0.0.1
 14 10.0.0.2
  4 10.0.0.3
  1 10.0.0.4
Falsenames
la source
0
grep "Failed password for" /var/log/auth.log |
    awk -F"from" {'print $2'} |
    awk {'print $1'} |
    sort -u
Liviu Popescu
la source
Le résultat est password- ne fonctionne pas. Il ne couvre même pas différents types d'entrée, awkla colonne d'impression est une alternative à cut, pas la solution.
kravemir
Cela fonctionne pour moi soit avec un échantillon ci-dessus ou réel /var/log/auth.log
Archemar
Eh bien, cela n'a pas fonctionné avant l'édition - lorsque le commentaire a été fait. Maintenant, cela fonctionne correctement. Cependant, il manque uniq -ccomme dans la meilleure réponse.
kravemir