PHP et SNMP LPRO ISVD Olivier Flauzac Université de Reims Champagne-Ardenne olivier.flauzac@univ-reims.fr http://cosy.univ-reims.fr/flauzac Olivier Flauzac (URCA) LPRO ISVD PHP et SNMP 1 / 20
Plan 1 Extensions de PHP 2 PHP et SNMP Mise en œuvre Fonctions SNMP 3 Approche sécurisé Olivier Flauzac (URCA) LPRO ISVD PHP et SNMP 2 / 20
Plan 1 Extensions de PHP 2 PHP et SNMP Mise en œuvre Fonctions SNMP 3 Approche sécurisé Olivier Flauzac (URCA) LPRO ISVD PHP et SNMP 3 / 20
Contenu de PHP Dans PHP ensemble de fonctions de base (fichier, sessions...) fonctionalités additionnelles dépendantes de la version / distribution état complet de php accessible avec phpinfo() liste des fonctionalités incluses et accessible : http://www.php.net Olivier Flauzac (URCA) LPRO ISVD PHP et SNMP 4 / 20
Ajouter des fonctionalités à PHP Types de fonctionalités protocoles accès à des bibliothèques accès à des fonctions de logiciels Quelques extensions de PHP GD : gestion de la création de graphiques Imap : gestion du protocole IMAP ldap : gestion du protocole LDAP SNMP : gestion du protocole SNMP... Olivier Flauzac (URCA) LPRO ISVD PHP et SNMP 5 / 20
Plan 1 Extensions de PHP 2 PHP et SNMP Mise en œuvre Fonctions SNMP 3 Approche sécurisé Olivier Flauzac (URCA) LPRO ISVD PHP et SNMP 6 / 20
Principe Requête HTTP 1 Requête SNMP 2 Client WEB 4 3 Réponse HTTP Réponse SNMP Serveur WEB - PHP Elément réseau Problème possible temps de réponse de SNMP Olivier Flauzac (URCA) LPRO ISVD PHP et SNMP 7 / 20
Installation Procédure utilisation d un gestionnaire de packages installation de la lib SNMP (net-snmp) installation de SNMP pour PHP Test relancer apache! rechercher l extension SNMP dans une page phpinfo Olivier Flauzac (URCA) LPRO ISVD PHP et SNMP 8 / 20
Opérations possibles PHP SNMP ensemble des opérations classiques SNMP snmpget snmpset snmpwalk... accès à l aide de fonctions de la bibliothèque gestion des appels effectué par PHP Olivier Flauzac (URCA) LPRO ISVD PHP et SNMP 9 / 20
snmpget Prototype simplifié s t r i n g snmpget ( s t r i n g $hostname, s t r i n g $community, s t r i n g $ o b j e c t _ i d ) Exemple <? $syscontact = snmpget ( " 127.0.0.1 ", " p u b l i c ", " system. SysContact.0 " ) ;?> Olivier Flauzac (URCA) LPRO ISVD PHP et SNMP 10 / 20
snmpgetnext Prototype simplifié s t r i n g snmpgetnext ( s t r i n g $host, s t r i n g $community, s t r i n g $ o b j e c t _ i d ) Olivier Flauzac (URCA) LPRO ISVD PHP et SNMP 11 / 20
snmpwalk Prototype simplifié array snmpwalk ( s t r i n g $hostname, s t r i n g $community, s t r i n g $ o b j e c t _ i d ) Exemple <?php $a = snmpwalk ( " 127.0.0.1 ", " p u b l i c ", " " ) ; foreach ( $a as $val ) { echo " $val \ n " ; }?> Olivier Flauzac (URCA) LPRO ISVD PHP et SNMP 12 / 20
snmpset Prototype simplifié bool snmpset ( s t r i n g $hostname, s t r i n g $community, s t r i n g $ o b j e c t _ i d, s t r i n g $type, mixed $value Olivier Flauzac (URCA) LPRO ISVD PHP et SNMP 13 / 20
Plan 1 Extensions de PHP 2 PHP et SNMP Mise en œuvre Fonctions SNMP 3 Approche sécurisé Olivier Flauzac (URCA) LPRO ISVD PHP et SNMP 14 / 20
Limite de l utilisation de l extension SNMP Fonctions SNMP appel aux fonction de la bibliothèque standard de Net-SNMP passage des informations au format ASN.1 passage des informations en clair : possibilité de "captage" des communautés possibilité de "captage" des mots de passe Olivier Flauzac (URCA) LPRO ISVD PHP et SNMP 15 / 20
Une autre approche : Utilisation d un shell séurisé Utilisation d une connexion SSH : Principe 1 requête du client vers la page PHP 2 connexion du script PHP à un serveur SSH 3 "passage" de commandes Net-SNMP dans le shell sécurisé 4 récupération des résultats par la page PHP 5 traitement et affichage (si nécessaire) des résultats 6 réponse à la requête du client Olivier Flauzac (URCA) LPRO ISVD PHP et SNMP 16 / 20
Principe 1 2 3 Requête HTTP 6 Requête SSH 5 Requête SNMP 4 Client Serveur WEB Serveur SSH Elément réseau Problème possible temps de réponse de SSH + temps de réponse SNMP Olivier Flauzac (URCA) LPRO ISVD PHP et SNMP 17 / 20
Mise en œuvre : Installation Installation par compilation installation des packages : apache2 + php5 php5-dev, php5-cli, php-pear, build-essential, openssl-dev, zlib1g-dev libssh2 pecl install -f ssh2 extension=ssh2.so Installation par package recherche du package RPM sur le web (php ssh2 rpm) Olivier Flauzac (URCA) LPRO ISVD PHP et SNMP 18 / 20
Mise en œuvre : Exemple Exemple PHP <? / / établissement de l a connexion $conn = ssh2_connect ( l o c a l h o s t, 2 2 ) ; / / t e s t de l a connexion i f ( $conn ) echo " connexion réussie \ n " ; else e x i t ( 1 ) ; / / a u t h e n t i f i c a t i o n ssh2_auth_password ( $conn, log, pass ) ; / / exécution d une commande sur l hôte $stream = ssh2_exec ( $conn, snmpwalk v 2c c p u b l i c l o c a l h o s t ) ; Olivier Flauzac (URCA) LPRO ISVD PHP et SNMP 19 / 20
Mise en œuvre : Exemple suite Exemple PHP / / mise en place du mode bloquant : / / a t t e n t e de r é c e p t i o n des données stream_set_blocking ( $stream, true ) ;?> / / l e c t u r e des données issues du f l u x créé while ( $ i n = fread ( $stream, 8192 ) ) { / / a f f i c h a g e formaté des données echo nl2br ( $in ) ; } Olivier Flauzac (URCA) LPRO ISVD PHP et SNMP 20 / 20