Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[scripting sh] analyseur de logs ... compteur de mots
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
Zidge
Tux's lil' helper
Tux's lil' helper


Joined: 20 Aug 2003
Posts: 86

PostPosted: Mon Dec 06, 2004 9:46 pm    Post subject: [scripting sh] analyseur de logs ... compteur de mots Reply with quote

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
View user's profile Send private message
scout
Veteran
Veteran


Joined: 08 Mar 2003
Posts: 1991
Location: France, Paris en Semaine / Metz le W-E

PostPosted: Mon Dec 06, 2004 10:22 pm    Post subject: Re: [scripting sh] analyseur de logs ... compteur de mots Reply with quote

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
View user's profile Send private message
Zidge
Tux's lil' helper
Tux's lil' helper


Joined: 20 Aug 2003
Posts: 86

PostPosted: Mon Dec 06, 2004 10:27 pm    Post subject: Reply with quote

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
View user's profile Send private message
Celeborn
Tux's lil' helper
Tux's lil' helper


Joined: 24 Jan 2004
Posts: 132
Location: Heidelberg (Germany)

PostPosted: Mon Dec 06, 2004 10:41 pm    Post subject: Re: [scripting sh] analyseur de logs ... compteur de mots Reply with quote

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"
:mrgreen:
Back to top
View user's profile Send private message
marvin rouge
Veteran
Veteran


Joined: 01 Aug 2004
Posts: 1422
Location: Villa Lumierrante, Zonelibre

PostPosted: Tue Dec 07, 2004 8:14 am    Post subject: Reply with quote

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
View user's profile Send private message
sireyessire
Advocate
Advocate


Joined: 20 Mar 2003
Posts: 2991
Location: back in Paris, France

PostPosted: Tue Dec 07, 2004 9:10 am    Post subject: Re: [scripting sh] analyseur de logs ... compteur de mots Reply with quote

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"
:mrgreen:

NO COMMENT :wink:
_________________
I never think of the future. It comes soon enough.
Albert Einstein

Try simpler first
Shockley
Back to top
View user's profile Send private message
Pachacamac
Veteran
Veteran


Joined: 22 Nov 2003
Posts: 1264
Location: Paris - France

PostPosted: Fri Dec 10, 2004 4:04 pm    Post subject: Reply with quote

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
View user's profile Send private message
scout
Veteran
Veteran


Joined: 08 Mar 2003
Posts: 1991
Location: France, Paris en Semaine / Metz le W-E

PostPosted: Fri Dec 10, 2004 4:14 pm    Post subject: Reply with quote

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
View user's profile Send private message
Pachacamac
Veteran
Veteran


Joined: 22 Nov 2003
Posts: 1264
Location: Paris - France

PostPosted: Fri Dec 10, 2004 4:42 pm    Post subject: Reply with quote

Il est préférable d'insérer
Code:
| egrep -v "*Failed password* *Illegal user*"

juste après /var/log/messages
Back to top
View user's profile Send private message
Pachacamac
Veteran
Veteran


Joined: 22 Nov 2003
Posts: 1264
Location: Paris - France

PostPosted: Fri Dec 10, 2004 4:48 pm    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum