2013-06-14 5 views
0

J'essaie d'écrire un petit script shell à exécuter une fois par heure et de renvoyer tous les utilisateurs et adresses IP qui ont envoyé des e-mails dans l'heure pour que je puisse trouver des comptes compromis.Limiter les résultats de grep d'un journal exim

Je reçois les données que je veux via:

grep "A=dovecot_login" /var/log/exim_mainlog | sed -e 's#H=.* \[##' -e 's#\]:[0-9]*##' | awk '{print $5,$6}' | sort | uniq -c 

Mais je veux limiter les résultats à un peu l'heure précédente (donc si je le lance à 10 heures, les résultats seraient les logins de 9h à 10h).

Une idée de comment limiter cela? Je pensais que je me rapprochais avec

hour=`date | awk {'print $4'} | cut -d: -f 1`; lasthour=`expr $hour - 1`; grep "`date -I` $lasthour" /var/log/exim_mainlog | grep "A=dovecot_login" | sed -e 's#H=.* \[##' -e 's#\]:[0-9]*##' | awk '{print $5,$6}' | sort | uniq -c 

Mais je n'ai pas aimé là.

TIA

+1

Votre approche est "sous-optimale". – AnFi

Répondre

1

Ne pas réinventer la roue, utilisez les outils que d'autres ont déjà écrit et testé dans la production: Grab le script perl logtail2 du logcheck package. Ensuite, il suffit d'avoir un cronjob toutes les heures qui traite le fichier journal que vous suivez. Le script logtail2 conserve la trace de l'endroit où il s'est arrêté la dernière fois qu'il a été exécuté. Vous savez donc si vous l'exécutez toutes les heures, vous n'aurez que la dernière heure de lignes de journal. Ensuite, utilisez votre analyse de texte normale pour extraire les données que vous souhaitez suivre.

Le tarball peut être trouvé sur http://packages.debian.org/unstable/logtail.

Questions connexes