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";

Reply via email to