View previous topic :: View next topic |
Author |
Message |
Zidge Tux's lil' helper
Joined: 20 Aug 2003 Posts: 86
|
Posted: Mon Dec 06, 2004 9:46 pm Post subject: [scripting sh] analyseur de logs ... compteur de mots |
|
|
salut,
Je suis en train d'essayer de programmer un petit analyseur de logs pour mot systeme.
Je tente en fait de lever des alarmes lorsqu'une certaine chaine de caractere apparait trop souvent.
Par exemple: si une IP apparait trop souvent dans les logs pour tentative de connection ssh foireuse (testant des 100aines de connection sur root)
alors envoyer une alerte email sur mon compte.
Plutot "simple" mais mon probleme est que je ne "connais" pas l'adresse IP qui va tenter de se connecter sur mon serveur.
comment puis je compter les occurences de tous les mots dans un fichier et ne renvoyer que les resultats qui sont de la forme : xxx.xxx.xxx.xxx ou tous les resultats qui sont des nombres de 10 chiffres ...
Merci de votre reponse.
E |
|
Back to top |
|
|
scout Veteran
Joined: 08 Mar 2003 Posts: 1991 Location: France, Paris en Semaine / Metz le W-E
|
Posted: Mon Dec 06, 2004 10:22 pm Post subject: Re: [scripting sh] analyseur de logs ... compteur de mots |
|
|
Zidge wrote: | comment puis je compter les occurences de tous les mots dans un fichier et ne renvoyer que les resultats qui sont de la forme : xxx.xxx.xxx.xxx ou tous les resultats qui sont des nombres de 10 chiffres ... |
avec grep -c ou egrep -c (ou uniq -c que je viens de découvrir à l'instant)
le mieux tu extrait d'abord les ip avec egrep -o ou avec un peu de perl ou de ruby ...
par exemple dans mon /var/log/messages je veux détecter les lignes du genre
Code: | Oct 24 16:38:01 scout sshd[19206]: Accepted publickey for bidule from 123.456.789.012 port 32957 ssh2 |
donc avec un Code: | egrep "sshd.*[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" /var/log/messages | je vais déja extraire toutes ces lignes
ensuite pour extraire les ip j'utilise egrep -o:
Code: | egrep "sshd.*[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" /var/log/messages | egrep -o "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" |
ensuite pour afficher les ip avec leur nombre on trie la sortie avec sort et on affiche les nombres de lignes consécutives avec un uniq -c
Code: | scout log # egrep "sshd.*[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" /var/log/messages | egrep -o "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" | sort | uniq -c |
et voilà ... et pour vraiment avoir la classe on trie sur la première colonne par ordre décroissant et on enlève les ip qui ne sont apparues que moins de 9 fois (en gros celles où il n'y a qu'un seul chiffre dans la prière colonne)
Code: | scout ~ # egrep "sshd.*[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" /var/log/messages | egrep -o "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" | sort | uniq -c | sort -k 1 -n -r | egrep "^ +[[:digit:]]{2,} " |
[EDIT] merci à celeborn pour m'éviter d'avoir posté un username et une ip qui va avec ...
[EDIT2] bon après ta réponse ci dessous, comme t'as vu les sorties de commandes j'ai décidé des les virer de mon post pour pas laisser des listes d'ip trainer
[EDIT3] merci à celeborn pour m'avoir fait enlever son prénom de ce post, qui est lui aussi un login valable sur ma machine, et aussi pour l'aider à garder son propre anonymat
[EDIT4] juste pour montre qu'on peux éditer son post plein de fois _________________ http://petition.eurolinux.org/ - Petition against ePatents
L'essence de la finesse
Last edited by scout on Mon Dec 06, 2004 10:36 pm; edited 6 times in total |
|
Back to top |
|
|
Zidge Tux's lil' helper
Joined: 20 Aug 2003 Posts: 86
|
Posted: Mon Dec 06, 2004 10:27 pm Post subject: |
|
|
wow merci enormement pour ces conseils
j'ai bien regardé un peu dans les man pages, mais j'avoue avoir des competences en scripting tres limitées
excellent !
merci bien |
|
Back to top |
|
|
Celeborn Tux's lil' helper
Joined: 24 Jan 2004 Posts: 132 Location: Heidelberg (Germany)
|
Posted: Mon Dec 06, 2004 10:41 pm Post subject: Re: [scripting sh] analyseur de logs ... compteur de mots |
|
|
scout wrote: | [EDIT] merci à celeborn pour m'éviter d'avoir posté un username et une ip qui va avec ...
[EDIT2] bon après ta réponse ci dessous, comme t'as vu les sorties de commandes j'ai décidé des les virer de mon post pour pas laisser des listes d'ip trainer
[EDIT3] merci à celeborn pour m'avoir fait enlever son prénom de ce post, qui est lui aussi un login valable sur ma machine, et aussi pour l'aider à garder son propre anonymat
[EDIT4] juste pour montre qu'on peux éditer son post plein de fois |
bon, pour devancer sireyessire :
"no comment"
|
|
Back to top |
|
|
marvin rouge Veteran
Joined: 01 Aug 2004 Posts: 1422 Location: Villa Lumierrante, Zonelibre
|
Posted: Tue Dec 07, 2004 8:14 am Post subject: |
|
|
Zidge : tu peux regarder fail2ban, qui est un exemple de detection d'adresse IP dans les logs de ssh.
(c'est sur sourceforge, mais j'arrive pas à m'y connecter en ce moment) |
|
Back to top |
|
|
sireyessire Advocate
Joined: 20 Mar 2003 Posts: 2991 Location: back in Paris, France
|
Posted: Tue Dec 07, 2004 9:10 am Post subject: Re: [scripting sh] analyseur de logs ... compteur de mots |
|
|
Celeborn wrote: | scout wrote: | [EDIT] merci à celeborn pour m'éviter d'avoir posté un username et une ip qui va avec ...
[EDIT2] bon après ta réponse ci dessous, comme t'as vu les sorties de commandes j'ai décidé des les virer de mon post pour pas laisser des listes d'ip trainer
[EDIT3] merci à celeborn pour m'avoir fait enlever son prénom de ce post, qui est lui aussi un login valable sur ma machine, et aussi pour l'aider à garder son propre anonymat
[EDIT4] juste pour montre qu'on peux éditer son post plein de fois |
bon, pour devancer sireyessire :
"no comment"
|
NO COMMENT _________________ I never think of the future. It comes soon enough.
Albert Einstein
Try simpler first
Shockley |
|
Back to top |
|
|
Pachacamac Veteran
Joined: 22 Nov 2003 Posts: 1264 Location: Paris - France
|
Posted: Fri Dec 10, 2004 4:04 pm Post subject: |
|
|
Tu peux aussi ajouter la date d'acces à ton ordi à partir de la commande scout pour envoyer l'@IP et l'heure d'acces vers l'@mail du FAI qui est souvent abuse@FAI.com
Ajout du code supplémentaire :
Code: | egrep "sshd.*[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" /var/log/messages | egrep -o "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" | sort | uniq -c | sort -n -r | egrep "^ +[[:digit:]]{2,} " | while read a b; do echo "L'utilisateur ayant l'IP : $b a tenté de se connecter à mon ordinateur aux heures suivantes : "; cat /var/log/messages | grep $b | gawk '{ print $3 }';echo; done
|
Si tu veux le décomposer en 2fois :
Code: | egrep "sshd.*[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" /var/log/messages | egrep -o "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" | sort | uniq -c | sort -n -r | egrep "^ +[[:digit:]]{2,} " > /tmp/ipscantrop.txt |
puis faire le traitement à partir du fichier, ce qui donne :
Code: | cat /tmp/ipscantrop.txt | while read a b; do echo "L'utilisateur ayant l'adresse IP : $b a tenté de se connecter à mon ordinateur aux heures suivantes : "; cat /var/log/messages | grep $b | gawk '{ print $3 }';echo; done |
|
|
Back to top |
|
|
scout Veteran
Joined: 08 Mar 2003 Posts: 1991 Location: France, Paris en Semaine / Metz le W-E
|
Posted: Fri Dec 10, 2004 4:14 pm Post subject: |
|
|
Pachacamac wrote: | Tu peux aussi ajouter la date d'acces à ton ordi à partir de la commande scout pour envoyer l'@IP et l'heure d'acces vers l'@mail du FAI qui est souvent abuse@FAI.com
Ajout du code supplémentaire :
Code: | egrep "sshd.*[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" /var/log/messages | egrep -o "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" | sort | uniq -c | sort -n -r | egrep "^ +[[:digit:]]{2,} " | while read a b; do echo "L'utilisateur ayant l'IP : $b a tenté de se connecter à mon ordinateur aux heures suivantes : "; cat /var/log/messages | grep $b | gawk '{ print $3 }';echo; done
|
Si tu veux le décomposer en 2fois :
Code: | egrep "sshd.*[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" /var/log/messages | egrep -o "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" | sort | uniq -c | sort -n -r | egrep "^ +[[:digit:]]{2,} " > /tmp/ipscantrop.txt |
puis faire le traitement à partir du fichier, ce qui donne :
Code: | cat /tmp/ipscantrop.txt | while read a b; do echo "L'utilisateur ayant l'adresse IP : $b a tenté de se connecter à mon ordinateur aux heures suivantes : "; cat /var/log/messages | grep $b | gawk '{ print $3 }';echo; done |
|
Excellent, mais attention il ne faut pas oublier d'enlever les ips de ses propres machines ou de ses amis ... _________________ http://petition.eurolinux.org/ - Petition against ePatents
L'essence de la finesse |
|
Back to top |
|
|
Pachacamac Veteran
Joined: 22 Nov 2003 Posts: 1264 Location: Paris - France
|
Posted: Fri Dec 10, 2004 4:42 pm Post subject: |
|
|
Il est préférable d'insérer
Code: | | egrep -v "*Failed password* *Illegal user*" |
juste après /var/log/messages |
|
Back to top |
|
|
Pachacamac Veteran
Joined: 22 Nov 2003 Posts: 1264 Location: Paris - France
|
Posted: Fri Dec 10, 2004 4:48 pm Post subject: |
|
|
Allez tiens je l'ai fait avec une sortie plus jolie :
Code: | egrep "sshd.*[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" /var/log/messages | egrep -v "*Failed password* *Illegal user*" | egrep -o "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" | sort | uniq -c | sort -n -r | egrep "^ +[[:digit:]]{2,} " | while read a b; do echo "L'utilisateur ayant l'IP : $b a tenté de se connecter $a fois à mon ordinateur : "; cat /var/log/messages | grep $b | gawk '{ print "Le " $2 " " $1 " à " $3 }';echo; done |
Ca va comme ça ?
EDIT : Il est aussi possible de bannir les IP retournés en modifiant la commande après gawk:
Code: | .....gawk '{ print "Le " $2 " " $1 " à " $3 }';echo "ALL: $b" >> /etc/hosts.deny;echo; done |
|
|
Back to top |
|
|
|