Professional Documents
Culture Documents
SOMMAIRE
La principale ide de ce projet est de disposer, au final, dune interface unique permettant de grer nos systmes dinformation dans les meilleures conditions possibles. Bien entendu, il existe une multitude de solutions indpendantes les unes des autres, plus ou moins propritaires, pour assurer la supervision dquipements (imprimantes, commutateurs, serveurs, etc.). En revanche, il existe dj beaucoup moins de solutions globales, et la plupart dentre elles sont fort coteuses (ex: HPOpenView, Patrol de BMC). Nous ne chercherons donc pas rinventer la roue. Nous allons nous appuyer, autant que possible, sur des solutions dj existantes et, de surcrot, libres. Nous les intgrerons notre portail pour le rendre le plus complet et le plus pertinent possible. Ex : Nous dvelopperons ainsi un toolkit comprenant des applications telles que : Nmap, WOL, traceroute, reboot, ping.
NAGIOS
systme complet de notification en fonction du service, de lheure et de la date. gestion des escalades. possibilit de paramtrer des ractions automatises. possibilit de dfinir des gestionnaires dvnements.
Nagios est le successeur de NetSaint. Il est dvelopp depuis plus de 10 ans. Il sagit dun moniteur de supervision trs puissant bien quil puisse parfois savrer complexe mettre en uvre. Gestionnaires dvnements : cela permet une rsolution des problmes directement sur la machine concerne.
10
Il est possible de dfinir la hirarchie du rseau en utilisant le concept des htes parents . Nagios propose :
une interface Web avec gestion des droits pour la consultation. la gnration de rapports de surveillance.
une interface graphique de type client Web. des modules/sondes dont un grand nombre sont fournis de base ( ex : check_snmp, check_http, check_imap, etc.).
Dfinir la hirarchie du rseau en utilisant des htes parents : permet la dtection et la distinction entre les htes qui sont larrt et ceux qui sont injoignables.
11
12
et un court message sur la sortie standard pour aider au diagnostic, langage au choix (Perl, C, WMI, etc.).
Contrairement beaucoup dautres outils de supervision, Nagios ne dispose pas de mcanismes internes pour vrifier ltat dun service, dun hte ou dun quipement rseau. On notera la flche en gris entre le serveur Nagios et la base de donnes destine stocker la configuration du serveur Nagios. En effet, la communaut Nagios souhaite abandonner le stockage dans une SGBD au profit de fichiers plats.
Comme nous lavons vu, Nagios ne dispose pas de mcanismes internes pour vrifier ltat dun service, dun hte ou dun quipement rseau. Pour ce faire, il utilise des programmes externes appels plugins/modules. Il lance ces modules et analyse les rsultats obtenus.
13
14
Signification
Hte disponible Hte indisponible
Code retour
0 1 ou 2
Signification
Service disponible Avertissement sur le fonctionnement du service Alerte suite une erreur critique Etat inconnu
soit effectue des tests distance depuis le serveur Nagios en simulant le comportement dun client.
ex : tests sur des protocoles rseaux (SMTP, IMAP, POP).
CRITICAL UNKNOWN
2 3
15
16
17
18
Comment commander depuis le serveur Nagios lexcution distance dun module install localement sur une machine que lon souhaite supervise ? Par exemple, nous souhaitons connatre loccupation des disques durs, sa charge CPU ou encore la temprature du systme. Le module de base check_by_ssh, qui permet lexcution dune commande sur un hte distant en utilisant SSH, impose au pralable la cration de comptes non privilgis sur les machines, accessibles par lutilisateur qui excute le daemon Nagios, et qui ont les droits suffisants pour lancer les plugins ncessaires. On en dduira trs vite que cette solution nest pas sans implications en termes de scurit.
Cryptage via SSL. Attention la possibilit dusurper ladresse puisque NRPE se sert de lIP pour vrifier que le requrant est autoris. Mais, avec SSL activ, ce problme est moins flagrant puisque lattaquant devra dchiffrer le trafic quil a captur. Le chiffrement est bas sur une routine de type AES-256 Bit utilisant SHA en Anon-DH. Puisque nous utilisons Anon-DH, cela permet de chiffrer entre le client et le serveur sans devoir gnrer des cls ou certificats au pralable. Le programme cre dynamiquement les cls au dmarrage du dmon partir des infos contenues dans le fichier dh.h qui se trouve dans le rpertoire source de NRPE.
19
20
Plusieurs modes de chiffrement des donnes sont possibles : DES, 3DES, CAST, xTEA, Twofish, LOKI97, RJINDAEL, SERPENT, GOST, SAFER/SAFER+. La condition : installer la librairie mcrypt sur la station.
Lutilisation de lagent NSCA prsente lavantage de ne pas avoir ouvrir de ports sur le firewall en entre de rseau (jonction internet/rseau). En effet, comme les informations sont envoyes par le client NSCA vers le dmon prsent sur le serveur Nagios, il suffit seulement de permettre le passage des informations dans le sens sortant sur le firewall.
21
22
Fonctionnement de NRPE : Le serveur Nagios, via son propre plugin NRPE, contacte le dmon NRPE install sur lhte distant. Il lui demande dexcuter une commande. Le dmon NRPE excute la commande en la sous-traitant au plugin requis. Il renvoie ensuite le rsultat au serveur Nagios, tjs par lintermdiaire de son module NRPE. Fonctionnement de NSCA : Le client NSCA, install directement sur la machine supervise, excute rgulirement des vrifications selon la planification qui a t dcide en local. Il envoie ensuite les rsultats au serveur Nagios qui les reoit via son dmon NSCA et qui pourra les traiter lorsquil le souhaitera.
23
24
En cours dinstallation :
cration du compte dadministration (nagiosadmin). activation de la gestion des commandes externes. installation des dpendances ncessaires (apache2, librairies Perl, SNMP, etc).,
Installation de Nagios
Actuellement, nous faisons tourner la solution Nagios + Centreon dans une machine virtuelle OpenVZ hberge sur un P4 2.3 Ghz avec 1 Go de mmoire. Cette configuration gre environ 90 htes et plus de 350 services associs. La charge de la machine est trs raisonnable. Nagios peut recevoir des commandes venant dapplication externes, parmi lesquelles des CGI (ex : command.cgi). Ces commandes peuvent modifier de nombreux aspects de ses fonctions de supervision. Par dfaut, Nagios ne traite pas les commandes externes. Les commandes externes peuvent tre utilises pour mener bien un certain nombre de tches pendant le fonctionnement de Nagios : - la dsactivation temporaire des notifications pour les services et les htes; - la dsactivation temporaire des tests de services; - l'obligation de contrler immdiatement un service; - l'ajout de commentaires aux htes et services, etc. Exemples de commandes externes Des scripts pouvant tre utiliss pour envoyer des commandes Nagios se trouvent dans le rpertoire /usr/lib/nagios/plugins/eventhandlers/. Vous pouvez les modifier pour les adapter aux diffrences de syntaxe des commandes, de localisation des fichiers et rpertoires, etc. command.cgi : Permet denvoyer des commandes au process Nagios. Pr-requis :
25
26
/usr/share/nagios3/plugins/eventhandlers/ contient
On peut accder au serveur Nagios en se connectant sur lURL http://nomserveur/nagios3/. On constate quil y a dj un hte prsent : gw . Cet hte correspond la passerelle indique dans les paramtres rseau.
27
28
Configuration de Nagios
Exemples de CGI : -statusmap.cgi cre une carte partir des htes dclars. -notifications.cgi pour afficher un inventaire des notifications qui ont t envoyes aux diffrents contacts. -showlog.cgi pour afficher sur linterface Web le contenu du fichier de logs. -etc.
29
30
resource.cfg :
permet de dfinir des variables utilisateur globales rutilisables dans les autres fichiers. nest pas accessible via les CGI qui gnrent linterface graphique de Nagios. peut contenir des donnes sensibles telles que les informations de connexion la base de donnes.
Cette structure unique de configuration implique quaucun espace ne peut tre insr dans les valeurs des paramtres !!
Fichier nagios.cfg : dclaration des sous-fichiers de configuration, des fichiers de logs, emplacement des caches et des fichiers temporaires, fichier de statut, ordonnancement Fichier resource.cfg : Exemples de variables globales : $USER1$=/usr/lib/nagios/plugins/ $USER2$=/usr/lib/nagios/plugins/eventhandlers Etant inaccessible depuis les CGI qui gnrent lIHM, ce fichier peut tre utilis pour stocker des informations sensibles de configuration, comme par exemple des informations relatives un compte utilisateur.
31
32
Fichier nagios.cfg : dclaration des sous-fichiers de configuration, des fichiers de logs, emplacement des caches et des fichiers temporaires, fichier de statut, ordonnancement Fichier resource.cfg : Exemples de variables globales : $USER1$=/usr/lib/nagios/plugins/ $USER2$=/usr/lib/nagios/plugins/eventhandlers Etant inaccessible depuis les CGI qui gnrent lIHM, ce fichier peut tre utilis pour stocker des informations sensibles de configuration, comme par exemple des informations relatives un compte utilisateur.
Fichier commands.cfg : Les alias seront ensuite utiliss pour dfinir les commandes compltes dans les fichiers hosts.cfg et services.cfg. Lors de linstallation du paquet nagios-plugins, un fichier dexemple complet de commands.cfg est disponible : /usr/share/doc/nagios-plugins/examples/command.cfg.gz. Fichier hosts.cfg : On utilisera gnralement le ping pour caractriser ltat de lhte.
33
34
Fichier services.cfg : On dfinit lensemble des services qui devront tre tests en plus du service principal dfini dans hosts.cfg. Exemple : charge, nombre de processus dmarrs, tempratures de fonctionnements. Exemple de servicegroups : un groupe dbservices qui regroupe des services de vrification de la base SQL ou du dmon qui la gre. Fichier hostgroups.cfg : Le regroupement des hostgroups permet de simplifier, par exemple, la gestion des alertes. Si un hte appartient plusieurs groupes et quun problme intervient, Nagios avertit les contacts associs aux diffrents groupes de lquipement incrimin.
Fichier contacts.cfg : Exemple dvnement dclencheur : check_ping Fichier contactgroups.cfg : Il nest pas obligatoire quun contact appartienne un groupe.
35
36
il est possible dexclure des priodes de temps. les tranches horaires sont utilises deux niveaux :
pour les vrifications de services. pour lenvoi de notifications.
Fichier dependies.cfg : Exemple : on va crer une dpendance entre un quipement rseau et les serveurs qui sont placs derrire lui. Si lquipement est inaccessible, les serveurs ne le seront pas galement. Aussi, il est inutile de recevoir autant de notifications dalerte que dhtes prsents. La dpendance des services peut permettre damliorer les performances de Nagios. Ainsi, lorsque lon surveille plusieurs services, il nest pas toujours utile de les monitorer tous. Par exemple, si la vrification testant la connectivit naboutit pas (ping), alors il est inutile de vrifier les autres services, comme lespace disque ou la charge CPU, car la machine est injoignable. Fichier escalations.cfg : Nagios fait la distinction entre les alertes en tat soft et celles en tat hard . Ds quun service remonte une erreur, celle-ci est dabord dfinie dans un tat soft et Nagios met ses alertes sonores habituelles. Si aprs un certain nombre dessais infructueux, configurable, le service renvoie toujours le mme type derreur, lalerte passe alors en tat hard et Nagios envoie ses notifications. Ltat hard dfinit donc une alerte reconnue par Nagios comme posant rellement problme. define serviceescalation{ host_name service_description contact_groups first_notification last_notification notification_interval } define serviceescalation{ host_name service_description contact_groups first_notification last_notification notification_interval }
37
38
Un premier bilan
Si loutil savre sans aucun doute trs bien structur et trs puissant, il apparat clairement que sa configuration va savrer trs rapidement fastidieuse. En effet, malgr les divers mcanismes proposs (variables globales = macros, dfinition de groupes dhtes ou de personnes), pour toute configuration dun nouvel quipement ou dun nouveau service, il sera impratif dintervenir systmatiquement sur plusieurs fichiers.
39
40
Hritage des paramtres dun autre patron. Utilisation des paramtres dun service classique lexception du champ register :
Il est positionn 0 car ce nest pas un vrai service.
define someobjecttype{ object-specific variables ... name template_name use name_of_template_to_use register [0/1] }
Les patrons de configuration : Comme tous les services doivent tre explicitement dfinis, autant rduire leurs dfinitions leur plus simple expression. Il en est de mme pour tous les serveurs. Si lon a une vingtaine de serveurs Linux, une dizaine de serveurs Windows et une trentaine dquipements rseau des mmes constructeurs, avec des contraintes identiques, alors il est inutile de dupliquer manuellement les mmes paramtres pour tout le monde. Cela simplifie la lecture et facilite la maintenance ou les mises jour si lon doit modifier manuellement les plages horaires dune cinquantaine de services sur plusieurs serveurs diffrents. Grce aux patrons, il suffit de modifier le patron des services de chaque serveur.
normal_check_interval : intervalle de temps entre deux vrifications du service par Nagios. Notification_options : o = OK w = WARNING c = CRITICAL u = UNKNOWN r = RECOVERY max_check_attempts : si le module renvoie un tat diffrent de OK, une alerte en tat soft est leve. Nagios vrifiera autant de fois que la directive max_checks_attempts lui indique, et ce avec un intervalle de temps entre deux vrifications spcifi par retry_check_interval. Si aprs un intervalle de temps dont la dure est indique en minutes par notification_interval le problme nest toujours pas rgl, Nagios enverra une nouvelle notification et continuera ainsi jusqu ce que le problme soit rsolu ou acquitt. Cest dans de tels cas quil est intressant de mettre en place un systme descalade des notifications.
41
42
Si les mmes variables sont dfinies dans plusieurs sources, Nagios utilise le paramtre de la premire source appele.
define host{ use 1, 4, 8 host_name serveur_web_1 ... }
http://nagios.sourceforge.net/docs/3_0/objectinheritance.html
43
44
define serviceescalation{ host_name service_description first_notification last_notification notification_interval contact_groups } define serviceescalation{ host_name service_description first_notification last_notification notification_interval contact_groups }
Un exemple de configuration
Dans le patron associ au service Ping, nous avions dfini les paramtres suivants : -les notifications sont envoyes toutes les deux heures (120 minutes), -elles sont adresses au groupe de contacts sysadmin. Grce la premire escalade que lon vient de configurer, si le problme est toujours prsent la troisime notification, celles-ci seront dsormais envoyes aux groupes sysadmin et managers toutes les 90 minutes. Enfin, lorsquon atteint un total de 6 notifications depuis le dpart, la seconde escalade intervient. Nagios alertera dsormais les personnes du groupes everybody. Celles-ci recevront lalerte toutes les 60 minutes et de manire indfinie (valeur 0 dans le champ last_notification). NB : La premire escalade a pris fin avec la cinquime notification. Dans tous les cas, toutes les personnes qui ont reu la notification de lincident seront informes du retour la normale du service. NB : si le champ notification_interval vaut 0, cela signifie quune seule notification sera envoye en cas de problme.
45
46
Modification du fichier /etc/nagios/hosts.cfg. Test de la cohrence de la configuration : /usr/bin/nagios v /etc/nagios/nagios.cfg Erreur car ne trouve plus dhte appel gw depuis le fichier /etc/nagios/hostgroups.cfg. Modification de hostgroups.cfg en consquence puis nouvelle vrification : Nouvelle erreur dans /etc/nagios/services.cfg. On corrige nouveau ce fichier. On reteste. Encore un souci : cette fois dans le fichier escalation.cfg. Une dernire modification et on relance ENFIN le serveur.
Nous avons d modifier 4 fichiers pour renommer lquipement gw et lappeler dsormais summit_5i .
47
48
# dfinition dun hte en utilisant un modle define host{ use host_name alias address }
Une dfinition dhte sapplique un serveur physique , une station de travail, un priphrique (onduleurs, imprimantes) ou un quipement rseau. Dans le premier cas, on dclare un commutateur sans utiliser de patron/modle. host_name = nom identifiant lhte qui sera utilis dans les dfinitions de groupes dhtes et les dfinitions de services. Utilise dans le bon contexte, la macro $HOSTNAME$ contient ce nom court . alias = nom long permettant didentifier lhte plus facilement. Utilise dans le bon contexte, la macro $HOSTALIAS$ contient cette description. max_check_attempts = si le module renvoie un tat diffrent de OK, une alerte en tat soft est leve. Nagios vrifiera autant de fois que la directive max_checks_attempts lui indique, et ce avec un intervalle de temps entre deux vrifications spcifi par retry_check_interval (option absente dans cet exemple). Si aprs un intervalle de temps dont la dure est indique en minutes par notification_interval le problme nest toujours pas rgl, Nagios enverra une nouvelle notification et continuera ainsi jusqu ce que le problme soit rsolu ou acquitt. Notification_interval vaut 60 mn par dfaut. Si la valeur est positionne 0 alors il y aura UNE SEULE notification. notification_options : d= DOWN, u = UNKNOWN, r = RECOVERY Dans le second cas, nous utilisons un modle qui va dfinir des paramtres communs que lon appliquera tous nos commutateurs.
Tous les htes utilisant ce patron/modle auront, entre autres, la commande check_host_alive comme service de base. Elle permet de savoir si un hte est accessible.
49
50
On associe un hte un groupe afin davoir un comportement commun et des ractions similaires.
On vient de crer un hte. On lui associe maintenant des services. Chaque service servira surveiller un point particulier de lhte : service logiciel, capteur matriel. Dans le cas prsent, on dclare un service pour notre commutateur rseau. Ce service utilise lui-mme un modle/patron/template. Nous identifions la commande qui doit tre utilise pour assurer cette vrification. Bien entendu, elle doit tre dclare dans le fichier checkcommands.cfg. define command{ command_name command_line } Avec $USER1$ = /usr/lib/nagios/plugins (fichier resource.cfg). Dans ce patron, on constate quon a dfini un groupe de contacts intitul Admin_par_mail . Il faut donc diter le fichier contactgroups.cfg pour le dclarer. check_graph_ping $USER1$/check_graph_ping.pl $HOSTADDRESS$ -g -S $ARG1$
51
52
Statut OK WARNING
Signification Service disponible Avertissement sur le service Erreur critique sur le service Etat inconnu
Code retour 0 1 2 3
Code retour 0 1 ou 2
CRITICAL UNKNOWN
53
54
Nagios nenvoie pas de notifications car le problme nest pas encore avr et srieux. Il positionne SOFT la valeurs de la macro associe lobjet concern :
macro $HOSTSTATETYPE$ pour un hte. macro $SERVICESTATETYPE$ pour un service.
Nagios :
enregistre dans ses logs ltat HARD. positionne la valeur HARD dans la macro $SERVICESTATETYPE$. dclenche un appel au gestionnaire dvnements. informe les contacts de lindisponibilit du service ou de son retour.
Grce cette diffrenciation entre tat SOFT et tat HARD, on va pouvoir viter de gnrer de fausses alertes. En tat soft , la seule chose vraiment marquante est la possibilit dexcuter un gestionnaire dvnements pour rsoudre de manire proactive un problme avant quil ne passe en tat hard . Les tats SOFT sont loggs seulement si les options log_service_retries et log_host_retries sont activs dans le fichier de configuration principal (/etc/nagios3/nagios.cfg).
Le dernier point est trs logique : si lhte est down , quoi bon tester nouveau le service ?
55
56
Nagios :
enregistre dans ses logs ltat HARD. positionne la valeur HARD dans la macro $HOSTSTATETYPE$. dclenche un appel au gestionnaire dvnements. informe les contacts de lindisponibilit du service ou de son retour. si ltat HARD perdure, Nagios continue envoyer les notifications dalerte aux contacts identifis.
1 2 3 4 5 6 7 8 9 10
Pour le tableau ci-dessus, nous considrons que le service concern possde un max_check_attempts qui vaut 3 (nombre dessais conscutifs maximum avant de notifier le dysfonctionnement). 0. Initial state of the service 1. First detection of a non-OK state. Event handlers execute. 2. Service continues to be in a non-OK state. Event handlers execute. 3. Max check attempts has been reached, so service goes into a HARD state. Event handlers execute and a problem notification is sent out. Check # is reset to 1 immediately after this happens. 4. Service changes to a HARD WARNING state. Event handlers execute and a problem notification is sent out. 5. Service stabilizes in a HARD problem state. Depending on what the notification interval for the service is, another notification might be sent out. 6. Service experiences a HARD recovery. Event handlers execute and a recovery notification is sent out. 7. Service is still OK. 8. Service is detected as changing to a SOFT non-OK state. Event handlers execute. 9. Service experiences a SOFT recovery. Event handlers execute, but notification are not sent, as this wasn't a "real" problem. State type is set HARD and check # is reset to 1 immediately after this happens. 10. Service stabilizes in an OK state.
57
58
59
60
Excution optionnelle de commandes lorsque un hte ou un service changent dtat. Paramtrage de ractions automatises :
corriger un dysfonctionnement ds son apparition, avant toute notification. enregistrer les traces de fonctionnement dun service ou dun hte dans une base de donnes externe.
Les commandes sont excutes par le gestionnaire dvnements lorsquun hte ou un service :
est dans un tat derreur SOFT. entre dans ltat derreur HARD. revient dun tat SOFT ou HARD.
Elles sont dfinies par des scripts qui prennent en entre les macros suivantes :
pour les services :
$SERVICESTATE$, $SERVICESTATETYPE$, $SERVICEATTEMPT$
Lutilisation des gestionnaires dvnements est optionnelle. Ces gestionnaires dvnements peuvent tre considrs comme locaux lorsquils sont crs dans la dfinition mme des services et des htes. Si un gestionnaire dvnement est dfini pour un service ou pour un hte, il sera excut lorsque cet objet changera dtat. Les gestionnaires globaux, dfinis dans le fichier de configuration principal (/etc/nagios3/nagios.cfg), sont prioritaires par rapport aux gestionnaires dvnements locaux. Ils sont dfinis laide des primitives global_host_event_handler et global_service_event_handler. Les gestionnaires locaux, sils existent, sont excuts immdiatement aprs les gestionnaires dvnements globaux.
Dans la plupart des cas, nous utiliserons des scripts Perl ou bash pour implmenter ces commandes. Il est possible dappeler des excutables. tat soft : lhte ou le service sont dans un tat non-UP ou non-OK , mais Nagios est configur pour tester plusieurs reprises cet lment (max_check_attempt) avant de ragir cette anomalie et de passer en tat hard. $SERVICESTATE$ : une chane de caractres indiquant ltat du service. $SERVICESTATETYPE$ : une chane indiquant ltat du service (SOFT ou HARD). $SERVICEATTEMPT$ = nombre dessais effectus sur le service.
61
62
Les commandes sexcutent avec les mmes privilges que ceux du serveur Nagios. Si un script redmarre un service, il devra sexcuter avec les droits root. On utilise sudo pour attribuer lutilisateur nagios les droits ncessaires lexcution des commandes systme requises. Lors du tests de ces commandes, activez dans le fichier nagios.cfg les options de logs :
log_service_retries, log_host_retries, log_event_handler
# Dclaration du gestionnaire dvnement dans la dfinition # du service define service { host_name somehost service_description HTTP 4 max_check_attempts event_handler restart-httpd ...diffrentes variables ... } # Dfinition de la commande associe au gestionnaire define command{ command_name restart-httpd command_line /usr/share/nagios/plugins/eventhandlers/ restart-httpd $SERVICESTATE$ $STATETYPE$ $SERVICEATTEMPT$ }
()
log_service_retries : Cette variable dtermine si un nouvel essai pour tester la disponibilit dun service doit tre logg. Typiquement, cela se produit quand une premire vrification a abouti un tat diffrent de OK et que nous avons configur Nagios pour quil essaye nouveau avant daffirmer quil sagit dune erreur. Les services dans cette situation sont considr comme tat dans ltat SOFT.
0 = ne pas logger l = logger
Dans cet exemple, nous souhaitons superviser un serveur HTTP et nous avons ajouter un gestionnaire dvnements que lon nomme restart-httpd. Nous avons fix le nombre de vrifications sur le service 4 en cas de retour dune valeur diffrente dOK. Ceci vite de dclencher une fausse alerte. Ainsi, le service sera test 4 fois avant de considrer quil y a rellement un problme et de passer en tat HARD . Lors du passage ltat HARD, le gestionnaire dvnement sera appel. Nous avons dclar la commande qui sera appele par le gestionnaire. Il nous reste crire le script associ.
log_host_retries : Cette variable dtermine si un nouvel essai pour tester la disponibilit dun hte doit tre logg.
0 = ne pas logger 1 = logger
log_event_handler : Cette variable dtermine si lintervention des gestionnaires dvnements sur un service ou sur un hte doit tre enregistre.
0 = ne pas logger. 1 = logger
63
64
#!/bin/sh # usage : restart-httpd $SERVICESTATE$ $STATETYPE$ $SERVICEATTEMPT$ # Note: This script will only restart the web server if the service is # retried 3 times (in a "soft" state) or if the web service somehow # manages to fall into a "hard" error state. # What state is the HTTP service in? case "$1" in OK) # The service just came back up, so don't do anything... ;; WARNING) # We don't really care about warning states, since the service is probably still running... ;; UNKNOWN) # We don't know what might be causing an unknown error, so don't do anything... ;; CRITICAL) # The HTTP service appears to have a problem - perhaps we should restart the server... # Is this a "soft" or a "hard" state? case "$2" in # We're in a "soft" state, meaning that Nagios is in the middle of retrying the # check before it turns into a "hard" state and contacts get notified... SOFT)
()
Ce script va essayer de relancer le serveur Apache dans deux cas : -lorsquon ressaye de contacter le service pour la troisime fois alors quon na pas pu le joindre une premire fois (tat SOFT), -lorsque le service passe en tat HARD pour la premire fois. Dans les faits, ltat HARD ne devrait pas se produire car le script a t crit pour relancer le service au bout de la troisime tentative, alors quil est encore en tat SOFT. Nanmoins, on gre ltat HARD au cas o. Une prcision importante : le gestionnaire dvnements sera excut seulement lorsque le service passe dans ltat HARD . Cela vite dexcuter en permanence le script lorsque le serveur Apache est en tat HARD .
65
66
Les dpendances entre services sont contrles avant de lancer une vrification ou une notification.
Voyons maintenant une autre fonction avance de Nagios : la gestion des dpendances, soit pour les services, soit pour les htes. Cette fonctionnalit permet de supprimer des notifications et des contrles actifs en fonction de ltat dun ou plusieurs services.
67
68
Exemples :
la dpendance entre les services E et B :
Si B est en tat WARNING ou UNKNOWN, la vrification du service E nest pas applique. Si B est en tat CRITICAL, la dpendance est en erreur et les notifications pour le service E ne seront pas envoyes.
Hritage des dpendances : Comme je lai dit prcdemment, les dpendances entre les services ne sont pas hrites par dfaut. Ainsi, dans cet exemple, on constate que le service F dpend du service E. Cependant, il nhrite pas automatiquement de la dpendance du service E vis--vis des services B et C. Si lon veut que F dpende de C, alors il nous faudra dclarer explicitement une dpendance laide de la directive inherits_parent. De mme, le service F na aucune dpendance vis--vis du service B, et nous avons certainement de bonnes raisons pour quil en soit ainsi.
69
70
Les caractristiques :
host B Service D Host C Service F o n
Les dpendances entre htes ne doivent pas tre confondues avec les relations parent/enfant.
(directive parents dans la dclaration dun hte)
dependent_host_name : nom de lhte sur lequel tourne le service dpendant dun autre. dependent_service_description : description du service dpendant execution_failure_criteria : situation(s) pour lesquelles le service dpendant ne doit pas tre excut. Les valeurs valides sont les combinaisons de un ou plusieurs des tats suivants : o (OK), w (WARNING), u (UNKNOWN), c (CRITICAL) (les options multiples sont spares par des virgules). Si on spcifie n (NONE) comme option, la dpendance dexcution nchouera jamais et le contrle du service dpendant aura toujours lieu. notification_failure_criteria : situations pour lesquelles les notifications du service dpendant ne sont pas envoyes. Si on spcifie n (NONE) comme option, alors les notifications pour le service indpendant sont toujours envoyes. Si on spcifie w (WARNING), alors les notifications ne sont pas envoyes si le service dont nous dpendons est dans ltat WARNING. BIEN ENTENDU, NAGIOS CONTINUERA A TESTER REGULIEREMENT LES CONDITIONS DE DEPENDANCES DEFINIES SELON LES ORDRES DE LORDONNANCEUR. QD LES CONDITIONS SERONT A NOUVEAU RESPECTEES, LES SERVICES SERONT EXECUTES OU LES NOTIFICATIONS ENVOYEES.
71
72
Attention : il sagit dun diagramme de dpendances, et non pas dun schma illustrant lorganisation hirarchique dun rseau. Lhte A est dpendant de lhte C et de lhte B, pour autant il na pas hrit des dpendances entre lhte B et lhte C. Cest pour cette raison que nous avons d crer une dpendance directe entre lhte C et lhte A. Hritage des dpendances : De mme que pour les services, les dpendances entre les htes ne sont pas hrites par dfaut. Dans cet exemple, vous constatez que lhte C nhrite pas de lhte B. Pour que C soit dpendant de A, nous avons d crer une dpendance explicite entre eux.
dependent_host_name : nom de lhte dpendant de lun de ses pairs. notification_failure_criteria : situations pour lesquelles les notifications concernant lhte dpendant ne sont pas envoyes. BIEN ENTENDU, NAGIOS CONTINUERA A TESTER REGULIEREMENT LES CONDITIONS DE DEPENDANCES DEFINIES. QD LES CONDITIONS SERONT A NOUVEAU RESPECTEES, LES NOTIFICATIONS SERONT ENVOYEES.
73
74
Prsentation de NRPE
NRPE : Nagios Remote Plugin Executor. NRPE est un module Nagios qui permet dexcuter des sondes/plugins sur des serveurs distants. Il sinstalle sur les serveurs dont lon souhaite surveiller les ressources locales. Il est appel depuis le serveur Nagios via la commande check_nrpe.
Il serait possible dinvoquer la commande check_by_ssh pour excuter des commandes sur le serveur distant. Cependant, elle consomme plus de puissance de traitement au niveau de la machine hbergeant le serveur Nagios (cls partages entre le client et le serveur distant).
75
76
tornado:~# apt-get install nagios-nrpe-server => Installation de 19 paquets complmentaires dont nagios-plugins.
ajoute le module check_nrpe dans le rpertoire des plugins Nagios. dclare la commande dans le fichier /etc/nagios/checkcommands.cfg.
Redmarrer le serveur Nagios. Configurer les vrifications sur les postes distants dans le fichier de configuration des services. Redmarrage du dmon NRPE :
tornado:~# /etc/init.d/nagios-nrpe-server restart Stopping nagios-nrpe: nagios-nrpe. Starting nagios-nrpe: nagios-nrpe.
Nous avons vu prcdemment que NRPE est utilis pour permettre au serveur Nagios lexcution, sur une machine distante, dun module install sur cette dernire pour connatre, par exemple, le taux doccupation des disques durs, sa charge CPU ou encore la temprature du systme. On utilise le module NRPE qui doit tre install sur le serveur. Il envoie les requtes lagent NRPE install sur la machine distante, lequel se base sur le fichier nrpe.cfg pour savoir ce quil est habilit faire. Lagent NRPE : -reoit la demande de vrification du serveur. -excute cette vrification. -retourne le rsultat. define service { () check_command check_nrpe -c nt_antivirus }
Nous avons vu que pour effectuer des tests simples comme le ping, il nest pas ncessaire de dployer quoi que ce soit sur les htes distants (hormis bien entendu les fonctionnalits rseau). En revanche, pour conduire des tests plus complexes, il est ncessaire dinstaller un agent sur les htes distants. Nous avons vu que nous avons le choix NRPE et NSCA. Personnellement, en considrant mes besoins, jai fait le choix dutiliser NRPE. Comme je vous lai expliqu, le dmon NRPE va servir de relais au serveur Nagios pour excuter une vrification locale sur la machine distante. En fait, le serveur Nagios envoie des requtes au dmon NRPE qui effectue alors localement les requtes et renvoie leur rsultat au serveur Nagios.
77
78
Appel de la commande.
laika:~# /usr/lib/nagios/plugins/check_nrpe -H 10.234.244.201 -c check_fan -a 500:1000 0:500 fan1 Ventilateur CPU OK - fan1: 2518 RPM
Redmarrage du service.
server_port : port sur lequel le serveur NRPE est en coute. allowed_hosts : Liste des serveurs Nagios autoriss interroger le dmon NRPE. dont_blame_nrpe : gestion des arguments des commandes 0 = naccepte pas les arguments. 1 = accepte les arguments spcifis par les clients. Cette option indique si le service NRPE doit accepter les arguments spcifis par les clients pour les commandes qui lui sont transmises. Cela nest pas sans implication au niveau de la scurit. Par consquent, il est conseill de fixer la valeur de cette option 0. Ainsi, NRPE utilisera seulement les paramtres des commandes dfinis dans son fichier de configuration. Cependant, si lon souhaite pouvoir utiliser les commandes dfinies cidessus avec des arguments, il faut absolument fixer la valeur 1. command_timeout : indique le nombre de secondes donnes une commande par le service NRPE pour que celle-ci sexcute. Au-del, le processus est tu. Dans ce fichier de configuration, nous avons non seulement la liste des modules/plugins fournis de base lors de linstallation du client NRPE mais aussi les scripts que nous avons-nous-mme ajouts. Par exemple, nous avons cr des scripts pour superviser le processeur de nos serveurs, pour relancer la machine ou larrter. Nous avons galement ajout un module pour effectuer une dtection de rootkit. Enfin, pour simplifier ladministration et le dploiement de nouveaux modules sur nos
Nous avons vu que pour effectuer des tests simples comme le ping, il nest pas ncessaire de dployer quoi que ce soit sur les htes distants (hormis bien entendu les fonctionnalits rseau). En revanche, pour conduire des tests plus complexes, il est ncessaire dinstaller un agent sur les htes distants. Nous avons vu que nous avons le choix NRPE et NSCA. Personnellement, en considrant mes besoins, jai fait le choix dutiliser NRPE. Comme je vous lai expliqu, le dmon NRPE va servir de relais au serveur Nagios pour excuter une vrification locale sur la machine distante. En fait, le serveur Nagios envoie des requtes au dmon NRPE qui effectue alors localement les requtes et renvoie leur rsultat au serveur Nagios. La politique de supervision du ventilateur est la suivante : -si le ventilateur tourne moins de 1000 tours par minute, le service passe en tat WARNING : nous supposons que laxe de rotation du ventilateur donne des signes de faiblesse. -si la vitesse du ventilateur est infrieure 500 tours par minute, le service sera dans un tat critique .
79
80
Lagent agit tel un relais entre le serveur Nagios et lhte distant. Exemple : NSClient ++ Le serveur utilise la commande check_nt pour dialoguer avec le serveur.
Attention : NRPE-NT ne semble plus maintenu et il apparat que NSClient++ la supplant, dautant plus quil est capable de grer galement NSCA.
Aprs excution de la commande NRPE_NT.exe i, si vous consultez la liste des services de la machine, vous constaterez que le service Nagios Remote Plugin Executor for NT/W2K a t ajout. Pour consulter la liste des services depuis linvite de commandes : services.msc.
81
82
command[nt_antivirus]=C:\NRPE\Plugins\service_nrpe_nt.exe "Symantec AntiVirus" command[check_MSSQLServer]=C:\NRPE\Plugins\service_nrpe_nt.exe " MSSQLServer" command[nt_service]=C:\NRPE\Plugins\service_nrpe_nt.exe $ARG1$ command[nt_loadcpu]=C:\NRPE\Plugins\cpuload_nrpe_nt.exe $ARG1$ $ARG2$ command[nt_loadmem]=C:\NRPE\Plugins\memload_nrpe_nt.exe $ARG1$ $ARG2$ command[nt_diskspace]=C:\NRPE\Plugins\diskspace_nrpe_nt.exe $ARG1$ $ARG2$ $ARG3$ command[nt_eventlog]=C:\NRPE\Plugins\eventlog_nrpe_nt.exe -m 7200 -s "Service Control Manager"
Redmarrage du service. Depuis le serveur Nagios, lagent sera interrog via la commande check_nrpe :
laika:~# /usr/lib/nagios/plugins/check_nrpe -H 10.234.64.50 -c nt_diskspace -a C: 90 95 Used: 16107 MB (84%) Free: 2970 MB (15%)
dont_blame_nrpe : gestion des arguments des commandes 0 = naccepte pas les arguments. 1 = accepte les arguments spcifis par les clients. Cette option indique si le service NRPE doit accepter les arguments spcifis par les clients pour les commandes qui lui sont transmises. Cela nest pas sans implication au niveau de la scurit. Par consquent, il est conseill de fixer la valeur de cette option 0. Ainsi, NRPE utilisera seulement les paramtres des commandes dfinis dans son fichier de configuration. Cependant, si lon souhaite pouvoir utiliser les commandes dfinies ci-dessus avec des arguments, il faut absolument fixer la valeur 1. Attention, si vous activez la fonction de dbogage (valeur 1), pensez contrler rgulirement la taille du fichier de logs gnr. command_timeout : indique le nombre de secondes donnes une commande par le service NRPE pour que celle-ci sexcute. Au-del, le processus est tu. Dfinition des commandes : On dfinit par exemple la commande nt_antivirus qui va tester sur le service du serveur antivirus est actif. Le module utilis teste ltat du service en se basant sur son nom. Il est donc essentiel de bien respecter lintitul du service et de mettre son nom entre guillemets dans lappel au module. La liste des services peut tre obtenue en tapant la commande services.msc depuis linvite de commandes. Pour redmarrer le service en ligne de commande : net start nrpe_nt
83
84
Les modules officiels Nagios sont disponibles sur SourceForge, projet nagios-plug.
http://sourceforge.net/projects/nagiosplug/
check_dig = permet le test dun serveur DNS en utilisant Dig. check_dns = utilise nslookup pour le test dun serveur DNS. check_http = teste le service HTTP de lhte spcifi, mais aussi HTTPS. Peut galement suivre les redirections, rechercher des chanes de caractres et des expressions rgulires, vrifier le temps de connexion et renvoyer la dure dexpiration dun certificat. check_imap = teste les connexions IMAP avec lhte spcifi. check_disk = retourne le pourcentage dutilisation de lespace disque sur un systme de fichiers et met des alertes en fonction des valeurs retournes. check_swap = contrle le taux dutilisation de la mmoire swap. check_load = teste la charge moyenne du systme. check_procs = renvoie le nombre de processus lancs en local et le statut associ. check_sensors = vrifie le statut du matriel en utilisant le paquet lm_sensors. check_ifstatus = vrifie le statut de toutes les interfaces ( lexception de PPP) sur la machine cible. check_log = vrifie la prsence dune chane dans un fichier de logs. check_ping = utilise la commande ping pour vrifier la prsence sur le rseau dun hte distant. check_tcp = vrifie la connectivit sur un port donn pour un hte distant. check_udp = teste la disponibilit dun port UDP donn pour un hte distant. check_nrpe = permet lexcution dun autre module sur une machine distante. check_snmp = ce module rcupre des informations sur un systme distant par lintermdiaire de SNMP. check_by_ssh = permet lexcution dune commande sur un hte distant en utilisant ssh.
85
86
Le choix du langage est libre : Perl, C, bash, etc. Exemple : dtecter le systme dexploitation de la machine teste avec Nmap ou SNMP.
Ce script est inspir du module officiel check_sensors. nmap O IPaddress donne un certain nombre dinformations concernant la machine dont le type de systme dexploitation (0S). On fait un grep pour rechercher sil sagit dun Linux ou dun Windows. Si on le souhaitait, on pourrait essayer de dfinir la version de lOS ou de dtecter dautres OS. Pour lutiliser : > check_OS <adresse_IP> Cette mthode nest pas idale, car cette vrification va durer plusieurs secondes sur un Linux. Voyons maintenant ce quil en est avec SNMP (diapo suivante).
87
88
On cre cette commande dans le fichier checkcommands.cfg. La variable system.sysDescr.0 permet dobtenir le nom de lOS depuis la MIB. On peut imaginer de nombreux autres tests partir du mme modle. Ex : sysUpTime. La MIB tant tenue jour par lagent SNMP, lorsquon linterroge un moment donn, il y a forcment une valeur que lon peut rcuprer instantanment, contrairement la solution base sur Nmap.
89
90
CENTREON
91
92
Prsentation de Centreon
Architecture de Centreon
Centreon a vu le jour en 2003 sous le nom dOreon. Il sagit dune couche applicative qui se positionne audessus de Nagios. Elle intgre une interface multi-utilisateurs complte et intuitive :
gestion de la configuration Nagios. console de supervision avec ajout de fonctionnalits avances.
Lapplication Web est code en langage PHP. Centreon est un projet franais bas sur la licence GPL v2 :
large communaut dutilisateurs. cration dune activit de services par les fondateurs du projet.
Pourquoi avoir choisi Centreon ? Centreon simplifie ladministration de Nagios grce la surcouche applicative quil apporte. Nous avons vu que la configuration de Nagios est clate sur une dizaine de fichiers de paramtrage diffrents. Centreon va nous apporter une interface multi-utilisateurs complte, intuitive et facilement volutive grce ladoption du langage PHP pour dvelopper lIHM. De plus, ce projet a beaucoup mri au fil des ans. Lquipe est plus structure et la socit sest dveloppe, offrant de nombreux services autour de ce produit. Une large communaut a adhr ce projet, ce qui permet de disposer de modules toujours plus nombreux et damliorer constamment le produit grce la dcouverte et la correction de bugs.
93
94
Lensemble des fichiers de configuration de Nagios est accessible via linterface graphique. Les lments sont lis entre eux via des formulaires complets et intuitifs. Centreon gnre les fichiers de configuration de Nagios (/etc/nagios) partir des informations saisies dans linterface Web. Le stockage des informations de configuration se fait donc dans des fichiers textes. On rejoint ainsi la tendance initie par le projet Nagios lui-mme : abandonner les SGBD pour se limiter aux fichiers plats. Lapplication Centreon utilise, quant elle, un stockage dans des bases de donnes pour son fonctionnement interne (interface). Il est possible de faire interagir lensemble des donnes.
Gnration des graphes partir de RRD. => Supervision graphique des donnes, ce qui permet davoir un historique. Possibilit de comparer des graphes.
95
96
La dernire version stable est la 2.1.8. Larchive est disponible au format tar.gz :
http://www.centreon.com/Centreon/download.html
Installation de Centreon
97
98
On peut en profiter pour installer phpmyadmin pour simplifier de futures oprations dadministration. Par exemple, configurer le mot de passe administrateur. http://en.doc.centreon.com/Setup:Prerequisite/Debian/Ubuntu
libio-socket-inet6-perl - Object interface for AF_INET6 domain sockets libsocket6-perl - Perl extensions for IPv6
99
100
libio-socket-inet6-perl - Object interface for AF_INET6 domain sockets libsocket6-perl - Perl extensions for IPv6
Il faut sassurer que le serveur Apache est configur pour grer la sous-branche du site ddie Centreon : Alias /centreon /usr/local/centreon/www/ <Directory "/usr/local/centreon/www"> Options Indexes AllowOverride AuthConfig Options Order allow,deny Allow from all </Directory>
http://en.doc.centreon.com/Setup:Debian/Ubuntu
101
102
Il faut sassurer que le serveur Apache est configur pour grer la sous-branche du site ddie Centreon : Alias /centreon /usr/local/centreon/www/ <Directory "/usr/local/centreon/www"> Options Indexes AllowOverride AuthConfig Options Order allow,deny Allow from all </Directory>
103
104
DEMO CENTREON
105
106
Prsentation de FAN
FAN est une image ISO base sur CentOS fournissant une installation complte de Nagios. Elle regroupe galement la plupart des outils recommands par la communaut des utilisateurs Nagios.
NagVis : module de reprsentation visuelle des informations retournes par Nagios. NaReTo : outil de reporting, organisation sous forme arborescente. NDOUtils : collecte des donnes Nagios pour les stocker dans une base de donnes. Centreon : surcouche applicative simplifiant ladministration et la consultation de Nagios.
Aprs linstallation de limage ISO sur une machine, les diffrents outils sont directement accessibles :
Nagios : Centreon : Nareto : Nagvis : http://serveur/nagios/ http://serveur/centreon/ http://serveur/nareto/ http://serveur/nagios/nagvis/
107
108
Pour :
Les outils sont correctement intgrs et oprationnels aprs linstallation. Le gain de temps est loin dtre ngligeable. Il est possible de disposer rapidement dune solution de supervision oprationnelle.
Contre :
Les versions proposes ne sont pas les plus rcentes. Les dlais entre la sortie de deux versions peuvent sembler important.
109
110
SNMP signifie Simple Network Management Protocol. Il permet daccder, distance, en lecture et en criture la configuration dun matriel. Il transporte les informations entre un manager et lagent de lquipement. Lagent stocke ses donnes dans la MIB. La scurit dpend de la version de SNMP :
v1 & v2 : une requte contient un nom appel communaut utilis comme mot de passe. v3 : la scurit est fonde sur la notion dutilisateur (authentification + chiffrement).
Thierry DOSTES Journes Thmatiques SIARS 3 & 4 Juin 2010
Le protocole SNMP
SNMP (RFC 1157) : UDP port 161 Une requte SNMP contient un nom appel communaut, utilis comme un mot de passe. Il y a un nom de communaut diffrent pour obtenir les droits en lecture et pour obtenir les droits en criture. Dans bien des cas, les grosses lacunes de scurit que comportent les versions 1 et 2 de SNMP limitent l'utilisation de SNMP la lecture des informations. Le modle de scurit dcrit dans les v1 et v2 de SNMP apparat plus comme un modle de relations administratives entre managers et agents quun vritable schma de scurit. Les MIB sont dcrites en utilisant ASN.1. Par exemple, ifDescr est dcrite par : ifDescr OBJECT-TYPE SYNTAX DisplayString (SIZE (0..255)) ACCESS read-only STATUS mandatory DESCRIPTION "A textual string containing information about the interface. This string should include the name of the manufacturer, the product name and the version of the hardware interface. " ::= { ifEntry 2 } ASN.1 (Abstract Syntax Notation One) est un standard international destin l'origine dcrire les donnes changes dans les protocoles de tlcommunication (modle OSI).
111
112
113
114
at {mib2- 3} : dfinit lensemble des informations permettant dtablir une correspondance entre une adresse physique et une adresse rseau, soit le cache ARP le plus souvent.
tcp et udp {mib2- 6}/{mib2-7} fournissent : la liste des connexions tablies. les adresses et ports en coute pour les deux protocoles de transport (quivaut la commande netstat an).
ip {mib-2 4} : contient la totalit des paramtres IP de chaque interface. dfinit une valeur permettant didentifier si le systme fait du routage. comporte des statistiques lies au volume de trafic et au nombre derreurs.
115
116
La branche propritaire :
Chaque diteur/constructeur dfinit sa MIB. La MIB est librement accessible donc on peut ltudier en dtails. Nous disposons doutils pour simplifier lexploration et la lecture des fichiers de MIB. Exemples :
pour Linux, la bibliothque libmsi et les programmes du projet Net-SNMP (snmpwalk, snmpget, etc.). pour Windows : Getif (Gratuit), OidView (Payant), SNScan (dcouverte des priphriques SNMP sur le rseau).
Pour tlcharger Getif : http://www.wtcs.org/snmp4tpc/getif.htm Exemples : snmpwalk v 1 c public 10.234.160.9 snmpget v 1 -c public 10.234.160.9 mib-2.43.8.2.1.13.1.2 SNMPv2-SMI::mib-2.43.8.2.1.13.1.2 = STRING: "TRAY1" snmpwalk -v 1 -c public 10.234.128.4 1.3.6.1.4.1.11.2.14.11.1.2.6.1 SNMPv2-SMI::enterprises.11.2.14.11.1.2.6.1.1.1 = INTEGER: 1 SNMPv2-SMI::enterprises.11.2.14.11.1.2.6.1.2.1 = OID: SNMPv2SMI::enterprises.11.2.3.7.8.3.2 SNMPv2-SMI::enterprises.11.2.14.11.1.2.6.1.3.1 = INTEGER: 1 SNMPv2-SMI::enterprises.11.2.14.11.1.2.6.1.4.1 = INTEGER: 4 SNMPv2-SMI::enterprises.11.2.14.11.1.2.6.1.5.1 = Counter32: 0 SNMPv2-SMI::enterprises.11.2.14.11.1.2.6.1.6.1 = Counter32: 0 SNMPv2-SMI::enterprises.11.2.14.11.1.2.6.1.7.1 = STRING: "Fan Sensor"
117
118
On veut superviser les ventilateurs dun commutateur HP 4000. Il nous faut parcourir la MIB de lquipement la recherche des informations pertinentes. Nous avons besoin :
dun outil SNMP (ex : Getif pour Windows). de la description de la MIB prive de lquipement.
http://www.oidview.com/mibs/11/HP-ICF-CHASSIS.html
Un OID dcrit des dfaillances sur les capteurs : hpicfSensorFailures. On explore cette sous-branche.
Getif est tlchargeable ladresse suivante : http://www.wtcs.org/snmp4tpc/getif.htm La MIB prive des commutateurs HP peut tre tlcharge ladresse suivante : http://www.hp.com/rnd/software/MIBs.htm?jumpid=reg_R1002_USEN
On peut explorer cette sous-branche, soit en utilisant Getif, soit en utilisant la commande snmpwalk sous Linux. La description de la MIB prive indique ci-dessus correspond au chssis des commutateurs HP. snmpwalk -v 1 -c public 10.xxx.xxx.xxx 1.3.6.1.4.1.11.2.14.11.1.2.6.1
119
120
Ecriture dun module SNMP (3) On constate quun ventilateur est dfectueux sur cet quipement.
Nous savons dsormais quelle valeur de la MIB prive interroger pour connatre ltat des ventilateurs. Nous crons une commande qui va utiliser le module de base check_snmp.
()
Le premier ventilateur est dfectueux. Comme nous avons intgr les MIBs prives HP dans Getif, celui-ci est capable dindiquer directement ltat correspondant la valeur numrique qui a t obtenue lors de linterrogation de lOID. snmpget -v 1 -c public 10.xxx.xxx.xxx 1.3.6.1.4.1.11.2.14.11.1.2.6.1.4.1 SNMPv2-SMI::enterprises.11.2.14.11.1.2.6.1.4.1 = INTEGER: 2 La valeur numrique 2 correspond un tat BAD daprs la description de la MIB HP. Toutes les valeurs peuvent tre visualises depuis Getif via le champ Enums (en haut droite de la fentre). Pour connatre le statut du second ventilateur, on interrogera lOID
.1.3.6.1.4.1.11.2.14.11.1.2.6.1.4.2.
Maintenant que nous sommes capables de savoir o se trouve dans la MIP prive de HP linformation pertinente pour connatre ltat dun ventilateur, intgrons la supervision de ces lments Centreon/Nagios. Pour ce faire, nous allons utiliser le module de base de Nagios check_snmp.
121
122
()
Daprs la description de la MIB prive HP, les valeurs possibles pour le capteur associ un ventilateur sont les suivantes : -1 = tat unknown , -2 = tat bad , -3 = tat warning , -4 = tat good , -5 = aucun ventilateur prsent. NB : Le sparateur utilis pour identifier les paramtres des commandes Nagios est le point dexclamation ( ! ). Les : sparent plusieurs valeurs possibles pour un argument. Ex : Dans notre exemple, le ventilateur sera considr dfectueux sil prend les valeurs numriques 3 ou 5.
123
124
WOL = Wake on Lan. Technologie permettant de rveiller distance une machine via le rseau. La machine doit tre compatible ACPI. Linterface rseau doit grer le WOL. Le WOL agit au niveau 2 du modle OSI (couche liaison de donnes).
Le WOL
125
126
Le principe : envoi dun paquet magique en direction de la machine cible, repre par son adresse Ethernet. Le paquet contient :
une squence fixe qui sera reconnue par la machine. 16 fois ladresse Ethernet de linterface rseau cible.
Ecoute du WOL : tcpdump udp port 9 and dst 193.50.234.128 Nomenclature du "Paquet Magique" C'est une squence de 6 octets FF:FF:FF:FF:FF:FF suivie de 16 fois l'adresse MAC de la carte rveiller. Pour une adresse MAC 00:50:8D:B4:BC:4B, la squence a la forme suivante : FFFFFFFFFFFF00508DB4BC4B00508DB4BC4B00508DB4BC4B00508DB4B C4B00508DB4BC4B00508DB4BC4B00508DB4BC4B00508DB4BC4B 00508DB4BC4B00508DB4BC4B00508DB4BC4B00508DB4BC4B00508DB4B C4B00508DB4BC4B00508DB4BC4B00508DB4BC4B
ethtool eth0 Settings for eth0: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supports auto-negotiation: Yes Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised auto-negotiation: Yes Speed: 100Mb/s Duplex: Full Port: Twisted Pair PHYAD: 0 Transceiver: internal Auto-negotiation: on Supports Wake-on: umbg Wake-on: g Current message level: 0x00000007 (7) Link detected: yes
127
128
wolcmd [mac address] [ip address] [subnet mask] [port number] > wolcmd 000C76518CE7 255.255.255.255 255.255.255.255
Il existe galement etherwake sous Linux. Celui-ci prsente, lavantage ou linconvnient, selon son point de vue, de requrir les droits root pour pouvoir sexcuter. Pour connatre ladresse Ethernet dune machine, on peut : 1) Lancer tout dabord un ping sur cette machine 2) Excuter ensuite la commande arp a pour connatre la table de correspondance entre les adresses IP et les adresses Ethernet.
129
130
Il est ncessaire de configurer le routeur pour quil autorise le trafic sur un port dfini au choix.
ex : dfinir une redirection de port.
Ces diapositives relatives NUT datent de Mars 2006. Elles nont pas t mis jour pour intgrer les nouveaux pilotes NUT pour les onduleurs.
Une astuce : envoyer le paquet magique une machine dj active sur le mme sous-rseau.
En effet, il est trs rare que les routeurs soient configurs pour diffuser les broadcasts adresss leurs diffrents sous-rseaux. Pour passer le routeur, une astuce consiste envoyer le paquet magique ladresse IP dune machine qui est dj active sur le mme sous-rseau. Cette machine ignorera le paquet. Mais, ce dernier sera galement reu par le poste en sommeil que nous souhaitons rveiller et qui reconnatra son adresse ethernet. wakeonlan i 193.50.234.128 00:0C:76:51:8C:E7 Extrait dun texte Cisco : "IP directed broadcasts are used in the extremely common and popular "smurf" denial of service attack, and can also be used in related attacks. An IP directed broadcast is a datagram which is sent to the broadcast address of a subnet to which the sending machine is not directly attached. The directed broadcast is routed through the network as a unicast packet until it arrives at the target subnet, where it is converted into a link-layer broadcast. Because of the nature of the IP addressing architecture, only the last router in the chain, the one that is connected directly to the target subnet, can conclusively identify a directed broadcast. Directed broadcasts are occasionally used for legitimate purposes, but such use is not common outside the financial services industry. In a "smurf" attack, the attacker sends ICMP echo requests from a falsified source address to a directed broadcast address, causing all the hosts on the target subnet to send replies to the falsified source. By sending a continuous stream of such requests, the attacker can create a much larger stream of replies, which can completely inundate the host whose address is being falsified. If a Cisco interface is configured with the no ip directed-broadcast command, directed broadcasts that would otherwise be "exploded" into link-layer broadcasts at that interface are dropped instead. Note that this means that no ip directed-broadcast must be configured on every interface of every router that might be connected to a target subnet; it is not sufficient to configure only firewall routers. The no ip directed-broadcast command is the default in Cisco IOS software version 12.0 and later. In earlier versions, the command should be applied to every LAN interface that isn't known to forward legitimate directed broadcasts."
131
132
NUT = Network UPS Tools. Cest une collection de programmes distribus sur un rseau TCP/IP. NUT offre une vue unifie et homogne dun ensemble donduleurs htrognes. Il permet de grer larrt des ordinateurs quil protge en cas de coupure prolonge dlectricit.
Principe de fonctionnement :
Un ordinateur dit matre communique avec un ou plusieurs onduleurs. Il surveille ltat des onduleurs et le communique aux autres ordinateurs dits esclaves .
Les perturbations du rseau lectrique sont de plusieurs ordres : coupures de secteur, variations de tension, surtensions ou baisses de tensions, parasites et variations de frquence. On distingue 3 technologies donduleurs. Technologie PASSIVE STAND-BY : Utilise par des onduleurs de faible puissance (250VA 1400VA) pour des quipements non stratgiques. Lors dune coupure de courant, londuleur bascule sur la batterie. Cest la seule perturbation quil puisse traiter. Technologie LINE INTERACTIVE : Utilise pour des onduleurs de moyenne puissance (420VA 5000VA). Londuleur ne se contente pas dassurer lalimentation permanente des quipements qui sont connects. Il est galement capable de rguler les variations de tension. Un filtre limine les parasites. Technologie DOUBLE CONVERSION : Utilise par des onduleurs de moyenne et forte puissance (1000VA 1000kVA) pour des quipements et applications critiques. Ces onduleurs sont gnralement associs des groupes lectrognes. Cette technologie traite toutes les perturbations lectriques.
Cette flexibilit dutilisation sexplique par une architecture modulaire. Un serveur protg par plusieurs onduleurs, signifie que cet quipement possde plusieurs alimentations, chacune tant branche sur un onduleur diffrent.
133
134
Architecture de NUT
Concernant la scurit des changes entre les clients et le serveur, une version de NUT supportant le protocole SSL est ltude.
Le serveur UPSD communique aux clients et scripts CGI les donnes collectes par les pilotes. On linstalle donc sur lordinateur connect londuleur, que lon appellera dsormais le matre . Les clients et les CGI interrogent le serveur sur le port TCP 3493.
135
136
On dfinit les paramtres des onduleurs qui seront surveills dans le fichier /etc/nut/ups.conf.
[onduleur1] driver = mge-utalk port = /dev/ttyS0 desc = "Onduleur des serveurs critiques"
On cre les profils des utilisateurs autoriss se connecter au serveur : fichier /etc/nut/upsd.users.
Ce fichier contient des mots de passe en clair, il faut donc sassurer que les droits sont bien positionns :
Le fichier appartient lutilisateur root. Il est accessible par lui seul.
()
Configuration du fichier /etc/default/nut : Le dmon upsd correspond au serveur NUT proprement dit. Upsmon nest autre que le client qui a pour principal rle de surveiller ltat de londuleur et darrter proprement lordinateur avant lpuisement des batteries de londuleur. On linstallera donc sur toutes les machines dpendantes du ou des onduleurs. Des exemples de fichiers de configuration sont disponibles dans le rpertoire /usr/share/doc/nut/examples/. Le plus simple est de les copier dans le rpertoire /etc/nut/ pour sen inspirer. Configuration du fichier /etc/nut/ups.conf : Le nom de londuleur indiqu entre crochet sera celui utilis partir de toutes les autres composantes de NUT pour linvoquer. Aussi, si vous le modifiez, noubliez surtout pas de rpercuter cette modification dans tous les fichiers de configuration. driver = pilote adapt londuleur que vous possdez. port = sa valeur dpend du pilote utilis : - /dev/ttyS0, /dev/ttyS1, pour les pilotes mge-utalk et mge-shut, - le nom de la communaut SNMP pour le pilote snmp-ups, - auto pour le pilote newhiupds car ce dernier dtecte automatiquement londuleur auquel il est connect. Description = une information destine faciliter la relecture.
Le fichier /etc/nut/upsd.conf contient la liste des htes autoriss se connecter au serveur NUT. Par dfaut, ce fichier est configur pour autoriser uniquement la supervision depuis le poste local. La description dbute par la dclaration des htes. Une fois ceux-ci identifis, on dfinit les droits. Ainsi, si on veut autoriser la supervision depuis une autre station, il faut lautoriser explicitement dans la section ACL de ce fichier de configuration. Ensuite, on emploiera la directive ACCEPT ou son contraire REJECT selon que lon veut, respectivement, autoriser une machine ou linterdire.
137
138
Chaque utilisateur dfini dans ce fichier est dcrit dans une section commenant par son nom entre crochets. Les paramtres qui doivent tre configurs sont les suivants : password = le mot de passe de lutilisateur (en clair !!). allowfrom = liste des htes partir desquels lutilisateur est autoris se connecter. actions = deux valeurs possibles : - SET = autorise lutilisateur changer les valeurs de certaines variables de londuleur. - FSD = autorise lutilisateur changer le drapeau darrt forc de londuleur. instcmds = liste des commandes autorises pour lutilisateur : - ALL = toutes les commandes sont autorises. Pour obtenir la liste des commandes : upscmd l nom_onduleur@nom_serveur upsmon = deux valeurs possibles : - master : le systme est aliment par londuleur et est connect lui par la liaison data. - slave : le systme est aliment par londuleur mais nest pas connect lui par la liaison data. Il connat ltat de londuleur en communiquant avec le matre. En cas de panne de courant, ce systme sera arrt avant le matre. - monitor-only : le systme est aliment par londuleur et notifie les changements dtat sans devoir sarrter en fin dautonomie.
Puisque le client UPSmon doit communiquer directement avec le dmon UPSD, on retrouve dans son fichier de configuration (/etc/nut/upsmon.conf) lidentifiant et le mot de passe de lutilisateur autoris surveiller le matre. Il convient donc dappliquer ce fichier les mmes rgles de scurit que celles appliques au fichiers upsd.users. Heureusement, la Debian fait bien les choses et nous simplifie la tche en y veillant ds linstallation du paquet nut .
139
140
system : nom de londuleur surveiller. powervalue : indique le nombre donduleurs directement reli lordinateur. username, password : identifiants pour se connecter au serveur UPSD. master : indique que le systme doit sarrter en dernier, aprs larrt des esclaves. slave : le systme doit sarrter ds quil reoit une notification de fin dautonomie.
systme.
NOTIFYCMD : commande utilise pour mettre des
notifications.
Etudions rapidement quelques directives de configuration du fichier /etc/nut/upsmon.conf. Abordons lun des paramtres les plus importants de ce fichier de configuration : la directive MONITOR. Le nom du systme est celui qui a t dfini dans le fichier /etc/nut/ups.conf Les identifiants de lutilisateur doivent tre identiques ceux dclars dans le fichiers /etc/nut/upsd.users.
La valeur DEADTIME doit tre un multiple des deux valeurs prcdentes, en gnral trois fois la plus grande de ces valeurs. Par exemple, par dfaut POLLFREQ et POLLFREQALERT ont pour valeur 5 secondes. Par consquent, DEADTIME vaut 15 secondes par dfaut. En gnral, la directive SHUTDOWNCMD vaut : SHUTDOWNCMD " /sbin.shutdown h +0 " Directive NOTIFYCMD : pour utiliser un script shell local : NOTIFYCMD /usr/local/sbin/nut_notifier On cre alors le script /usr/local/sbin/nut_notifier : #! /bin/bash echo " $*" | sendmail F "$UPSNAME" admin@mondomaine
141
142
La principale diffrence de configuration entre une machine matre et une machine esclave intervient au niveau de la directive MONITOR. Rappel : Lors de linstallation de NUT sur une machine esclave, noubliez pas de modifier les valeurs du fichier de configuration du service : /etc/default/nut. Il faut passer la directive START_UPSMON la valeur yes tandis que START_UPSD reste no (en effet, on na pas besoin de dmon UPSD sur cette machine). On relance ensuite le service NUT de la machine cliente : /etc/init.d/nut restart
143
144
upslog : dmon de journalisation qui interroge rgulirement le serveur et enregistre les valeurs dans un journal dvnements.
ex : upslog l /var/log/ups.log s onduleur1@localhost
On dite le fichier hosts.conf pour dclarer les onduleurs. ex : MONITOR onduleur1@localhost "MGE" On limite laccs aux scripts aux seuls htes autoriss en configurant le serveur Apache.
On utilise un fichier .htaccess dans le rpertoire /usr/lib/cgibin/nut qui contient les scripts.
upsrw : permet dafficher et de modifier les valeurs des variables accessibles en lecture/criture dun onduleur.
ex : upsrw onduleur1@localhost
On crera par exemple un script de dmarrage pour que le client upslog soit relanc chaque dmarrage du systme. Il est possible de dfinir prcisment le format de la ligne inscrite dans le fichier de traces. Attention : bien entendu, pensez inclure ce fichier de traces dans la rotation des logs du systme. Exemples de commandes pouvant tre mises via upscmd : -dmarrer un test de batteries -passer londuleur sur batteries -arrter londuleur -etc.
upscmd l onduleur1@localhost permet dobtenir la liste des commandes disponibles pour londuleur.
Pour tester les scripts CGI : http://localhost/cgi-bin/nut/upstats.cgi Il est recommand de configurer le serveur Web pour limiter laccs des scripts CGI aux seuls htes autoriss. Lutilisation dun fichier .htaccess dans le rpertoire contenant les scripts CGI est fortement conseille. Une fois la configuration scurise, on peut dcommenter la ligne I_HAVE_SECURED_MY_CGI_DIRECTORY du fichier /etc/nut/upsset.conf
145
146
Network Weathermap
Voici un exemple de consultation des valeurs de fonctionnement de londuleur via les pages gnres par les scripts CGI.
147
148
Prsentation (1)
Les fonctions de Network Weathermap :
Il affiche sous une forme graphique intuitive la charge de vos principaux liens rseau. Les flux sur un lien sont matrialiss par deux flches dont la couleur varie en fonction des volumes de donnes changes. Il dfinit une image de fond pour matrialiser la topologie de votre rseau. Il est possible de grer des pop-ups en fonction de la position de la souris sur le graphique.
Prsentation (2)
149
150
Prsentation (3)
Network Weathermap est un outil dvelopp en langage Perl (librairie graphique Perl GD). Il neffectue aucune requte SNMP auprs des quipements rseau. Il recueille les informations ncessaires la cration du graphique partir de MRTG. MRTG stocke les rsultats de sa dernire requte dans la page HTML gnre sous forme de commentaires.
<!-- maxin d 128563 --> <!-- maxout d 29795 --> <!-- avin d 17219 --> <!-- avout d 18115 --> <!-- cuin d 11369 --> <!-- cuout d 19663 --> <!-- avmxin d 23106 --> <!-- avmxout d 18598 -->
Network Weathermap utilise la librairie PERL GD pour gnrer les images. Cette librairie requiert le module graphique de la libraire GD (libgd), lui-mme imposant la prsence dautres composants tels que freetype, libjpeg, libpng et libz. Il peut interroger directement les fichiers HTML gnrs par MRTG depuis le systme de fichiers ou via la commande wget si ces donnes se trouvent sur un serveur distant. Il les analyse et il en extrait les valeurs des flux en entre et en sortie (cuind d et cuout d).
Les paramtres sont dfinis directement dans le script Perl qui sappelle weathermap (sans extension .pl).
151
152
Installation (2)
Exemple de configuration :
$WGET = "/usr/bin/wget -qO -"; $CONFIG = "/usr/local/weathermap-1.1.1/weathermap.conf"; $OUTPUT = "/var/www/weathermap/weathermap.png"; $DEBUG = 0; $WIDTH = 880; $HEIGHT = 750;
Installation (3)
Exemple de configuration :
# /usr/local/weathermap-1.1.1/weathermap.conf BACKGROUND /usr/local/weathermap-1.1.1/campus_reduit.png KEYPOS 1 520 # low SCALE 1 SCALE 10 SCALE 25 SCALE 40 SCALE 55 SCALE 70 SCALE 85 high 10 25 40 55 70 85 100 red green blue 140 0 255 32 32 255 0 192 255 0 240 0 240 240 0 255 192 0 255 0 0
NODE summit5i POSITION 700 400 LABEL Summit5i NODE alpine POSITION 900 400 LABEL Alpine LINK summit5i-alpine NODES summit5i alpine TARGET http://10.xxx.xxx.xxx/mrtg-backbone/summit5i_alpine.html BANDWIDTH 100000
Suite la configuration des paramtres du fichier weathermap, il ne faut pas oublier de crer le rpertoire dans lequel se trouve limage gnre par weathermap. En loccurrence, il sagit de /var/www/weathermap. Un fichier weathermap.conf dont on peut sinspirer est fourni dans le rpertoire example.
153
154
Installation (4)
Configurer la page de rsultats : deux exemples de pages sont fournis dans le rpertoire example :
une page statique avec des liens vers les graphes gnrs par MRTG : weathermap.html. une page dynamique avec non seulement des liens vers les graphes MRTG, mais aussi des popups affichant limage MRTG actuelle : weathermap-overlib.html.
Bibliographie
Projet Nagios :www.nagios.org Projet Centreon : www.centreon.com Modules : www.nagiosexchange.org Cartographie avance : www.nagvis.org
Lutilisation de la page dynamique weathermap-overlib.html requiert lutilisation de la bibliothque JavaScript overlib_mini.js qui se trouve galement dans le rpertoire dexemples de Weathermap. Pour finir, on pourra intgrer linterface graphique dOreon un lien vers la page de rsultats gnre par Weathermap.
155
156