Bonjour � tous

Voici un petit bout de code que j'ai cr�� et qui pourrait vous �tre utile.

J'aime bien regarder mes fichiers de logs r�guli�rement. Malheureusement, le 
nombre de messages concernant les paquets bloqu�s est devenu �norme et 
ennuyant (surtout depuis l'apparition du virus Blaster).
J'utilise donc logcheck pour faire la synth�se de mes fichiers de logs. Il 
m'envoie un courriel chaque matin. J'ai trouv� logcheck sur mes CD de MDK8.2 
(prosuite). Pri�re de ne pas m'informer qu'il en existe des meilleurs.

J'aurais pu, tout simplement, configurer logcheck pour filtrer les messages 
DROP mais, par int�r�t personnel, j'�tais int�ress� � conna�tre leur nombre.
J'ai donc modifi� logcheck (un script Bash) pour y ajouter une fonction de 
comptage facilement configurable.

Voici donc ce que j'ai cr��:
Les r�gles de comptage sont d�finies dans un fichier dont voici un exemple:
#Lignes pour lesquelles on veut un compteur
# syntaxe: nom : r�gle
#   le : est le s�parateur
#   le nom ne doit pas contenir le caract�re :
#   la r�gle peut en contenir
# un commentaire est une ligne d�butant par # (en colonne 1)
# une ligne vide n'a pas d'effet
# la r�gle peut �tre vide. Cela retournera le nombre de lignes analys�es.
    gShield (default drop): gShield.*default drop
    gShield (INVALID drop): gShield.*INVALID drop
Nombre de lignes analys�es:

Vous aurez compris que j'ai utilis� gShield pour configurer mon firewall. Si 
j'en change, je pourrai facilement modifier ce fichier de configuration.

Sommairement, ce fichier contient des commentaires et des lignes de 
configuration. Chacune des lignes de configuration contient un texte (nom du 
compteur) qui sera affich� dans le rapport, puis une r�gle grep. Un caract�re 
: s�pare le nom de sa r�gle. Pour ceux qui ne sont pas familiers avec les 
r�gles grep, la s�quence .* signifie toute chaine de caract�re. 

Puis j'ai cr�� un script de test 
#!/bin/sh
if [ -s compteurs ]; then
  EX_IFS="$IFS"
  IFS=:
  while read NOM REGLE; do
    # ne pas traiter les lignes vides et celles commen�ant par #
    if [ -z  "${NOM###*}" ]; then continue; fi
    N=`grep -c "$REGLE" /var/log/syslog`
    if [ $N -gt 0 ]; then
      echo $NOM: $N
    fi
  done < compteurs
  IFS=$EX_IFS
  unset EX_IFS
fi

Apr�s l'avoir test�, je l'ai int�gr� dans logcheck (vers la ligne 266), comme 
ceci:

COMPTEURS=/etc/logcheck/compteurs
# note: les lignes qu'on veut compter seront g�n�ralement aussi d�finies dans 
# le fichier $IGNOREFILE
if [ -s "$COMPTEURS" ]; then
  echo  >> $TMPDIR/checkreport.$$
  echo "Compteurs non-nuls" >> $TMPDIR/checkreport.$$
  echo "=-=-=-=-=-=-=-=-=-=-=" >> $TMPDIR/checkreport.$$
  EX_IFS="$IFS"
  IFS=:
  while read NOM REGLE; do
    # ne pas traiter les lignes vides et celles commen�ant par #
    if [ -z  "${NOM###*}" ]; then continue; fi
    N=`$GREP -c "$REGLE" $TMPDIR/check.$$`
    if [ $N -gt 0 ]; then
      echo $NOM: $N >> $TMPDIR/checkreport.$$
    fi
  done < $COMPTEURS
  IFS=$EX_IFS
  unset EX_IFS
fi

Puis j'ai configur� logcheck pour qu'il n'inclue pas les lignes DROP dans son 
rapport.  J'ai ajout� la ligne qui suit dans /etc/logcheck/ignore:
 gShield.*drop

Les r�sultats sont excellents. Environ 4000 lignes se sont �limin�es du 
rapport quotidien mais mes compteurs continuent de m'informer de l'�tat 
d'agressivit� de la jungle Internet.

Note: logcheck utilise un programme (inclus) nomm� logtail qui a la 
particularit� de "marquer" les fichiers de logs pour ensuite ne ressortir que 
les donn�es r�centes. Il peut donc fonctionner avec les logs qui ne sont pas 
archiv�s tous les jours.

Vos commentaires sont les bienvenus.
Vivent les logiciels ouverts.

Gilles

Vous souhaitez acquerir votre Pack ou des Services MandrakeSoft?
Rendez-vous sur "http://www.mandrakestore.com";

Répondre à