NAGIOS : Plugin de prise en main à distance (Http,RDP,SSH,Telnet)

Pour rende l’interface web de Nagios un peu plus interactive, je me suis penché sur l’option action_url des fichiers de configuration de nagios 3.x. Cette option permet de configurer l’action effectuée lors d’un clic sur l’icon « extra Action » sur les pages web de type « host » de nagios. J’utilise quatre proctocles de prise en main à distance (HTTP, RDP, SSH et Telnet) suivant la cible concerné. Je vais expliquer ici l’implémentation de RDP pour la prise en main à distance des serveurs windows, ainsi que les trois outils utilisés pour l’occasion : Winexe et deux petits scripts cousus main (indulgence de mise). L’idée est de faire une « remote » commande sur le pc client (celui où l’on a la page de nagios ouverte dans firefox), pour lancer mstsc.exe avec les bons paramètres pour la prise en main à distance du serveur NT.

Prise en main par HTTP :

Jusque là, c’est la seule fonction que j’utilisais sous nagios. Par exemple, avec mes switchs pour activer le contrôle via leur interface web, on ajoute cette option dans /usr/local/nagios/etc/hosts.cfg :

define host {
use switch-host
host_name SWT01
alias Switch Netgear 100 Mbps
adress 192.168.2.1
hostsgroups Switchs
action_url http://$HOSTADDRESS$
}

!!! Attention, le procédé ci-dessous est à utiliser à vos risques et périls. Je ne garantie en aucun cas la sécurité des informations transitantes sur le réseau ou des failles de sécurité ainsi générées !!!

Winexe : l’outil de base

Winexe permet d’exécuter des commandes à distance et de manière interactive sur des postes sous WindowsNT/2000/XP/2003 depuis un system GNU/linux (ici debian etch). Quand on lit les pré-recquis de l’outil, ce qui m’a frappé, c’est qu’ on a ici une configuration de base d’un environnement windows  ( »Printer and File Sharing », ADMIN$…). Afin de pouvoir utiliser l’outil il faut bien entendu un compte administrateur sur les machines distantes. Pour ma part, j’utilise un compte qui fait parti du groupe « aministrateur local » de mes serveurs. Il est le même sur tous les serveurs NT. J’ai donc procédé de cette manière, il faut récupérer la source depuis l’url http://eol.ovh.org/winexe/winexe-source-071026.tar.bz2. Décompresser l’archive, renommer le fichier extrait en winexe et le placer dans /usr/bin avec les bons droits :

tar -xjfv winexe-source-071026.tar.bz2
mv winexe-static-071026 /usr/bin/winexe
chmod 755 /usr/bin/winexe

Nous allons partir de la configuration de nagios. Ensuite, nous allons voir les scripts utilisés.

Prise en main par RDP : Configuration nagios

Pour ma part j’ai préféré utiliser les fichiers de configuration de type « template » afin que tous mes serveurs windows récupèrent la fonction action_url de prise en main à distance.
define host {
name             Windows-template
use              generic-host
action_url       http://RACINE_NAGIOS/mstsc.php?ip=$HOSTNAME
}

?ip=$HOSTNAME : On récupère ici l’adresse ip du serveur Windows par la variable $HOSTNAME de Nagios. Elle va servir de paramètre à notre script mstsc.php

MSTSC.php : Plugin Nagios RDP

Ensuite, j’ai créé ce petit script en php, qui va lancer notre futur shell « mstsc.sh » en lui précisant les bons paramètres. On crée ensuite notre script mstsc.php à télécharger sur mon blog :

cd /usr/local/nagios/share/
wget http://feilongwork.free.fr/wp-content/uploads/sources/mstsc.tar.bz
tar xvzf mstsc.tar.bz

(Toujours) Trois lignes à expliquer sur le mstsc.php :

$parFile= trim($_GET["ip"]);            On récupère ici l’adresse IP du serveur microsoft.
$client = $_SERVER["REMOTE_ADDR"];       On récupère ici l’adresse IP du client.

On peut donc lancer notre shell avec nos deux paramètres par :
$output = shell_exec( »mstsc.sh $client $parFile »);

Pour autoriser apache d’exécuter notre shell il faut désactiver la fonction safe_mode dans la configuration de php et relancer le serveur apache:

vim /etc/php5/apache2/php.ini
safe_mode = Off
/etc/init.d/apache2 reload

On pourrait aller plus loin dans la sécurité en limitant à un répertoire les exécutables accessibles par apache avec la fonction safe_mode_exec_dir = /usr/local/nagios/libexec/safe/ dans le php.ini et placer notre shell "mstsc.sh" dans ce dossier...

Shell MSTSC.sh :

Je me suis créé ensuite ce petit shell :

vim /usr/bin/mstsc.sh :
#!/bin/sh /usr/bin/winexe --interactive=1 --reinstall --uninstall --system -U adminlocal%mot_de_pass //$1  "mstsc /v:$2 /F" &

Quelques explications rapides :

  • –interactive=1 : Active le mode interactif, c’est mieux pour lancer mstsc.exe sur la machine distante.
  • –reinstall : Force l’installation du service winexesvn utilisé par winexe sur la machine distante.
  • –uninstall : Force la désinstallation du service winexesvn une fois le process terminé.
  • –system : Obliger d’utiliser le le compte SYSTEM pour des commandes interactives.
  • -U adminlocal%mot_de_pass : Compte NT administrateur local et mot de pass de la machine cible.
  • //$1 : //adresse IP de la machine cible, ici le premier paramètre lancé à notre shell.
  • « mstsc /v:$2 /F » & : Lance la commande MSTSC de prise en main à distance sur le serveur dont le nom est le deuxième paramètre envoyé à notre shell.

Tout ça pour ça :

Reste plus qu’à recharger la configuration de nagios pour qu’il prenne en compte les mofications apportées à ses fichiers de configuration :

/etc/init.d/nagios reload

Conclusion :

J’ai utilisé le même procédé pour ouvrir des sessions interactives en ssh et telnet en modifiant le script en shell. J’aurai pu utiliser le même script php pour l’ensemble des protocoles, mais faute de temps et de connaissance en php, j’ai créé autant de script php que de shell correspondant. Si quelqu’ un sait comment tout réunir je suis preneur. Je reviendrais souvent parler de Nagios dans ce blog, surtout sur des modules tiers que j’ai gréfé à son interface de base.

Vus : 2521
Publié par Feilong : 12