Swatch et Syslog

Comment surveiller plus facilement mon systeme grâce à une utilisation plus fine des log ? Swatch répond facilement et rapidement a cette question. Swatch agie comme grep pour faire des recherche dans les logs. Il en extraie le contenue selectionné avec une présentation plus travaillée que la simple ligne de texte et lance des actions selon vos instruction.

Syslog

Dans une installation de base d’une woody les logs sont distribué dans différent fichiers dans le répertoire /var/log. Ceci à des avantages sur une organisation pour plusieurs personnes différentes on besoin d’accéder au log pour leur propres activités, les développeurs pour débuger leur création, l’administrateur mails pour comprendre pourquoi les chefs de projet du 5ème ne réceptionnent pas les emails de bigboss etc..

Dans mon cas je suis seul maître à bord, personne d’autre que moi n’a besoin des logs. J’ai donc décidé de centraliser mes logs dans deux fichiers seulement :

  1. /var/log/syslog pour l’ensemble des log sauf l’authentification des utilisateur.
  2. /var/log/auth.log pour les logs d’identification des utilisateurs.

Pour cela j’ai reconfigurer mon gestionnaire de log le bien nommé : syslog. Pour cela j’ai changé son fichier de configuration /etc/syslog.conf sans oublier de faire une sauvegarde du fichier original.

J’ai donc renseigné mon fichier de configuration de syslog comme ceci :

auth,authpriv.* /var/log/auth.log
*.*;auth.none;authpriv.none /dev/tty12
*.*;auth.none;authpriv.none /var/log/syslog
texte - 287 octets
syslog.conf
Mon fichiers de configuration de syslog

La première ligne indique d’enregistrer tout ce qui concerne l’identification dans /var/log/auth.log.
La seconde ligne indique d’envoyer tout les logs sauf ceux d’identification sur la console au tty12 (Ctrl+Alt+F12) de l’ordinateur.
La dernière ligne enregistre tout les logs sauf ceux d’identification dans le fichier /var/log/syslog

Installer Swatch

Pour installer swatch on utilise apt comme d’habitude. Prenons d’abord nos marques et recherchons le bon paquet :
apt-cache search swatch

Le résultat nous donne quatre occurrences, dont seul la première est la bonne :

swatch - log file viewer with regexp matching, highlighting, & hooks
swisswatch - the mother of all X Toolkit clocks
wmitime - yet another clock dock app for Window Maker
wmtz - A wmaker dock app that displays the time in different zones.

Comme je suis quelqu’un de prudent je vérifie bien que c’est le logiciel que je recherche et le bon paquetage. Prudence est mère de sureté, je demande donc les informations disponible sur le paquetage trouvé :
apt-cache show swatch

Cette vérification me donne une foule de renseignement dont le fait que la version debian de swatch inclue deux options particulières :

Package: swatch
Priority: optional
Section: admin
Installed-Size: 152
Maintainer: Rene Weber <rene_debmaint@elvenlord.com>
Architecture: all
Version: 3.0.4-1
Depends: perl5, libtimedate-perl, libtime-hires-perl, libdate-calc-perl, libfile-tail-perl
Filename: pool/main/s/swatch/swatch_3.0.4-1_all.deb
Size: 31460
MD5sum: f0e2a697d1ad7752029bd598fcef0988
Description: log file viewer with regexp matching, highlighting, & hooks
Swatch is designed to monitor system activity. It reads a configuration file which contains pattern(s) to look for and action(s) to perform when each pattern is found.

A typical action is echoing the matched line in a variety of colours and formats including reverse video, bold, underline, and normal, which swatch knows how to do internally. Other actions include sending mail or executing an arbitrary program on the line.

Swatch is written in Perl and uses Perl regular expressions for line matching.

This Debian version of swatch includes two directives not yet found in the "official" swatch -- "PERLCODE" and "threshold".

Après avoir montré patte blanche je l’installe :
apt-get install swatch

Swatch est maintenant installé il ne reste qu’a lui créé un fichier de configuration qui le renseignera sur ce qu’il doit rechercher dans les logs et comme il doit présenter le résultat.

swatch.conf

Le fichier de configuration de swatch est d’un syntaxe trés facile pour une utilisation basique. Il peut devenir très puissant et bien plus difficile a construire en utilisant les exprèssions régulière de Perl.

Chaque paragraphe du fichier de configuration débute par la chaine de carractère à rechercher :
watchfor /pattern/. Une pattern est une expression régulière reconnue par Perl (swatch est écrit en Perl). Ces expressions sont similaire à celles utilisée par grep, exemple :
watchfor /file system full/
Cette paterne ou chaîne de caractère correspond à la syntaxe exacte du message d’erreur envoyer dans les log quant une partition est pleine et d’un programme ou le noyau ne peut plus écrire dessus.

On peut aussi remplacer l’instruction watchfor par ignore de façon à pour filtrer des lignes non importantes qui auraient été mise en correspondance avec une chaîne recherché,ceci pour éviter les faux positif.

On informe ensuite de la, où des actions à entreprendre a la découverte de la chaîne recherché. Les principales actions sont les suivantes :

  • echo [mode] : affiche la ligne de logs contenant le motif. Plusieurs modes d’affichage sont disponibles : en couleurs, inversé, en gras…
  • bell [N] : affiche la ligne et fait retentir N fois une cloche
  • exec command : permet d’exécuter une commande. La ligne reconnue peut être fournie en argument de cette commande. les variable suivante sont disponible :
    • $N pour le nombre de champs dans le ligne.
    • $0 or $* pour la ligne en question.
  • mail [addresses=address:address :…][,subject=your_text_here] : permet d’envoyer la ligne et un commentaire à une où plusieurs personnes.
  • throttle hours:minutes:seconds,[use=message|regex] : permet de limiter le nombre de fois que l’action sera effectuée sur un motif reconnu. Cette option est utile pour gérer des logs du type « partition pleine » qui sont enregistrés plusieurs dizaine de fois par minute. Si use=message, la limite sera basé sur le pattern, si use=message, elle sera basée sur le message. continue
  • continue : permet de continuer la recherche de motifs sur la même ligne.
  • write [user:user :…] : permet d’envoyer une message a un utilisateur présent connecter sur la machine. Pratique pour polluer toute les xterm de root en cas d’urgence.
  • quit : Explicite, fin et sortie de swatch.

Chacune de ces actions peut ce voir ajouter les options suivants :

  • when=day_of_week:hour_of_day qui permet de spécifier un intervalle valide pour l’execution de cette action. Par exemple, on n’enverra un mail à l’administarteur du lundi au samedi, entre 8 heure et 17 heure :
    mail=admin@rsr.fr,when=1-6:8-17
  • threshold events:seconds,[repeat=no|yes]. Cette option limite l’action d’apres le nombre de fois ou une parterne est trouver durant une ériode précise. Par exemple :
    threshold 4:60"
    L’action ne sera réalisée que si la chaîne de caractère a été trouvée 4 fois dans les 60 dernière secondes. C’est je pense pratique pour les attaques en « brute force » ou les « flood ».
  • PERLCODE : Pour l’insertion de code Perl, les fameuses expression régulière. Cela permet entre autre la supstitution de variable comme dans cette exemple sur le nom des machines ce connectant en ppp sur votre serveur :
    PERLCODE=$syslog='^[A-Z][a-z]{2} [0-9]+([0-9]+:){2}[0-9]+';
    watchfor /${syslog} hostname pppd/

Attention au point virgule en fin de commande en Perl !

Re-voici notre exemple d’une entrée de fichier de configuration swatch :

watchfor /file system full/
echo bold
bell 3
throttle 01:00

Dans cet exemple les lignes de logs contenant le motif « file system full » seront affichées en gras et accompagnées de 3 sonneries. Seule une instance de ce message sera affichée par minute

watchfor /friends/
echo exec "play /home/agemis/Mail/.mail.wav"

Maintenant dans cet exemple chaque fois que le mot friends est trouver un fichier son est joué : you got a mail

watchfor /authentication failure/
echo bold, yellow, threshold 10:120
write root:admin, threshold 10:120
mail addresses=admin,subject=--- 10 wrong in last 2 minutes [user] ---, threshold 10:120
bell 5, threshold 10:120

Alors plus fort encore, ici en cas d’une identification rater les actions qui suive sont lancer mais uniquement si c’est la 10 fois que la chaîne de caractère est trouvé dans les deux dernière minutes.
Les actions sont :

    • Affichage de la ligne trouvée en gras et jaune
    • Envois d’une message sur les consoles ouvertes d’Admin et root
    • Envois d’un mail a admin
    • Cinq sonneries

J’ai regrouper les chaînes de caractères sensible que je connais avec différentes façons de gérer les alarmes dans un gros fichier de configuration. A vous de prendre exemple dessus ou de créé vos propre règle en fonction de vos besoins.

texte - 5.1 ko
swatch.conf
Fichier de configuration de conf

Utilisation de swatch

Il existe trois modes d’utilisation différents de swatch utilisable selon les besoins :

Pour inspecter en continue la queue d’un fichier de log afin de réagir au dernière ligne créées.
--tail-file=nom-de-fichier ou -t nom-de-fichier
Ce mode de fonctionnement est celui que j’utilise que j’affectionne. Il est facile ainsi de garder un xterm ouvert avec swatch de lancer, affichant à fur et à mesure les alertes. Le ligne de commande est donc :
swatch -c /etc/swatch.conf -t /var/log/syslog

Pour vérifier ou re-vérifier l’intégralité du fichier log pour avoir un historique des évènements.
--examine=nom-de-fichier ou -f nom-de-fichier
Ce mode de fonctionnement est parfais pour reprendre le fil des évènements suite a un crash ou simplement après une nuit de sommeil. La ligne de commande est donc :
swatch -c /etc/swatch.conf -f /var/log/syslog

Pour récupérer la sortie (STDOUT) d’un autre programme.
--read-pipe=nom-de-fichier ou -p nom-de-fichier Je ne connais pas d’exemple d’utilisation de ce mode, il est toujours possible d’avoir un service précis qui écrive les logs sur sa sortie standard. Un hack est aussi possible pour créé de toute pièce l’écriture sur le STDOUT dans le cas d’un service particulièrement sollicité. Voici un exemple pour tester ce mode :
swatch -c /etc/swatch.conf -p 'tail -f /var/log/syslog'
Noter que cette exemple n’apporte rien par rapport au premier mode expliqué.

Documentation

Softpanorama dossier « log auditing »
Syslog for the datacenter
Linux journal
Docmaster