Superviser un système
OpenBSD (SNMP)


 

On  cherche à mettre en place des outils permettant de surveiller et superviser les serveurs OpenBSD. Pour cela l'outil le plus classique est SNMP. SNMP n'a pas bonne presse en terme de sécurité, mais il est toutefois possible d'arriver à un bon compromis en faisant attention à ce que l'on fait. On dispose avec la version 3 d'un cryptage et d'une authentification plus forte.

Vocabulaire :
L'agent est le démon qui tourne sur la machine à surveiller. Le gestionnaire ou manager est le «client» qui surveille. Le manager fait du polling (interrogation à intervalle de temps régulier) en direction du serveur qui écoute sur UDP/161. L'émission d'un trap par l'agent vers le manager se fait en direction d'UDP/162.

Installation :
cd /usr/ports/net/ucd-snmp && make && make install && make clean

Tous les fichiers de configuration et la MIB sont dans /usr/local/share/snmp. La doc dans/usr/local/share/doc/ucd-snmp.
Configuration :
-->
Copier le fichier d'exemple de conf cp /usr/local/share/examples/ucd-snmp/EXAMPLE.conf /etc/snmpd.conf
Afin que celui-ci se lance au démarrage, décommentez dans rc.local les lignes suivantes :
# Lancement de SNMPD
if [ -x /usr/local/sbin/snmpd ]; then
    /usr/local/sbin/snmpd -c /etc/snmpd.conf && echo -n 'snmpd'
fi
--> Il existe un script perl vous permettant de concevoir votre propre fichier snmpd.conf (snmp.conf et snmptrapd.conf aussi) en répondant à des questions : /usr/local/bin/snmpconf. Les fichiers sont créés dans le répertoire courant.. Ne le lancez pas depuis /usr/local/bin/, vous écraseriez l'ancien.  En revanche, si vous le relancez dans un répertoire contenant déja un des 3 fichiers de configuration, alors le script vous propose de les réutiliser. Pour obtenir les paramètres de base, il existe une option : /usr/local/bin/snmpconf -g basic_setup

--> Si vous préférez le faire vous même :
Modifiez le fichier /etc/snmpd.conf pour indiquer dans un premier temps les informations de votre machine.
com2sec    local    localhost    MonTrUc
com2sec    monreseau    172.16.0.0/16    MonTrUc

MonTrUc est le nom que j'utilise afin de ne pas laisser les valeurs par défaut.

Il faut aussi configurer les informations 
syslocation www.ici.fr
syscontact    Phil Chad    <pchad@ici.fr>

 A ce stade vous pouvez déjà lancer snmpd, mais il ne va pas se passer grand chose. 
/usr/local/sbin/snmpd -c /etc/snmpd.conf

Un petit coup de netstat -na afin de constater qu'il est bien à l'écoute sur le port 161/udp.

Je vais installer un outil qui va m'aider /usr/ports/security/ADMsnmp

Outils :
snmptranslate system.sysUpTime

Informations :
Vous devez considérer la communauté comme un mot de passe qui passe en clair sur le réseau. C'est un trou de sécurité pour le moins conséquent !
Par conséquent, vous devriez envisager plusieurs voies pour protéger ces infos. SNMP permettant d'influencer le comportement de l'agent, vous pouvez tomber le réseau...
--> Dédier un réseau aux flux snmp avec deux cartes par machines.
--> Faire passer le flux SNMP dans un tunnel crypté .
La source d'infos.
http://net-snmp.sourceforge.net/FAQ.html

 

Nagios

Nagios est le remplaçant de Netsaint.
Il permet de surveiller un ensemble de machine, qui peuvent être sur différents OS. On installe ici Nagios sur un serveur OpenBSD 3.2 (n'existe pas dans les ports.. pas encore !). 

Il est possible d'installer un serveur SQL, j'ai donc installé MySQL et GD.
Pour MySQL :
cd /usr/ports/database/mysql 
make && make install && make clean 
Ne pas oublier d'installer le serveur :  pkg_add /usr/ports/packages/i386/database/mysql-server (Vous devez avoir installé p5-DBI et p5-DBD-Msql-Mysql qui se trouvent dans /usr/ports/database). 
Pour GD
cd /usr/ports/graphics/gd 
make && make install && make clean 

Installation de Nagios :
Téléchargez les sources sur www.nagios.org
Faire un tar xvfz nagios-1.0.tgz.
Créer le compte et le groupe nagios (ou un autre). faire un mkdir /usr/local/nagios
Vous devez alors lancer la commande configure. Pour en savoir plus et l'adapter à votre système un ./configure --help s'impose.
Dans mon cas : 
configure --prefix=/usr/local/nagios --with-cgiurl=/cgi-bin --with-htmlurl=/var/www/htdocs/nagios --with-nagios-user=nagios --with-nagios-grp=nagios --with-mysq-xdata --with-mysql-lib=/usr/local/lib --with-mysql-inc=/usr/local/include --with-gd-lib=/usr/local/lib --with-gd-inc=/usr/local/include
make all 
make install

A la fin vous disposez de trois autre make possible :
make install-config qui copie dans /usr/local/nagios/etc des fichiers d'exemple de configuration.
make install-init pour lancer le démon à la mode systène V. Ne pas le faire.
make install-command mode qui applique les droits nécessaires (en fait vous pouvez le faire simplement à la main en donnant les droits à nagios).

L'option with-htmlurl n'est peut être pas nécessaire, à vous de voir suivant l'usage de la machine.


Installer les plugins

Cette partie est indépendante de l'installation de Nagios. Il est à tout moment possible de recompiler les plugins, en plus il y en a toujours de nouveaux.
Vous devez télécharger les plugins de Nagios sur http://www.nagios.org/download/.
Détarer le paquet puis lancer :
./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios --with-cgiurl=/cgi-bin --with-mysql=/usr/lib

Avant de lancer configure faire un ./configure --help afin de voir les options possibles.
Lire le résultat du configure, afin de voir ce qui manque et les ajouter.
Par exemple dans mon cas il m'indique qu'il n'a pas trouvé ntpdate sur ma machine. Je dois donc l'installer avant de continuer, si je veux pouvoir le monitorer.
Ajout de ntpdate via les ports.
Ajouté p5-Net-SNMP afin de pouvoir éventuellement utiliser perl avec SNMP.
Ajout de fping.

Petit problème, il faut détruire le fichier obtenu par le configure, car sinon il ne trouve pas plus au deuxième configure.

Problème avec mysql trouve pas les include, malgré les tests avec les ajouts de include, malgré que le Makefile indique le bon chemin. Pour le moment je sais pas. J'ai pas compilé avec mysql. D'ailleurs si par la suite on veut ajouter un plugins, vous pouvez ne recompiler que ce plugin.

Puis make all, make install.

Si vous ajoutez ou fabriquez des plugins, il vous faut les définir (les compiler si nécessaire) dans le fichiers checkcommands.cfg, avec les paramètres à indiquer, sinon ils ne seront pas pris en compte. 
Cela donne par exemple pour tester telnet et ping 

# 'check_telnet' command definition
define command{
command_name check_telnet
command_line $USER1$/check_tcp -H $HOSTADDRESS$ -p 23
}


# 'check_ping' command definition
define command{
command_name check_ping
command_line $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
}

Il est toujours possible de tester le bon fonctionnement des plugins, puisque ce n'est rien d'autre que des petits programmes. Par exemple pour tester un serveur smtp :
-bash-2.05b# ./check_smtp -H 172.16.0.1
SMTP OK - 1 second response time

http://www.totkat.org/pages/nconf_commands.html

 

Installer l'interface graphique

Je n'ai pas trouvé la solution avec la version Apache sur OpenBSD 3.2 et le fait qu'apache soit chrooté. Donc j'ai démarré apache avec l'option -u. (voir le fichier /etc/rc.conf). Il faut ajouté dans le fichier /var/www/conf/httpd.conf les lignes suivantes, si vous n'avez pas changé la place par défaut de vos fichiers :

# Ajout pour Nagios
ScriptAlias /cgi-bin/ "/usr/local/nagios/sbin/"
<Directory "/usr/local/nagios/sbin/">
AllowOverride AuthConfig
Options ExecCGI
Order allow,deny
Allow from all
</Directory>

Alias /nagios/ "/usr/local/nagios/share/"
<Directory "/usr/local/nagios/share">
Options None
AllowOverride AuthConfig
Order allow,deny
Allow from all
</Directory>

relancez apache pour avoir fait les modifications.
Depuis votre navigateur, vous pouvez avoir cette page avec http://mon_openbsd/nagios/

Il est possible de changer les répertoires par défaut, pour cela vous devez adapter les lignes à mettre dans httpd.conf, mais aussi modifier le fichier cgi.cfg qui permet de configurer les options de l'interface.

Ajouter les logos des Os ...etc
Pour cela vous devez télécharger sur le site de Nagios les logos (images packs). Puis les placer dans le répertoire /usr/local/nagios/share/images/logos, sauf si vous avez compilé avec l'option --with-htmlurl 

Il vous faut maintenant pour avoir un résultat, configurer et démarrer Nagios. 


Configurer l'authentification sur cette interface

Si vous ne configurez pas cette partie,  il ne vous sera pas possible d'utiliser certaines fonctions. Toutefois si vous souhaitez dans un premier temps accéder à l'interface vous pouvez toujours mettre use_authentification=0 (cela n'est pas très sécurisé, donc attention) dans le fichier cgi.cfg.

Vous devez créer un fichier .htaccess à la racine de votre cgi et du html, donc par défaut en /usr/local/nagios/sbin et /usr/local/nagios/share, avec les lignes suivantes :
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/nagios/etc/htpasswd.users
require valid-user


Puis créer les mots de passe avec htpassord -c /usr/local/nagios/etc/htpasswd.users admin   (admin comme login par exemple)
 
Si vous souhaitez utiliser des commandes externes (par exemple ajouter des commentaires) vous devez activer dans nagios.cfg check_external_commands=1
Il se pose alors un problème de droit sur /usr/local/nagios/var/rw (celui ci doit exister à vérifier toutefois).
Pour cela il faut créer un groupe groupadd nagioscmd
Puis mettre dedans nagios et www (le compte sur OpenBSD de httpd).
usermod -G nagioscmd nagios
usermod -G nagioscmd www

Puis faire chown nagios.nagioscmd /usr/local/nagios/var/rw
Puis relancer Apache.
Pour plus d'information sur ce petit problème voir http://nagios.sourceforge.net/docs/1_0/commandfile.html

Afin d'avoir accès à certaines fonctions du menu (process info par exemple) vous devez configurer dans cgi.cfg les lignes avec authorized_for_.....
en indiquant le nom des personnes autorisées à voir ces pages. Vous pouvez aussi autoriser tout les personnes authentifiées sur votre interface en mettant une * à la place des noms.

Ajouter les logos

Il faut avoir installé GD


Configurer Nagios

La partie la plus complexe.
J'ai cherché une solution graphique pour le faire, il me semble qu'il n'existe que nagat.
Installation de Nagat pour configurer les fichiers, Il faut installer php. Bof, plus simple directement dans le fichier. A revoir cet outil qui impose en plus que php soit en register_global = On.

Les fichiers à configurer se trouvent par défaut dans /usr/local/nagios/etc

nagios.cfg : Le fichier principal. On indique dedans ou se trouvent les différents fichiers.
cgi.cfg : pour configurer la partie interface, comme par exemple l'authentification.
hosts.cfg : vous définissez dans ce fichier les machines à surveiller.
hostgroup.cfg : vous définissez dedans des groupes de serveurs.
contacts.cfg : les contatcts pour les personnes à prévenir.
contactgroups.cfg : les groupes de contact.
checkcommands.cfg : au départ vous n'avez rien à mettre dans ce fichier, mais si vous souhaitez ajouter des plugins vous devez les définir dans ce fichier.
resource.cfg : indiquer ici les paramètres des serveurs sql que vous utilisez, sinon vous n'avez rien à mettre.
services.cfg : le fichier le plus important, vous indiquez ici les services que vous souhaitez surveiller et pour quelle machine.
escalation.cfg : Escalade dans les alertes, j'essaye d'alerter la première personne, celle-ci ne répond pas je passe à la suivante.
dependencie.cfg : les dépendances entre les services que vous surveillez.

Si je peux donner un conseil, commencez petit, tout petit. Utilisez pour cela les fichiers d'exemples que vous renommez en .cfg. En un mot n'essayez pas la première fois de mettre toutes vos machines, services ...etc.


Si Nagios a été compilé avec une base de donnée (Mysql ou Postgres), il faut créer la base et les tables et les comptes pour cela.  Dans contrib/databases il existe un  create_mysql et create_pgsql qui permettent de créer les tables (mysql nagios < create_mysql). 

Il faut aussi indiquer le compte, la base, ... dans les fichiers resource.cfg et cgi.cfg.

Avant de démarrer Nagios vous devez tester si il n'y a pas d'erreurs. Pour cela lancer nagios avec l'option -v
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Créer le fichier de log de Nagios avec les bons droits, vous pouvez en modifier l'emplacement dans nagios.cfg.

Démarrer Nagios

En mode Démon, cela donne /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg
Attention si vous n'avez pas corrigé les problèmes Nagios ne va pas se lancer.

Remonter les informations depuis les différentes machines

Le problème est maintenant de collecter les remontées d'informations depuis des machines distantes.
il existe pour cela plusieurs solutions :
- SNMP
- check_by_ssh Permet d'exécuter une commande sur une machine distante avec ssh.
- NRPE Nagios Remote Plugin Executor Permet d'exécuter un plugin sur une machine distante.
- NSCA Nagios Service Check Acceptator Permet de recevoir des informations des clients.
- Nagios stadt Plugin client serveur en python qui permet de remonter des informations.

Pour une machine Windows (2000 XP), je sais j'ai honte, il existe NSclient que vous pouvez télécharger ici http://nsclient.ready2run.nl/download.htm. Vous devez l'installer sur la machine Windows, puis lancer le service "Netsaint NT Agent" qui écoute sur le port 1248. Depuis OpenBSD, vous devez avoir le plugin check_nt, il est dans les plugins par défaut. Vous pouvez alors à l'aide de la commande check_nt recevoir les informations que vous souhaitez.  Je vous conseille avant de configurer les fichiers Nagios tester en ligne de commande, par exemple pour remonter l'état du disque C, passer la commande :
check_nt -H ip_de_la_machine_windows -p 1248 -v USEDDISKSPACE -l C -w 80 -c 90
Si cela ne marche pas vérifier sur la machine windows qu'elle est bien à l'écoute sur le port 1248.

Il y a un bon fichier README dans le paquet de NSclient qu'il vous faut lire, toutefois, il y a une petite différence non documentée, il faut ajouter dans le fichier checkcommands.cfg une ligne de la forme

# 'check_nt_disk' command definition
define command{
command_name check_nt_disk
command_line $USER1$/check_nt -H $HOSTADDRESS$ -p 1248 -v USEDDISKSPA
CE -l $ARG1$ -w $ARG2$ -c $ARG3$
}

afin de remonter l'état du disque dur.  Faire la même chose avec les autres commandes que vous souhaitez contrôler (check_nt_cpu....etc).

Puis dans services.cfg

define service{
    use generic-service ; Name of service template to use
    host_name client
    service_description DISK
    is_volatile 0
    check_period 24x7
    max_check_attempts 3
    normal_check_interval 5
    retry_check_interval 1
    contact_groups nt-admins
    notification_interval 120
    notification_period 24x7
    notification_options w,u,c,r
    check_command check_nt_disk!C!80!90
    }

La machine client (host_name) devant exister dans votre fichier hosts.cfg.
Pour appeler la commande check_nt_disk avec les variables ajouter devant un !.
Faire la même chose pour les autres machines.
Toutefois Nsclient a un gros défaut à mon sens, vous ne pouvez remonter que les infos des plugins de NSclient. Ce qui peut rapidement être insuffisant.

Vous pouvez aussi utiliser SNMP. Pour cela il vous faut l'installer sur la machine Windows ( voir ici une doc http://www.laboratoire-microsoft.org/articles/network/snmp/) puis utiliser le plugin check_snmp pour remonter les informations.

 
Superviser vos machines OpenBSD

Enfin on y arrive. 
Quelles informations souhaitez vous remonter de vos machines OpenBSD.
- L'espace disques : 


Les choses à faire

- Essayer de placer nagios dans /var/www pour voir si il est possible de conserver le chroot d'apache par défaut.
- Passer en HTTPS

Doc
http://xavier.dusart.free.fr/netsaint/                              Doc Netsaint
http://perso.ifsic.univ-rennes1.fr/angelini/GPL/         Traduc de la doc Nagios


© Philippe Schwarz - Philippe Chadefaux - $Id: supervision.htm,v 1.2 2002/09/12 20:23:40 phil Exp $ -