Focus sur Logwatch

Je n’ai trouvé sur le net aucun exemple concret en français de personnalisation de logwatch (j’ai peut-être pas cherché assez longtemps…). Donc voici le premier exemple de personnalisation de logwatch en français dans le monde. TADAAAA !!!

Des connaissances en perl et en expressions régulières sont indispensables.

Normalement les fichiers se trouvent aux mêmes endroits sur toutes les distributions, mais il se peut qu’il y ait certaines différences. Pour info je fais ceci avec Gentoo.

Location des fichiers :

/usr/share/logwatch/default.conf/logfiles

-> configuration relative aux logs du serveur (où les trouver, etc…)

/usr/share/logwatch/default.conf/services

-> quelles lignes dans un groupe de log correspondent à ce service

/usr/share/logwatch/scripts/services

-> la manière de parser les logs d’un service

C’est là la partie la plus intéressante

Pour le reste, man logwatch

Un exemple concret vaut souvent mieux qu’un discours abstrait, voici donc un exemple :

Le parsing des logs de postfix sur un serveur de mail me renvoyait de nombreuses lignes non parsées, ce qui génait considérablement la lecture du rapport. Voici des exemples de lignes «parasites» :

– des warnings SASL par centaine :

sql_select option missing

auxpropfunc error no mechanism available

_sasl_plugin_load failed on sasl_auxprop_plug_init for plugin: sql

– des rejets non analysés par centaine aussi :

NOQUEUE: reject_warning: RCPT from unknown[x.x.x.x]: 504 5.5.2 : Helo command rejected: need fully-qualified hostname; from=xxx to=yyy proto=SMTP helo=x.x.x.x

Pour parser ces données, il faut surcharger le script postfix :

cp /usr/share/logwatch/scripts/services/postfix /etc/logwatch/scripts/services/postfix

Ensuite on modifie la surcharge

vi /etc/logwatch/scripts/services/postfix

Pour ignorer les warnings SASL on ajoute :

( $ThisLine =~ m/sql_select option missing/ ) or

( $ThisLine =~ m/auxpropfunc error no mechanism available/ ) or

( $ThisLine =~ m/_sasl_plugin_load failed on sasl_auxprop_plug_init for plugin: sql/ )

Dans les lignes qui doivent être ignorées.

Pour parser correctement le rejet du «HELO : need FQDN» on ajoute la règle suivante :

elsif ( ($Host,$Error) = ($ThisLine =~ /reject_warning: RCPT from ([^ ]*[[^ ]*]): $re_DSN <.*>: (Helo command rejected: .*);.*/)) {

$HeloError{$Error}{$Host}++;

}

Ce qui nous ajoute dans le rapport la ligne suivante (en gras) :

Errors in HELO/EHLO conversation:

Helo command rejected: Invalid name: from 1 Host(s), 2 Time(s)

Helo command rejected: need fully-qualified hostname: from 32 Host(s), 41 Time(s)

C’est quand même plus joli 🙂

Author: Pierre-Yves Dubreucq

Passioné par les logiciels libres depuis 2001, je suis VP Bare Metal (Dedibox) chez Scaleway. Je tiens ce blog depuis 13 ans avec beaucoup moins d'assiduité malheureusement qu'à ses débuts, mais bon, le temps est une denrée rare.

Share This Post On

Submit a Comment

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *