Ossec et stats sur munin

Plop à tous …
Encore un article sur Ossec … avec cette fois-ci quelques exemples de statistiques à afficher avec munin. Les scripts sont extrêmement simple à modifier pour chercher des infos spécifique à certaines exploitations propres à une infrastructure données (web, mails, …).

Le but de l’article est de présenter rapidement comment créer des graphes sur munin en bash

Le screen pour en mettre plein la vue ^^ :

Pour installer les graphes représentés ci-dessus, il faut modifier le fichier de configuration /etc/munin/plugin-conf.d/munin-node, et ajouter à la fin :

[ossec_*]
user root
env.logdir /chemin/vers/logs/ossec/logs

Et les graphes (les infos fournit risque de ne pas être très précise, les grep étant fait sur des periodes de ~15 minutes et munin exécutant les scripts toutes les 5 minutes mais le but ici, est juste d’avoir un rapide aperçu des risques encourant par le serveur, donc ce niveau me suffit) :
de réponse active (nb ban/deban) /etc/munin/plugins/ossec_active_resp :

#!/bin/sh
if [ "$1" = "autoconf" ]; then
        echo "yes"
        exit 0
fi

if [ "$1" = "config" ]; then
        echo "graph_title Ossec #Active Response"
        echo "graph_args --base 1000 -l 0 "
        echo "graph_vlabel Number of active response"
        echo "graph_category Ossec"
        echo "graph_scale no"
        echo "c_add_actions.label Number of Rules added"
        echo "c_add_actions.draw LINE2"
        echo 'c_add_actions.min 0'
        echo "c_del_actions.label Number of Rules deleted"
        echo "c_del_actions.draw LINE2"
        echo 'c_del_actions.min 0'
        exit 0
fi
LANG=fr_FR.UTF-8
LC_ALL=fr_FR.UTF-8
LOG_DATE=`date|sed -e 's/[0-9]:[0-9]* (UTC+[0-9]*)//gi'`
NB_ADD=$(cat $logdir/active-responses.log |grep "$LOG_DATE"|grep add|wc -l)
NB_DEL=$(cat $logdir/active-responses.log |grep "$LOG_DATE"|grep del|wc -l)

echo "c_add_actions.value ${NB_ADD}"
echo "c_del_actions.value ${NB_DEL}"

exit 0

d’attaque par service à mettre dans /etc/munin/plugins/ossec_attack_services :

#!/bin/sh
if [ "$1" = "autoconf" ]; then
        echo "yes"
        exit 0
fi

if [ "$1" = "config" ]; then
        echo "graph_title Ossec #Attack per services"
        echo "graph_args --base 1000 -l 0 "
        echo "graph_vlabel Number of attack per services"
        echo "graph_category Ossec"
        echo "graph_scale no"
        echo "apache.label Apache"
        echo "apache.draw LINE2"
        echo 'apache.min 0'
        echo "ssh.label SSH"
        echo "ssh.draw LINE2"
        echo 'ssh.min 0'
        exit 0
fi
LANG=en_US.UTF-8
LOGDATE=`date +'%Y %b %d %H:%M:%S'|sed -e 's/\(.*[0-9]*:[0-9]\)[0-9]:[0-9]*/\1/g'`
APACHE=$(cat $logdir/alerts/alerts.log |grep -A 1 "$LOGDATE"|grep apache|wc -l)
SSH=$(cat $logdir/alerts/alerts.log |grep -A 1 "$LOGDATE"|grep SSH|wc -l)

echo "apache.value ${APACHE}"
echo "ssh.value ${SSH}"

exit 0

Ici, ça couvre rapidement les besoins d’un blogs : SSH et Apache, il suffit de rajouter autant de grep que l’on veut sur les logs d’autres softs qu’ossec et …

A noter que mon système de base est en français (très mauvaise idées car les logs d’ossec sont en FR, mais les logs récupéré sont en anglais, d’où le jeux avec les LANG et LC_ALL).

Et on oublie pas le :

/etc/init.d/munin-node restart

Pour prendre en compte les scripts …