4 votes

Comment puis-je obtenir des adresses IP uniques à partir de /var/log/auth.log ?

Comment puis-je afficher uniquement les adresses IP uniques dans /var/log/auth.log ? J'ai un serveur qui est constamment attaqué, et même si j'ai configuré fail2ban, les requêtes continuent d'arriver. J'ai donc commencé à envoyer des courriers aux FAI pour faire fermer les comptes, ce qui pourrait aider un peu, mais il y a tellement d'attaques.... Enfin,

J'ai utilisé cette commande pour trier les attaques d'aujourd'hui : $grep -e 'ruser \| rhost' auth.log | grep -e 'Jun 9' | sort -k 14 | less il y a des milliers d'attaques.... ou de tentatives de force brute.

Voici quelques lignes pertinentes de auth.log :

...
Jun  9 10:08:35 nan sshd[23397]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=103.109.161.53
Jun  9 10:08:51 nan sshd[23401]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=103.109.161.53
Jun  9 10:09:07 nan sshd[23428]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=103.109.161.53
Jun  9 10:01:59 nan sshd[23216]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=103.109.161.53  user=root
Jun  9 10:02:52 nan sshd[23238]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=103.109.161.53  user=root
Jun  9 10:03:08 nan sshd[23246]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=103.109.161.53  user=root
Jun  9 10:03:40 nan sshd[23256]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=103.109.161.53  user=root
Jun  9 10:04:14 nan sshd[23270]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=103.109.161.53  user=root
Jun  9 10:04:31 nan sshd[23276]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=103.109.161.53  user=root
Jun  9 10:05:23 nan sshd[23298]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=103.109.161.53  user=root
Jun  9 10:05:55 nan sshd[23315]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=103.109.161.53  user=root
Jun  9 10:06:49 nan sshd[23343]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=103.109.161.53  user=root
Jun  9 10:07:47 nan sshd[23375]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=103.109.161.53  user=root
Jun  9 10:08:02 nan sshd[23383]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=103.109.161.53  user=root
Jun  9 10:09:47 nan sshd[23440]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=103.109.161.53  user=root
Jun  9 10:10:02 nan sshd[23444]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=103.109.161.53  user=root
Jun  9 10:09:27 nan sshd[23436]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=103.109.161.53  user=sshd
Jun  9 05:27:00 nan sshd[20293]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=103.134.44.86
....

J'aimerais faire une liste des adresses IP uniques dans auth.log.

J'ai essayé d'utiliser gawk -F: '{ print $14 }' auth.log | uniq -c

mais je suppose que je fais quelque chose de mal. Je veux simplement une liste triée des adresses IP d'aujourd'hui. comment puis-je faire ça ?

6voto

steeldriver Points 118154

uniq ne détecte que les doublons adjacents - vous devriez d'abord les trier

awk '{print $14}' auth.log | sort | uniq

ou utilisez l'option -u propre à la commande sort

awk '{print $14}' auth.log | sort -u

ou (puisque vous utilisez déjà awk)

awk '!seen[$14]++ {print $14}' auth.log

(L'entrée rhost= est le 14ème champ délimité par des espaces blancs - pas besoin de -F:)

3voto

Raffa Points 11919

Avec grep

Je vois que vous avez un peu de mal avec les motifs de correspondance de grep car vous semblez avoir besoin de faire correspondre certains motifs avant d'imprimer des adresses IP uniques ... Donc, ...:

Je vais utiliser l'option -o de grep pour imprimer uniquement la partie correspondante et activer les expressions régulières de style Perl avec -P et utiliser:

  • Jun pour faire correspondre Jun et puis ...
  • \s+ pour faire correspondre un ou plusieurs espaces et ensuite ...
  • 9 pour faire correspondre 9 et ensuite ...
  • .* pour faire correspondre n'importe quoi jusqu'à ...
  • ruser= est trouvé et puis ...
  • .* pour faire correspondre n'importe quoi jusqu'à ...
  • rhost= est trouvé et puis ...
  • exclure tout ce qui précède de l'impression avec le \K de Perl et puis ...
  • faire correspondre une adresse IP avec \d+\.\d+\.\d+\.\d+\d+ correspond à un ou plusieurs chiffres et \. correspond à un point littéral et ensuite ...
  • rediriger la sortie vers sort -u pour n'afficher que les adresses IP uniques comme ceci:

    grep -oP 'Jun\s+9.ruser=.rhost=\K\d+.\d+.\d+.\d+' auth.log | sort -u

Avec gawk

Ou puisque vous semblez avoir GNU AWK installé, vous pouvez tout faire (_y compris le tri ... en utilisant les Ordres de balayage de tableau prédéfinis_) avec gawk comme ceci:

gawk 'BEGIN {
    FS = "[= ]*"
    PROCINFO["sorted_in"] = "@ind_num_asc"
}

/Jun\s+9/ && /ruser/ && /rhost/ {
    a[$18]++
}

END {
    for (i in a) {
        printf "%s\n", i
    }
}' auth.log

0voto

JohnP Points 673
$ egrep -o '[1-2]?[0-9][0-9]?\.[1-2]?[0-9][0-9]?\.[1-2]?[0-9][0-9]?\.[1-2]?[0-9][0-9]?' /var/log/auth.log \
|sort -u

J'ai inventé le motif regex, mais tout motif regex qui correspond à une adresse IP (il y en a beaucoup en ligne) devrait être autorisé.

Utile pour rechercher des adresses IP dans n'importe quel journal.

La réponse de Raffa est un peu plus propre, bien que le premier chiffre de chaque segment d'une IP ne puisse être qu'un 1 ou un 2. (en ignorant les adresses IPv6).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X