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 $ -