Monitoring d'une infrastructure informatique Linux sur
base d'outils libres
Travail de fin d'études présenté par
Geoffrey Lemaire en vue de l'obtention du grade de
Bachelier en Informatique
Industrielle
Remerciements
Je remercie tout d'abord la société Manex, qui a eu
la gentillesse de m'accueillir et de me donner tout ce dont j'avais besoin pour
que mon stage se déroule pour le mieux.
Je pense tout particulièrement à Vincent Keunen,
qui m'a parrainé au sein de la société, et à David
Wery, mon guide durant ces quelques mois.
Merci également à mon superviseur, Pierre De Fooz,
pour son suivi et ses bons conseils quant à la rédaction de mon
TFE.
Merci à tous ceux qui ont participé de près
ou de loin à ce projet et merci à Coralie.
Table des matières
1 MANEX 8
1.1 PERSONNEL 8
1.2 DOMAINES DE PRÉDILECTIONS : 8
1.3 OUTILS ET TECHNOLOGIES 8
1.4 COORDONNÉES 9
1.5 LEURS PRODUITS 9
1.6 LEURS RÉFÉRENCES 10
1.6.1 Systèmes Internet 10
1.6.2 Systèmes de sécurité 10
1.6.3 Systèmes mobiles 10
2 LES OBJECTIFS DU TRAVAIL 11
2.1 L'ENVIRONNEMENT TECHNIQUE ET LES OUTILS 11
2.2 AU NIVEAU DES LOGICIELS 11
2.3 AU NIVEAU DU MATÉRIEL 11
2.4 LEUR RÉSEAU 12
3 LES OUTILS DE MONITORING 13
3.1 NAGIOS 13
3.2 MANAGEENGINE OPMANAGER 16
3.2.1 Trois versions 16
3.2.2 Caractéristiques 16
3.2.3 Conclusion 18
3.2.4 Captures d'écran 19
3.3 CACTI 20
3.3.1 Pré requis 20
3.3.2 Installation 20
3.3.3 Configuration 20
3.3.4 Contrôles des hôtes 20
3.3.5 Conclusion 20
3.3.6 Captures d'écran 21
3.4 OREON 22
3.4.1 Pré requis 22
3.4.2 Installation 23
3.4.3 Configuration 23
3.4.4 Contrôles des hôtes 23
3.4.5 Gestions des utilisateurs 23
3.4.6 Conclusion 23
3.4.7 Captures d'écran 24
3.5 TABLEAUX RÉCAPITULATIFS DES OUTILS DE
MONITORING 25
4 LES OUTILS DE SÉCURITÉ 26
4.1 LE FIREWALL (OU PARE-FEU) 26
4.1.1 Présentation 26
4.1.2 Les catégories 26
4.2 SYSTÈME DE DÉTECTION D'INTRUSIONS
(IDS) 28
4.2.1 Une petite histoire : le voleur, le videur et la
caméra cachée 28
4.2.2 Les deux familles de systèmes de
détection d'intrusion 28
4.3 NESSUS 30
4.3.1 Pré requis 30
4.3.2 Installation 30
4.3.3 Configuration 30
4.3.4 Particularité 30
4.3.5 Fonctionnement 30
4.3.6 Deux versions 30
4.3.7 Tests 31
4.3.8 Conclusion 31
4.3.9 Captures d'écran 32
4.4 SNORT 33
4.4.1 L'abonnement 33
4.4.2 Pré requis 33
4.4.3 Installation 33
4.4.4 Configuration 34
4.4.5 Tests avec Nessus 34
4.4.6 Conclusion 36
4.5 NMAP 37
4.5.1 Installation 37
4.5.2 Fonctionnement 37
4.5.3 Les premiers scans 37
4.5.4 D'autres options 39
4.5.5 Conclusion 40
4.6 MBSA DE MICROSOFT 41
4.6.1 Présentation 41
4.6.2 Installation 41
4.6.3 Tests 41
4.6.4 Conclusion 41
4.6.5 Captures d'écran 41
5 LES OUTILS INDISPENSABLES 43
5.1 NET-SNMP 43
5.2 MRTG 44
5.3 RRDTOOL 44
5.4 LE CHOIX DES OUTILS 44
6 PRÉSENTATION DE NAGIOS 45
6.1 CARACTÉRISTIQUES 45
6.2 PRÉ REQUIS 46
6.3 INSTALLATION 46
6.3.1 Ajout des dépôts 46
6.3.2 Modification des iptables 46
6.3.3 Téléchargement et installation
46
6.4 STRUCTURE DES RÉPERTOIRES ET EMPLACEMENT
DES FICHIERS 46
6.5 ACCÈS À L'INTERFACE WEB 47
6.6 DESCRIPTION DES FICHIERS DE CONFIGURATIONS 48
6.6.1 Configuration principal 48
6.6.2 Configuration des CGIs 49
6.6.3 Configuration d'un vhost dans Apache 49
6.6.4 Les contacts et groupes de contacts 50
6.6.5 Définition des périodes de
vérifications et de notifications 51
6.6.6 Définition des groupes d'hôtes et des
templates hôtes 51
6.6.7 Définition des hôtes 52
6.6.8 Définition des ressources 52
6.6.9 Définition des commandes 53
6.6.10 Configuration des informations étendues
53
6.7 LES SERVICES 55
6.7.1 Les services publics 55
6.7.2 Les services privés 55
6.7.3 Définition des templates et des services
55
6.7.4 Déclaration d'un autre service 56
6.7.5 Un dernier... 57
6.8 MÉTHODES POUR DÉMARRER NAGIOS 57
6.9 PLUGINS 58
6.9.1 Différentes sources 59
6.9.2 Le principe de fonctionnement 59
6.9.3 Utilisation des Plugins pour Contrôler des
Services 59
6.9.4 Utilisation des Plu gins pour contrôler des
hôtes 59
6.9.5 L'analyse d'un plugin 60
6.10 CONTRÔLE DES HÔTES 64
6.10.1 NRPE 64
6.10.2 NSCA 64
6.10.3 Conclusion 65
6.11 TYPES DE MONITORING 65
6.11.1 Monitoring actif 66
6.11.2 Monitoring passif 66
6.12 DÉTECTION ET GESTION DES CHANGEMENTS
D'ÉTATS 66
6.13 L'ESCALADE DES NOTIFICATIONS 66
6.13.1 Recoupement des portées des escalades
66
6.13.2 Notifications de reprise d'activité
67
6.13.3 Intervalles de notification 67
6.14 LES DÉPENDANCES 67
6.14.1 Aperçu des dépendances de services
67
6.14.2 Comment les dépendances d'un service
sont-elles testées ? 67
6.14.3 Exemple de dépendance de service 68
6.14.4 Dépendances d'exécution 68
6.14.5 Dépendances de notification 68
6.14.6 Dépendances d'hôtes 69
6.15 L'HÉRITAGE 69
6.16 LES NOTIFICATIONS PAR MAIL 69
6.16.1 Son fichier de configuration 69
6.16.2 Les mails de Nagios 70
6.17 UTILISATION DU PROTOCOLE SNMPV3 71
6.18 DES TAS D'AUTRES POSSIBILITÉS ! 71
6.19 NAGIOS CHECKER 71
6.20 CONCLUSION 72
7 PRÉSENTATION DU PROTOCOLE SNMP 73
7.1 EN PRATIQUE 73
7.2 LES TRAMES 74
7.3 SA 3ÈME VERSION 75
7.3.1 USM - User-based Security Model 75
L'authentification : 75
1. Le transmetteur groupe des informations à
transmettre avec le mot de passe. 75
2. On passe ensuite ce groupe dans la fonction de hachage
à une direction. 75
3. Les données et le code de hachage sont ensuite
transmis sur le réseau. 75
4. Le receveur prend le bloc des données, et y ajoute
le mot de passe 75
5. On passe ce groupe dans la fonction de hachage à
une direction. 75
6. Si le code de hachage est identique à celui
transmis, le transmetteur est authentifié. 75
Le cryptage : 76
L'estampillage du temps : 76
7.3.2 VACM - View- based Access Control Model 77
7.4 LA TRAME SNMPV3 77
7.5 SON UTILISATION DANS MON STAGE 78
7.6 SA CONFIGURATION 78
7.6.1 Création d'un utilisateur v3 78
7.6.2 Le fichier snmpd.conf 78
7.6.3 Le test 79
7.7 ANALYSE AVEC WIRESHARK 79
7.7.1 Tests avec SNMPv2c 79
7.7.2 Test avec le SNMPv3 81
8 UPS 83
8.1 LE MATÉRIEL 83
8.2 LA CONNECTIQUE 83
8.3 LES LOGICIELS 83
8.3.1 UPSmon 83
8.3.2 Drivers Nut 83
8.4 NAGIOS DANS TOUT CELA 84
8.4.1 Présentation du plugin 84
8.4.2 Définition de la commande 84
8.4.3 Définition du service 84
8.4.4 Le résultat 84
9 LES IMPRIMANTES 85
9.1 ACTIVER LE PROTOCOLE SNMP 85
9.2 UN SNMPWALK DE L'IMPRIMANTE 86
9.3 INTÉGRATION DANS NAGIOS 87
9.3.1 Le contrôle du niveau d'encre 87
9.3.2 Le contrôle du statut 87
10 UTILISATION DE SNMP POUR LANCER UN SCRIPT À
DISTANCE 88
10.1 DES PLUGINS SUPPLÉMENTAIRES 88
10.2 LA CONFIGURATION DE L'AGENT SNMP 88
10.3 DÉFINITION DE LA COMMANDE ET DES SERVICES
SUR LE SERVEUR 88
10.4 LE POURQUOI ET LE COMMENT ? 89
11 UTILISATION DES TRAPS AVEC NAGIOS 90
11.1 CONFIGURATIONS 90
11.1.1 Coté client (l'agent) 90
11.1.2 Coté serveur 90
11.2 NAGIOS DOIT COMPRENDRE, SNMPTT L'AIDE. 91
11.2.1 Fonctionnement général 91
11.2.2 Configuration 91
11.3 A NOTER : 92
11.4 COMPILATION DES MIBS 93
11.5 DANS NAGIOS 93
11.6 QUELQUES TESTS 94
Introduction
La gestion d'un parc de serveur est un travail de chaque
instant. Un bon administrateur système doit savoir à tout moment
l'état des différentes machines et des différents
services. Un autre aspect clé est que l'administrateur ne peut pas se
permettre de passer son temps devant un tableau avec des voyants verts en
attendant qu'un voyant passe au rouge pour agir. Son temps est occupé
à d'autres tâches et il ne peut donc pas surveiller le tableau de
statut en permanence.
L'examen journalier des logs systèmes est un bon
début. Cependant, si un problème survient, on s'en rend compte
seulement le lendemain. Ce qui peut être trop tard. Tout problème
ou panne peut avoir de lourdes conséquences aussi bien
financières qu'organisationnelles. La supervision des réseaux est
alors nécessaire et indispensable. Elle permet entre autres d'avoir une
vue globale du fonctionnement et des problèmes pouvant survenir sur un
réseau mais aussi d'avoir des indicateurs sur la performance de son
architecture.
De nombreux logiciels, qu'ils soient libres ou
propriétaires, existent sur le marché. La plupart s'appuient sur
le protocole SNMP. Pour simplifier le travail, nous allons utiliser un moniteur
de supervision. Le but d'un tel programme est de surveiller les services et les
machines se trouvant sous notre responsabilité. Si un problème
survient, le moniteur de supervision nous prévient (email, SMS, coup de
téléphone,...) ou peut entreprendre certaines actions par
lui-même (relancer un service, tuer un processus, demander un
reboot,...).
Manex, la société dans laquelle j'ai
été accueilli, avait besoin d'une solution pour monitorer son
parc informatique afin de soulager la tâche des employés
suffisamment occupés au développement de leurs produits.
Chapitre 1
Présentation de l'entreprise
1 Manex
Depuis 1986, Manex propose des services de consultance et
développement pour la mise en oeuvre de solutions logicielles et
réseaux.
1.1 Personnel
Cette société est dirigée par Vincent
Keunen et est présidée par Nicolas Keunen. En plus des trois
informaticiens qui y travaillent à plein temps, la société
Manex travaille avec plusieurs indépendants. À cette
équipe s'ajoute une assistante de direction.
1.2 Domaines de prédilections :
Les systèmes internet : sites web
transactionnels, applications « web », connexions bases de
données, systèmes de messagerie, échanges B2B, ...
Les systèmes de sécurité :
Cryptographique, infrastructures à clés publiques,
certificats et signatures électroniques, ...
Les Systèmes mobiles : Palm, iPaq,
Psion, J2ME, GSM, SMS, ...
1.3 Outils et technologies
La société Manex s'est spécialisée
dans le domaine Java et développe, grâce à ce langage,
aussi bien des applications classiques que des applications Web.
L'utilisation de ce langage n'est pas anodine. En effet,
grâce à la machine virtuelle de Java, les applications pourront
être utilisées aussi bien sur un ordinateur équipé
d'un système d'exploitation Microsoft, Linux/Unix ou bien encore Mac.
De plus, la société Manex favorise l'Open Source en
utilisant des produits tels que Jboss, Hibernate ou bien encore Jasper
Report.
Elle maîtrise aussi les protocoles tels que :
HTTP : le protocole utilisé pour les communications web
;
SOAP : le protocole d'échanges utilisé pour la
communication avec un service Web ; LDAP : le protocole de communication avec
des annuaires ;
SMTP/POP/IMAP : les protocoles utilisés pour le transfert
du courrier électronique ; ...
1.4 Coordonnées
Rue Wagner 127
BE-4100 Boncelles, Belgique Tel. : +32 (0) 4 330 37 30 Fax. : +32
(0) 4 338 06 06 Mail :
info@manex.be
Web :
http://www.manex.be
1.5 Leurs produits
Inter Business Automated Transport System
Ibats est un système de messagerie Internet
sécurisée, automatisée et ouverte.
· :. Sécurisée, car il
utilise une infrastructure clés publiques - clés privées,
qui apporte :
> l'authenticité à la fois de
l'émetteur et du récepteur ;
> la confidentialité, du fait que
toute communication est cryptée, elle ne pourra être comprise que
par le destinataire ;
> l'intégrité du message,
car si une modification ou altération du message se produit
lors du transfert, alors il sera illisible par le récepteur, et donc
tout message interprété correctement est obligatoirement
identique à celui que l'émetteur a transmis ;
> la non-répudiation, car par le
système de signature électronique, le message a été
signé grâce à la clé privée, mais sera
vérifié par la clé publique associée. Donc, si la
signature est vérifiée par la clé publique de
l'émetteur que possède le récepteur, il peut prouver
l'origine du message ;
· :. Automatisée
> tout document déposé dans le
répertoire d'envoi sera envoyé automatiquement, selon une
fréquence déterminée ;
> le système gère les éventuels conflits
lors de la réception des documents ;
> Ibats se met automatiquement à jour via le
réseau.
· :. Ouverte car :
> gestion des formats : Ibats possède un convertisseur
qui adapte les formats de fichiers entre l'émetteur et le
récepteur ;
> portabilité : grâce à la machine
virtuelle Java, Ibats fonctionne sur les divers systèmes d'exploitation
(Windows, Unix, Mac, AS400) ;
> standard : Ibats fonctionne sur les standards Internet tel
que IMAP, SMTP, LDAP;
> complémentaire : il ne remplace pas votre logiciel
de messagerie actuelle, mais le complète.
La technologie qui est au coeur d'Ibats est utilisée
aujourd'hui par les deux principales messageries médicales de Belgique
et couvre près de 10 000 utilisateurs. Au niveau international, Ibats
est en cours d'implémentation dans plusieurs pays.
Site Web du produit :
http://www.ibats.biz
Java Advanced Facilities for Audit and Reporting ( Jafar
)
Jafar est la réponse à une demande d'Idewe,
leader dans le secteur de la médecine du travail en Belgique. En effet,
avant l'arrivée de Jafar, les observations des auditeurs étaient
inscrites sur papier, et une numérisation de cette méthode
s'avérait nécessaire. C'est alors que Manex a
développé un produit appelé Jaws (Java Workstation),
adaptable à divers appareils, capable de centraliser et de traiter les
données collectées, et de générer des rapports sur
base de celles-ci.
Afin de trouver de nouveaux débouchés, Manex a
développé un nouveau logiciel, qui reprend les mêmes
fonctionnalités que Jaws, mais qui en élargit le domaine
d'activité. Ce nouveau logiciel est Jafar.
Fonctionnalités
Faire des audits et recueillir des données en ce qui
concerne un champ d'activité. Générer
instantanément des rapports en fonction de ces audits.
Synchroniser les données recueillies avec un serveur
central.
Site Web du produit :
http://www.jafar.biz
1.6 Leurs références
1.6.1 Systèmes Internet
Commerce électronique : Disteel Cold, IBM, ChemResults
,... Extranets : GV comÐany, SMAP,...
Web : Docs.be, Mosacier, diverses PME,...
1.6.2 Systèmes de
sécurité
Consultance et implantations : Dresdner Bank, diverses
PME
PKI dans le monde médical : Conception et
réalisation de meXi, +1000 utilisateurs
1.6.3 Systèmes mobiles
Système d'audit et reporting : Prévention,
médecine du travail, Idewe, 300 utilisateurs Systèmes
mobiles pour vendeurs et techniciens : Olympian Games, Disteel Cold,
dossier
médical,...
Chapitre 2
Cahier des charges
2 Les objectifs du travail
L'objectif de ce travail est de monitorer et centraliser toutes
les informations concernant une infrastructure informatique à plusieurs
niveaux :
o Services (vérifier que les services sont bien
fonctionnels) ;
o Sécurité (monitoring de firewall,
détection d'intrusions) ;
o Machine (état du système de fichiers, chargement
mémoire et CPU, ...) ;
o Réseau (engorgement du réseau, bande passante,
table de routage, ...) ;
2.1 L'environnement technique et les outils
La plate-forme de travail sera composée des distributions
Linux Red Hat Entreprise, Fedora, Ubuntu et Microsoft Windows.
Les outils : Bash (PuTTY1), Apache, SNMP, Iptables
ainsi que tous les outils standards du monde Linux.
2.2 Au niveau des logiciels
Au départ, j'ai dû effectuer une recherche sur les
divers outils de monitoring et de sécurité disponibles sur les
plateformes Linux Red Hat Entreprise. Les résultats de ma recherche
sont
? pour le monitoring :
Nagios, AdventNet ManageEngine OpManager, Cacti, Oreon,
Utilisation du protocole SNMP (via Net-SNMP), RRDTool/MRTG (pour la
génération de graphiques).
? pour la sécurité :
Nessus (leader dans le domaine des scanners de
sécurité2), Snort+BASE
Bien entendu, il en existe bien d'autres (Big Brother,
OpenNMS, Scotty, Hobbit, nMap,...), mais ce sont les plus utilisés.
Sinon, il existe des solutions payantes et professionnelles dont HP OpenView,
Cisco Works, IBM Tivoli, ... A la fin du chapitre 3 sur la présentation
des outils, se trouve un tableau comparatif des divers outils en licence
ouverte/libre et commerciale.
2.3 Au niveau du matériel
Pour l'élaboration de ma recherche, j'ai eu ã ma
disposition un serveur tournant sous RHEL (Red Hat Entreprise Linux 4 update
5), une imprimante HP Officejet 7100 series et mon ordinateur portable sous
Windows XP Pro SP2.
1 Putty : Client Telnet/SSH pour les plateformes Windows et Unix
http://www.chiark.greenend.org.uk/~sgtatham/putty
2 Un top 100 des outils de sécurité réseau
est disponible à cette adresse :
http://sectools.org
Monitoring d'une infrastructure Linux sur base d'outils
libres 2.4 Leur réseau
Figure 2.3-1 : Topologie Manex réalisée
avec Dia
Le réseau de Manex est divisé en trois parties :
> La DMZ : oz se trouvent les serveurs de productions (Web,
Mail, DNS, iBats, SVN, ?)
> L'intranet Servers : où se trouve le serveur LDAP,
Backup, Dasys et le serveur de Monitoring > L'intranet Users : où se
trouvent les 3 imprimantes réseaux et les différentes stations
de
travail.
Le serveur mxisrv4 a été mis
ã ma disposition lors de mes différents tests et pour
l'installation complète de celui-ci avec RHEL 4u5.
+ La majorité des serveurs sont installés sous Red
Hat Entreprise Linux - ES 4 ou 5 et sont de marque IBM de la série 306,
335, 345, 346.
+ Les stations de travail, quant à elles, sont sous Mac
OS X ou Windows XP.
+ Les switchs sont de marque 3Com série 2824 non
manageable.
+ Cisco ASA 5510
+ Un PABX Forum 500 pour les communications
téléphoniques.
Lors de mon arrivée chez Manex, un serveur Linux
équipé de la distribution RHEL 4 servait de routeur/firewall. Un
mois après mon arrivée, il a été remplacé
par un ASA 5510 pour faciliter le management du réseau de Manex
grâce à une interface graphique très agréable
à configurer et dont les opérations de maintenance étaient
hautement simplifiées.
Chapitre 3
Présentation des outils de monitoring
3 Les outils de monitoring
Voici la liste des outils qui ont fait état d'un rapport
dans la société oz j'étais en stage.
3.1 Nagios
Nagios (anciennement appelé NetSaint
développé par Ethan Galstad), est un logiciel qui permet de
superviser un système d'information complet. C'est un logiciel libre, il
est sous licence GPL. Les fonctionnalités de Nagios sont
nombreuses3. La première particularité de Nagios est
la modularité. En effet, des plugins peuvent être ajoutés
pour effectuer des tâches spécifiques. De nombreux plugins sont
déjà écrits par la communauté Nagios.
La signification officiel de N.A.G.I.O.S. est un acronyme
récursif pour « Nagios Ain't Gonna Insist On Sainthood
»4. C'est un charrier sur le
précédent nom du logiciel NetSaint. Une signification alternative
proposée par SAM Tilders : « Notices Any Glitch In Our System
»5.
La version actuelle est la 2.9 mais une version
3.0 (déjà en version beta 4) ne tardera pas
à sortir. Une analyse plus approfondie sera effectuée au
chapitre 5.
Site Web du produit :
http://www.nagios.org
3 Et seront décrites au chapitre 5.
4 Traduction littérale : Nagios ne va pas insister pour
Sainthood
5 Traduction littérale : Note n'importe quel
problème dans notre système
3.1-1 : Statut des services dans Nagios
3.1-2 : Statut des hôtes dans Nagios
3.1-3 : Liste des problèmes des
services
3.1-4 : « Status Map » des hôtes
monitorés par Nagios
Monitoring d'une infrastructure Linux sur base d'outils
libres 3.2 ManageEngine OpManager
ManageEngine OpManager est un logiciel complet de surveillance
de réseau qui offre une surveillance combinée d'applications, du
réseau à grande échelle et des serveurs avec des
fonctionnalités intégrées de service d'assistance,
d'administration et d'analyse du trafic sur le réseau. OpManager
automatise plusieurs tâches de surveillance du réseau et
élimine la complexité associée à l'administration
réseau.
Site Web du prod uit :
http://www.manageengine.fr/opmanager/
3.2.1 Trois versions Il existe trois
versions.
|
Gratuite : Possède les même fonctionnalités
que la payante mais ne peut monitorer que 10 périphériques. Cette
version ne possède pas la découverte automatique des
périphériques. Edition Professionnelle (à partir de 795$)
: Toutes les fonctionnalités + découverte automatique + support
(à partir de 299$ annuel).
Premium Edition (à partir de 1995$) : Idem + d'autres
monitorings évolués + support (à partir de 399$
annuel).
|
3.2.2 Caractéristiques
3.2-1 Map des serveurs
3.2.2.1 Surveillance réseau
Détecte les problèmes de performance du
réseau avant que se crée des indisponibilités
coûteuses.
La Surveillance WAN
3.2-2 : Graphiques de l'utilisation du
réseau
OpManager permet de transformer une collection logique de
périphériques en une entité physique en créant des
cartes avec la position des centres, des routeurs, serveurs ou autres.
Il monitore de manière autonome le réseau et
s'assure qu'il ait une disponibilité maximum. On peut configurer des
valeurs de seuils pour prévenir une éventuelle panne. Par exemple
en mesurant l'engorgement d'un réseau. Si les pings entre deux routeurs
par exemple, dépassent un certain seuil, on peut être
prévenu de diverses manières (mail, SMS, ...).
Surveillance des équipements réseaux (switchs,
routers, UPS,...)
OpManager permet de monitorer les ressources des routers, des
switchs et des autres équipements réseaux comme la charge CPU, la
mémoire de l'équipement, ainsi que ses tensions, les erreurs sur
les interfaces, etc... Toutes ces vérifications se font via le
3.2-3 : Vérification de divers paramètres
d'un UPS
protocole SNMP. Analyse NetFlow
OpManager s'intègre sans problème avec NetFlow
Analyzer, un produit de ManageEngine qui offre une surveillance de la bande
passante basée sur la technologie Cisco NetFlow. Lorsqu'on utilise ces
deux produits, on peut obtenir automatiquement une interface
détaillée avec les rapports de trafic de NetFlow Analyzer
à partir d'OpManager.
3.2.2.2 Surveillance serveur
Améliore la disponibilité et les performances de
l'infrastructure serveur.
Surveillance serveur
OpManager fournit des graphiques de disponibilité
détaillés et des rapports quotidiens, hebdomadaires, mensuels et
trimestriels de la disponibilité des serveurs. Les
fonctionnalités de rapport d'OpManager fournissent également un
rapport de disponibilité détaillé de tous les
composants.
Voir image « 3.2-4 : Monitoring des serveurs »
Surveillance du journal des évènements (pour
Windows)
En utilisant OpManager, les administrateurs peuvent surveiller
les journaux d'événements de Windows sur les ordinateurs locaux
ou distants et chercher les sources, les catégories, les
identités d'événements et les motifs
d'événements spécifiques dans la description de
l'événement. Avec OpManager, on peut protéger le
réseau des attaques internes et surveillez la disponibilité des
applications en contrôlant les journaux d'événements de
Windows.
Surveillance des services
OpManager surveille la disponibilité et le temps de
réponse des services fonctionnant sur les serveurs. La
fonctionnalité de surveillance des services vous fournit des graphiques
et des rapports détaillés sur la disponibilité des
services que l'on surveille.
3.2.2.3 Surveillance d'application
Identifie les problèmes de performance des applications
avant qu'ils ne touchent les utilisateurs finaux.
Moniteur Exchange (Microsoft)
OpManager permet de surveiller ã l'aide d'une extension,
Microsoft Exchange pour prévenir l'indisponibilité et
réparer rapidement les problèmes dès leur apparition.
Surveillance URLs
OpManager aide à surveiller la disponibilité des
sites Web ou des pages intranet et vérifie si les pages sont
affichées en temps réel.
Surveillance des Applications
OpManager surveille par défaut Microsoft exchange, MySQL,
Lotus notes, MSSQL, Oracle,?
3.2.2.4 Pré requis
OpManager requiert, tout comme Nagios, plusieurs librairies :
1 XFree86 (et ses dépendances), pour
l'utilisation de l'interface graphique
1 Fontconfig, nécessaire pour certaines polices de
caractères
1 freetype-devel, pour le rendu de polices True-Type gratuites
1 compat-libstdc++, nécessaire pour l'exécution de
certains plugins interne à OpManager 1 compat-libs, un paquet de
librairies pour l'exécution d'OpManager
1 java, OpManager exploite majoritairement Java pour son
exécution
1 NET-SNMP, utilisé pour obtenir les ressources de divers
composants réseaux (routers, switchs, servers si le protocole SNMP est
installé et utilisable).
3.2.2.5 Installation
L'installation est un vrai plaisir. Elle peut se faire via une
interface graphique (si un serveur X tourne) ou en ligne de commande.
Après quelques réponses à des questions
très simples, nous pouvons directement avoir accès à
l'interface Web (port 9090).
3.2.2.6 Configuration
La configuration est très simple. Le système de
découverte est vraiment très performant. Il suffit d'indiquer le
réseau et son masque et le programme se charge de tout trouver.
Comparativement à Nagios, on ne doit pas éditer des
fichiers de configurations, tout se fait via l'interface Web.
3.2.2.7 Contrôle des
hôtes
Le contrôle des hôtes se fait majoritairement via
SNMP bien que pour les OS sous Linux, il existe un Agent que l'on peut
installer.
3.2.3 Conclusion
OpManager est un merveilleux programme. Tout se configure en
quelques clics. L'interface graphique est très réussie. Il est
régulièrement mis à jour. Un support technique qui
répond dans les 24-48h même lorsque l'on n'a pas encore
enregistré sa copie. Au niveau évolutivité, il est
possible de rajouter des MIB ã l'intérieur via l'interface
graphique du programme. Le seul point noir est qu'il est payant, mais quoi de
plus normal vu la qualité de celui-ci ? Tout comme Nessus (que l'on
décrira plus tard), OpManager n'est plus Open-Source.
3.2.4 Captures d'écran
3.2-5 : Monitoring des serveurs 3.2-6 : État d'un
hôte
3.2-7 : Journal de l'utilisation CPU 3.2-8 : Les ala
rmes
Monitoring d'une infrastructure Linux sur base d'outils
libres 3.3 Cacti
Cacti est une solution complète de
génération de graphiques réseaux destiné à
démontrer la puissance de RRDTool6 dans le stockage de
données et les fonctionnalités graphiques.
Cacti fournit un poller rapide, des Template de graphiques
avancés, des méthodes multiples d'acquisition de données,
et des dispositifs de gestion d'utilisateurs extérieurs. Des droits
peuvent être attribués en fonction de leur poste dans le
management du réseau. Tout cela est enveloppé dans une interface
intuitive, facile à utiliser, pour les installations de taille LAN
jusqu'aux réseaux complexes avec des centaines de dispositifs.
Site Web du produit :
http://cacti.net
3.3.1 Pré requis
? RRDTool, pour la génération des graphiques
? MySQL, pour stocker les informations
? PHP, pour l'affich age des pages
? Apache, pour consulter le site
3.3.2 Installation
L'installation est relativement simple et rapide... Une base
de données ã créer, quelques droits sur les
répertoires, paramétrage d'un device et voilã, cinq
minutes plus tard, les premiers graphiques apparaissent. Cependant,
l'installation de RRDTool fut un peu plus laborieuse, mais raisonnable.
3.3.3 Configuration
La configuration est simple en elle-même. On ajoute les
devices que l'on souhaite monitorer ainsi que les services. On définit,
les résultats que l'on souhaite transformer en graphique et quelques
minutes plus tard, les premiers résultats apparaissent.
3.3.4 Contrôles des hôtes
Comme les autres outils de monitoring, tout se fait via des
requêtes SNMP (v1, v2c, v3). Cependant, le choix des services à
monitorer est assez restreint comparé à Nagios et OpManager. Il
s'agit simplement de monitoring SNMP, donc avoir des graphiques
représentant la consommation des interfaces, la variation de
température, l'occupation des disques dur,... Bref tout ce qui est
monitorable via SNMP. Cela dit, il existe plusieurs plugins7 que
l'on peut éventuellement greffer. On peut aussi définir
soi-même les services à monitorer si on sait où trouver les
informations qui nous intéressent dans la MIB du protocole SNMP.
3.3.5 Conclusion
Cacti a l'air assez complet comme programme et possède
une interface très jolie. Les graphiques sont clairs, mais il reste
juste une démonstration des possibilités offertes par RRDTool. Ce
que l'on appel communément un « Front-End ».
6 Sera présenté plus loin dans ce chapitre.
7 Disponible ici :
http://www.cacti.net/additional
scripts.php
3.3.6 Captures d'écran
3.3-1 : Dual Panel Tree View 3.3-2: Graph View - Tree
Mode
3.3-3 : Edition des templates des graphiques 3.3-4 :
Edition des sources des graphiques
Monitoring d'une infrastructure Linux sur base d'outils
libres 3.4 Oreon
Oreon est un logiciel de surveillance et de supervision
réseau, basé sur le moteur de supervision Open Source le plus
performant : Nagios. Oreon lui offre une nouvelle interface et lui apporte
de
nouvelles fonctionnalités.
L'installation de l'interface Oreon permet de gagner du temps
dans l'utilisation de Nagios, mais aussi
de la rendre disponible ã un plus grand nombre
d'utilisateurs. En effet, n'importe qui peut dorénavant utiliser
Oreon/Nagios et comprendre facilement à l'aide de graphiques et de
représentations, les informations remontées. Les techniciens, de
leurs cotés, ont toujours accès aux
informations techniques de Nagios.
Lancé depuis trois ans, Oreon a su convaincre un grand
nombre d'utilisateurs et fait figure maintenant d'interface de
référence pour l'outil Nagios. Ce couple est la solution
adoptée par un
grand nombre d'utilisateurs, aguerris ou novices dans la
supervision, connaisseurs de Nagios ou non.
Voici une liste non exhaustive des fonctionnalités
présentes dans Oreon :
U ne interface multi-utilisateurs intuitive et personnalisable
Une interface de configuration évoluée pour
configurer le périmètre à superviser Des aides à la
configuration
Une gestion des fichiers de configuration de Nagios
(cgi.cfg, nagios.cfg, resources.cfg,...) Un module de chargement de
configuration de Nagios
Une compatibilité Nagios 1.x, Nagios 2.x
Un test de validité des configurations avec le debugger
de Nagios
Des fiches d'identités serveurs/équipements
réseaux regroupant les informations de base sur ces types de
ressource
Des représentations graphiques élaborées et
personnalisables
Une gestion des accès très fine, comprenant les
ressources comme les pages de l'interface Et bien d'autres choses...
Site web du prod uit :
http://www.oreon-project.org
3.4.1 Pré requis
1 Nagios 1.x /2.x
1 Nagios-plugins 1.3.x / 1.4.x
1 Apache 2.x
1 MySQL 3.x / 4.x / 5.x 1 PHP 4.x /5.x
1 GD
1 GD-devel
1 RRDTool
1 Net-SNMP
1 Des tas de librairies !
1 PEAR Packages (beaucoup) !
Monitoring d'une infrastructure Linux sur base d'outils
libres 3.4.2 Installation
L'installation d'Oreon est relativement simple lorsque toutes
les librairies et programmes tiers sont installés. Elle se
déroule via une interface Web en dix étapes. La grosse
difficulté a été d'installer tous
les packages PEAR (pour PHP Extension and Application
Repository est un framework de composants PHP) sans la procédure
automatique des téléchargements des dépendances. Un autre
problème, non résolu pour le moment, est l'utilisation de
Perfparse qui permet de générer des graphiques dans Oreon.
3.4.3 Configuration
Oreon est donc une belle interface graphique au-dessus de
Nagios. Toutes les configurations d'Oreon sont identiques à Nagios sauf
que celles-ci se font via une interface Web beaucoup plus agréable que
les modifications directes dans les fichiers de configurations de Nagios. Cela
dit, les configurations d'Oreon sont stockées dans une base de don
nées MySQL.
3.4.4 Contrôles des hôtes
Identique ã Nagios, Oreon n'est juste qu'une apparence
graphique un peu plus jolie que ce qui est offert par défaut avec
Nagios.
3.4.5 Gestions des utilisateurs
Encore une fois, comme Nagios (raÐÐelons qu'Oreon
n'est juste qu'une interface graÐhique au-dessus de Nagios), on peut
paramétrer les droits d'un ensemble d'utilisateurs8.
3.4.6 Conclusion
Oreon est difficile à faire fonctionner correctement.
Des bugs de session qui renvoient toujours vers l'interface de login. Un
Perfparse très dur ã installer. L'obligation d'avoir une base de
données MySQL pour stocker les configurations et données
statistiques. Bref beaucoup de petits problèmes mais je suis convaincu
qu'une fois bien configuré, cet outil sera indissociable de Nagios.
8 La gestion des utilisateurs sera expliquée dans les
configurations de Nagios.
3.4.7 Captures d'écran
3.4-1 : Aperçu du monitoring des services et des
hôtes 3.4-2 : Rapports et vues des problèmes
3.4-3 : Configuration d'Oreon 3.4-4 : Informations d'un
hôte
Monitoring d'une infrastructure Linux sur base d'outils
libres
3.5 Tableaux récapitulatifs des outils de
monitoring
Voici deux tableaux récapitulatifs des différents
logiciels testés précédemment.
Nom Installation Configuration Plugins Alertes
Plateformes Particularités Prix
(version/année) (dépôts)
(langage)
Nagios (v2.9/2007)
|
Via RPM (Dag Wieers)
|
Via fichiers textes Nombreux
développés en C ou Perl.
Nombreux tutos disponible sur Internet.
|
Mail, Pager, SMS, Voice,
NagiosChecker, Web, ?
|
Linux, compatible Unix
(C/Cgi)
|
Énormément de plugins créés par
les utilisateurs
|
Gratuit
|
OpManager (v7/2007)
|
Installateur .bin Via interface Web Pas de
possibilité
d'en développer mais achats possibles de plugins
pa rticu l iers.
|
Mail, Pager, SMS, Web, ?
|
Windows, Linux (Java)
|
Payant A partir de 800€
|
Cacti Via RPM (Dag Via interface Web Plusieurs
plugins Pas d'alerte, juste Unix/Linux avec Utilise Gratuit
(v0.8.6j) Wieers) mais pas vraiment
création des Apache, Windows abondamment
de tutos. graphiques avec IIS (PHP) RRDTool
|
|
Oreon A compiler Via interface Web Idem Nagios
Idem à Nagios Idem Nagios Couche au-dessus Gratuit
(v1.4) (mélange de de Nagios
PH P/Perl)
A coté de cela, il existe des solutions commerciales : HP
OpenView, IBM Tivoli & NetView, Cisco Works, Sun Net Manager, Mercury, ?
Leurs avantages Leurs inconvénients
Solutions globales et sûres.
Périmètre techniques et fonctionnels
étendus. Support
Coût d'acquisition et de support (surtout pour de
petites PME) Incompatibilités entre les fournisseurs (un seul
doit être installé) Développement additionnel
restreint et coûteux.
Au niveau des coûts, les solutions d'entrées de
gamme d'HP OpenView commencent dans les environs des 8 000€ (pour 250
noeuds) HT jusqu'ã 40 000€ HT pour un nombre illimité de
noeuds. Pour IBM Tivoli dans sa version Express pour les PME/PMI, les
premières licences commencent à environ 900€ HT.
Chapitre 4
Présentation des outils des outils de
sécurité
4 Les outils de sécurité
Avant de présenter les outils suivants, un petit rappel
sur les notions de firewall et d'IDS est nécessaire.
4.1 Le firewall (ou pare-feu)
Le firewall est un élément du réseau
informatique, logiciel et/ou matériel (dans le cas de Manex, il
s'agit d'un ASA 5510), qui a pour fonction de faire respecter la politique
de sécurité du réseau, celleci définissant quels
sont les types de communication autorisés ou interdits.
4.1.1 Présentation
Le pare-feu est aujourd'hui considéré comme un
outil indispensable dans la sécurité d'un réseau
informatique. Il permet d'appliquer une politique d'accès aux ressources
réseau (serveurs).
Il a pour principale tâche de contrôler le trafic
entre différentes zones de confiance, en filtrant les flux de
données qui y transitent. Généralement, les zones de
confiance incluent Internet (une zone dont la confiance est nulle), et
au moins un réseau interne (une zone dont la confiance est plus
importante).
Le but est de fournir une connectivité
contrôlée et maîtrisée entre des zones de
différents niveaux de confiance, grâce à l'application de
la politique de sécurité et d'un modèle de connexion
basé sur le principe du moindre privilège.
Le filtrage se fait selon divers critères. Les plus
courants sont :
|
l'origine ou la destination des paquets (adresse IP, ports
TCP ou UDP, interface réseau, etc.) les options contenues dans les
don nées (fragmentation, validité, etc.)
les données elles-mêmes (taille, correspondance
à un motif, etc.)
les utilisateurs, pour les plus récents
|
|
Un pare-feu fait souvent office de routeur et permet ainsi
d'isoler le réseau en plusieurs zones de sécurité
appelées zones démilitarisées ou DMZ. Ces zones sont
séparées suivant le niveau de confiance qu'on leur porte.
4.1.2 Les catégories
Les pare-feux sont le plus vieil équipement de
sécurité et comme tel, ils ont été soumis à
de nombreuses évolutions. Suivant la génération du
pare-feu ou son rôle précis, on peut les classer en
différentes catégories.
4.1.2.1 Pare-feu sans états (stateless
firewall)
C'est le plus vieux dispositif de filtrage réseau,
introduit sur les routeurs. Il regarde chaque paquet
indépendamment des autres et le compare à une
liste de règles préconfigurées.
Monitoring d'une infrastructure Linux sur base d'outils
libres
Ces règles peuvent avoir des noms très
différents en fonction du pare-feu: "ACL" pour Access Control List
(certains pare-feux Cisco) ;
politiq ue ou policy (pare-feux Juniper/Netscreen) ;
filtre...
La configuration de ces dispositifs est souvent complexe et
l'absence de prise en compte des machines à états des protocoles
réseaux ne permet pas d'obtenir une finesse du filtrage très
évoluée. Ces pare-feu ont donc tendance à tomber en
désuétude mais restent présents sur certains routeurs ou
systèmes d'exploitation.
4.1.2.2 Pare-feu à états (stateful
firewall)
Certains protocoles dits « à états »
comme TCP introduisent une notion de connexion. Les pare-feu à
états vérifient la conformité des paquets pour une
connexion en cours. C'est-à-dire qu'ils vérifient que chaque
paquet d'une connexion est bien la suite du précédent paquet et
la réponse à un paquet dans l'autre sens. Ils savent aussi
filtrer intelligemment les paquets ICMP qui servent à la signalisation
des flux IP.
4.1.2.3 Pare-feu applicatif
Dernière mouture de pare-feu, ils vérifient la
complète conformité du paquet à un protocole attendu. Par
exemple, ce type de pare-feu permet de vérifier que seul du HTTP passe
par le port TCP 80. Ce traitement est très gourmand en temps de calcul
dès que le débit devient très important; il est
justifié par le fait que de plus en plus de protocoles réseaux
utilisent un tunnel TCP pour contourner le filtrage par ports.
|
Conntrack (suivi de connexion) et l7 Filter
(filtrage applicatif) sur Linux Netfilter CBAC sur Cisco IOS
Fixup puis inspect sur Cisco PIX
|
|
4.1.2.4 Pare-feu personnel
Les pare-feu personnels, généralement
installés sur une machine de travail, agissent comme un pare-feu
à états. Bien souvent, ils vérifient aussi quel programme
est à l'origine des données. Le but est de lutter contre les
virus et les spywares.
Zone Alarm
Look'n'StoÐ
Kaspersky Internet Security
?
4.2 Système de détection d'intrusions
(IDS)
Un système de détection d'intrusions (ou IDS :
Intrusion Detection System) est un mécanisme destiné à
repérer des activités anormales ou suspectes sur la cible
analysée (un réseau ou un hôte). Il permet ainsi d'avoir
une action de prévention sur les risques d'intrusion.
4.2.1 Une petite histoire : le voleur, le videur et la
caméra cachée
Pour illustrer ces notions de sécurité, une petite
analogie9 :
Dans cette histoire, le videur peut être faillible et
ne voit pas tout car il y a toujours des malins qui grâce à de
divers techniques tels l'attaque à fragmentation IP, usurpation ou vol
d'identité (adresse IP), trompent le videur.
On peut voir le pare-feu comme un videur devant un casino qui
peut décider d'autoriser ou non en regardant sa tête (ou
en-tête dans le cas d'un pare-feu du type packet filtering)
l'entrée d'une personne, tandis que la détection d'intrusion
serait plutôt une caméra cachée qui peut être
placée à l'entrée ou à l'intérieur du
casino.
Si la caméra cachée filme la personne qui entre et
en procédant à une analyse reconnaît
cette personne, elle va alerter la direction la présence
d'un intrus potentiellement dangereux pour le casino.
La caméra cachée apporte donc un rôle
complémentaire au rôle joué par le videur.
4.2.2 Les deux familles de systèmes de
détection d'intrusion
Il existe deux grandes familles distinctes d'IDS :
|
Les N-IDS (Network Based Intrusion Detection System),
qui surveillent l'état de la sécurité au niveau du
réseau.
Les H-IDS (HostBased Intrusion Detection System), qui
surveillent l'état de la sécurité au niveau des
hôtes.
|
|
Ce qui distingue fondamentalement ces deux types d'IDS, c'est
leur mode de fonctionnement :
Le premier mode s'appuie sur des
bibliothèques de signatures (approche par scénario). La
démarche d'analyse est similaire ã celle de l'antivirus quand
ceux-ci s'appuient sur des signatures d'attaques. Ainsi, l'IDS est efficace
s'il connaît l'attaque, mais inefficace dans le cas contraire. Les outils
commerciaux ou libres ont évolué pour proposer une
personnalisation de la signature afin de faire face à des attaques dont
on ne connaît qu'une partie des éléments. Les outils
à base de signatures requièrent des mises à jour
très régulières.
Le second mode de fonctionnement
des IDS s'appuie sur une analyse comportementale. Un H-IDS se comporte comme un
daemon ou un service standard sur un système hôte qui
détecte une activité suspecte en s'appuyant sur une norme. Si les
activités s'éloignent de la norme, une alerte est
générée. Au préalable, l'IDS doit alors apprendre
le comportement du réseau pour établir la norme. L'analyse porte
sur l'usage du réseau (protocoles, volumétrie, horaires
d'activité, congestion et erreurs), l'activité d'une machine
(nombre et listes de processus et d'utilisateurs, et ressources
9 J'ai trouvé cette petite analogie sur
http://www-igm.univ-mlv.fr/~dr/XPOSE2001/liyun/IDS.html
qui m'a bien
fait comprendre le but d'un IDS.
Monitoring d'une infrastructure Linux sur base
d'outils libres
consommées) et l'activité d'un
utilisateur (horaires et durée des connexions, commandes
utilisées, messages envoyés, programmes activés, etc.).
Ces outils s'appuient essentiellement sur des calculs statistiques.
Un autre type d'H-IDS cherche les intrusions dans le «
noyau » (kernel) du système, et les modifications qui y
sont apportées. Certains appellent cette technique « analyse
protocolaire ». Très rapide, elle ne nécessite pas de
recherche dans une base de signature.
Chacun de ces deux types d'IDS s'adresse ã des besoins
spécifiques. Les H-IDS sont particulièrement efficaces pour
déterminer si un hôte est contaminé et les N-IDS permettent
de surveiller l'ensemble d'un réseau contrairement ã un H-IDS qui
est restreint à un hôte.
Snort est un IDS.
4.3 Nessus
Nessus est un outil de sécurité informatique. Il
signale les faiblesses potentielles ou avérées sur les machines
testées.
Ceci inclut, entre autres :
les services vulnérables à des attaques
permettant la prise de contrôle de la machine, l'accès à
des informations sensibles (lecture de fichiers confidentiels par exemple),
des dénis de service...
les fautes de configuration (relais de messagerie ouvert par
exemple)
les patchs de sécurité non appliqués, que
les failles corrigées soient exploitables ou non dans la configuration
testée
les mots de passe par défaut, quelques mots de passe
communs, et l'absence de mots de passe sur certains comptes systèmes.
Nessus peut aussi appeler le programme externe Hydra pour attaquer les mots de
passe à l'aide d'un dictionnaire.
les services jugés faibles (on suggère par
exemple de remplacer Telnet par SSH) les dénis de service contre la
pile TCP/IP
support multiplateformes : Linux, FreeBSD, Solaris, Mac OS X,
Windows
Site web du produit :
http://www.nessus.org
4.3.1 Pré requis
? nessus-libraries
? libnasl
? nessus-core
? nessus-plugins
4.3.2 Installation
L'installation est rapide et simple. Il faut juste l'installer
dans l'ordre ci-dessus.
4.3.3 Configuration
Tout d'abord, nous devons ajouter des utilisateurs qui
possèderont des droits. Les utilisateurs
peuvent se connecter via mot de passe ou par certificat (non
testé). Nessus permet éventuellement
d'en créer.
Une fois cette tâche accomplie, nous pouvons lancer un scan
des PC que l'on souhaite interroger.
4.3.4 Particularité
Nessus se compose d'un serveur et d'un client. Le serveur est
celui qui va scanner les divers ports du PC cible et le client, quant à
lui, donnera les ordres au serveur. Le client peut se trouver sur le serveur ou
être distant.
Il existe des clients sous Windows, Linux et autres OS avec
interface graphique ou en mode console.
4.3.5 Fonctionnement
Lorsqu'un test (testé avec le client Windows) est
terminé, Nessus nous retourne une page web de
résultats avec les différents ports ã
problèmes trouvés. Nessus est composé d'une multitude
de
plugins qui viennent augmenter le nombre de tests vers la machine
cible.
4.3.6 Deux versions
Il existe deux versions de Nessus. Une payante et une gratuite.
La différence se trouve principalement sur les plugins. Lorsqu'on prend
la version payante (1200$), on a accès directement
Monitoring d'une infrastructure Linux sur base d'outils
libres
aux dernières mises à jour et plugins. La version
gratuite sera toujours sept jours en retard par
rapport à la version payante. De plus, avec la version
payante, nous bénéficions du support technique, un accès
ã un portail d'utilisateurs, la possibilité d'avoir des plugins
pour les périphériques
SCADA, et enfin des tests automatiques réguliers vers les
serveurs.
4.3.7 Tests
Voici différents tests que j'ai effectués contre
Windows et Linux.
4.3.7.1 Contre Windows XP SP2
Comme premier test, j'ai essayé d'attaquer un ordinateur
sur réseau local avec le firewall XP SP2
désactivé. Les résultats ne se sont pas fait
attendre : 4 Open Ports (139 - netbios-ssn, 135 - epmap,
icmp, 137 - netbios-ns), 20 Notes, 2 Warnings, 1 Holes
(445 microsoft-ds).
Deuxième test, réactivons le firewall d'XP SP2... A
l'étonnement de tout le monde, aucun problème n'a
été découvert par Nessus.
Troisième test, Windows XP SP2 avec Kaspersky Security
6.0.2 dont le firewall est réglé en mode protection Maximale
(Bloquer toutes les connexions qui ne sont pas autorisées par les
règles). Résultats similaire. Aucun problème si le
firewall est activé.
4.3.7.2 Contre Windows XP SP2 en
local
Tests suivants, ce test un peu plus particulier car il est
effectué en local sur ma machine disposant de Kaspersky.
Premier test, en local avec Kaspersky désactivé :
6 Open Ports, 21 Notes, 1 Warnings, 1 Holes.
Deuxième test, en local avec Kaspersky activé en
Protection Maximale : 2 Open Ports, 15 Notes, 1 Warnings, 1 Holes.
Dernier test, en local avec Kaspersky activé et en
Bloquant tout les trafics : le scan de Nessus ne
voulait tout simplement pas se lancer.
4.3.7.3 Contre des serveurs Linux
J'ai effectué des tests ã l'encontre des serveurs
de la DMZ de chez Manex.
Nessus détectait les ports volontairement ouverts que se
soit HTTP, IMAP(S), SMTP(S), ... Cela dit, les serveurs sont tous
équipés d'iptables rigoureusement paramétrés et de
l'ASA pour le reste. Les seuls réels problèmes, c'est que Nessus
recommandait de désactiver le service SMTP ou de
passer à un service SMTPS.
4.3.8 Conclusion
Dans le rapport que Nessus nous donne après un scan, s'y
trouve non seulement la liste des ports
ouverts, mais aussi des conseils pour régler ces trous de
sécurité. Il est bien entendu possible d'archiver les
résultats, de définir ses propres tests sur des plages de ports
ou via certains types
d'attaques.
4.3.9 Captures d'écran
4.3-1 : Le client Nessus pour Windows 4.3-2 :
Résultats d'un scan (IMAPS)
4.3-3 : Vérifications des patchs de mise à
jour Microsoft 4.3-4 : Différentes possibilités de
scan
Lemaire Geoffrey 32 Haute Ecole Rennequin Sualem
4.4 Snort
Snort est capable d'effectuer en temps réel des
analyses de trafic et de logger les paquets sur un réseau IP. Il peut
effectuer des analyses de protocole, recherche/correspondance de contenu et
peut être utilisé pour détecter une grande
variété d'attaques et de sondes comme des dépassements de
buffers, scans, attaques sur des CGI, sondes SMB, essai d'OS fingerprintings et
bien plus. Cependant, comme tout logiciel, Snort n'est pas infaillible et
demande une mise à jour régulière.
Snort peut également être utilisé avec
d'autres projets open sources tels que SnortSnarf, ACID, sguil et BASE
(Basic Analysis and Security Engine) afin de fournir une
représentation visuelle des données concernant les
éventuelles intrusions.
Dans notre cas, j'utilise BASE pour la représentation
visuelle.
Site web du prod uit :
http://www.snort.org
4.4.1 L'abonnement
Il existe trois types d'utilisateurs pour Snort au niveau des
règles de sécurités.
Le premier est pour l'utilisateur non enregistré
sur le site reçoit un set de sécurité statique pour
chaque Release Majeur de Snort.
Le second (dans mon cas) est l'utilisateur enregistré
sur le site. On peut dès lors avoir accès à des
règles mises à jour tout les 30 jours après les
utilisateurs abonnés.
Enfin, le troisième, l'utilisateur abonné.
Ce dernier recevra en temps réel les mises à jour dès
qu'elles sont disponibles.
Voici les prix :
4.4.2 Pré requis
SNORT requiert peu de chose pour pouvoir s'installer. Par
contre BASE (v1.3.6) requiert une base de données MySQL et
plusieurs packages de PEAR sont requis. Une petite modification dans iptables
est requise aussi. Il s'agit d'ouvrir tout les ports en entrée et en
sortie pour que Snort puisse recevoir et analyser les paquets.
4.4.3 Installation
Comme spécifié dans le pré requis, SNORT
ne requiert que peu de choses à faire. Il est disponible sur les
dépôts de Dag Wieers (v. 2.3.3) mais suite à quelques
problèmes notamment du coté des «Configure dynamic loaded
libraries» qui ne voulaient pas se charger, j'ai décidé
d'aller chercher les RPMs pour RHEL4 sur le site de Snort et j'ai
installé Snort à partir de là. Quand à BASE, une
fois
SNORT configuré en daemon, il s'installe via une interface
Web sans encombre si le compte MySQL est bien réglé.
4.4.4 Configuration
Aucune configuration particulière. Juste dans le
fichier de configuration, on peut définir l'adresse du réseau que
Snort doit monitorer et l'endroit où se trouvent les règles de
sécurités. On doit ensuite indiquer à Snort qu'il doit
envoyer ses logs vers une base de données MySQL. Enfin, on lance le
daemon SNORT et quelques heures plus tard, il ne se passe rien...
4.4.5 Tests avec Nessus
Si rien ne se passe, provoquons des attaques?
L'attaquant : 192.168.1.14 L'attaqué : 192.168.1.11
Le résultat ne s'est pas fait attendre :
# tail -f /var/log/snort/alert
05/23-15:29:47.059534 (**] (1:1418:11] SNMP request tcp (**]
(Classification: Attempted Information Leak] (Priority: 2] {TCP}
192.168.1.14:4647 -> 192.168.1.11:161
05/23-15:29:47.059559 (**] (1:1420:11] SNMP trap tcp (**]
(Classification: Attempted Information Leak] (Priority: 2] {TCP}
192.168.1.14:4647 -> 192.168.1.11:162
Monitoring d'une infrastructure Linux sur base d'outils
libres
05/23-15:35:34.893804 [**] [116:54:1] (snort_decoder): Tcp
Options found with bad lengths [**] {TCP} 192.1 68.1 .14:22362 -> 192.1 68.1
.11:389
05/23-15:35:34.893839 [**] [116:54:1] (snort_decoder): Tcp
Options found with bad lengths [**] {TCP} 192.1 68.1 .14:22362 -> 192.1 68.1
.11:389
05/23-15:35:44.928871 [**] [116:4:1] (snort_decoder): Ipv4
Options found with bad lengths [**] {TCP} 192.1 68.1 .14:80 -> 192.1 68.1
.11:80
05/23-15:35:44.928909 [**] [116:4:1] (snort_decoder): Ipv4
Options found with bad lengths [**] {TCP} 192.1 68.1 .14:80 -> 192.1 68.1
.11:80
05/23-15:35:44.928941 [**] [116:4:1] (snort_decoder): Ipv4
Options found with bad lengths [**] {TCP} 192.1 68.1 .14:80 -> 192.1 68.1
.11:80
05/23-15:35:44.928974 [**] [116:4:1] (snort_decoder): Ipv4
Options found with bad lengths [**] {TCP} 192.1 68.1 .14:80 -> 192.1 68.1
.11:80
05/23-15:35:44.929057 [**] [116:4:1] (snort_decoder): Ipv4
Options found with bad lengths [**] {TCP} 192.1 68.1 .14:80 -> 192.1 68.1
.11:80
05/23-15:35:44.929100 [**] [116:4:1] (snort_decoder): Ipv4
Options found with bad lengths [**] {TCP} 1 92.1 68.1 .14:80 -> 192.1 68.1
.11:80
05/23-15:35:44.929132 [**] [116:4:1] (snort_decoder): Ipv4
Options found with bad lengths [**] {TCP} 192.1 68.1 .14:80 -> 192.1 68.1
.11:80
05/23-15:35:44.9291 79 [**] [116:4:1] (snort_decoder): Ipv4
Options found with bad lengths [**] {TCP} 1 92.1 68.1 .14:80 -> 192.1 68.1
.11:80
05/23-15:35:44.929211 [**] [116:4:1] (snort_decoder): Ipv4
Options found with bad lengths [**] {TCP} 192.1 68.1 .14:80 -> 192.1 68.1
.11:80
05/23-15:35:44.929242 [**] [116:4:1] (snort_decoder): Ipv4
Options found with bad lengths [**] {TCP} 192.1 68.1 .14:80 -> 192.1 68.1
.11:80
05/23-15:35:54.931508 [**] [116:54:1] (snort_decoder): Tcp
Options found with bad lengths [**] {TCP} 192.1 68.1 .14:31658 -> 192.1 68.1
.11:31658 05/23-15:35:55.932433 [**] [116:4:1] (snort_decoder): Ipv4 Options
found with bad lengths [**] {PROTO170} 192.1 68.1 .14 -> 192.1 68.1
.11
05/23-15:35:55.932465 [**] [116:4:1] (snort_decoder): Ipv4
Options found with bad lengths [**] {PROTO170} 192.1 68.1 .14 -> 192.1 68.1
.11
05/23-15:35:55.932495 [**] [116:4:1] (snort_decoder): Ipv4
Options found with bad lengths [**] {PROTO170} 192.1 68.1 .14 -> 192.1 68.1
.11
05/23-15:35:55.932524 [**] [116:4:1] (snort_decoder): Ipv4
Options found with bad lengths [**] {PROTO170} 192.1 68.1 .14 -> 192.1 68.1
.11
05/23-15:35:55.932592 [**] [116:4:1] (snort_decoder): Ipv4
Options found with bad lengths [**] {PROTO170} 192.1 68.1 .14 -> 192.1 68.1
.11
05/23-15:35:55.932632 [**] [116:4:1] (snort_decoder): Ipv4
Options found with bad lengths [**] {PROTO170} 192.1 68.1 .14 -> 192.1 68.1
.11
05/23-15:35:55.932662 [**] [116:4:1] (snort_decoder): Ipv4
Options found with bad lengths [**] {PROTO170} 192.1 68.1 .14 -> 192.1 68.1
.11
05/23-15:29:48.052402 [**] [1 :1421:11] SNMP AgentX/tcp
request [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 1
92.1 68.1 .14:4 64 7 -> 192.168.1.11:705 05/23-15:29:50.053122 [**] [1
:1421:11] SNMP AgentX/tcp request [**] [Classification: Attempted Information
Leak] [Priority: 2] {TCP} 1 92.1 68.1 .14:4 64 7 -> 192.168.1.11:705
05/23-15:29:50.315235 [**] [1 :1420:11] SNMP trap tcp [**] [Classification:
Attempted Information Leak] [Priority: 2] {TCP} 192.168.1.14:4647 -> 192.1
68.1 .11:1 62
05/23-15:29:50.316245 [**] [1 :1418:11] SNMP request tcp [**]
[Classification: Attempted Information Leak] [Priority: 2] {TCP}
192.168.1.14:4647 -> 192.1 68.1 .11:1 61 05/23-15:29:52.053797 [**] [1
:1421:11] SNMP AgentX/tcp request [**] [Classification: Attempted Information
Leak] [Priority: 2] {TCP} 1 92.1 68.1 .14:4 64 7 -> 192.168.1.11:705
05/23-15:29:52.316913 [**] [1 :1420:11] SNMP trap tcp [**] [Classification:
Attempted Information Leak] [Priority: 2] {TCP} 192.168.1.14:4647 -> 192.1
68.1 .11:1 62 05/23-15:29:52.317919 [**] [1 :1418:11] SNMP request tcp [**]
[Classification: Attempted Information Leak] [Priority: 2] {TCP}
192.168.1.14:4647 -> 192.1 68.1 .11:1 61 05/23-15:30:19.043407 [**] [1 :4 69
:4] ICMP PING NMAP [**] [Classification: Attempted Information Leak] [Priority:
2] {ICMP} 192.1 68.1 .14 -> 192.1 68.1 .11 05/23-15:30:33.410074 [**] [1
:1444:3] TFTP Get [**] [Classification: Potentially Bad Traffic] [Priority: 2]
{UDP} 192.1 68.1 .14:11670 -> 192.168.1.11:69
05/23-15:30:34.416906 [**] [1 :1444:3] TFTP Get [**]
[Classification: Potentially Bad Traffic] [Priority: 2] {UDP} 192.1 68.1
.14:11670 -> 192.168.1.11:69
05/23-15:30:35.42373 7 [**] [1 :1444:3] TFTP Get [**]
[Classification: Potentially Bad Traffic] [Priority: 2] {UDP} 192.1 68.1
.14:11670 -> 192.168.1.11:69
05/23-15:30:48.020705 [**] [1 :524:8] BAD-TRAFFIC tcp port 0
traffic [**] [Classification: Misc activity] [Priority: 3] {TCP} 192.1 68.1
.14:29019 -> 192.1 68.1 .11:0
05/23-15:30:50.02 73 71 [**] [1 :524:8] BAD-TRAFFIC tcp port
0 traffic [**] [Classification: Misc activity] [Priority: 3] {TCP} 192.1 68.1
.14:29019 -> 192.1 68.1 .11:0 05/23-15:30:52.035044 [**] [1 :524:8]
BAD-TRAFFIC tcp port 0 traffic [**] [Classification: Misc activity] [Priority:
3] {TCP} 192.1 68.1 .14:29019 -> 192.1 68.1 .11:0 05/23-15:33:20.013863 [**]
[1 :221:5] DDOS TFN Probe [**] [Classification: Attempted Information Leak]
[Priority: 2] {ICMP} 192.1 68.1 .14 -> 192.1 68.1 .11
05/23-15:33:56.69904 7 [**] [1 :4 75 :4] ICMP traceroute
ipopts [**] [Classification: Attempted Information Leak] [Priority: 2] {ICMP}
192.1 68.1 .1 1 -> 1 92.1 68.1 .14 05/23-15:35:34.893696 [**] [116:54:1]
(snort_decoder): Tcp Options found with bad lengths [**] {TCP} 1 92.1 68.1
.14:22362 -> 192.168.1.11:389
05/23-15:35:34.893735 [**] [116:54:1] (snort_decoder): Tcp
Options found with bad lengths [**] {TCP} 1 92.1 68.1 .14:22362 ->
192.168.1.11:389
05/23-15:35:34.893772 [**] [116:54:1] (snort_decoder): Tcp
Options found with bad lengths [**] {TCP} 1 92.1 68.1 .14:22362 ->
192.168.1.11:389
Monitoring d'une infrastructure Linux sur base d'outils
libres
05/23-15:35:55.932702 [**] [116:4:1] (snort_decoder): Ipv4
Options found with bad lengths [**] {PROTO1 70} 192.168.1.14 -> 1 92.1 68.1
.1 1
05/23-15:35:55.932731 [**] [116:4:1] (snort_decoder): Ipv4
Options found with bad lengths [**] {PROTO1 70} 192.168.1.14 -> 1 92.1 68.1
.1 1
05/23-15:35:55.932759 [**] [116:4:1] (snort_decoder): Ipv4
Options found with bad lengths [**] {PROTO170} 192.1 68.1 .14 -> 192.1 68.1
.11
05/23-15:36:05.934681 [**] [1 :525:9] BAD-TRAFFIC udp port 0
traffic [**] [Classification: Misc activity] [Priority: 3] {UDP} 192.1 68.1
.14:1234 -> 192.1 68.1 .11:0 05/23-15:36:05.934714 [**] [1 :525:9]
BAD-TRAFFIC udp port 0 traffic [**] [Classification: Misc activity] [Priority:
3] {UDP} 192.1 68.1 .14:1234 -> 192.1 68.1 .11:0 05/23-15:36:05.934742 [**]
[1 :525:9] BAD-TRAFFIC udp port 0 traffic [**] [Classification: Misc activity]
[Priority: 3] {UDP} 192.1 68.1 .14:1234 -> 192.1 68.1 .11:0
05/23-15:36:05.934771 [**] [1 :525:9] BAD-TRAFFIC udp port 0 traffic [**]
[Classification: Misc activity] [Priority: 3] {UDP} 192.1 68.1 .14:1234 ->
192.1 68.1 .11:0 05/23-15:36:05.934823 [**] [1 :525:9] BAD-TRAFFIC udp port 0
traffic [**] [Classification: Misc activity] [Priority: 3] {UDP} 192.1 68.1
.14:1234 -> 192.1 68.1 .11:0 05/23-15:36:05.934854 [**] [1 :525:9]
BAD-TRAFFIC udp port 0 traffic [**] [Classification: Misc activity] [Priority:
3] {UDP} 192.1 68.1 .14:1234 -> 192.1 68.1 .11:0 05/23-15:36:05.934882 [**]
[1 :525:9] BAD-TRAFFIC udp port 0 traffic [**] [Classification: Misc activity]
[Priority: 3] {UDP} 192.1 68.1 .14:1234 -> 192.1 68.1 .11:0
05/23-15:36:05.934910 [**] [1 :525:9] BAD-TRAFFIC udp port 0 traffic [**]
[Classification: Misc activity] [Priority: 3] {UDP} 192.1 68.1 .14:1234 ->
192.1 68.1 .11:0 05/23-15:36:05.93493 7 [**] [1 :525:9] BAD-TRAFFIC udp port 0
traffic [**] [Classification: Misc activity] [Priority: 3] {UDP} 192.1 68.1
.14:1234 -> 192.1 68.1 .11:0 05/23-15:36:05.934966 [**] [1 :525:9]
BAD-TRAFFIC udp port 0 traffic [**] [Classification: Misc activity] [Priority:
3] {UDP} 192.1 68.1 .14:1234 -> 192.1 68.1 .11:0 05/23-15:36:35.945745 [**]
[1 :2 74:6] DOS ath [**] [Classification: Attempted Denial of Service]
[Priority: 2] {ICMP} 192.1 68.1 .14 -> 192.168.1.11
05/23-15:38:20.82 6466 [**] [116:151:1] (snort decoder) Bad
Traffic Same Src/Dst IP [**] {TCP} 192.1 68.1 .11:389 ->
192.168.1.11:389
4.4.6 Conclusion
Du fait de l'environnement de test dans lequel je suis, je
n'ai pas pu réellement tester SNORT. Beaucoup d'attaques étant
filtrées par l'ASA et par les iptables. Cependant, grâce à
Nessus, j'ai pu simuler des attaques à l'encontre d'un serveur et c'est
justement le rôle de Snort, voir des paquets pas très logique
à l'encontre du serveur et les répertorier.
On peut voir que Nessus fait bien son travail. On retrouve
donc notamment des attaques DOS (Denial of Service), il essaye de
récupérer diverses informations via SNMP, envois des paquets
traffiqués (avec des options de tailles différentes)
pour s'introduire dans le serveur, des attaques ICMP,? Cependant, Base ne
relève rien du tout ni dans la base de donnée MySQL...
Peut-être un petit problème entre Snort et Mysql...
4.5 Nmap
Nmap est un scanner de ports open source créé
par Fyodor et distribué par
Insecure.Org. Il est conçu pour
détecter les ports ouverts, les services hébergés et les
informations sur le système d'exploitation d'un ordinateur distant. Ce
logiciel est devenu une référence pour les administrateurs
réseaux car l'audit des résultats de Nmap fournit des indications
sur la sécurité d'un réseau.
Site web du logiciel :
http://www.insecure.org/nmap/
4.5.1 Installation
Il s'installe très facilement via les dépôts
de Red Hat (v4.11). Il est utilisable sans configuration
particulière hormis des iptables oz j'ai dû ouvrir tout les ports
en sortie.
4.5.2 Fonctionnement
Pour scanner les ports d'un ordinateur distant, Nmap utilise
diverses techniques d'analyse basées sur
des protocoles tels que TCP, IP, UDP ou ICMP.
De même, il se base sur les réponses
particulières qu'il obtient à des requêtes
particulières pour obtenir une empreinte de la pile IP, souvent
spécifique du système qui l'utilise. C'est par cette
méthode que l'outil permet de reconnaitre la version d'un système
d'exploitation et aussi la version
des services en écoute.
Le code source est disponible sous la licence GNU GPL.
4.5.3 Les premiers scans
Effectuons un premier scan. Le côté pratique de nMap
est qu'il permet de scanner une plage d'IP et d'indexer tout les ports
ouverts.
Tout d'abord qui a-t-il sur notre réseau ?
# nmap -sP 192.1 68.1 .0/24
Starting Nmap 4.11 (
http://www.insecure.org/nmap/
) at 2007-05-22 14:20 CEST
Host
mx1rtr1.manex.be
(192.1 68.1 .1) appears to be up. MAC Address: 00:19:2F:83:65:86
(Unknown)
Host
mxisrv1.manex.be
(192.1 68.1 .11) appears to be up. MAC Address: 00:14:5E:29:9A:A4
(IBM)
Host
mxisrv2.manex.be
(192.1 68.1 .12) appears to be up. MAC Address: 00:11:25:AC:B4:C1
(IBM)
Host
mxisrv3.manex.be
(192.1 68.1 .13) appears to be up. MAC Address: 00:0D:93:9E:82:B8 (Apple
Computer) Host
mxisrv4.manex.be
(192.1 68.1 .14) appears to be up. Host
mxisrv6.manex.be
(192.1 68.1 .1 6) appears to be up.
MAC Address: 00:0A:EB:2F:A2:D2 (Shenzhen Tp-Link
Technology Co;) Nmap finished: 256 IP addresses (6 hosts up) scanned in 4.970
seconds
Monitoring d'une infrastructure Linux sur base d'outils
libres Voyons le résultat des ports ouverts avec :
8009/tcp open ajp13
8080/tcp open http-proxy
12345/tcp open NetBus
MAC Address: 00:0D:93:9E:82:B8 (Apple
Computer)
Interesting ports on
mxisrv4.manex.be
(1 92.1 68.1 .14): Not shown: 1675 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
199/tcp open smux
1241/tcp open nessus
3306/tcp open mysql
Interesting ports on
mxisrv6.manex.be
(1 92.1 68.1 .1 6):
Not shown: 1669 filtered ports PORT STATE
SERVICE
20/tcp closed ftp-data
21/tcp open ftp
80/tcp open http
88/tcp closed kerberos-sec 135/tcp open
msrpc
139/tcp open netbios-ssn 389/tcp closed
ldap
445/tcp open microsoft-ds 548/tcp open afpovertcp
1026/tcp closed LSA-or-nterm 3389/tcp open ms-term -serv
MAC Address: 00:0A:EB:2F:A2:D2 (Shenzhen Tp-Link
Technology Co;) Nmap finished: 20 IP addresses (6 hosts up) scanned in 54.935
seconds
# nmap 192.168.1.1-20
Starting Nmap 4.11 (
http://www.insecure.org/nmap/
) at 2007-05-22 14:24 CEST
All 1680 scanned ports on
mx1rtr1.manex.be
(192.1 68.1 .1) are closed MAC Address: 00:19:2F:83:65:86
(Unknown)
Interesting ports on
mxisrv1.manex.be
(1 92.1 68.1 .11): Not shown: 1679 filtered ports
PORT STATE SERVICE
389/tcp open ldap
MAC Address: 00:14:5E:29:9A:A4 (IBM)
All 1680 scanned ports on
mxisrv2.manex.be
(192.1 68.1 .12) are filtered MAC Address: 00:11:25:AC:B4:C1
(IBM)
Interesting ports on
mxisrv3.manex.be
(1 92.1 68.1 .13):
Not shown: 1661 closed ports PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
106/tcp open pop3pw 111/tcp open rpcbind 311/tcp open
asip-webadmin 427/tcp open svrloc 548/tcp open afpovertcp 625/tcp open unknown
749/tcp open kerberos-adm 1012/tcp open unknown 1014/tcp open unknown 1015/tcp
open unknown 2049/tcp open nfs
4444/tcp open krb524 5432/tcp open postgres 5900/tcp
open vnc
4.5.4 D'autres options
On Ðeut demander ã nMaÐ de déterminer quel
est l'OS des systèmes scannés avec l'oÐtion « -O »
ainsi que l'identification des services « -sV ».
Voici ce que cela donne pour un serveur : # nmap -O
-sV 192.168.1.16
Starting Nmap 4.11 (
http://www.insecure.org/nmap/
) at 2007-05-22 16:03 CEST Interesting ports on
mxisrv6.manex.be
(192.1 68.1 .16):
Not shown: 1669 filtered ports
PORT STATE SERVICE VERSION
20/tcp closed ftp-data
21/tcp open ftp Microsoft ftpd
80/tcp open http Microsoft IIS webserver
5.1
88/tcp closed kerberos-sec
135/tcp open msrpc Microsoft Windows
RPC
139/tcp open netbios-ssn 389/tcp closed ldap
445/tcp open netbios-ssn 548/tcp open afpovertcp? 1026/tcp
closed LSA-or-nterm
3389/tcp open microsoft-rdp Microsoft Terminal
Service
MAC Address: 00:0A:EB:2F:A2:D2 (Shenzhen Tp-Link Technology
Co;)
Device type: general purpose
Running: Microsoft Windows NT/2K/XP
OS details: Microsoft Windows XP Pro SP1 or Windows
2000 Advanced Server SP3
Service Info: OS: Windows
Nmap finished: 1 IP address (1 host up) scanned in 126.166
seconds
Réessayons sur un serveur linux?
# nmap -O -sV 192.168.1.14
Starting Nmap 4.11 (
http://www.insecure.org/nmap/
) at 2007-05-22 16:09 CEST Interesting ports on
mxisrv4.manex.be
(192.1 68.1 .14):
Not shown: 1675 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 3.9p1 (protocol
1.99)
80/tcp open http Apache httpd
199/tcp open smux Linux SNMP
multiplexer
1241/tcp open ssl/unknown
3306/tcp open mysql MySQL
(unauthorized)
Device type: general purpose
Running: Linux 2.4.X|2.5.X|2.6.X
OS details: Linux 2.5.25 - 2.6.8 or Gentoo 1.2 Linux
2.4.19 rc1-rc7, Linux 2.6.3 - 2.6.10 Uptime 12.976 days (since Wed May 9
16:43:23 2007)
Service Info: OS: Linux
Nmap finished: 1 IP address (1 host up) scanned in 8.132
seconds
Monitoring d'une infrastructure Linux sur base d'outils
libres On peut aussi demander à scanner un range de ports ou
tous (65535) : # nmap -p U:53,111,137,
T:21-25,80,139,8080
# nmap -p1-65535 192.1 68.1 .11
4.5.5 Conclusion
nMap est un outil pratique pour une indexation rapide des
ordinateurs présents sur le réseaux et de
leurs ports ouverts.
4.6 MBSA de Microsoft
Il m'a été demandé de tester aussi une des
solutions de Microsoft pour comparer aux résultats de Nessus. Voyons
cela?
4.6.1 Présentation
Pour répondre à la demande formulée par
certains clients d'une méthode rationnelle d'identification des erreurs
de configuration de la sécurité les plus fréquentes,
Microsoft a développé Microsoft Baseline Security Analyzer
(MBSA). La version 2.0.1 de MBSA comprend une interface graphique et une
interface de ligne de commande qui peuvent effectuer l'analyse locale ou
distante de systèmes Windows. MBSA s'exécute sur Windows Server
2003, Windows 2000 et Windows XP et peut repérer des failles dans la
configuration de sécurité des produits suivants : Windows 2000,
Windows XP, Windows Server 2003, Internet Information Server (IIS) 5.0 et 6.0,
SQL Server 7.0 et 2000, Internet Explorer 5.01 et versions ultérieures,
ainsi qu'Office 2000, 2002 et 2003. MBSA recherche également les mises
à jour de sécurité, correctifs cumulatifs et Service Packs
publiés par Microsoft Update qui ne sont pas installés.
4.6.2 Installation
On peut télécharger gratuitement la dernière
version du MBSA sur le site de Microsoft à condition bien entendu
d'avoir une version originale de Windows.
4.6.3 Tests
Testons le MBSA sur mon portable qui a servi
précédemment pour Nessus. Le test a été
effectué sans
firewall et avec firewall Kaspersky. Résultat, rien de
bien alarmant, les résultats sont les mêmes avec ou sans la
présence de Kaspersky.
4.6.4 Conclusion
MBSA est un produit Microsoft donc que pour ses derniers OS. Le
logiciel est clair, l'analyse rapide et de bons conseils sont donnés
quant à la résolution d'éventuels problèmes.
4.6.5 Captures d'écran
Résultats avec et sans firewall :
4.6-1 : Résultats du MBSA
4.6-2 : Suite des résultats
4.6-3 : Suite des résultats
4.6-4 : Fin des résultats
Chapitre 5
d'autres outils
5 Les outils indispensables 5.1
Net-SNMP
Net-SNMP est un ensemble d'applications utilisées pour
implémenter le protocole SNMP (v1, v2c & v3) utilisant ã la
fois l'IPv4 & IPv6. La suite inclut :
Des applications en ligne de commande :
o Rechercher des informations SNMP en employant des demandes
simples (snmpget, snmpgetnext), ou des demandes multiples (snmpwalk, snmptable,
snmpdelta)
o Manipuler des informations de configuration sur des
périphériques compatibles SNMP (snmpset)
o Recevoir une collection fixée d'informations d'un
périphérique compatible SNMP (snmpdf, snmpnetstat, snmpstatus)
o Convertir entre les formes numériques et textuelles
d'OIDs de MIB et montrer le contenu de MIB et la structure (snmptranslate).
Un daemon pour recevoir des interruptions SNMP (snmptrad).
Un agent extensible pour répondre aux questions SNMP
(snmpd).
?
Il sera fort utilisé pour monitorer les ressources
des serveurs et présenté dans un chapitre
ultérieur.
Site web du produit :
http://www.net-snmp.org
Monitoring d'une infrastructure Linux sur base d'outils
libres 5.2 MRTG
MRTG est un logiciel dédié à la
supervision réseau. Il permet d'obtenir toute une série de
statistiques (visualisation de charge sur un réseau, utilisation de
bande passante...) concernant un appareil informatique (tels que
routeurs, serveurs, ou PC) sous forme de représentations
graphiques. Il va pour cela chercher des informations directement sur les
interfaces des machines du réseau via le protocole SN M P (Simple
Network Management Protocol, protocole facilitant l'administration de
systèmes à distance).
Outil connu des grandes entreprises, entièrement
configurable et gratuit, MRTG (Multi Router Traffic Grapher) est un
Freeware constitué de scripts en langage Perl, distribué
librement sur le Web. Il présente les résultats de ses recherches
sur des pages Web classiques, ce qui facilite nettement l'accès à
un utilisateur quelconque, quelle que soit la machine utilisée.
Site web du produit :
http://www.mrtg.org
5.3 RRDTool
RRDtool est un outil sous licence GNU GPL de gestion de base
de données RRD créé aussi par Tobi Oetiker. Cet outil est
dédié au développement des outils de supervision. Il
permet de stocker et de visualiser, sous forme graphique, différents
types de données provenant des équipements (serveurs, switchs,
routers...), tels que la charge CPU, ou l'utilisation de bande passante. Il est
nécessaire pour cela de collecter les données via une application
(ex : Cacti) ou un processus extérieur, qui pourra
récupérer périodiquement l'état des indicateurs en
utilisant par exemple le protocole SNMP.
Site web du produit :
http://www.rrdtool.com
5.4 Le choix des outils
Lors du rapport que j'ai effectué auprès de Manex,
Nagios et Nessus ont été choisi pour être
implémentés dans le réseau de l'entreprise.
Chapitre 6
L'analyse de Nagios
6 Présentation de Nagios
Nagios est un moniteur d'hôtes et de services
destiné ã nous informer des problèmes du réseau
avant les clients, les utilisateurs finaux et les managers. Il a
été créé pour fonctionner sous des systèmes
d'exploitations de type Linux, mais il fonctionne très bien sous la
majorité des variantes *NIX.
Le service de monitoring fonctionne par des
vérifications intermittentes sur les hôtes et les services que
l'on spécifie en utilisant des « plugins ? externes qui retournent
des informations d'états vers Nagios.
Quand des problèmes sont rencontrés, le service
de monitoring peut envoyer des notifications vers des contacts par divers
moyens (email, message instantané, SMS, etc.). Les informations
sur le statut actuel, les logs, et rapports peuvent tous être atteints
via un navigateur Internet.
6.1 Caractéristiques
Nagios a un tas de caractéristiques faisant de lui un
excellent outil de monitoring. Les possibilités majeures sont
listées ci-dessous :
Surveillance des services réseaux (SMTP, POP3, HTTP,
NNTP, PING, etc.)
Surveillance des ressources des hôtes (charge
processeur, utilisation des disques, etc.) Monitoring des facteurs
environnementaux comme la température
Système simple de plugins permettant aux utilisateurs de
développer facilement leurs propres vérifications de services.
Parallélisassions des vérifications des
services.
Possibilité de définir la hiérarchie du
réseau en utilisant des hôtes "parents", ce qui permet la
détection et la distinction entre les hôtes qui sont à
l'arrêt et ceux qui sont injoignables. Notifications des contacts quand
un hôte ou un service a un problème et quand celui-ci est
résolu (via email, pager, sms, ou par tout autre méthode
définie par l'utilisateur) Possibilité de définir des
gestionnaires d'évènements qui s'exécutent pour des
évènements sur des hôtes ou des services, pour une
résolution proactive des problèmes
Support pour l'implémentation de serveurs de monitoring
redondants et distribués
Interface de commandes externes qui permet des modifications
rapides d'être faite vers le monitoring et le comportement des
notifications ã travers l'utilisation de gestionnaires
d'évènements, de l'interface Web , et d'applications tierces.
Conserve le statut des hôtes et de services après un
redémarrage
Coupure planifiée pour la suppression des notifications
d'hôtes et de services pendant les périodes de maintenance
Capacité de confirmer un problème via
l'interface
Interface Web pour voir le statut actuel du réseau,
notification et historique des problèmes, fichiers de logs, etc.
Organisation simple des autorisations qui permet de restreindre
ce que les utilisateurs peuvent voir et faire ã partir de
l'interface.
6.2 Pré requis
? Noyaux Linux 2.6, Apache
? NET-SNMP
? Libraire GD, Perl, Compilateur C (si non installé via
les RPM)
6.3 Installation
Il existe deux possibilités d'installation : en manuel par
compilation des sources et via les packages RPM (dépôts de Dag
Wieers10).
Pour des raisons de facilité de maintenance, il m'a
été demandé de l'installer en automatique via
dépôts.
6.3.1 Ajout des dépôts
Nagios n'étant pas disponible sur les dépôts
officiels de Red Hat Entreprise Linux, j'ai dû rajouter le
dépôt de Dag Wieers en modifiant le fichier
/etc/sysconfig/rhn/ sources et en rajoutant ###
Dag RPM Repository for Red Hat Enterprise Linux
yum dag
http://apt.sw.be/redhat/el4
/en/$ARCH/dag
Suivi d'un # up2date -u
6.3.2 Modification des iptables
IP_DAG=1 93.1 .193.67
iptables-A OUTPUT -d $IP_DAG -p tcp --syn --dport
http -j LOG_OUTGOING
iptables -A OUTPUT -d $IPRANGE_INTRANET_SERVERS -p
udp --dport snmp -j LOG_OUTGOING iptables -A OUTPUT -d $IPRANGE_DMZ -p udp
--dport snmp -j LOG_OUTGOING
L'avantage de cette méthode est lors de la
présence de mise ã jour, tout se fera automatiquement via un
up2date. La méthode manuelle entrainait quand à
elle, une recompilation obligatoire de Nagios et des plugins additionnels.
6.3.3 Téléchargement et
installation
# up2date -i nagios nagios-plugins net-snmp
net-snmp-utils
|
Nagios est donc le noyau du monitoring. Il inclut l'interface Web
qui permet de consulter les alertes.
Nagios-plugins comportent une collection des plugins
développés par Nagios et d'autres plugins les plus
utilisés issus de contribution des utilisateurs.
Net-snmp et net-snmp-utils qui seront utilisés plus tard
par plusieurs plugins pour obtenir
des informations (CPU Load, Memory, Disk Space,...).
|
6.4 Structure des répertoires et emplacement des
fichiers
Nagios s'installe par défaut dans plusieurs
répertoires :
Sous-répertoires Contenus
/usr/bin/nagios/ Ensemble des programmes
Nagios
/etc/nagios/ Les fichiers de configurations
principaux, des ressources, des objets,
et des CGI doivent être mis
ici
/usr/lib/nagios/plugins/ Les plugins sont des
scripts ou des binaires qui réalisent les contrôles des
services et des hôtes pour la supervision.
|
/usr/sbin/nagios/ CGIs
10 Dag Johan Maarten Wieers :
http://dag.wieers.com/
Monitoring d'une infrastructure Linux sur base d'outils
libres
/usr/share/nagios/ fichiers HTML (pour
l'interface web et la documentation en ligne)
/var/log/nagios/ Répertoire vide pour les
fichiers de log, les fichiers de statuts, les
fichiers de rétention,
etc.
/var/log/nagios/archives Répertoire vide
pour les logs arch ivés
/var/log/nagios/rw Répertoire vide pour
le fichier de commandes externes
6.5 Accès à l'interface Web
L'accès ã l'interface Web se fait par
défaut sur le port 80 et est protégé par un
.htaccess. Avec un des employés de Manex, nous avons
rendu l'accès ã Nagios via une authentification LDAP. Ce point
sera expliqué plus tard.
On peut spécifier des droits d'accès aux
différentes parties de l'interface.
Données des CGI
|
Contacts authentifiés
|
Autres utilisateurs authentifiés
|
Information sur l'état des hôtes
|
Oui
|
Non
|
Information sur la configuration des
hôtes
|
Oui
|
Non
|
Historique des hôtes
|
Oui
|
Non
|
Notifications des hôtes
|
Oui
|
Non
|
Commande des hôtes
|
Oui
|
Non
|
Information sur l'état des
services
|
Oui
|
Non
|
Information sur la configuration des services
|
Oui
|
Non
|
Historique des services
|
Oui
|
Non
|
Notifications des services
|
Oui
|
Non
|
Commandes des services
|
Oui
|
Non
|
Toutes informations de configuration
|
Non
|
Non
|
Information sur le système/processus
|
Non
|
Non
|
Commandes système/processus
|
Non
|
Non
|
Les Contacts authentifiés ont
les droits suivants sur chaque service dont ils sont un contact (mais pas
sur ceux dont ils ne sont pas un contact)...
( Droit de voir l'état du service
( Droit de voir la configuration du service
( Droit de voir l'historique et les notifications de ce
service
( Droit de passer des commandes à ce service
Les Contacts authentifiés ont
les droits suivants sur chaque hôte dont ils sont un contact (mais pas
sur ceux dont ils ne sont pas un contact)...
( Droit de voir l'état de l'hôte
( Droit de voir la configuration de l'hôte
( Droit de voir l'historique et les notifications de cet
hôte
( Droit de passer des commandes à cet hôte
( Droit de voir l'état de tous les services de cet
hôte
( Droit de voir la configuration de tous les services de cet
hôte
( Droit de voir l'historique et les notifications de tous les
services de cet hôte
( Droit de passer des commandes à tous les services de
cet hôte
6.6 Description des fichiers de
configurations
Il existe une dizaine de fichiers de configurations dans
/etc/nagios/ dont le principal est nagios.cfg.
Il contient un certain nombre de directives qui affectent la
manière dont Nagios fonctionne. Ce fichier est lu par le processus
Nagios et par les CGIs.
6.6.1 Configuration principal
Le fichier principal est nagios.cfg11.
C'est ce fichier que le daemon Nagios va lire en tout premier. Il
contient divers paramètres pour le daemon en lui-même ainsi que
les références vers les autres fichiers de configurations.
Les variables importantes (à décommenter) :
cfgjile=/etc/nagios/contactgroups.cfg
cfgjile=/etc/nagios/contacts.cfg cfgjile=/etc/nagios/hostgroups.cfg
cfgjile=/etc/nagios/hosts.cfg
cfgjile=/etc/nagios/services.cfg
cfgjile=/etc/nagios/timeperiods.cfg
cfgjile=/etc/nagios/dependencies.cfg
En fait, pour plus de clarté, j'ai suivi le
modèle de configuration recommandé par Nagios à savoir
bien séparer les différentes configurations. Je les
détaillerai après. Cela dit, rien n'empêche de regrouper
toutes les configurations dans un seul et même fichier... <= bonjour
la maintenance ;o)
Nagios permet aussi de lire la configuration de plusieurs
fichiers dans un répertoire. Utile pour regrouper par exemple tout les
serveurs d'un même LAN, ou encore d'une DMZ. Seule obligation pour que
les fichiers quÐ l'on y mettra soient pris en compte, c'est qu'ils portent
l'extension .cfg
cfg_dir=/etc/nagios/servers
cfg_dir=/etc/nagios/DMZ
Le fichier resource.cfg est très
important ! Il nous permettra de stocker les diverses Macros utiles dans la
définition de commandes.
resourcejile=/etc/nagios/resource.cfg
Si l'on souhaite pourvoir utiliser les diverses commandes via
l'interface Web de Nagios, il est obligatoire de mettre cette variable à
112.
check_external_commands=1
Il s'agit en fait d'un fichier nagios.cmd qui
sera placé (par les scripts CGI gérés par le daemon) dans
/var/log/nagios/rw où toutes les commandes
passées par l'interface Web seront écrites dedans jusqu'à
leur exécution. Le fichier peut être lu autant que possible ou
toutes les x secondes. La variable suivante défini la chose.
command_check_interval=10s # remplacer 10s par -1 si
check autant que possible
Et on peut changer (si on le souhaite) l'emplacement du fichier
précédemment cité...
commandjile=/var/log/nagios/rw/nagios.cmd
11 Plus d'infos :
http://nagios.sourceforge.net/docs/2
0/configmain.html
12 Plus d'infos :
http://nagios.sourceforge.net/docs/2
0/extcommands.html
6.6.2 Configuration des CGIs
Le fichier de configuration des CGIs
cgi.cfg13 contient un certain nombre de directives
qui affectent le
mode de fonctionnement des CGIs.
Il existe plusieurs façons de restreindre l'accès
à Nagios. Par défaut, il s'agit du couple :
.htaccess/.htpassword .
Quel qu'en soit le choix, il faut modifier les lignes suivantes
:
use_authentication=1 # Forcera Nagios à
demander une
authentification
authorizedjor_system_information=*
authorizedjor_configuration_information=*
authorizedjor_system_commands=* authorizedjor_all_services=*
authorizedjor_all_hosts=*
authorizedjor_all_service_commands=*
authorizedjor_all_host_commands=*
Dans notre cas, on autorise tout le monde car nous allons
utiliser le LDAP pour restreindre l'accès.
Mais pour ceux qui utilisent simplement le couple
.htaccess/.htpassword on peut spécifier l'accès
à certaines choses et pas à d'autres allant du simple affichage
des pages Nagios à la capacité de
arrêter/redémarrer le processus Nagios.
6.6.3 Configuration d'un vhost dans Apache
Nous allons créer le fichier suivant :
/etc/httpd/vhosts.d/
nagios.manex.be.conf
Voici son contenu :
<VirtualHost 192.168.1.14:80>
ServerName
nagios.manex.be
ScriptAlias /nagios/cgi-bin
"/usr/lib/nagios/cgi"
ServerAdmin
infrastructure-managers@manex.be
ErrorLog
/var/log/httpd/nagios.manex.be-error_log
CustomLog /var/log/httpd/nagios.manex.be-access_log
common
<Directory
"/usr/lib/nagios/cgi">
Options ExecCGI
AllowOverride None
Order deny,allow
Allow from all
AuthType Basic
AuthName
nagios.manex.be
AuthLDAPEnabled on
AuthLDAPURL
ldap://192.168.1.11/dc=manex,dc=be?uid?sub?(objectclass=person) AuthLDAPBindDN
"uid=apache,ou=special users,dc=manex,dc=be" AuthLDAPBindPassword
apache
Require group cn=
nagios.manex.be,ou=web,ou=Applications,dc=manex,dc=be
Require valid-user
</Directory>
Alias /nagios "/usr/share/nagios"
13 Plus d'infos :
http://nagios.sourceforge.net/docs/2
0/configcgi.html
<Directory
"/usr/share/nagios">
Options None
AllowOverride None
Order deny,allow
Allow from all
AuthType Basic
AuthName
nagios.manex.be
AuthLDAPEnabled on
AuthLDAPURL
ldap://192.168.1.11/dc=manex,dc=be?uid?sub?(objectclass=person) AuthLDAPBindDN
"uid=apache,ou=special users,dc=manex,dc=be" AuthLDAPBindPassword
apache
Require group cn=
nagios.manex.be,ou=web,ou=Applications,dc=manex,dc=be
Require valid-user
</Directory>
RedirectMatch ^(/)$ /nagios
</VirtualHost>
Prendre soin de donner les droits dans le LDAP.
6.6.4 Les contacts et groupes de contacts
Les contacts sont les personnes qui seront prévenues lors
d'un évènement (alerte warning, critical,
...). Commençons par créer un groupe
d'utilisateurs dans le fichier contactgroups.cfg.
define contactgroup{
contactgroup_name admins
alias Nagios Administrators
members nagios-admin
I
On a dès lors un groupe nommé « admins »
qui possède un alias (une description en fait) et un contact
« nagios-admin ». Allons configurer ce contact dans le fichier
contacts.cfg14.
define contact{
contact_name nagios-admin
alias LE Big Boss de Nagios
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,r
service_notification_commands
notify-by-email
host_notification_commands
host-notify-by-email
email
infrastructure-managers@manex.be
I
Ici, on se retrouve avec nagios-admin et son alias. Ensuite, la
période pendant laquelle il peut être prévenu pour les
services et les hôtes. Suivi des options de notification respectivement
pour les
services et les hôtes (Warning, Unknown, Critical,
Recovery, Down, Flapping,...). Ensuite, la
commande ã utiliser
pour envoyer les notifications des services ou des hôtes. Enfin,
l'adresse e-mail à
conta cter.
14 Plus d'infos :
http://nagios.sourceforge.net/docs/2
0/xodtemplate.html#contact
6.6.5 Définition des périodes de
vérifications et de notifications
On peut spécifier facilement des périodes dans le
fichier timeperiods.cfg15 qui
seront utilisées par les
services lors des contrôles ou des notifications.
define timeperiod(
timeperiod_name
|
24x7
|
alias
|
24 Hours A Day, 7 Days A Week
|
sunday
|
00:00-24:00
|
monday
|
00:00-24:00
|
tuesday
|
00:00-24:00
|
wednesday
|
00:00-24:00
|
thursday
|
00:00-24:00
|
friday
|
00:00-24:00
|
saturday
|
00:00-24:00
|
}
define timeperiod(
timeperiod_name
|
workhours
|
alias
|
"Normal" Working Hours
|
monday
|
09:00-1 7:00
|
tuesday
|
09:00-1 7:00
|
wednesday
|
09:00-1 7:00
|
thursday
|
09:00-1 7:00
|
friday
|
09:00-1 7:00
|
}
define timeperiod(
timeperiod_name
|
nonworkhours
|
alias
|
Non-Work Hours
|
sunday
|
00:00-24:00
|
monday
|
00:00-09:00,17:00-24:00
|
tuesday
|
00:00-09:00,17:00-24:00
|
wednesday
|
00:00-09:00,17:00-24:00
|
Thursday
|
00:00-09:00,17:00-24:00
|
friday
|
00:00-09:00,17:00-24:00
|
Saturday
|
00:00-24:00
|
}
Il est toujours utile de spécifier plusieurs
périodes de temps. Prenons le cas du monitoring des imprimantes... Il
n'est pas important d'être prévenu le week-end si l'imprimante
s'est mise en veuille
ou si elle n'a plus d'encre... Et inutile aussi d'exécuter
certaines vérifications durant le week-end.
6.6.6 Définition des groupes d'hôtes et des
templates hôtes
Commençons par créer les groupes d'hôtes dans
le fichier hostgroups.cfg16.
define hostgroup(
hostgroup_name thelanservers
alias SERVERS Intranet
members mxisrv1,mxisrv2,mxisrv4
}
15 Plus d'infos :
http://nagios.sourceforge.net/docs/2
0/xodtemplate.html#timeperiod
16 Plus d'infos :
http://nagios.sourceforge.net/docs/2
0/xodtemplate.html#host
define hostgroup{
hostgroup_name thedmzservers
alias SERVERS DMZ
members
mx1srv1,mx1srv2,mx1srv3,mx1srv6,mx1srv7,mx1srv9
}
Et les Templates d'hôtes dans le fichier
hosts.cfg17. Ces Templates sont utiles pour
définir une
configuration identique pour plusieurs hôtes.
define host{
name generic-host ; The name of this host
template
notifications_enabled 1 ; Host notifications are
enabled
event_handler_enabled 1 ; Host event handler is
enabled
flap_detection_enabled 1 ; Flap detection is
enabled
failure_prediction_enabled 1 ; Failure prediction is
enabled
process_perf_data 1 ; Process performance
data
retain_status_information 1 ; Retain status
information across program restarts
retain_nonstatus_information 1 ; Retain
non-status information across program restarts
notification_period 24x7 ; Send host notifications at
any time
register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT
A REAL HOST, JUST A TEMPLATE! }
6.6.7 Définition des hôtes
Pour définir un hôte, rien de plus simple :
define host{
use linux-server ; Name of host template to
use
host _name mxisrv4
alias mxisrv4 (Monitoring)
address
mxisrv4.manex.be
}
L'emplacement de ces lignes est un peu plus particulier. Dans
mon cas, j'ai suivi un certain nombre de personnes dont l'avis est de
créer un fichier par hôte. Dans ce cas-ci, j'ai
créé un répertoire « servers » dans lequel j'ai
placé le fichier mxisrv4.cfg.
6.6.8 Définition des ressources
Les fichiers des ressources resource.cfg18
sont utilisés pour stocker les macros définies par
les
utilisateurs. Ces fichiers peuvent aussi contenir d'autres
informations (telle que la configuration des connexions de la base de
données), bien que ceci dépend de la manière dont
Nagios aura été compilé.
L'avantage de ces fichiers est de pouvoir y mettre des
données sensibles de configuration qui ne seront pas accessibles
à travers les CGIs.
Le fichier des ressources est bien utile car il permet de
définir des macros qui seront utilisées dans les
différentes commandes19.
# Sets $USER1$ to be the path to the
plugins
$USER1$=/usr/lib/nagios/plugins
17 Plus d'infos :
http://nagios.sourceforge.net/docs/2
0/xodtemplate.html#host
18 Plus d'infos :
http://nagios.sourceforge.net/docs/2
0/macros.html 19 Seront présentées juste après.
# Macro - SNMPv3 ; chaine de connexion
utilisée par le plugin ./check_snmp
$USER4$=-P 3 -L authPriv -U UnUtilisateur -A
UnBeauMot2Passe -X UnAutreBeauMot2Passe
# Macro - SNMPv3 Login/Password => MD5 ; contenu
CRYPTE => DES (ou AES) $USER5$=-l UnUtilisateur -x UnBeauMot2Passe -X
UnAutreBeauMot2Passe -L md5,des
# Macro - Authentification http
$USER6$=-a
UnUtilisateur:Encore1Mot2Passe
La définition de macro est vraiment très
pratique, notamment dans le cas des Logins/Mots de Passe
utilisés par le ÐrotocolÐ SNMPv3 s'ils sont
communs ÐntrÐ Ðux.
6.6.9 Définition des commandes
Les commandes sont utilisées par les services et
définies dans le fichier commands.cfg20.
C'est une
couche intermédiaire entre le Plugin en lui-même qui
sera utilisé et le service. C'est ici que l'on va indiquer les
paramètres que l'on passe au Plugin.
Il y a deux sortes de Plugins, les locaux qui sont
destinés à une utilisation locale. Donc pas besoin de renseigner
l'adresse de la machine, ils ne donneront que les résultats de la
machine sur laquelle ils se
trouvent.
define command{
command_name check_local_load
command_line $USER1$/check_load -w $ARG1$ -c
$ARG2$
I
Ensuite, les Plugins qui vont récupérer des
informations sur d'autres serveurs. define
command{
command_name check_imaps
command_line $USER1$/check_simap -H $HOSTADDRESS$ -S
-w $ARG1$ -c $ARG2$
I
Les champs $HOSTADDRESS$ $ARG1$ $ARG2$ sont des
macros. Ils servent d'intermédiaire dans la définition.
6.6.10 Configuration des informations
étendues
Les fichiers de configuration des informations étendues
(hostextinfo.cfg21 &
serviceextinfo.cfg) sont
utilisés pour définir des informations
supplémentaires pour les hôtes et les services qui doivent
être utilisés par les CGI. On peut notamment y définir des
petites images et des coordonnées pour la Map.
define hostextinfo{
host _name mxisrv4
notes Serveur de Monitoring - Nagios
notes_url
http://nagios.manex.be/nagios/cgi-bin/status.cgi?host=mxisrv4
icon_image redhat.jpg
icon_image_alt Red Hat Entreprise
Linux
vrml_image redhat.jpg
statusmap_image redhat.jpg
2d_coords 100,250
3d_coords 1 00.0,50.0,75.0
I
Après beaucoup de chipotage, on arrive à une Map
dans ce genre :
20 Plus d'infos :
http://nagios.sourceforge.net/docs/2
0/xodtemplate.html#command
21 Plus d'i nfos :
http://nagios.sourceforge.net/docs/2
0/xodtemplate. html#hostexti nfo
6.6-1 : Petit réseau de Manex
6.6-2 : Le réseau d'une entreprise
inconnue
Pour l'image de droite, je l'ai obtenu via une recherche sur
Google démontrant la capacité de ce créateur de Map. Bien
entendu, il existe encore des plus grandes? avec ce genre d'outils, il est
difficile de se limiter.
Monitoring d'une infrastructure Linux sur base d'outils
libres 6.7 Les services
Il existe deux sortes de services : publics et privés.
6.7.1 Les services publics
Les services dits Ðubliques sont ceux que Nagios Ðeut
monitorer sur les hôtes distants en n'ayant
comme information, que leur adresse IP.
Par exemple : HTTP, SMTP, DNS, IMAP,
LDAP, ?
6.7.2 Les services privés
Les services dits Ðrivés sont ceux qui demandent
l'utilisation du Ðrotocole SNMP ou l'exécution des
plugins sur les hôtes monitorés via NRPE, NSCA ou
par SSH.
Par exemple : Charge CPU, utilisation
du disque, utilisation de la mémoire virtuelle/SWAP,
utilisateurs
connectés, ?
6.7.3 Définition des templates et des
services
Tout comme les hôtes, il est utile de définir des
templates pour les services. Ils permettent, je le
rappelle, de faire une configuration similaire pour plusieurs
services. La configuration se déroule dans le fichier
services.cfg22.
define service{
name generic-service ; The 'name' of this service
template
active_checks_enabled 1 ; Active service checks are
enabled
passive_checks_enabled 0 ; Passive service checks are
enabled/accepted
parallelize_check 1 ; Active service checks should be
parallelized
obsess_over_service 1 ; We should obsess over this
service (if necessary)
checkjreshness 0 ; Default is to NOT check service
'freshness'
notifications_enabled 1 ; Service notifications are
enabled
event_handler_enabled 1 ; Service event handler is
enabled
flap_detection_enabled 1 ; Flap detection is
enabled
failure_prediction_enabled 1 ; Failure prediction is
enabled
process_perf_data 1 ; Process performance
data
retain_status_information 1 ; Retain status
information across program restarts
retain_nonstatus_information 1 ; Retain
non-status information across program restarts
is_volatile 0 ; The service is not
volatile
register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT
AREAL
SERVICE, JUST A TEMPLATE!
}
define service{
name local-service ; The name of this service
template
use generic-service ; Inherit default values from the
generic-service definition
check_period 24x7 ; The service can be checked at any
time of the day
max_check_attempts 4 ; Re-check the service up to 4 times in
order to determine its final (hard) state
normal_check_interval 5 ; Check the service every
5 minutes under normal conditions retry_check_interval 1 ; Re-check the service
every minute until a hard state can be determined
contact_groups admins ; Notifications get sent out to
everyone in the 'admins'
group
notification_options w,u,c,r ; Send notifications
about warning, unknown, critical, and
recovery events
22 Plus d'infos :
http://nagios.sourceforge.net/docs/2
0/xodtemplate.html#service
Monitoring d'une infrastructure Linux sur base d'outils
libres
notification_interval 60 ; Re-notify about service
problems every hour
notification_period 24x7 ; Notifications can be sent
out at any time
register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT
A REAL SERVICE, JUST
A TEMPLATE!
}
Le template host-service est le même local-service. C'est
juste prévu si on souhaite modifier les
paramètres globaux du service...
La définition des services n'est pas des plus
compliquée. Il suffit de néanmoins respecter la façon dont
on a défini la commande avant. Voici pour le service local.
define service(
use local-service ; Name of service template to
use
host _name mxisrv4
service_description CPU Load
check_command
check_local_load!10.0,10.0,10.0!20.0,20.0,20.0
}
Et pour l'autre :
define service(
use host-service
host _name mx1srv1
service_description IMAPS
check_command check_imaps!10!20
}
On peut éventuellement définir des groupes de
services dans le fichier
servicegroups.cfg23, mais je
n'ai pas encore vu d'intérêt à cela.
6.7.4 Déclaration d'un autre service
Voici la déclaration d'un service qui contrôle la
SWAP pour le localhost :
define service (
use local-service
host _name localhost
service_description SWAP
check_command check_local_swap!90!80
}
Le service utilise un Template local-service qui
permet de définir une foule de paramètres.
define command (
command_name check_local_swap
command_line $USER1$/check_swap -w $ARG1$ -c
$ARG2$
}
Dans la définition de la commande, on retrouve le nom
de la commande check_local_swap et sa ligne de commande. Pour
la ligne de commande, on utilise des macros qui sont définies dans le
fichier des ressources. $USER1$ pointe vers le path où
se trouvent les plugins. $ARG1$ et $ARG2$
sont les arguments passés au plugin check_swap.
Ils correspondent dans ce cas-ci aux valeurs dit warning et
critical qui sont des niveaux d'alertes en fonction de l'utilisation
de la SWAP.
23 Plus d'infos :
http://nagios.sourceforge.net/docs/2
0/xodtemplate.html#servicegroup
Monitoring d'une infrastructure Linux sur base d'outils
libres 6.7.5 Un dernierg
Voici la déclaration d'un service qui contrôle la
mémoire virtuelle sur un ordinateur distant sous Windows XP Pro SP2 :
define service {
use host-service
host _name HOST A
service_description Taille memoire
Virtuelle
check_command check_snmp_storage_v1 !public!"^
Virtual Memory$ "!80!90
}
Le service utilise un autre Template que
précédemment, host-service qui permet notamment
de définir la période où le service doit être
utilisé. Cette fois-ci, on attache le service à HOST A, mon
portable et du fait qu'il est sous Windows XP, on utilise le
Ðrotocole SNMP (v1 dans ce cas-ci).
define command {
command_name check_snmp_storage_v1
command_line $USER1$/check_snmp_storage.pl -H
$HOSTADDRESS$ -C $ARG1$ -m
$ARG2$ -w $ARG3$ -c $ARG4$
$ARG5$
}
Ci-dessus, la définition de la commande qui se rapporte
au service. On utilise plusieurs macros.
Comme précédemment, $USER1$.
Ensuite $HOSTADDRESS$ qui indique qui on va
interroger.
Cette fois-ci, $ARG1$ indiquera la
communauté utilisé pour SNMP. Ensuite, $ARG2$
indiquera quel disque on souhaite interroger (dans le cas de ce
plugin, la mémoire virtuelle est considérée comme
un
disque dur à part). $ARG3$ et
$ARG4$ sont les valeurs warning et critical.
On peut ajouter un $ARG5$ qui pourra
éventuellement servir pour paramétrer plus
précisément le service.
6.8 Méthodes pour démarrer
Nagios
Bien que lors de chaque chargement de Nagios, celui-ci fasse une
vérification sur les fichiers de
configurations, il est néanmoins recommandé de
faire une vérification manuelle : # nagios -v
/etc/nagios/nagios.cfg
Nagios 2.9
Copyright (c) 1 999-2007 Ethan Galstad (
http://www.nagios.org)
Last Modified: 04-10-2007
License: GPL
Reading configuration data...
Running pre-flight check on configuration
data...
Checking services...
Checked 187 services. Checking
hosts...
Checked 17 hosts.
Checking host groups...
Checked 3 host groups. Checking service
groups...
Checked 0 service groups. Checking
contacts...
Checked 3 contacts. Checking contact groups...
Checked 1 contact groups.
Monitoring d'une infrastructure Linux sur base d'outils
libres
Checking service escalations...
Checked 0 service escalations.
Checking service dependencies...
Checked 271 service dependencies. Checking host
escalations...
Checked 0 host escalations.
Checking host dependencies...
Checked 2 host dependencies.
Checking commands...
Checked 47 commands.
Checking time periods...
Checked 4 time periods.
Checking extended host info
definitions...
Checked 17 extended host info definitions. Checking
extended service info definitions...
Checked 0 extended service info definitions. Checking
for circular paths between hosts...
Checking for circular host and service
dependencies... Checking global event handlers...
Checking obsessive compulsive processor commands...
Checking misc settings...
Total Warnings: 0 Total Errors: 0
Things look okay - No serious problems were detected
during the pre-flight check Il y a cinq moyens différents
de lancer Nagios:
Manuellement, en tant que processus prioritaire (utile pour
les tests initiaux et le débogage) # nagios
/etc/nagios/nagios.cfg
Manuellement, en tant que processus d'arrière-plan
# nagios /etc/nagios/nagios.cfg &
Manuellement, en tant que un daemon # nagios -d
/etc/nagios/nagios.cfg
Manuellement via un script de démarrage
Lors dÐ l'installation, un script dÐ démarragÐ
Ðst placé dans le /etc/init.d/. On peut dès
lors le lancer ainsi :
# /etc/init.d/nagios
Usage: nagios {start|stop
|restart|reload|force-reload|status}
Automatiquement au démarrage (boot) du
système
Pour qu'il démarre à chaque redémarrage du
serveur, il suffit de taper cette commande :
# chkconfig -level 345 nagios on 6.9
Plugins
Les plugins sont des programmes compilés (C dans la
majorité des cas) ou des scripts (Perl, Shell, etc..) qui
peuvent être exécutés en ligne de commande pour tester
l'état d'un hôte ou d'un service. Nagios utilise le
résultat des plugins pour déterminer le statut actuel des
hôtes ou services sur le
réseau.
Monitoring d'une infrastructure Linux sur base d'outils
libres 6.9.1 Différentes sources
Il existe un tas de plugins officiels et non officiels. Tout
d'abord, les plugins officiels fournis par Nagios, sans quoi ce dernier ne
fonctionnerait pas. Ensuite, il y a les plugins de Manubulon24
permettant d'effectuer des requêtes en utilisant le protocole SNMP
(v1, 2c, 3). Enfin, il existe des sites communautaires dont
NagiosExchange.org fait partie,
qui regroupe les plugins développés par d'autres personnes.
6.9.2 Le principe de fonctionnement
Nagios exécutera un plugin dès qu'il a besoin de
vérifier un service ou un hôte supervisé. Le plugin fait
quelque chose pour exécuter le contrôle et simplement renvoyer le
résultat à Nagios. Nagios analysera le résultat provenant
du plugin et prendra les mesures nécessaires (lancer les
gestionnaires d'évènements, envoyer des notifications,
etc).
6.9-1 : Montre comment les Ðlugins sont
séÐarés du coeur logique de Nagios
Nagios exécute les plugins qui vérifient ensuite
des services ou des ressources locales ou distantes. Lorsque les plugins ont
fini de vérifier la ressource ou le service, ils transmettent simplement
le résultat de la vérification à Nagios.
Avantages Inconvénients
Contrôle n'importe quoi Nagios n'a absolument aucune
idée de ce qui est
supervisé
|
Superviser des tâches automatisées avec Nagios Ne
peut pas créer des graphes des ressources
supervisées
Beaucoup de plugins créés pour superviser les
ressources basiques (CPU, Mem, Disk, Ping,...)
Peut seulement suivre les changements d'état de ces
ressources
Seul les plugins savent exactement ce qu'ils supervisent et
comment ils réalisent les vérifications
6.9.3 Utilisation des Plugins pour Contrôler des
Services
Quand Nagios a besoin de vérifier l'état d'un
service défini, il exécutera le plugin spécifié
dans
l'argument « check_command » de la définition du
service. Le plugin vérifiera l'état du service ou de la ressource
et retournera le résultat à Nagios.
6.9.4 Utilisation des Plugins pour contrôler des
hôtes
Dans chaque définition d'hôte on utilise
l'argument « host_check_command » pour spécifier un plugin qui
devra être utilisé pour vérifier l'état de
l'hôte. Les contrôles des hôtes ne sont pas effectués
régulièrement : ils sont exécutés uniquement au
besoin, typiquement lorsqu'il y a des
problèmes avec un ou plusieurs services associés
à l'hôte.
24 Manubulon est le pseudonyme de Patrick PROY :
http://www.manubulon.com/nagios
Monitoring d'une infrastructure Linux sur base d'outils
libres
Les contrôles des hôtes peuvent s'effectuer avec les
mêmes plugins que les contrôles des services. La
seule réelle différence entre les deux types de
contrôles est l'interprétation des résultats du plugin. Si
le résultat d'un plugin utilisé pour le contrôle d'un
hôte est un état différent d'OK, alors Nagios croira que
l'hôte n'est pas actif. Dans la plupart des cas, on peut utiliser un
plugin permettant de contrôler si l'hôte répond à une
requête ICMP (exemple : il répond au "ping") car c'est la
méthode la plus courante pour savoir si un hôte est actif ou
non.
6.9.5 L'analyse d'un plugin
6.9.5.1 Présentation
Le code source qui suit est le code en langage C du plugin «
check_users », plugin officiel de Nagios Ðermettant d'obtenir le
nombre de Ðersonnes connectées sur la machine locale et
générant un
évènement si ce nombre est supérieur
à un range défini.
6.9.5.2 Utilisation
Pour afficher l'aide sur le fonctionnement, les
Ðaramètres, etc. du plugin, il suffit de taper la
commande suivante : #
/usr/lib/nagios/plugins/check_users --help
check_users (nagios-plugins 1.4.8)
1.22
Copyright (c) 1999 Ethan Galstad
Copyright (c) 2000-2006 Nagios Plugin Development
Team <
nagiosplug-devel@lists.sourceforge.net>
This plugin checks the number of users currently
logged in on the local
system and generates an error if the number exceeds
the thresholds specified.
Usage:check_users -w <users> -c
<users>
Options:
-h, --help
Print detailed help screen
-V, --version
Print version information
-w, --warning=INTEGER
Set WARNING status if more than INTEGER users are
logged in -c, --critical=INTEGER
Set CRITICAL status if more than INTEGER users are
logged in
Send email to
nagios-users@lists.sourceforge.net
if you have questions regarding use of this software. To submit patches or
suggest improvements, send email to
nagiosplug-devel@lists.sourceforge.net
Il suffit de taper la ligne de commande du plugin ainsi que les
paramètres appropriés pour avoir le résultat :
# /usr/lib/nagios/plugins/check_users -w 2 -c 5 USERS
OK - 1 users currently logged in |users=1;2;5;0
Sur le site nous avons :
6.9-2 : Vue de l'état des utilisateurs
connectés sur la machine
Monitoring d'une infrastructure Linux sur base d'outils
libres Effectuons un autre test, connectons nous une deuxième
fois sur ce serveur
# /usr/lib/nagios/plugins/check_users -w 2 -c
5
USERS WARNING - 2 users currently logged in
|users=2;2;5;0
Comme on Ðeut le voir, nous avons un Warning? allons voir du
coté du site :
6.9-3 : Un état Warning pour le nombre
d'utilisateurs connectés
6.9.5.3 Le mail d'alerte ***** Nagios
2.9 *****
Notification Type: PROBLEM
Service: Users logged
Host: mxisrv4 (Monitoring) Address:
mxisrv4.manex.be State: WARNING
Date/Time: Fri May 25 11:37:53 CEST 2007
Additional Info:
USERS WARNING - 2 users currently logged in
6.9.5.4 Analyse
Le Ðlugin est donc écrit en langage C. Il va tout
d'abord vérifier les Ðaramètres qu'on lui a soumis lors de
l'exécution. En fonction de ces Ðaramètres, il
exécutera une fonction ou retournera une valeur. Ensuite, il
créera un processus fils qui sera chargé d'aller
récuÐérer (ã l'aide d'une boucle While) le
résultat retourné par la commande linux :
# who
geoffrey pts/1 May 25 09:10 (192.1
68.2.32)
Enfin, il comÐarera en fonction des Ðaramètres
Warning et Critical, la valeur qu'il a Ðrécédemment
comptée et retournera un état ainsi que le résultat sur la
console.
6.9.5.5 Son code source
En raison de la grandeur du code (pourtant le plus petit en
nombre de ligne), je l'ai mis ã la suite sur
deux pages.
Monitoring d'une infrastructure Linux sur base d'outils
libres
/*************************************************** *
* Nagios check_users plugin
*
* License: GPL
* Copyright (c) 2000-2006 nagios-plugins team
*
* Last Modified: $Date: 2007/01/28 21:46:41 $
*
const char *progname = "check_users";
const char *revision = "$Revision: 1.22 $";
const char *copyright = "2000-2006";
const char *email = "
nagiosplug-devel@lists.sourceforge.net";
#include "common.h" #include "popen.h" #include "utils.h"
if (child_stderr == NULL)
printf (_("Could not open stderr for %s\n"), WHO_COMMAND);
users = 0;
while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process))
{
* Description: #define possibly_set(a,b) ((a) == 0 ? (b) : 0) /*
increment 'users' on all lines except total
* user count */
* This file contains the check_users plugin
*
* This plugin checks the number of users currently logged in on
the local
* system and generates an error if the number exceeds the
thresholds specified.
*
* License Information:
*
* This program is free software; you can redistribute it and/or
modify
* it under the terms of the GNU General Public License as
published by
* the Free Software Foundation; either version 2 of the License,
or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be
useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
* $Id: check_users.c,v 1.22 2007/01/28 21:46:41 hweiss Exp $ *
***************************************************/
int process_arguments (int, char **); void print_help (void);
void print_usage (void);
int wusers = -1; int cusers = -1;
int
main (int argc, char **argv)
{
int users = -1;
int result = STATE_UNKNOWN;
char input_buffer[MAX_INPUT_BUFFER]; char *perf;
setlocale (LC_ALL, "");
bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE);
perf = strdup("");
if (process_arguments (argc, argv) == ERROR) usage4 (_("Could not
parse arguments"));
/* run the command */
child_process = spopen (WHO_COMMAND); if (child_process == NULL)
{
printf (_("Could not open pipe: %s\n"), WHO_COMMAND);
return STATE_UNKNOWN;
}
child_stderr = fdopen (child_stderr_array[fileno
(child_process)], "r");
if (input_buffer[0] != '#') {
users++;
continue;
}
/* get total logged in users */
if (sscanf (input_buffer, _("# users=%d"),
&users) == 1)
break;
}
/* check STDERR */
if (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_stderr))
result = possibly_set (result,
STATE_U NKNOWN);
(void) fclose (child_stderr);
/* close the pipe */
if (spclose (child_process))
result = possibly_set (result, STATE_U NKNOWN);
/* else check the user count against warning and critical
thresholds */
if (users >= cusers)
result = STATE_CRITICAL;
else if (users >= wusers)
result = STATE_WARNING;
else if (users >= 0)
result = STATE_OK;
Monitoring d'une infrastructure Linux sur base d'outils
libres
if (result == STATE_UNKNOWN) switch (c) { usage4 (_("Warning
threshold
printf ("%s\n", _("Unable to read output")); case '?': must be a
positive integer"));
else { /* print short else
asprintf(&perf, "%s", perfdata ("users", usage statement if
args not parsable */ cusers = atoi (argv[c]);
users, "", usage5 (); }
TRUE, wusers,
TRUE, cusers,
TRUE, 0,
FALSE, 0));
printf (j "USERS %s - %d users currently logged in |%s\n"),
state_text (result),
users, perf);
}
return result;
}
/* process command-line arguments */ int
process_arguments (int argc, char **argv) {
int c;
int option = 0;
static struct option longopts[] = {
{"critical", required_argument, 0, 'c'}, {"warning",
required_argument, 0, 'w'}, {"version", no_argument, 0, 'V'},
{"help", no_argument, 0, 'h'},
{0, 0, 0, 0}
};
if (argc < 2)
usage ("\n");
case 'h':
/* help */
print_help ();
exit (STATE_OK);
case 'V':
/* version */
print_revision (progname,
revision);
exit (STATE_OK);
case 'c':
/* critical */
if (!is_intnonneg (optarg))
usage4 (_("Critical threshold must be a positive integer"));
else
cusers = atoi (optarg);
break;
case 'w':
/* warning */
if (!is_intnonneg (optarg))
usage4 (_("Warning threshold must be a positive integer"));
else
wusers = atoi (optarg);
break;
}
}
c = optind;
if (wusers == -1 && argc > c) {
if (is_intnonneg (argv[c]) == FALSE) usage4 (_("Warning
threshold
return OK;
}
void
print_help (void)
{
print_revision (progname, revision);
printf ("Copyright (c) 1999 Ethan Galstad\n"); printf (COPYRIGHT,
copyright, email);
printf ("%s\n", _("This plugin checks the number of users
currently logged in on the local"));
printf ("%s\n", _("system and generates an error if the number
exceeds the thresholds specified."));
printf ("\n\n");
print_usage ();
printf (_(UT_HELP_VRSN));
printf (" %s\n", "-w, --warning=I NTEG ER");
printf (" %s\n", _("Set WARNING status if more than INTEGER users
are logged in"));
printf (" %s\n", "-c, --critical=INTEG ER");
printf (" %s\n", _("Set CRITICAL status if more than INTEGER
users are logged in"));
printf (_(UT_SUPPORT));
}
while (1) {
c = getopt_long (argc, argv, "-i-hVvc:w:", longopts,
&option);
|
must be a positive integer"));
else
wusers = atoi (argv[c-i--i-]);
}
|
void
print_usage (void) {
|
if (c == -1 || c == EOF || c == 1) break;
|
if (cusers == -1 && argc > c) {
if (is_intnonneg (argv[c]) == FALSE)
|
printf (_("Usage:"));
printf ("%s -w <users> -c <users>\n", progname);
}
|
6.10 Contrôle des hôtes
Pour le monitoring des hôtes, il existe 3
possibilités :
1. Par l'utilisation du protocole SNMP (v1,
v2c, v3)
2. Via NRPE : Permet d'exécuter des
plugins sur des machines distantes de manière transparente et
relativement aisée
3. Via NSCA : Permet d'envoyer des
résultats de contrôles passifs de services à un autre
serveur sur le réseau sur lequel tourne Nagios
6.10.1 NRPE
Les fichiers qui le constituent :
Fichiers Description
check_nrpe Plugin utilisé pour envoyer
des requêtes sur l'agent nrpe de la machine distante.
nrpe Agent qui tourne sur la machine distante et
exécute les requêtes du plugin.
nrpe.cfg Fichier de configuration pour les
agents des machines distantes.
Cet ajout est conçu pour permettre l'exécution
de plugins sur une machine distante. Le plugin check_nrpe tourne sur la machine
Nagios et est utilisé pour envoyer les requêtes d'exécution
du plugin à l'agent nrpe de la machine distante. L'agent nrpe
exécutera le plugin approprié sur la machine distante, et
retournera les données de sortie et le code de retour au plugin
check_nrpe de la machine Nagios. Le plugin check_nrpe envoit la sortie du
plugin distant et le code de retour à Nagios comme si c'était le
sien. Cela permet d'exécuter les plugins de manière transparente
sur les machines distantes. L'agent nrpe peut soit fonctionner en mode daemon
standalone, soit comme un service i netd.
6.10.2 NSCA
Les fichiers qui le constituent :
Fichiers Description
nsca Daemon qui tourne sur le serveur central de
Nagios et qui traite les résultats des contrôles faits sur les
services passifs soumis par les clients.
|
nsca.cfg Fichier de Configuration pour le daemon
nsca.
send_nsca Programme client
exécuté à partir des machines distantes, et qui envoie des
informations de contrôles de services passifs au daemon nsca sur le
serveur principal Nagios.
|
send_nsca.cfg Fichier de configuration pour le
client send_nsca.
Cet ajout permet d'envoyer des résultats de
contrôles de services passifs à partir de machines distantes
à une machine centrale sur laquelle Nagios tourne. Le client peut
être utilisé comme un programme séparé, ou peut
être intégré dans des serveurs NAGIOS distants qui
exécutent la commande ocsp pour créer un environnement de
contrôles distribués. La communication entre le client et le
daemon peut être cryptée par différents algorithmes
(DES, 3DES, CAST, xTEA, Twofish, LOKI97, RJINDAEL, SERPENT, GOST,
SAFER/SAFER+, etc.) si les bibliothèques mcrypt
sont installées sur les systèmes.
6.10.3 Conclusion
Par facilité et compatibilité, j'ai utilisé
la première solution car :
|
SNMP est un protocole standard fonctionnant sous divers OS et
dont les échanges peuvent être sécurisés et
cryptés (via la version 3)
SNMP permet d'exécuter lui aussi des scripts ã
distance
NRPE et NSCA ne sont disponibles que sous les environnements UNIX
à première vue
NRPE et NSCA ne permettent pas le monitoring d'hôtes genre
imprimantes, router, etc. (SNMP le permet)
NRPE et NSCA nécessitent que les plugins soient
installés sur les machines en questions pour fonction ner.
Cela dit, l'utilisation de NRPE/NSCA pourra être
envisagée sur certaines machines dans des cas particulier.
|
6.11 Types de monitoring
Il existe deux types de monitoring, actif et passif.
6.11-1: Utiliser les vérifications actives et
passives
Monitoring d'une infrastructure Linux sur base d'outils
libres 6.11.1 Monitoring actif
Le monitoring est actif lorsqu'il est demandé par Nagios.
Nagios peut monitorer le server sur lequel il est ou des hôtes locaux ou
distants.
6.11.2 Monitoring passif
Le monitoring est passif lorsque le résultat est
envoyé vers Nagios ã l'initiative du client. On utilise
dès lors, soit le protocole SNMP Traps, soit le plugin
NSCA (uniquement machine de type Linux).
6.12 Détection et gestion des changements
d'états25
Nagios supporte la détection des hôtes et des
services qui "oscillent". L'oscillation intervient quand un service ou un
hôte change d'état trop fréquemment, provoquant une
avalanche de notifications de problèmes et de rétablissement.
L'oscillation peut être l'indice de problèmes de configuration ou
de vrais problèmes sur le réseau.
Exemple : des seuils positionnés
trop bas (ce qui a été souvent mon cas).
L'élaboration de cette technique a demandé,
ã l'auteur, beaucoup de temps et de recherches. Je vous invite ã
consulter la page suivante pour l'explication de la technique qu'il a dû
élaborer.
LIEN :
http://nagios.sourceforge.net/docs/2
0/flapping.html
6.13 L'escalade des notifications
Nagios supporte l'escalade des notifications envoyées aux
contacts pour des services ou des hôtes.
En résumé, on peut définir qu'au bout de 3
notifications, un premier groupe de contact sera prévenu. Ensuite au
bout de 5 notifications, un autre groupe sera prévenu et ainsi de
suite.
6.13.1 Recoupement des portées des
escalades
Les définitions d'escalade de notification peuvent avoir
des portées qui se recoupent. Par exemple,
définissons une escalade pour le service Status (En
attente, Mode veille, Impression en cours,
RemÐlacer cartouches, ...) de
l'imprimante26 printer1 :
define serviceescalation(
host_name printer1
service_description Status
first _notification 3
last _notification 5
notification_interval 20
contact_groups secretaire,users
I
define serviceescalation(
host_name printer1
service_description Status
first _notification 4
last _notification 0
notification_interval 120
contact_groups nagios-admin
I
Dans l'exemple ci-dessus :
25 En anglais, on utilise le terme : « flapping »
26 Le procédé pour monitorer les imprimantes
réseaux sera expliqué ultérieurement dans un chapitre
dédié.
|
Les deux premières notifications ne seront pas prises en
compte par l'escalade, le
groupe de contacts prévenu sera celui
spécifié dans la définition du service Les groupes de
contact secretaire et users reçoivent la
troisième notification Les trois groupes de contact reçoivent les
quatrième et cinquième notifications
Seul le groupe de contact nagios-admin reçoit les
notifications à partir de la sixième notification
|
6.13.2 Notifications de reprise
d'activité
Les notifications de reprise d'activité sont
légèrement différentes des notifications de
problème lorsqu'il s'agit d'escalade. Reprenons l'exemple d'avant...
Admettons qu'après trois notifications de
problème, une notification de reprise d'activité est
envoyée au service qui reçoit la notification. La reprise
d'activité est la quatrième notification envoyée.
Cependant, le code d'escalade est suffisamment bien fait pour que seules les
personnes qui ont reçu la troisième notification reçoivent
celle de reprise d'activité. Dans ce cas, seul les groupes de contact
secretaire et users recevront la notification de reprise
d'activité.
6.13.3 Intervalles de notification
Nous pouvons modifier la fréquence à laquelle les
notifications escaladées sont émises pour un hôte ou un
service particulier (avec notification_interval). Reprenons une
dernière fois l'exemple d'avant.
Admettons que l'intervalle de notification par défaut
du service Status de l'imprimante printer1 soit 60 minutes.
Quand la notification de ce service est escaladée lors des 3ème,
4ème, et 5ème notifications, un intervalle de 45 minutes sera
utilisé entre les notifications. Lors de la 6ème notification et
des suivantes, l'intervalle de notification sera de 120 minutes, comme il est
spécifié dans la seconde définition d'escalade.
6.14 Les dépendances
Les dépendances d'hôtes et de services sont une
fonctionnalité avancée qui permet de contrôler le
comportement des hôtes et des services selon l'état d'un ou
plusieurs autres hôtes ou services.
6.14.1 Aperçu des dépendances de
services
1. Un service peut être dépendant d'un ou plusieurs
autres services
2. Un service peut être dépendant de services qui
ne sont pas associés au même hôte
3. Les dépendances de service ne se sont pas
héritées (à moins que ce ne soit explicitement
spécifié)
4. Les dépendances de service permettent de supprimer
l'exécution de services et de notifications de service selon
différents critères (états OK, WARNING, UNKNOWN, et/ou
CRITICAL)
6.14.2 Comment les dépendances d'un service
sont-elles testées ?
Avant que Nagios n'exécute un contrôle de service
ou n'envoie des notifications concernant un service, il vérifiera si le
service comporte des dépendances. Si ce n'est pas le cas, le
contrôle est exécuté ou la notification est envoyée
comme en temps normal. Si le service a bien une ou plusieurs
dépendances, Nagios vérifiera chacune de la manière
suivante :
1. Nagios récupère l'état courant du
service dont il dépend.
2. Nagios compare l'état courant du service dont il
dépend aux options d'échec soit d'exécution soit de
notification dans la définition de dépendance (selon ce qui
est adapté).
3. Si l'état courant du service dont il dépend
correspond à une des options d'échec, la dépendance est
réputée avoir échoué et Nagios sortira de la boucle
de vérification des dépendances.
Monitoring d'une infrastructure Linux sur base d'outils
libres
4. Si l'état courant du service dont il dépend ne
correspond à aucune des options d'échec de la
dépendance, la dépendance est réputée
avoir réussi et Nagios continuera avec la prochaine
dépendance.
Ce cycle continue jusqu'à ce que toutes les
dépendances du service aient été vérifiées,
ou jusqu'à ce qu'une dépendance échoue.
6.14.3 Exemple de dépendance de service define
servicedependency {
host _name HOST A
service_description PING
dependent_host_name HOST A
dependent_service_description CPU Load,Process
List,Memory
notificationjailure_criteria w,u
executionjailure_criteria c,u
}
Dans cet exemple, admettons que le service PING de
l'hôte A est en état Warning ou Unknown. Les notifications pour
les services CPU Load, Process List et Memory sur l'hôte A seront
désactivées. Dans le cas où le PING de l'hôte A est
en Critical ou Unknown, l'exécution des services (CPU Load, ?) ne
s'effectuera pas.
6.14.4 Dépendances
d'exécution
Les dépendances d'exécution permettent de limiter
les vérifications de services actifs. Les vérifications de
services passifs ne sont pas affectées par les dépendances
d'exécution.
Si tous les tests de dépendance d'exécution du
service réussissent, Nagios exécute le contrôle du service
comme d'habitude. Si ne serait-ce qu'une dépendance d'exécution
du service échoue, Nagios arrêtera temporairement
l'exécution des contrôles pour ce service
(dépendant).
Par la suite, les tests des dépendances d'exécution
du service vont réussir. Alors, Nagios recommencera les contrôles
de ce service de manière normale.
Dans l'exemple ci-dessus, les dépendances
d'exécution des services CPU Load, Process List, Memory
échoueraient si le service PING est dans un état CRITICAL ou
UNKNOWN. Si c'était le cas, le contrôle de service ne serait pas
réalisé et serait prévu pour une future exécution
(potentielle).
6.14.5 Dépendances de
notification
Si tous les tests de dépendance de notification du
service réussissent, Nagios enverra les notifications pour ce service
comme à l'accoutumée. Si, ne serait-ce qu'une dépendance
de notification du service échoue, Nagios arrêtera temporairement
l'émission de notifications pour ce service (dépendant).
Plus tard, les tests des dépendances de notifications du service
vont réussir. Alors, Nagios recommencera à envoyer des
notifications pour ce service de manière normale.
Dans l'exemple ci-dessus, les dépendances de
notification des services CPU Load, Process List, Memory échoueraient si
le service PING est dans un état WARNING, UNKNOWN. Si
c'était le cas, les notifications pour ce service ne seraient pas
envoyées.
6.14-1 : Dépendances des hôtes
6.14.6 Dépendances d'hôtes
Les dépendances d'hôtes fonctionnent d'une
manière similaire à celles de services. La principale
différence est que ce sont des hôtes et pas des services. Une
autre différence est que la dépendance d'hôte ne sert
qu'à supprimer des notifications d'hôtes et non pas des
contrôles d'hôtes.
define hostdependency (
host _name HOST A
dependent_host_name HOST B
notificationjailure_criteria d,u
}
Les dépendances de notifications d'hôtes marchent
d'une manière similaire à celles des services. Si toutes les
notifications de
dépendance d'un hôte réussissent, Nagios
enverra les notifications comme à l'accoutumée. Si ne serait-ce
qu'une de ces dépendances échoue, Nagios supprimera
temporairement toutes les notifications
pour cet hôte (dépendant). Par la suite,
les dépendances réussiront à nouveau. Nagios recommencera
alors à envoyer les notifications de manière habituelle.
6.15 L'héritage
Il est possible de créer des relations d'héritage
entre hôtes. Notamment entre des routeurs, switchs,
firewalls. Dans ce cas, le simple ajout d'une ligne dans la
configuration de l'hôte :
define host(
...
parents asa5510
...
}
Si cet hôte est sur le même segment que l'hôte
de supervision (sans routeur intermédiaire, etc.), il est
considéré comme étant sur le réseau local et n'aura
pas d'hôte parent. Laissez cette valeur vide si
l'hôte n'a pas d'hôte parent (c.à.d. s'il est
sur le même segment que l'hôte de Nagios).
6.16 Les notifications par mail
Lors d'un évènement dans Nagios, il nous notifie
par mail. Pour ce faire, il est nécessaire de
configurer le serveur en conséquence. Dans le cas du
serveur de monitoring, on m'a demandé d'installer Postfix pour sa
simplicité de configuration et d'utilisation.
6.16.1 Son fichier de configuration
Voici les lignes à modifier dans le fichier
/etc/postfix/
main.cf
:
myhostname =
mxisrv4.manex.be
mydomain =
manex.be
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain,
localhost relayhost = $mydomain
Monitoring d'une infrastructure Linux sur base d'outils
libres
6.16.2 Les mails de Nagios
Voici un exemple de mail lorsque Nagios n'arrive pas ã
accèder ã un site hébergé chez Manex (leur site
Web) :
To:
geoffrey.lemaire@manex.be
Subject: ** PROBLEM alert - mx1srv9 (Web)/
manex.be is CRITICAL **
Date: Thu, 17 May 2007 03:44:41 +0200 (CEST)
From:
nagios@manex.be (nagios)
***** Nagios 2.9 ***** Notification Type: PROBLEM
Service:
manex.be
Host: mx1srv9 (Web) Address: 217.117.50.179 State: CRITICAL
Date/Time: Thu May 17 03:44:41 CEST 2007
Additional Info:
CRITICAL - Socket timeout after 10 seconds
Ou lorsqu'un hôte est injoignable. Par exemple, une
imprimante :
To:
geoffrey.lemaire@manex.be
Subject: Host DOWN alert for mxiprn2!
Date: Fri, 18 May 2007 09:00:10 +0200 (CEST)
From:
nagios@manex.be (nagios)
***** Nagios 2.9 *****
Notification Type: PROBLEM
Host: mxiprn2
State: DOWN
Address: 192.168.0.22
Info: PING CRITICAL - Packet loss = 100%
Date/Time: Fri May 18 09:00:10 CEST 2007
Un problème de PING trop élevé pour
accèder ã un serveur distant?
To:
geoffrey.lemaire@manex.be
Subject: ** PROBLEM alert - mx2rtr1 (ViKe)/PING
is WARNING ** Date: Wed, 23 May 2007 18:37:27 +0200 (CEST)
From:
nagios@manex.be (nagios)
***** Nagios 2.9 ***** Notification Type: PROBLEM
Service: PING
Host: mx2rtr1 (ViKe)
Address:
mx2rtr1.manex.be State: WARNING
Date/Time: Wed May 23 18:37:27 CEST 2007 Additional Info:
PING WARNING - Packet loss = 0%, RTA = 474.21 ms Enfin, quand
l'état change et revient ã la normal :
To:
geoffrey.lemaire@manex.be
Subject: ** RECOVERY alert - mx2rtr1 (ViKe)/PING
is OK ** Date: Tue, 29 May 2007 21:29:20 +0200 (CEST)
From:
nagios@manex.be (nagios)
***** Nagios 2.9 ***** Notification Type: RECOVERY
Service: PING
Host: mx2rtr1 (ViKe)
Address:
mx2rtr1.manex.be State: OK
Date/Time: Tue May 29 21:29:20 CEST 2007 Additional Info:
PING OK - Packet loss = 0%, RTA = 50.31 ms
6.17 Utilisation du protocole
SNMPv327
Avec les plugins de Manubulon, il est possible de monitorer via
le protocole SNMPv3. Il peut se faire selon les deux modes : authNoPriv
et authPriv.
Pour authNoPriv, le login et le mot de passe de
connexion sera encrypté en MD5 ou en SHA-1 et pour authPriv,
les informations récupérées du protocole SNMPv3 sera
encryptée en DES ou AES.
6.18 Des tas d'autres possibilités !
Du fait que je devais tester plusieurs programmes de monitoring,
je n'ai pas eu le temps d'approfondir et tester certains plugins. Par exemple
:
Interception de Traps SNMP
Utilisation de NMAP pour check les intrusions
Monitoring du matériel (UPS28, switch,
température matériel et ambiante, ?) Notification par SMS
Utilisation d'Oreon (interface Web pour configurer les fichiers
de Nagios) ?
Il existe une grande communauté d'utilisateurs,
développeurs, etc. autour de Nagios. La confection de plugins ã
l'air simple vu les nombreux tutoriaux et la disponibilité de quasi tous
en open source.
6.19 Nagios Checker
Une extension Firefox pour afficher les alertes de Nagios.
Ce plugin s'installe dans la barre de statut de Nagios et
indique les évènements réseaux en provenance de Nagios.
Ces informations sont prises de l'interface Web de Nagios. Son installation est
très simple, il suffit juste de renseigner l'adresse du site où
on consulte le statut de Nagios, de cliquer sur un bouton qui permet de
localiser le fichier « status.cgi ».
|
|
6.19-1 : Ce qu'affiche le Ðlugin une fois
installé et configuré dans sa version anglaise.
|
Ce plugin fonctionne depuis les premières versions de
Nagios.
LIEN :
https://addons.mozilla.org/fr/firefox/addon/3607
J'ai soumis plusieurs « issues ? ã l'auteur de ce
plugin pour la correction de bugs sous le pseudo « geolem1903 ».
LIEN :
http://code.google.com/p/nagioschecker/issues/detail?id=17
27 Le chapitre suivant traitera du protocole SNMPv3 et de
l'interaction avec Nagios.
28 Un chapitre traitera de cette configuration.
6.19-2 : Je fais partie des contributeurs du
projet.
6.20 Conclusion
Nagios a besoin de plusieurs programmes, librairies tierces
qui elles aussi ont besoin d'autres librairies etc. mais une fois que l'on a
tout, c'est relativement simple ã installer et d'autant plus simple si
on installe via les dépôts (ce qui était mon
cas).
Au niveau de la configuration, on modifie directement les
fichiers de configurations et on recharge la configuration au niveau de daemon.
Pas très pratique car on doit à chaque fois revérifier la
configuration.
Cela dit, il est très modulaire et peut s'adapter ã
énormément de type de réseaux. Il est puissant,
léger et gratuit.
On pourrait aussi envisager le développement de plugin
pour les logiciels Ibats,
etc. et la vente de services de
monitoring.
Chapitre 7
Le protocole SNMP
7 Présentation du protocole SNMP
Le système de gestion de réseau est basé
sur trois éléments principaux: un superviseur, des noeuds (ou
nodes) et des agents. Dans la terminologie SNMP, le synonyme manager est plus
souvent employé que superviseur. Le superviseur est la console qui
permet à l'administrateur réseau d'exécuter des
requêtes de management. Les agents sont des entités qui se
trouvent au niveau de chaque interface, connectant l'équipement
managé (noeud) au réseau et permettant de
récupérer des informations sur différents objets.
Switchs, hubs, routeurs et serveurs sont des exemples
d'équipements contenant des objets manageables. Ces objets manageables
peuvent être des informations matérielles, des paramètres
de configuration, des statistiques de performance et autres objets qui sont
directement liés au comportement en cours de l'équipement en
question. Ces objets sont classés dans une sorte de base de
données appelée MIB (« Management Information Base
»). SNMP permet le dialogue entre le superviseur et les agents afin
de recueillir les objets souhaités dans la MIB.
L'architecture de gestion du réseau proposée par
le protocole SNMP est donc fondée sur trois principaux
éléments :
Les équipements managés (managed devices)
sont des éléments du réseau (ponts, hubs,
routeurs ou serveurs), contenant des « objets de gestion »
(managed objects) pouvant être des informations sur le
matériel, des éléments de configuration ou des
informations statistiques ;
Les agents, c'est-à-dire une application de gestion de
réseau résidant dans un périphérique et
chargé de transmettre les données locales de gestion du
périphérique au format SNMP ; Les systèmes de management
de réseau (network management systems notés NMS),
c'està-dire une console à travers laquelle les
administrateurs peuvent réaliser des tâches d'administration.
7.1 En pratique
Concrètement, dans le cadre d'un réseau, SNMP est
utilisé:
|
pour administrer les équipements
pour surveiller le comportement des équipements.
|
Une requête SNMP est un datagramme UDP habituellement
à destination du port 161. Les schémas de sécurité
dépendent des versions de SNMP (v1, v2 ou v3). Dans les
versions 1 et 2, une requête SNMP contient un nom appelé
communauté, utilisé comme un mot de passe. Il y a un nom de
communauté différent pour obtenir les droits en lecture et pour
obtenir les droits en écriture. Dans bien des cas, les colossales
lacunes de sécurité que comportent les versions 1 et 2 de SNMP
limitent l'utilisation de SNMP à la lecture des informations car la
communauté circule sans chiffrement avec ces deux protocoles. Un grand
nombre de logiciels libres et payants utilisent SNMP pour interroger
régulièrement les équipements et produire des graphes
rendant compte de l'évolution des réseaux ou des systèmes
informatiques (MRTG, Cacti, Nagios,...).
Monitoring d'une infrastructure Linux sur base d'outils
libres
Le protocole SNMP définit aussi un concept de Trap. Une
fois défini, si un certain évènement se produit, comme par
exemple le dépassement d'un seuil, l'agent envoie un paquet UDP à
un serveur. Ce processus d'alerte est utilisé dans les cas où il
est possible de définir simplement un seuil d'alerte. Dans nombre de
cas, hélas, un alerte réseau ne devrait être
déclenchée qu'en corrélant plusieurs
événements.
7.2 Les trames
La trame SNMPv1 est complètement encodée en ASN.1
[ISO 87]. Les requêtes et les réponses ont le même format
:
7.2-1 : Paquet SNMP
La version la plus utilisée est encore la version 1.
Plusieurs versions 2 ont été proposées par des documents
de travail, mais malheureusement, aucune d'entre elles n'a jamais
été adoptée comme standard. La version 3 est actuellement
en voie d'être adoptée. On place la valeur zéro dans le
champ version pour SNMPv1, et la valeur 3 pour SNMPv3.
La communauté permet de créer des domaines
d'administration. La communauté est décrite par une chaîne
de caractères. Par défaut, la communauté est « PUBLIC
».
Le PDU (Packet Data Unit)
7.2-2 : Le PDU
7.3 Sa 3ème version
Cette nouvelle version du protocole SNMP vise essentiellement
à inclure la sécurité des transactions. La
sécurité comprend l'identification des parties qui communiquent
et l'assurance que la conversation soit privée, même si elle passe
par un réseau public.
Cette sécurité est basée sur 2 concepts :
|
USM (User-based Security Model)
VACM (View- based Access Control Model)
|
7.3.1 USM - User-based Security Model
Trois mécanismes sont utilisés. Chacun de ces
mécanismes a pour but d'empêcher un type
d'attaque.
L'authentification : Empêche un intrus
vienne changer le paquet SNMPv3 en cours de route et de valider le mot de passe
de la personne qui transmet la requête.
7.3-1 : Schéma d'authentification du
SNMPv3
1. Le transmetteur groupe des informations à transmettre
avec le mot de passe.
2. On passe ensuite ce groupe dans la fonction de hachage
à une direction.
3. Les données et le code de hachage sont ensuite
transmis sur le réseau.
4. Le receveur prend le bloc des don nées, et y ajoute le
mot de passe.
5. On passe ce groupe dans la fonction de hachage à une
direction.
6. Si le code de hachage est identique à celui transmis,
le transmetteur est authentifié.
Monitoring d'une infrastructure Linux sur base d'outils
libres
Le cryptage : Empêche quiconque de lire
les informations de gestions contenues dans un paquet SNMPv3.
Avec SNMPv3, le cryptage de base se fait sur un mot de passe
« partagé » entre le manager et l'agent. Ce mot de passe ne
doit être connu par personne d'autre. Pour des raisons de
sécurité, SNMPv3 utilise deux mots de passe : un pour
l'authentification et un pour le cryptage. Ceci permet au système
d'authentification et au système de cryptage d'être
indépendants. Un de ces systèmes ne peut pas compromettre
l'autre.
SNMPv3 se base sur DES (Data Encryption Standard) pour
effectuer le cryptage.
7.3-2 : Schéma du cryptage des données
du SNMPv3
On utilise une clé de 64 bits (8 des 64 bits sont des
parités, la clé réelle est donc longue de 56 bits) et DES
encrypte 64 bits à la fois. Comme les informations que l'on doit
encrypter sont plus longues que 8 octets, on utilise du chaînage de blocs
DES de 64 bits.
Une combinaison du mot de passe, d'une chaîne
aléatoire et d'autres informations forme le « Vecteur
d'initialisation ». Chacun des blocs de 64 bits est passé par
DES et est chaîné avec le bloc précédent avec un
XOR. Le premier bloc est chaîné par un XOR au vecteur
d'initialisation. Le vecteur d'initialisation est transmis avec chaque paquet
dans les « Paramètres de sécurité », un
champ qui fait partie du paquet SNMPv3.
Contrairement à l'authentification qui est
appliquée à tout le paquet, le cryptage est seulement
appliqué sur le PDU.
L'estampillage du temps : Empêche la
réutilisation d'un paquet SNMPv3 valide déjà transmis par
quelqu'un.
Par exemple, si l'administrateur effectue l'opération
de remise à jours d'un équipement, quelqu'un peut saisir ce
paquet et tenter de le retransmettre à l'équipement à
chaque fois que cette personne désire faire une mise à jour
illicite de l'équipement. Même si la personne n'a pas
l'autorisation nécessaire, elle envoie un paquet, authentifié et
encrypté correctement pour l'administration de l'équipement.
On appelle ce type d'attaques le « Replay Attack
». Pour éviter ceci, le temps est estampillé sur chaque
paquet. Quand on reçoit un paquet SNMPv3, on compare le temps actuel
avec le temps dans le paquet. Si la différence est plus que
supérieur à 150 secondes, le paquet est ignoré.
SNMPv3 n'utilise pas l'heure normale. On utilise plutôt
une horloge différente dans chaque agent. Ceux-ci gardent en
mémoire le nombre de secondes écoulées depuis que l'agent
a été mis en circuit.
Monitoring d'une infrastructure Linux sur base
d'outils libres
Ils gardent également un compteur pour connaître
le nombre de fois où l'équipement a été mis en
fonctionnement. On appelle ces compteurs BOOTS (Nombre de fois ou
l'équipement a été allumé) et TIME (Nombre
de secondes depuis la dernière fois que l'équipement a
été mis en fonctionnement).
La combinaison du BOOTS et du TIME donne une valeur qui
augmente toujours, et qui peut être utilisée pour l'estampillage.
Comme chaque agent a sa propre valeur du BOOTS/TIME, la plate-forme de gestion
doit garder une horloge qui doit être synchronisée pour chaque
agent qu'elle contacte. Au moment du contact initial, la plateforme obtient la
valeur du BOOTS/TIME de l'agent et synchronise une horloge distincte.
7.3.2 VACM - View- based Access Control
Model
Permet le contrôle d'accès au MIB. Ainsi on a la
possibilité de restreindre l'accès en lecture et/ou
écriture pour un groupe ou par utilisateur.
7.4 La trame SNMPv3
Le format de la trame SNMPv3 est très différent
du format de SNMPv1. Ils sont toutefois codés tous deux dans le format
ASN.1 [ISO 87]. Ceci assure la compatibilité des types de données
entres les ordinateurs d'architectures différentes.
Pour rendre plus facile la distinction entre les versions, le
numéro de la version SNMP est placé tout au début du
paquet. La figure suivante montre la trame SNMPv3:
7.4-1 : Trame SNMPv3
Ce schéma montre clairement les différents
champs du paquet SNMPv3. Toutefois, le contenu de chaque champ varie selon la
situation. Selon que l'on envoie une requête, une réponse, ou un
message d'erreur, les informations placées dans le paquet respectent des
règles bien définies dans le standard.
Monitoring d'une infrastructure Linux sur base d'outils
libres 7.5 Son utilisation dans mon stage
Pour monitorer les différents équipements,
j'utilise donc le protocole SNMP. Pour ce faire, il faut installer sur les
machines Net-SNMP29. Net-SNMP est une collection d'applications
utilisées pour implémenter SNMP v1, SNMP v2c, SNMP v3 en
utilisant à la fois IPv4 et IPv6.
J'ai rapatrié les packages Net-SNMP suivant via les
dépôts de Red Hat :
Net-snmp
o Snmpd (daemon) : agent qui répondra aux
requêtes SNMP
o Snmptrapd (daemon) : application qui recevra les
notifications SNMP Net-snmp-utils : contient les divers outils (snmpwalk,
snmpget, ?)
Une fois les packages installés, il suffit de lancer le
daemon snmpd et on peut déjà interroger l'agent avec des petits
utilitaires du genre de Getif30.
7.6 Sa configuration
7.6.1 Création d'un utilisateur v3
Pour créer un utilisateur v3 (snmpd doit être
arrêté). Il suffit d'ajouter les lignes suivantes au tout
début du fichier /etc/snmp/snmpd.conf
createUser MonUtilisateur MD5 "MonMot2passe" DES
MonMot2PasseDES rouser MonUtilisateur
|
MonUtilisateur : nom d'utilisateur
MonMot2passe : authentication protocol pass phrase (qui se
transformera en MD5) MonMot2PasseDES : privacy protocol pass phrase (qui
servira pour le cryptage des don nées en DES)
|
7.6.2 Le fichier snmpd.conf Ensuite, modifier le
fichier comme suit :
####
# First, map the community name "public" into a "security
name"
# sec.name source community
com2sec Local monserveur.domain.tld
ma_communaute_ro
####
# Second, map the security name into a group name:
# groupName securityModel securityName
group LocalGroup usm Local
####
# Third, create a view for us to let the group have rights
to:
# Make at least snmpwalk -v 1 localhost -c public system fast
again.
# name incl/excl subtree mask(optional)
view allview included .1.3.6
view systemview included
.1.3.6.1.2.1.1
view systemview included
.1.3.6.1.2.1.25.1.1
29 Net-SNMP :
http://www.net-snmp.org
30 Getif :
http://www.wtcs.org/snmp4tpc/getif.htm
####
# Finally, grant the group read-only access to the systemview
view.
# group context sec.model sec.level prefix read write
notif
access LocalGroup "" usm authPriv exact allview none
none
|
chercher les mots : syslocation et
syscontact et les modifier en conséquence :
syslocation Rack 6, Armoire 9, Societe, Ville, Province,
Pays
syscontact Departement Informatique
<adresse-mail@domain.tld> lancer le service snmpd (
# /etc/init.d/snmpd start )
rééditer le fichier précédent et
supprimer la ligne « create user? »
|
7.6.3 Le test
Pour tester, nous pouvons lancer cette commande :
# snmp get -v 3 -u MonUtilisateur -l authPriv -a MD5
-A MonMot2passe -X MonMot2PasseDES localhost sysUpTime.0
Si on a l'heure (SNMPv2-MIB::sysUpTime.0 = Timeticks:
(42388) 0:07:03.88 ) c'est bon, continuons avec ceci :
# snmpwalk -v 1 -c manex_ro
localhost
Si Timeout: No Response from localhost
apparait, tant mieux :o) Plus de SNMPv1.
7.7 Analyse avec WireShark
WireShark va nous permettre d'analyser les paquets et de voir que
les informations demandées passent réellement en clair sur le
réseau lorsqu'on utilise les versions 1 et 2c du protocole SNMP et
qu'elles sont cryptées avec la version 3 de SNMP.
7.7.1 Tests avec SNMPv2c
Voici une capture ã l'aide du logiciel Wireshark. Comme on
peut le remarquer, la communauté passe
en clair vers l'agent que l'on souhaite interroger. Voici le
get-request :
7.7-1 : get-request, SNMPv2c 7.7-2 : get-response ;
SNMPv2c
Sur l'image de gauche, nous voyons donc la version
utilisée (SNMPv2c), le nom de ma communauté
(geolem_ro) et l'OID avec sa traduction des informations
demandées.
Ensuite sur l'image de droite, la réponse de l'agent.
Encore une fois la communauté est en clair, mais aussi ses informations.
Sinon, dans ce cas-ci, j'avais demandé la localisation du serveur. Des
informations tels que les services fonctionnant sur la machine peuvent
être consulté avec parfois la version de ceuxci. Il ne reste plus
qu'ã effectuer une petite recherche sur Internet pour trouver les
failles de ce dernier.Voyons ce que cela donne avec le SNMPv3?
7.7.2 Test avec le SNMPv3
7.7-3 : get-request ; SNMPv3 7.7-4 : report ;
SNMPv3
Ici, nous utilisons le SNMPv3. La procédure pour
obtenir des informations est un peu différente. Pour obtenir le
« syslocation » du test précédent,
nous devons passer par 4 paquets au lieu de 2. Il s'agit en fait de la
procédure d'authentification qui permettra d'obtenir le «
msgAuthoritativeEngineID » qui, comme on le verra, reste le
même tout le long des paquets.
7.7-5 : Demande des informations cryptées 7.7-6 :
La réponse cryptée
A gauche, nous avons la demande, à droite la
réponse. Le « msgAuthoritativeEngineID » est
resté comme prévu le même. On peut apercevoir que le «
UserName » passe en clair. Enfin, on peut voir les informations
encryptées.
Chapitre 8
Le monitoring des UPS
8 UPS
Les UPS sont un des éléments importants dans une
infrastructure de serveurs. Lors d'une coupure de courant, ils prennent
instantanément le relais le temps que le courant revienne ou au pire des
cas peuvent arrêter les serveurs de manière « propre ».
Il est important dès lors, de vérifier leur état de
fonction nement.
8.1 Le matériel
Chez Manex, les serveurs sont protégés par deux UPS
de marque MGE UPS SYSTEMS et le modèle
Pulsar Evolution.
LIEN :
http://www.mgeups.com/products/pdt230/smallups/evol/index.htm
8.2 La connectique
Les UPS peuvent être reliés par câble
séries ou USB. Dans mon cas, mon serveur dispose d'une prise USB et d'un
connecteur série ã l'arrière. Suite ã quelques
problèmes avec le câble série, j'ai relié le premier
UPS en USB.
8.3 Les logiciels
Pour monitorer les UPS deux logiciels sont nécessaires
:
8.3.1 UPSmon
Upsmon est un processus client qui a la responsabilité de
la partie la plus importante du monitoring - couper correctement le
système quand le courant est épuisé. Il peut faire appel
ã d'autres
programmes dans le but de notifier des évènements
de l'alimentation.
8.3.2 Drivers Nut31
Le driver libre NUT (Network UPS Tools) est un logiciel
libre largement soutenu par le fabricant MGE
qui y contribue beaucoup, dont les 2 atouts principaux sont :
|
Universalité : fonctionne avec la plupart des UPS du
marché32, quelque soit leur connectique (liaison
série, USB, ...)
Client/serveur : un serveur tourne sur la machine ã
laquelle est branchée l'UPS, ce qui permet ã tout le
réseau de connaître ã tout moment l'état du
système, et éventuellement d'envisager les actions
nécessaires le cas échéant (batterie faible ?
extinction propre).
|
LIEN :
http://www.networkupstools.org
31 Un tutorial pour son installation peut être
consulté ici :
http://linux.developpez.com/cours/upsusb/
32 Un liste peut être consultée ici :
http://eu1.networkupstools.org/compat/stable.html
8.4 Nagios dans tout cela
Le monitoring de l'UPS est très simple ã mettre en
oeuvre avec Nagios.
8.4.1 Présentation du plugin
Il existe un plugin officiel du coté de Nagios qui permet
de monitorer les UPS ã l'aide de Nut. Ce plugin essaye de
déterminer le statut de l'UPS sur une machine locale ou distante. Si
l'UPS est en
ligne ou en calibrage, le plugin retournera un état OK.
Si la batterie est en fonctionnement, il retournera un état Warning.
Si l'UPS est coupé ou a une batterie faible, le plugin retournera
un état Critical.
La définition du service approprié est aussi simple
que pour le reste. Cependant, il faut bien entendu définir la
commande.
8.4.2 Définition de la commande
Voici la définition de la commande :
define command(
command_name check_ups
command_line $USER1$/check_ups -H $HOSTADDRESS$ -u
$ARG1$
I
Le plugin prend comme argument l'adresse de l'hôte et le
nom de l'UPS. Voyons ensuite la définition du service.
8.4.3 Définition du service
Rien de bien compliqué :
define service(
use local-service
host _name HOST A
service_description UPS
check_command check_ups!myups
I
Un service local, sur le serveur HOST A. Une courte description
du service et enfin la ligne de
commande.
8.4.4 Le résultat
Capture d'écran deÐuis l'interface Web de
Nagios
Nous pouvons constater que le plugin monitore la charge utile, le
pourcentage de charge et l'utilisation de celle-ci.
Chapitre 9
Le monitoring des imprimantes réseaux
9 Les imprimantes
A priori, monitorer des imprimantes est peu utile car dans
beaucoup de cas, l'utilisation d'une imprimante, même via réseau,
nécessite l'installation d'un driver même si celui-ci est
générique. Lorsque l'on imprime, on reçoit une alerte de
la part de l'imprimante comme quoi les cartouches d'encres sont bientôt
vides. Cela dit, la maintenance des imprimantes est souvent confiée
ã d'autres personnes que l'utilisateur lui-même. Par exemple
à la secrétaire ou à un chef de département. Pour
connaître l'état de l'imprimante, plusieurs solutions s'offrent
ã nous :
|
Se déplacer devant l'imprimante et voir le statut de
celle-ci.
Les imprimantes réseaux sont généralement
fournies avec une interface Web où on peut obtenir divers renseignements
et les paramétrer en conséquence.
|
Seulement, quand on possède plusieurs imprimantes, cela
devient dur ã gérer d'oz l'intérêt de centraliser
tout çà.
9.1 Activer le protocole SNMP
A l'aide du protocole SNMP, on va pouvoir monitorer son statut
et le niveau des cartouches d'encre ou toners. D'autres choses peuvent bien
entendu être monitoré. Il est donc nécessaire d'activer ce
protocole sur les imprimantes et ce via l'interface Web de l'imprimante. Dans
notre cas, cela se fera via le protocole SNMP v1/v2? Il n'y a que peu
d'intérêt de faire cela via SNMPv3. A noter que j'utilise
seulement l'accès « read-only ». Pour obtenir des
informations, c'est suffisant.
9.2 Un SNMPwalk de l'imprimante
Utilisons la commande snmpwalk :
# snmpwalk -v 2c -c public
mxiprn2.manex.be
Lorsqu'on analyse le résultat, on peut trouver ceci :
SNMPv2-SMI::mib-2.43.11.1.1.6.1.1 = STRING: "black
ink" SNMPv2-SMI::mib-2.43.11.1.1.6.1.2 = STRING: "cyan ink"
SNMPv2-SMI::mib-2.43.11.1.1.6.1.3 = STRING: "magenta ink"
SNMPv2-SMI::mib-2.43.11.1.1.6.1.4 = STRING: "yellow ink"
Nous avons trouvez les couleurs, maintenant trouvons le
pourcentage d'utilisation des cartouches... continuons donc plus loin dans le
résultat du snmpwalk. On peut trouver ceci :
SNMPv2-SMI::mib-2.43.11.1.1.9.1.1 = INTEGER: 82
SNMPv2-SMI::mib-2.43.11.1.1.9.1.2 = INTEGER: 9
SNMPv2-SMI::mib-2.43.11.1.1.9.1.3 = INTEGER: 9
SNMPv2-SMI::mib-2.43.11.1.1.9.1.4 = INTEGER: 9
Si on regarde de plus près le statut des encres via
l'interface Web...
On remarque que les valeurs trouvées via SNMP
correspondent aux valeurs reprises dans l'interface. Cela dit, j'émets
une réserve quant ã la véracité de ces valeurs car
c'est bien connu, les couleurs Magenta, Cyan et Jaune ne s'usent pas en
même temps. Enfin, quoi qu'il arrive, il s'agit d'une estimation ayant
pour but de nous prévenir d'imprimer un trop gros document s'il n'y
avait plus d'encre. Voyons comment incorporer ces résultats dans
Nagios.
9.3 Intégration dans Nagios
Encore une fois, rien de bien compliqué.
9.3.1 Le contrôle du niveau d'encre
Pour contrôler le niveau d'encre dans Nagios, il faut tout
d'abord définir une commande :
define command(
command_name check_snmp_color
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -o
$ARG1$ -w '$ARG2$' -
c '$ARG3$' $USER3$ -l '$ARG4$' -u
'$ARG5$'
I
Nous passons donc par le plugin check_snmp. En argument,
on passe l'adresse de l'imprimante, l'OID que nous avons trouvé
précédemment, les valeurs Warning et Critical,
la communauté. Dans ce cas-
ci, j'utilise une macro $USER3$ défini dans
resource.cfg où il est simplement indique
« public » et la version du protocole SNMP ainsi que d'autres
paramètres propres aux plugins check_snmp.
Les services quant à eux (par exemple pour la couleur
noir) :
define service(
use printers-remote
host_name mxiprn2
service_description Black Color
check_command
check_snmp_color!.1.3.6.1.2.1.43.11.1.1.9.1.1!0:96!0:99!Status!percent
I
9.3.2 Le contrôle du statut
Il existe parmi les plugins officiels de Nagios, un plugin qui
vérifie par lui-même le statut des
imprimantes connectées via le HP JetDirect card. Sa
commande :
define command(
command_name check_hpjd
command_line $USER1$/check_hpjd -H $HOSTADDRESS$ -C
public
I
Son service :
define service(
use printers-remote
host_name mxiprn2
service_description Status
check_command check_hpjd
I
Chapitre 10
Utilisation d'un script à distance via SNMP
10 Utilisation de SNMP pour lancer un script à
distance
Le protocole SNMP permet d'obtenir un nombre incroyable
d'informations sur l'hôte distant.
Malheureusement, on ne peut pas obtenir toutes les informations
que l'on souhaite... Cela peut s'arranger en ajoutant des informations
simplement dans la MIB.
10.1 Des plugins supplémentaires
Dans notre cas, j'utilise deux PlugIns. Il est nécessaire
de les placer soi-même sur les hôtes distants.
Le premier Plugin est check_connections.pl. Il
fait partie des PlugIns officiels de Nagios. Il permet d'obtenir le nombre de
connections TCP ouverts pour un processus et/ou un utilisateur.
Le deuxième Plugin est check_diskio. Il
est téléchargeable ici :
LIEN :
http://www.id.ethz.ch/people/allid
list/corti/gnu software
Il permet de connaître le nombre de secteurs lus par
seconde.
Les PlugIns peuvent être placés où on le
souhaite sur l'hôte. Dans notre cas, je les ai placé dans
/usr/lib(64)/nagios/plugins.
10.2 La configuration de l'agent SNMP
On peut placer les lignes suivantes où on le souhaite.
Mais par rapport aux commentaires déjà présents dans le
fichier, j'ai préféré mettre les lignes qui suivent
après les commentaires sur :
# Executables/scripts
exec 1.3.6.1.4.1.17259.100 ldaptcpconn-check
/usr/lib64/nagios/plugins/check_connections.pl -C ns-slapd -w 500 -c
800
exec 1.3.6.1.4.1.17259.101 DiskIOsda
/usr/lib64/nagios/plugins/check_diskio -w 100 -c 200 -d sda
10.3 Définition de la commande et des services sur
le serveur
Bien entendu, il faut définir la commande et le service
respectif aux lignes précédentes.
define command(
command_name check_snmp
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -o
$ARG1$ -r "OK" $USER4$ }
define service(
use ldap-service
host _name mxisrv1
service_description LDAP Connections
check_command check_snmp!1.3.6.1 .4.1 .1 7259.100.1
01 .1 }
define service{
use host-service
host _name
mx1srv1,mx1srv2,mx1srv3,mx1srv7,mx1srv9,mxisrv1,mxisrv2 service_description
DiskIOsda
check_command check_snmp!1.3.6.1 .4.1 .1 7259.101.1
01 .1
I
10.4 Le pourquoi et le comment ?
Certaines informations que l'on souhaite obtenir de la machine
nécessitent donc le lancement d'un Plugin à distance. Seulement,
il serait absurde que le Plugin tourne 24h/7j.
Le protocole SNMP permet d'exécuter à distance des
scripts notamment. Ce qui est notre cas avec les deux PlugIns plus haut.
Lorsque Nagios fera une requête SNMP sur l'OID
1.3.6.1.4.1.17259.100.101.1 sur mxisrv1 (par exemple),
le daemon snmpd va interpréter ce message, va se renseigner dans sa
MIB pour obtenir les informations demandées. Pour les obtenir, il va
exécuter le Plugin adéquat. Ce Plugin va renvoyer des
informations que le daemon va capturer et renvoyer au serveur de
monitoring qui lui les analysera et réagira en fonction.
Chapitre 11
Les traps
11 Utilisation des traps avec nagios
Le protocole SNMP définit aussi un concept de trap.
Une fois défini, si un certain évènement se produit,
comme par exemple le dépassement d'un seuil, l'agent envoit un paquet
UDP (port 162) à un serveur. Ce processus d'alerte est
utilisé dans les cas où il est possible de définir
simplement un seuil d'alerte. Dans nombres de cas, hélas, un alerte
réseau ne devrait être déclenchée qu'en unissant
plusieurs événements.
11.1 Configurations
Une petite configuration est nécessaire coté
serveur et coté client pour que les traps puissent fonctionner.
Commençons par le client.
11.1.1 Coté client (l'agent)
Tout d'abord, il faut éditer le fichier
/etc/snmp/snmpd.conf et ajouter les lignes suivantes à
la fin du fichier. Pour nos tests, nous utiliserons la communauté «
public ».
# Définit la communauté par défaut
à utiliser quand des traps seront envoyées. trapcommunity
public
# Envois des traps de version 1 - HOTE où se trouve le
daemon snmptrad [Community [Port]] trapsink 192.1 68.88.129 public
162
# Envois des traps de version 2
trap2sink 192.1 68.88.129 public 162
#Utilisé lors d'envois d'inform ã la place des
traps
informsink 192.1 68.88.129 public
162
# Envois de traps lors d'authentification
ratée
authtrapenable 1
# Permet d'envoyer des traps lors du changement d'état
(Down/Up) des interfaces réseaux
linkUpDownNotifications yes
# Envois des traps pour une liste de problèmes
généraux defaultMonitors yes
11.1.2 Coté serveur
Premièrement, il faut créer (ou éditer)
le fichier /etc/snmp/snmptrapd.conf et ajouter les
lignes
suivantes à la fin du fichier.
# On traite de la même façon toutes les
interruptions : avec SNMPTT
traphandle default /usr/sbin/snmptt
# On accepte toutes les interruptions
disableAuthorization yes
#on ne journalise pas les interruptions reçues (c'est
SNMPTT qui s 'en chargera). On aura quand même une trace de snmptrapd
dans syslog, grâce à l'option -Lsd du lanceur (voir ci-dessous).
donotlogtraps yes
Pour la petite histoire, snmptrad passe à SNMPTT les
éléments de l'interruption qu'il a reçus via les
paramètres de la ligne de commande.
Le lanceur du service snmptrapd doit être modifié
pour ne pas traduire les OID, mais les laisser sous forme numérique.
C'est SNMPTT qui fera la traduction. Il faut modifier
/etc/init.d/snmptrapd :
OPTIONS="-On -Lsd -p /var/run/snmptrapd.pid"
# Il faut rajouter le -On
Après modification, il suffit de redémarrer le
daemon snmptrapd.
11.2 Nagios doit comprendre, SNMPTT l'aide.
SNMPTT (SNMP Trap Translator v1.2beta2) est un handler de trap
écrit en Perl pour être utilisé avec
le programme snmptrapd de Net-SNMP.
Site Web du logiciel :
http://www.snmptt.org
11.2.1 Fonctionnement général
1. Un hôte sur le réseau (ou plutôt une
application de cet hôte) envoit une interruption SNMP
au serveur qui héberge Nagios. Celui-ci la reçoit
via le service snmptrapd (qui est en écoute sur le
port UDP 162).
2. Snmptrapd la passe ensuite à SNMPTT,
dont le rôle est de rendre intelligible l'interruption.
Pour cela, il se base sur la MIB de l'aÐÐlication
émettrice, que l'on aura bien sûr
récuÐérée et transformée au préalable
pour en nourrir SNMPTT.
3. SNMPTT envoit enfin l'interruption interprétée
à Nagios, via le fichier de commandes
externes de celui-ci. Il utilise pour cela la commande Nagios
submit_check_result.
Dans ma configuration de Nagios, il n'y a qu'un service par
hôte qui reçoit les traps SNMP. Cela signifie que si plusieurs
traps sont reçus en provenance d'un même hôte, seul le
dernier sera affiché.
Par contre, chaque trap reçu générera bien
une notification.
Pour acquitter une interruption dans Nagios, il faut soit forcer
un check immédiat du service (qui fera
un ping et remettra l'état à OK), soit soumettre
manuellement un check passif, avec l'intitulé "Init", ou "RAZ", par exem
ple.
11.2.2 Configuration
Nous allons faire fonctionner SNMPTT en mode "stand-alone" ; il
sera appelé chaque fois que nécessaire par le gestionnaire
d'interruptions snmptrapd. L'initialisation est plus longue dans ce cas,
mais le paramétrage plus simple.
Le fichier de configuration /etc/snmp/snmptt.ini
doit contenir : [General]
mode = standalone
multiple_event = 1
dns_enable = 1
strip_domain = 1
strip_domain_list = <<END
mon.domaine
END
Monitoring d'une infrastructure Linux sur base d'outils
libres
resolve_value_ip_addresses = 0
net_snmp_perl_enable = 1
net_snmp_perl_best_guess = 0 translate_log_trap_oid = 0
translate_value_oids = 1
translate_enterprise_oid_format = 1 translate_trap_oid_format = 1
translate_varname_oid_format = 1 translate_integers = 1
wildca rd_expansion_separator = " " allow_unsafe_regex = 0
remove_backslash_from_quotes = 0 dynamic_nodes = 0
description_mode = 0
description_clean = 1
[Logging]
stdout_enable = 0
log_enable = 1
log_file = /var/log/snmptt.log
unknown_trap_log_enable = 1
unknown_trap_log_file = /var/log/snmpttunknown.log
statistics_interval = 0
syslog_enable = 1
syslog_facility = local0
syslog_level_debug = <<END
END
syslog_level_info = <<END
END
syslog_level_notice = <<END
END
syslog_level_warning = <<END
END
syslog_level_err = <<END
END
syslog_level_crit = <<END END
syslog_level_alert = <<END END
syslog_level = info
syslog_system_enable = 1 syslog_system_facility = local0
syslog_system_level = warning
[Exec]
exec_enable = 1
pre_exec_enable = 0 unknown_trap_exec =
[Debugging]
DEBUGGING = 0
DEBUGGING_FILE =
DEBUGGING_FILE_HANDLER =
[TrapFiles]
snmptt_conf_files = <<END /etc/snmp/snmptt.conf END
11.3 A noter :
le nom de domaine à supprimer pour ne garder que le nom
d'hôte, qui dÐvra êtrÐ adaÐté ã
l'ÐnvironnÐmÐnt oz on travaillÐ,
et le fait que le module Perl net-snmp est activé. Il
permet l'interprétation étendue des OID.
11.4 Compilation des mibs
Il faut maintenant récupérer le ou les fichiers
MIB des équipements à superviser, pour les convertir au format
SNMPTT. Le but est d'extraire ce qui dans le fichier MIB est un commentaire,
pour que SNMPTT le mette en correspondance avec l'OID qui sera reçu.
snmpttconvertmib --in=<fichier MIB>
--out=/etc/snmp/snmptt.conf.<equipement> \
--exec='/usr/local/nagios/libexec/eventhandlers/submit_check_result $r TRAP
1'
Dans le cas où on aurait trop de MIB, on peut
exécuter le petit script suivant en tenant compte que toutes les mibs se
trouvent dans /usr/share/snmp/mibs/ :
for i in /usr/share/snmp/mibs/ *.txt
> do
> /usr/sbin/snmpttconvertmib --in=$i
--out=/etc/snmp/snmptt.conf \
--exec='/usr/lib/nagios/plugins/eventhandlers/submit_check_result $r TRAP
1
> done
Ce qui va donc permettre de prendre en compte toutes les mibs
dans le répertoire précédemment
cité et les ajouter dans le fichier snmptt.conf.
On aura quelques lignes dans le genre :
EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events"
Normal
FORMAT A coldStart trap signifies that the SNMP
entity, $*
EXEC
/usr/lib/nagios/plugins/eventhandlers/submit_check_result $r TRAP 1 "A
coldStart trap signifies that the SNMP entity, $*"
SDESC
A coldStart trap signifies that the SNMP
entity,
supporting a notification originator application,
is
reinitializing itself and that its configuration
may
have been altered.
Variables:
EDESC
11.5 Dans Nagios
Le principe est d'utiliser, pour recevoir les interruptions SNMP,
des services passifs mais aussi volatiles, car si nous recevons une
deuxième interruption pour le même hôte avant que la
première
ait été remise à OK, nous voulons être
notifié à nouveau.
Pour cela, il faut (par exemple) définir un
service générique pour les traps SNMP, dérivé de
mon service générique général :
define service{
name snmptrap-service
use generic-service
register 0
service_description TRAP
is_volatile 1
check_command check-host-alive
max_check_attempts 1
normal_check_interval 1
retry_check_interval 1
passive_checks_enabled 1
check_period none
notification_interval 31536000
contact_groups admins
}
Monitoring d'une infrastructure Linux sur base d'outils
libres Et le dériver pour chaque machine supervisée, par
exemple :
define service{
host _name Ubuntu
use snmptrap-service
contact_ groups admins
}
Tout d'abord, il y a la commande check-host-alive
(un simple ping) qui permet de remettre à OK
l'état du service en forçant un contrôle actif. D'autre
part, l'intervalle de notification est
artificiellement long : un an ici. Il permet d'éviter
de recevoir régulièrement des notifications pour la même
interruption (tant que le service n'est pas ramené à
l'état OK), laissant penser qu'une nouvelle interruption, identique
à la précédente, a été reçue. Le
problème est qu'il faut redémarrer Nagios au
moins une fois par an.
11.6 Quelques tests
Coté client (agent), il suffit de
redémarrer simplement le daemon SNMPD pour qu'un évènement
se produise dans les logs du serveur (manager) :
# tail -f /var/lo g/snmptt.log
Tue May 29 14:20:38 2007 .1.3.6.1.4.1.8072.4.0.2
Normal "Status Events" 192.1 68.88.1 28 - An indication that the agent is in
the process of being shut down.
Tue May 29 14:20:40 2007 .1.3.6.1.6.3.1.1.5.1 Normal
"Status Events" 192.1 68.88.128 - A coldStart trap signifies that the SNMP
entity,
Allons voir sur Nagios :
Le trap est répertorié 3 secondes après dans
Nagios. Le trap décrit un peu plus haut.
Conclusion
Professionnelle :
Ce stage m'a permis de me familiariser avec le système
d'exploitation linux dont la maîtrise est nécessaire pour
travailler dans les réseaux informatiques.
La mise en place du service de surveillance Nagios permet
actuellement ã l'administrateur, ã l'ensemble du service
informatique, ainsi qu'aux dirigeants d'être informé de la
santé du réseau en temps réel. Depuis la mise en place de
Nagios, certains problèmes réseau ont été
traités plus ra pidement.
Personnelle :
Ces quatre mois au sein de Manex m'ont permis
d'acquérir une bonne expérience professionnelle. Les
dernières semaines chez Manex ont été des semaines de
défi. En fait, lorsque Manex avait besoin de monitorer quelque chose en
particulier, on me mettait un peu « au défi » de trouver une
solution à leur besoin. Par exemple :
vérifier le nombre d'IO sur les disques durs ã
l'aide de Nagios (réussi) ;
vérifier si ClamAV (un antivirus pour Linux)
était à jour (réussi) ;
vérifier si SpamAssassin fonctionnait (réussi)
;
vérifier si Amavis (lien entre ClamAV et un serveur de
mail) fonctionnait (réussi). La
vérification s'effectuait ã l'aide du virus EICAR
;
vérifier l'état du RAID ã l'aide d'SNMP
sur certains serveurs (raté) - pour monitorer cela, il
était nécessaire d'installer un logiciel de management
propriétaire ã IBM utilisant Java. Après plusieurs essais
avec un employé de Manex, nous ne sommes pas arrivés à le
faire fonctionner ;
vérifier l'état des UPS (réussi
avec l'aide d'un employé de Manex) ;
vérifier l'état des imprimantes (réussi)
;
vérifier l'état des sauvegardes ã l'aide du
client Bacula33 (presque réussi) - du
côté du serveur de Monitoring, tout est en ordre. Manque de temps
pour l'implémenter correctement.
De plus, la mise en place du système de surveillance du
réseau m'a permis de découvrir comment se déroulait la
gestion d'un travail d'équipe au sein d'un service informatique, car
étant donné la complexité du projet, il a
été nécessaire d'effectuer ce travail en équipe
afin de pouvoir connaître tout le réseau et de respecter les
objectifs et le délai.
Ce projet professionnel m'a donc apporté une grande et
enrichissante expérience puisqu'il s'agissait d'un projet important pour
Manex.
33 Le couplage Nagios/Bacula est relativement simple, pour plus
d'infos :
http://www.devco.net/pubwiki/Bacula/MonitoringWithNagios
Bibliographie
Nagios :
http://www.nagios.org
http://nagios.sourceforge.net/docs/2_0
http://forums.bfl-solutions.eu
Oreon :
http://oreon-project.org
http://forum.oreon-project.org
Cacti :
http://cacti.net OpManager :
http://manageengine.adventnet.com/products/opmanager
http://www.manageengine.fr/opmanager
SNMP / Traps :
http://fr.wikipedia.org/wiki/Simple_Network_Management_Protocol
http://christian.caleca.free.fr/snmp
http://www.frameip.com/snmp
http://www.supinfo-projects.com
http://linuxtips.castres-wireless.org/article.php3?id_article=16
http://xavier.dusart.free.fr
http://www.net-snmp.org/wiki/index.php/TUT:snmptrap
RRDtool / MRTG:
Nessus :
http://www.nessus.org
Snort :
http://www.snort.org
http://www-igm.univ-mlv.fr/~dr/XPOSE2001/liyun/IDS.html
MBSA :
http://www.microsoft.com/technet/security/tools/mbsahome.mspx
UPS :
http://linux.developpez.com/cours/upsusb/
Lexique
.htaccess : Les fichiers .htaccess
sont des fichiers de configuration des serveurs web Apache. Ils peuvent
être placés dans n'importe quel répertoire du site web (la
configuration s'applique au répertoire et à tous les
répertoires qu'il contient) et peuvent être modifiés alors
que le serveur est en cours d'exécution.
On peut les utiliser pour modifier les droits d'accès,
créer des redirections, écrire des messages d'erreurs
personnalisés, associer les extensions de fichier à des types
MIME, etc.
LIEN :
http://httpd.apache.org/docs/2.0/howto/htaccess.html
DMZ : Une zone
démilitarisée est un sous-réseau (DMZ) isolé par
deux pare-feux (firewall). Ce sousréseau contient des machines se
situant entre un réseau interne (LAN - postes clients) et un
réseau externe (typiquement, Internet).
La DMZ permet à ces machines d'accéder à
Internet et/ou de publier des services sur Internet sous le contrôle du
pare-feu externe. En cas de compromission d'une machine de la DMZ,
l'accès vers le réseau local est encore contrôlé par
le pare-feu interne.
Le DMZ est aussi (sur certain routeurs) le fait de rediriger
tout les ports vers un pc précis sur un réseau local.
LIEN :
http://fr.wikipedia.org/wiki/Sécurité
informatique
GPL : La Licence publique
générale GNU, ou GNU GPL pour GNU General Public License en
anglais, est une licence qui fixe les conditions légales de distribution
des logiciels libres du projet GNU. Richard Stallman et Eben Moglen, deux des
grands acteurs de la Free Software Foundation, en furent les premiers
rédacteurs. Sa dernière version est la GNU GPL version 2 de 1991
et une troisième version est en cours d'écriture.
Elle a depuis été adoptée, en tant que
document définissant le mode d'utilisation, donc d'usage et de
diffusion, par de nombreux auteurs de logiciels libres. La principale
caractéristique de la GPL est le copyleft, ou gauche d'auteur, qui
consiste à « détourner » le principe du copyright (ou
droit d'auteur) pour préserver la liberté d'utiliser,
d'étudier, de modifier et de diffuser le logiciel et ses versions
dérivées.
LIEN :
http://www.gnu.org/licenses/gpl.html
LDAP : Lightweight Directory Access
Protocol (LDAP) est un protocole permettant l'interrogation et la modification
des services d'annuaire. Ce protocole repose sur TCP/IP.
LIEN :
http://www.cru.fr/ldap/
Monitoring d'une infrastructure Linux sur base d'outils
libres
IMAP : Internet Message Access
Protocol (IMAP) est un protocole utilisé par les serveurs de messagerie
électronique, fonctionnant pour la réception.
Ce protocole permet de laisser les e-mails sur le serveur dans
le but de pouvoir les consulter de différents clients e-mails ou
webmail. Il comporte des fonctionnalités avancées, comme les
boîtes aux lettres multiples, la possibilité de créer des
dossiers pour trier ses e-mails? Le fait que les messages soient
archivés sur le serveur fait que l'utilisateur peut accéder
à tous ses messages depuis n'importe où sur le réseau et
que l'administrateur peut facilement faire des copies de sauvegarde.
IMAP utilise le port TCP 143. Il est particulièrement
bien adapté à l'accès à travers des connexions
lentes. IMAPS (IMAP over SSL) permet l'accès sécurisé au
serveur en utilisant SSL. Il utilise le port TCP 993. L'utilisation du
protocole IMAP au dessus de SSL est décrite dans la RFC 2595.
MIB : Une MIB (Management
Information Base, base d'information pour la gestion du réseau) est un
ensemble d'informations structuré sur une entité réseau,
par exemple un routeur ou un commutateur. Ces informations peuvent être
récupérées, ou parfois modifiées, par un protocole
comme SNMP.
LIEN :
http://christian.caleca.free.fr/snmp/la
mib.htm
SMTP : Le Simple Mail Transfer
Protocol (littéralement « Protocole simple de transfert de courrier
»), généralement abrégé SMTP, est un protocole
de communication utilisé pour transférer le courrier
électronique vers les serveurs de messagerie électronique.
SMTP est un protocole assez simple (comme son nom l'indique).
On commence par spécifier le ou les destinataires d'un message puis,
l'expéditeur du message, puis, en général après
avoir vérifié leur existence, le corps du message est
transféré. Il est assez facile de tester un serveur SMTP en
utilisant telnet sur le port 25.
LIEN :
http://stielec.ac-aix-marseille.fr/cours/caleca/smtp/index.html
SNMP : Le sigle SNMP signifie Simple
Network Management Protocol (protocole simple de gestion de réseau en
Français). Il s'agit d'un protocole de communication qui permet aux
administrateurs réseau de gérer les équipements du
réseau et de diagnostiquer les problèmes de réseau
à distance.
LIEN :
http://www.snmp.com
WAN : Un réseau
étendu, souvent désigné par l'acronyme anglais WAN de Wide
Area Network, est un réseau informatique couvrant une grande zone
géographique, typiquement à l'échelle d'un pays, d'un
continent, voire de la planète entière. Le plus grand WAN est le
réseau Internet.
LIEN :
http://fr.wikipedia.org/wiki/Wan