mardi 29 janvier 2013

NAGIOS : Vérifier l'état du pare-feu iptables

L'environnent technique des serveurs est le suivant :
  • OS : OpenSuse 12.2
  • Supervision : NAGIOS 3.4
  • Pare-feu : iptables

0°) Introduction

L'objectif de cette article est de vous faire partager un petit outil que j'ai développé pour nos besoins propres, concernant la supervision de la prise en compte des règles d'accès à notre réseau via iptables avec NAGIOS.
Avec la politique de sécurité que nous avions choisis de mettre en place, il était nécessaire de s'assurer que nos règles étaient bien appliquées lors du démarrage de nos serveurs.
Le script est assez basique et contrôle juste le nombre de règles appliquées, déclenchant une alerte lorsque ce nombre est inférieur à un seuil prédéfini.

1°) Les motivations.

Depuis quelques années maintenant, j'ai choisi de configurer sur chacun des nos serveurs des règles de sécurité basées sur iptables. Le mise en place n'a pas été évident et la compréhension des règles a pris pas mal de temps, même en ayant une bonne connaissance du réseau et des trames IP. Mais bon, à l'arrivé nous avons un résultat qui tient la route (du moins c'est l'impression que ça donne !!!).

Seul petit bémol: une fois les règles mises au point, j'avais eu la mauvaise idée de démarrer le pare-feu au moment du boot. Et bien sur, un jour (un très mauvais jour), une erreur dans mon fichier contenant mes règles a bloqué l'ensemble des accès réseaux sur un serveur de production....
De coup, impossible d’accéder à la machine, m'obligeant à me déplacer directement en salle machine pour corriger ce problème en redémarrant le système en mode single et en désactivant le script appliquant les règles de notre pare-feu.

Pas vraiment pratique... du coup j'ai décidé d'appliquer les règles à la main après chaque démarrage. Pas très satisfaisant, mais beaucoup plus sur. Il est souvent nécessaire de faire des compromis en informatique.

2°) Dans le vif du sujet.

Malheureusement, il arrive (pas souvent, mais ça arrive) que les serveurs redémarrent (panne électrique, bug du kernel, mauvaise manipulation des techniciens,...). Du coup Il devenait nécessaire que nous soyons prévenu lorsque ces règles n'étaient pas appliquées.
Comme tous bon informaticien qui se respect, avant de ré-inventer la roue, je me suis mis à chercher un plugin plus ou moins officiel de NAGIOS. A ma grande surprise, je n'ai pas trouvé grand chose. Du moins, en restant diplomate et en modérant mes propos, je dirais que je n'ai pas trouvé de plugin qui pouvait répondre à mes attentes ou alors je n'ai pas été assez malin pour arriver à faire marcher le plugin que j'avais trouvé (check_iptables_status.sh).

Du coup, il ne me restait plus qu'à en développer un... m'inspirant malgré tout du plugin de rhoml, je suis partie sur le même principe : tester le nombre de règles appliquées et déclencher une alerte si on est en dessous d'un certain seuil.

Voici le détail des étapes pour la mise en place de ce script.
cd /usr/lib/nagios/plugins
vi check_firewall.sh
Copier le contenu

#!/bin/sh
#
# Author: Alain TOMASIAN
# Date: 25 Dec. 2012
# Description: Check if the firewall based on iptables is running
#
. /usr/lib/nagios/plugins/utils.sh
print_usage() {
echo "Usage: check_firewall.sh "
}
# Make sure the correct number of command line
IPTABLES_CMD=/usr/sbin/iptables
RESULT=`sudo $IPTABLES_CMD -L -n | wc -l`
if [ $RESULT -lt 10 ] ; then
   echo "FW CRITICAL : The firewall hasn't been started : number of  rules lines = $RESULT"
   exit $STATE_CRITICAL
elif [ $RESULT -lt 100 ] ; then
   echo "FW WARNING : May be the firewall hasn't been started : number of rules lines = $RESULT"
   exit $STATE_WARNING
else
   echo "FW OK : The firewall has been started : number of rules lines = $RESULT"
   exit $STATE_OK
fi
Le point délicat est qu'il faut autoriser l'utilisateur "nagios" à exécuter la commande "iptables". Pour cela, il est nécessaire de passer par sudo :
# sudoedit /etc/sudoers

Ajouter la ligne suivante dans la partie :
    ##
    ## User privilege specification
    ##
    nagios  ALL = (root) NOPASSWD:/usr/sbin/iptables -L -n    
et sauvegarder le fichier.

A cette phase du projet, il n'est pas vraiment facile de tester la commande avec l'utilisateur nagios, car normalement cette utilisateur n'a pas de shell valide....
Pour valider notre travail, il faut continuer la phase configuration, car le problème viendra uniquement lorsqu'on essaiera d'utiliser la commande via nrpe (dans notre cas de figure).

A présent il faut installer la commande au niveau de nrpe et au niveau de nagios.
Sur le serveur à superviser, il faut aujouter dans le fichier de configuration /etc/nagios/nrpe.cfg la ligne suivante dans la description des commandes :
    vi /etc/nagios/nrpe.cfg
    command[check_firewall]=/usr/lib/nagios/plugins/check_firewall.sh

Puis redémarrer nrpe :
    /etc/init.d/nrpe restart

Sur le serveur de supervision, il faut aujouter dans le fichier /etc/nagios/objects/commands.cfg les lignes suivantes :

    vi /etc/nagios/objects/commands.cfg
    # 'check_remote_firewall' command definition
define command { command_name check_remote_firewall command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_firewall } # 'check_firewall' command definition define command { command_name check_firewall command_line $USER1$/check_firewall.sh }
Faire un check de la config nagios avant de relancer le serveur :
    /etc/init.d/nagios check
Starting configuration check - passed configuration check done
    /etc/init.d/nagios restart
Shutting down Nagios           done
Starting Nagios                done


A présent, nous pouvons effectuer un test de connexion avec un check_nrpe pour valider le mode de fonctionnement :
# /usr/lib/nagios/plugins/check_nrpe -H xx.xx.xx.xx -c check_firewall
FW OK : The firewall has been started : number of rules lines = 671


Le reste n'est plus qu'une simple formalité car il faut juste configurer sur le serveur de supervision les services pour mettre un check sur les machine à superviser.
Le résultat en image :




3°) Conclusions.


Ce plugin est assez basique et nécessiterait certaines améliorations que j'apporterai peut-être si mon emploi du temp me le permet.... Mais pour l'instant il me rend un grand service en vérifiant que mes règles de sécurités soient bien appliquées.

Aucun commentaire:

Publier un commentaire