Ngoupe Uqac 0862D 10137
Ngoupe Uqac 0862D 10137
Ngoupe Uqac 0862D 10137
PRÉSENTÉE À
DU DOCTORAT EN INFORMATIQUE
PAR
APPROCHE DÉDUCTIVE
JUIN 2015
TABLE DES MATIÈRES
Résumé 1
Introduction 3
Annexes 144
Bibliographie 153
TABLE DES FIGURES
4.4 Diagramme de classe pour la mise en œuvre d’une évaluation sélective . 137
LISTE DES TABLEAUX
4.1 Réécriture des règles pour la forme normale prenex dans CL, où ϕ et ψ
sont des expressions arbitraires . . . . . . . . . . . . . . . . . . . . . . 129
4.2 Réécriture des règles pour la forme normale disjonctive dans CL, où ϕ, ψ
et ψ 0 sont des expressions arbitraires. . . . . . . . . . . . . . . . . . . . 129
4.3 Echange de données dans les dispositifs . . . . . . . . . . . . . . . . . . 139
RÉSUMÉ
La gestion des réseaux informatiques est une tâche de plus en plus complexe et sujette aux
erreurs. Les recherches dans le passé ont montré qu’entre 40% et 70% des modifications
apportées à la configuration d’un réseau échouent à leur première tentative d’utilisation,
et la moitié de ces échecs sont motivés par un problème situé ailleurs dans le réseau. Les
opérateurs de réseau sont ainsi confrontés à un problème commun : comment s’assurer
qu’un service installé sur le réseau d’un client fonctionne correctement et que le réseau
lui-même est exempt de défaut de toute nature ? L’ingénieur réseau a donc à chaque
fois qu’un nouveau service sera ajouté au réseau, la responsabilité d’un groupe de
périphériques dont les configurations sont gérées individuellement et manuellement.
Cette opération vise deux objectifs :
être capable de supporter, et le fait que les données traversent généralement des réseaux
hétérogènes appartenant à plusieurs opérateurs, rendent cette tâche de plus en plus
difficile. Nous pouvons aisément comprendre la nécessité de nouvelles approches au
problème de gestion de configuration réseau.
Au cours de notre étude, nous avons utilisé un formalisme basé sur la logique de confi-
gurations qui offre plusieurs avantages, tel que : la vérification efficace et aisée des
configurations d’équipements multiples, la séparation claire entre les spécifications de
contraintes de configuration et sa validation réelle, mis en relief dans l’outil de configu-
ration et de vérification automatique de configuration appelé ValidMaker. Nous avons
aussi présenté un modèle de données génériques pour des informations de configuration
des dispositifs réseaux qui prennent en compte l’hétérogénéité des fabricants et de leurs
versions. Les concepts tels que Meta-CLI ont été utilisés pour représenter la configuration
extraite du dispositif sous forme d’arbre dont les feuilles représentent les paramètres
extraits dans le but de pouvoir tester certaines propriétés complexes et d’en déduire les
informations restantes. Nonobstant le fait que nos résultats sont basés et validés sur des
cas d’utilisation et des configurations matérielles d’une entreprise cible, la méthodologie
pourrait être appliquée à des équipements se rapportant à n’importe quel fournisseur de
service réseau.
INTRODUCTION
La gestion des réseaux informatiques est toujours un travail pénible, laborieux, sujet
aux erreurs et dont la complexité est sans cesse croissante en raison de l’évolution des
technologies et du matériel qui entre en compte (Hallé et al., 2005; Delaet et Joosen,
2007). D’une part, les équipements qui forment le réseau doivent se comporter comme
un groupe ; cependant, chacune de ces machines est gérée et configurée individuellement.
La question fondamentale est la même depuis plusieurs années. Un ingénieur réseaux
est responsable d’un pool de dispositifs dont les configurations individuelles sont gérées
pour la plupart manuellement. Chaque fois qu’un nouveau service doit être ajouté aux
appareils du réseau, il doit s’assurer du réglage parfait et approprié des paramètres
de configuration de ces appareils. Cette délicate opération doit viser deux objectifs :
mettre en place la fonctionnalité désirée tout en permettant la continuité des services
existants. Ceci signifie en particulier que les paramètres de la nouvelle configuration
ne doivent pas entrer en conflit avec les paramètres déjà configurés de ces appareils
ou ceux d’autres appareils. Imaginez que lors d’un examen en vidéo conférence, après
quelques échanges fructueux entre l’étudiant et l’examinateur se trouvant dans une autre
ville ou dans une autre université, la communication se coupe. Comment faire pour
renouer la communication avec son enseignant ou son étudiant ? Dans ce contexte, les
4
administrateurs des deux sites et leurs opérateurs réseaux sont confrontés à un problème
commun : comment s’assurer qu’un service installé sur le réseau d’un client fonctionne
correctement ou que le réseau lui-même soit exempt de tout défaut. On peut donc se
poser la question de savoir, comment pourrait-on diagnostiquer automatiquement une
erreur de configuration avant l’appliquer les changements ?
Cette problématique soulève donc un pan de voile sur la nécessité de mettre sur pied
des modèles efficaces qui doivent être implémentés sur des équipements de réseaux, afin
de faciliter le diagnostic et la prise en main rapide des défaillances. Si l’ajout et la prise
en compte d’un nouvel équipement réseau pouvait se faire de façon transparente, on
estime que la charge de travail des administrateurs réseaux devrait être considérablement
réduite. Malheureusement, l’ajout d’un nouvel équipement cause parfois plus de soucis
à ces administrateurs qui doivent généralement procéder à des configurations manuelles,
et ceci pour chaque équipement déjà présent sur le réseau. De plus, à chaque fois
qu’un nouveau service est ajouté au réseau, ils doivent s’assurer que les paramètres de
configuration de ces équipements soient réglés sur des valeurs appropriées.
Des recherches menées dans le passé ont montré que 40 à 70% des changements apportés
dans la configuration d’un réseau échouent lors de la première tentative et que la
moitié de ces changements sont motivés par un problème situé ailleurs dans le réseau
(Strassner, 2002). On peut raisonnablement penser que ces chiffres n’ont pas évolué ces
dernières années : (Feamster et Balakrishnan, 2005) a révélé plus de 1000 erreurs dans
la configuration BGP de 17 réseaux ; (Wool, 2004) a étudié des pare-feux sur le plan
quantitatif et a révélé que tous étaient mal configurés d’une façon ou d’une autre. La
diversité des équipements réseaux et des contraintes qui leur sont associées font ainsi
accroître la complexité de la gestion des configurations ; et comme le mentionnent (Delaet
et Joosen, 2007; Campi et Bauer, 2009), parmi tous les problèmes liés aux équipements
5
réseau, les erreurs de configurations sont les plus difficiles à résoudre. L’objectif des
administrateurs de réseaux est de configurer leurs appareils sans aucune erreur. La
réduction du nombre d’erreurs peut conduire à une réduction des couts des travaux de
maintenance pour les entreprises. L’institut de recherche Sage a découvert que 40% des
temps d’arrêt de système sont dus aux erreurs opérationnelles et 44% de ces erreurs
proviennent des erreurs de configuration (Pignet, 2007; Delaet et Joosen, 2007).
Ces résultats ont déclenché la conception et la mise sur le marché de plusieurs outils
qui, malgré leur utilité, ont fait ressortir d’autres problèmes tels que l’interopérabilité
ou l’hétérogénéité du dispositif. Le travail des administrateurs réseau doit donc pouvoir
répondre à deux objectifs : la mise en œuvre de la fonctionnalité désirée ainsi que la
préservation du bon fonctionnement des services existants. Ces tâches, déjà peu simples,
deviennent de plus en plus difficiles à cause de l’évolution fulgurante du nombre des
équipements réseaux, la complexité des configurations, les besoins spécifiques de chaque
service et le nombre même de services qu’un réseau doit être capable de supporter.
Lorsque l’on ajoute à ce tableau le fait que les données traversent généralement des
réseaux hétérogènes appartenant à plusieurs opérateurs différents, on comprend pourquoi
l’avènement de nouvelles approches au problème de gestion de configuration de réseau
est essentiel.
Après avoir présenté les travaux d’autres scientifiques, nous allons nous concentrer sur
une nouvelle façon de répondre à ces problématiques et notre solution va s’appuyer
sur une approche déductive et structurée basée sur les méthodes formelles, plus par-
ticulièrement la logique mathématique et le concept de Meta-CLI. Somme toute la
présente thèse rassemble donc les études de quelques aspects de la gestion automatique
des configurations ; ses objectifs seront précisés à la fin du chapitre II. Auparavant,
au chapitre I, on se propose de familiariser le lecteur avec les concepts de gestion de
6
configurations réseau et de répondre aux questions essentielles qu’il peut se poser au sujet
de l’état de l’art sur la gestion des configurations ainsi que les causes et conséquences
des incidents déjà survenus. Nous ferons une description en présentant l’actualité et les
risques liés dans la configuration des dispositifs réseaux en présentant quelques exemples
des incidents majeurs survenus dans le monde. Par la suite au chapitre 2, nous allons
présenter les travaux existants dans ce domaine. Au le chapitre III, nous allons présenter
un modèle de données génériques qui prend en compte l’hétérogénéité des fabricants
et de leurs versions logicielles. Au le chapitre IV nous allons démontrer comment les
contraintes de configuration peuvent être exprimées sous forme d’expressions logiques de
premier ordre sur des représentations formelles de configurations comme des structures
de données hiérarchiques. Finalement Au le chapitre V, nous proposons un outil qui,
enrichi de ces concepts, permet de vérifier et de valider les contraintes et les paramètres
avant leur mise en production dans un fichier de configuration quelque soit le fabricant.
Le présent travail tirera une grande partie de sa motivation d’une collaboration d’une
grande firme internationale, à la faveur d’un partenariat de recherche financé par le
CRSNG 1 . En effet, notre projet aboutira à la mise sur pied d’un outil intégré de
raisonnement et de la gestion des configuration pour Ericsson. Pour ce faire nous allons
accorder une grande importance à la vérification des contraintes qui est le socle même
de la gestion automatique des configurations réseau quel que soit le fabricant, d’où la
notion d’intégration.
Dans les dernières années, on a assisté à plusieurs incidents liés à des configurations
incorrectes des équipements à cause d’une mauvaise vérification des configurations ou
tout simplement à cause de la charge importante du travail des administrateurs (Deca
et al., 2007).
8
Rappelons d’abord l’incident qui a paralysé le réseau Internet pendant une longue période,
20 minutes pour certains et 3 heures pour d’autres, en avril 1997 aux États-Unis.
D’après Vincent J. Bono, directeur du services réseau chez North American Network
Operators Group, le problème a été attribué au routeur central estampillé AS 7007 de
la société MAI Network Services en Virginie. Cette société hébergeait les routeurs et les
backbones 1 devant interconnecter les différents réseaux pour la distribution d’Internet.
Malheureusement une mauvaise configuration des routeurs a rendu incorrectes les tables
de routage, entraînant rapidement une inondation des routeurs de la société MAI par
le trafic réseau. De plus, l’annuaire InterNIC a inscrit par erreur le serveur Internet
Exchange comme le propriétaire des tables de routage, c’est à dire qu’il devait diriger les
paquets entrants vers leur destination. Ainsi, tous les paquets de l’ensemble du réseau
Internet se sont dirigés vers ce seul serveur et, quelque 50 000 adresses sont venues
congestionner le réseau, paralysant ainsi tout le réseau Internet des États-Unis et par
ricochet ceux des autres réseaux dont il hébergeait aussi le backbone (Bono, 1997).
À la question de savoir pourquoi cette erreur n’a pas été détecté et corrigé, Vincent J.
Bono explique qu’une autre erreur de configuration a empêché les routeurs de la société
MAI Network Services qui pouvaient corriger le problème de détecter les données erronées.
Les tables de routage étaient ainsi considérées comme non optimales, c’est-à-dire pouvant
encore accepter une grande quantité de trafic - ce qui n’était malheureusement pas le
cas-.
1. Partie centrale d’un réseau d’entreprise, elle permet de connecter entre eux plusieurs sous-réseaux
et représente la zone la plus performante et la plus sûr du réseau.
9
Un autre cas de problème de configuration s’est passé en 1992. Une alerte du CERT
(Computer Emergency Response Team) avait été lancée suite aux informations indiquant
un piratage systématique de mots de passe des clients d’une entreprise de services
réseaux (Schaefer, 2003). Bien que les mots de passe soient la cause directe de la panne,
l’incident avait débuté par le piratage du compte d’un administrateur réseau de cette
entreprise suite à une mauvaise configuration de leur routeur au niveau du cryptage d’un
protocole de sécurité. Ceci a permis au pirate d’installer un logiciel d’espionnage afin
de s’approprier les comptes et les mots de passe de tous les clients de l’entreprise, qui
iraient se connecter sur le réseau distant via leur réseau local. Cet incident malheureux
a néanmoins permis d’améliorer le protocole d’identification par mots de passe avec des
méthodes modernes de cryptographie (Schaefer, 2003).
Même les plus grands ne sont pas épargnés par les erreurs de configurations. Très
récemment la très célèbre entreprise Google a vu sa messagerie Gmail tomber en panne
pendant 40 minutes (Journal du Net, 2012). En effet, le service Sync de synchronisation
chargé d’harmoniser le navigateur Chrome et certains autres services à partir d’un
compte Google a mal fonctionné à cause d’un mauvais réglage d’un paramètre de la
sandbox 2 affectant ainsi tout le système d’équilibrage des charges ou load balancing
entrainant ainsi une indisponibilité de la messagerie Gmail, l’espace de stockage Drive,
2. La sandbox Google ou phénomène sandbox désigne une période généralement transitoire pendant
laquelle un site est référencé par Google tout en étant maintenu « volontairement »loin dans les résultats,
même s’il est particulièrement bien optimisé pour le référencement naturel. Cette période à durée
variable (souvent plusieurs mois) est destinée à vérifier que le site est « fiable »en termes de contenus et
pratiques pour le référencement.
10
Contrairement aux autres pannes présentées ici, celle d’Amazon s’est étendue sur une
période plus longue, soit quatre jours. Signalée le 21 avril 2011, cette panne avait été
causée par une erreur de configuration entrainant une inaccessibilité partielle de leur
plate-forme de service de cloud computing (Thibodeau, 2011; Pepitone, 2011).
Cette erreur de configuration a été faite lors de la mise à jour du réseau, laquelle produisit
un routage incorrect des paquets. Amazon a expliqué qu’un trafic qui normalement aurait
dû aller vers un réseau primaire a été acheminé vers une autre destination de capacité
inférieure. Paralysant ainsi l’un de ses cinq sites mondiaux l’empêchant ainsi d’effectuer
les opérations de lecture/écriture. Amazon a ainsi vu son pourcentage de disponibilité
passer de 41% à 14,6% en seulement 48h (Thibodeau, 2011) (Pepitone, 2011). Suite
à cet incident, plusieurs sites web de premier plan ont vu leur temps d’inaccessibilité
croître ; c’est le cas de : Quora, Foursquare, Reddit et même du populaire client Twitter
HootSuite (Pepitone, 2011).
Les conséquences n’ont pas été des moindres, car le débat sur la maturité même des
services de cloud computing s’est réinvité dans toute l’industrie américaine (Thibodeau,
2011; Mi-lung et al., 2004). Selon (Thibodeau, 2011), Amazon n’a pas dit explicitement
une erreur humaine a déclenché l’évènement, mais a fait allusion à cette possibilité
quand il a écrit que « nous allons vérifier notre processus de changement et accroître
l’automatisation pour éviter que ce type d’erreur ne se produise à l’avenir ».
11
Nous pouvons aussi citer le cas d’une entreprise de téléphonie qui a vu son système
paralysé. En effet, selon l’Agence européenne de la sécurité des systèmes d’information
(Enisa), le problème est survenu suite à une erreur de configuration faite par un salarié
d’un fournisseur de téléphonie fixe (dont le nom n’a pas été divulgué) qui a attribué une
valeur erronée à un paramètre dans un fichier de configuration. L’erreur a empêché des
utilisateurs de cette compagnie de téléphonie fixe d’émettre des appels téléphoniques
internationaux vers les pays de l’Europe de l’Ouest pendant quatre heures. L’incident a
été résolu après une configuration et un réamorçage système (Network et Agency, 2012).
L’ensemble des erreurs qui viennent d’être présentées ont tous un point commun : une
erreur de configuration. Ceci est aussi soutenu par les aveux même du responsable de
l’AS 7007
« MAI’s problems stemmed from bad router table information that directed
routers operated by Sprint and other ISPs to transmit all Internet traffic to
MAI’s network »(Network et Agency, 2012).
Les enjeux d’avoir une configuration stable et fonctionnelle sont donc énormes quelque
soit le nombre de postes ou d’appareils à gérer. Les conséquences d’une mauvaise
configuration sont parfois catastrophiques. De nos jours certaines personnes pensent que
pour solliciter un système de configuration il faut d’abord avoir un nombre important
12
de postes de travail, ce qui est certes vrai comme première exigence, mais pas comme
condition essentielle (Campi et Bauer, 2009). Il existe plusieurs causes possibles pour
les pannes réseaux, mais les experts s’accordent pour les regrouper en trois catégories à
savoir :
Malgré que, les vendeurs d’équipements réseaux se focalisent tous sur les deux premières
catégories, les erreurs liées à l’action humaine n’en demeurent pas moins la source la
plus répandue (Juniper Networks, 2008).
Plusieurs cabinets ont réalisé des études sur les causes et les enjeux des problèmes de
configuration et tous sont unanimes que l’intervention humaine en est le principal facteur.
Citons d’emblée le cas de la société Juniper Networks qui dans son livre blanc révèle
que 50 à 80% des erreurs de configuration réseau sont causées par le facteur humain
(Juniper Networks, 2008).
En décembre 2008 le cabinet de consultation Netcordia lors d’un sondage réalisé chez
plus de 450 administrateurs réseau a révélé que 64% des administrateurs pensent que la
plus grande menace sur la disponibilité du réseau est interne, c’est à dire causée par
l’action humaine.
Citons aussi celui de l’Institut Visible Ops Handbook qui, lors de leurs études sur les
processus informatiques, ont pu démontrer que 80% des arrêts non planifiés sont dûs
à de mauvaises modifications apportées par les administrateurs ou les développeurs
(Bejtlich, 2005). Un autre constat a été fait par l’entreprise the Enterprise Management
Association, qui rapporte que 60% des erreurs de disponibilité et de performance sont le
13
Enfin nous pouvons aussi citer la récente étude du Cabinet Gartner qui prévoit qu’avant
2016, 80% des pannes impactant des services critiques seront causées par l’homme et par
des erreurs de processus, et plus de 50% de ces erreurs seront causées par le changement
de configuration (Colville et Spafford, 2010a) (Colville et Spafford, 2010b).
Il est à considérer qu’on peut avoir un seul serveur, mais que celui-ci puisse héberger
des services et des applications de haute importance, dont toute indisponibilité pourrait
entrainer des pertes considérables pour l’entreprise. (Campi et Bauer, 2009) avancent
qu’avec un système de gestion automatisée on pourrait facilement éviter cela . Dans
un autre registre lors de l’absence du principal administrateur la gestion automatisée
serait la bienvenue puisque le système pourrait s’auto-diagnostiquer en cas de panne
(Campi et Bauer, 2009). Les événements présentés précédemment auraient pu être
évités si un système de vérification automatique avait été installé. C’est également le
cas de l’incident de 1997 qui avait paralysé internet, un système de configuration et
de vérification automatique aurait pu aider à déceler le changement dans le fichier
de configuration du routeur. Dans le passé, toute panne du système, fut-elle minime,
nécessitait une intervention humaine, ce qui conduisait à la réduction du temps que
pouvaient accorder les administrateurs aux autres tâches.
temps de travail : des millions d’heures ont été consenties et en termes financiers des
millions de dollars avaient été dépensés pour la résolution et le manque à gagner causé
par ces incidents.
L’enjeu que revêt une bonne gestion des configurations est donc énorme et demande
à être automatisée. L’automatisation de la gestion de configuration, reste donc une
préoccupation majeure car le système pourrait lui-même informer de son état. Le
souci des utilisateurs d’ordinateurs ou d’équipements réseau n’est-il donc pas d’avoir des
équipements qui pourraient comme le corps humain, réagir à toute intrusion, modification
ou changement brusque (Burgess, 1998).
Il est donc reconnu que les entreprises gagneraient à avoir des systèmes en parfait état
de marche plutôt que de passer plus de temps à essayer par eux même de diagnosti-
quer manuellement les attaques des virus ou des intrusions ou tout simplement des
dysfonctionnements de leurs appareils (Burgess, 1998).
D’abord celle qui fait référence au suivi du cycle de vie des équipements, appelée
en anglais « asset management ». Elle peut être définie comme étant l’ensemble des
moyens organisationnels et administratifs mis en place pour obtenir, à tout moment
du cycle de vie du produit, une visibilité satisfaisante du produit, au travers de ses
caractéristiques physiques et fonctionnelles, dont la démarche est généralement décrite
dans des documents (Coulon, 2001).
Ensuite, nous avons celle qui fait référence à la gestion des configurations techniques
15
des équipements, c’est à dire celle qui permet de valider les configurations et de vérifier
le bon fonctionnement des équipements au sein d’un ensemble. D’après le Larousse,
ce second aspect de la gestion de configuration peut être défini comme la gestion de
toute modification ou réglage de paramètres informatiques en vue de l’optimisation du
fonctionnement du système.
Dans notre cas précis nous allons nous limiter aux systèmes informatiques, principale-
ment à la partie concernant l’infrastructure réseau et ses composantes. Dans cet esprit,
on peut donc définir la gestion des configurations comme étant l’ensemble des carac-
téristiques d’un réseau donné. Ceci inclut autant les caractéristiques physiques telles
que la connectique que les caractéristiques logiques telles que les protocoles utilisés, les
adresses IP, ainsi que le nom de chaque machine ou équipement (routeurs, pare feu,
switch) branchés au réseau. Dans la suite de cette section, nous donnons trois exemples
de configurations.
Chacune des lignes de ce fichier règle l’un des paramètres sur une valeur donnée. Nous
en expliquons ici quelques unes.
no service config : par défaut, les routeurs Cisco émettent à intervalles réguliers
des requêtes TFTP pour vérifier si leur configuration a été modifiée. Ces requêtes sont
envoyées à l’adresse de diffusion (broadcast) de chaque interface. Hormis le fait que ce
trafic est bien souvent superflu, certaines machines réagissent à la réception de la requête
et l’inscrivent dans les logs ou sur la console système. Ces traces peuvent constituer
une taille gênante (sensiblement 1 mégaoctet par semaine). La commande no service
config permet de ne plus diffuser de telles requêtes.
Le routeur implante dans l’IOS un certain nombre de services internes, appelés small
servers. Parmi ces services, on peut citer echo (ports TCP et UDP numéro 7), discard
(ports TCP et UDP numéro 9), chargen (ports TCP et UDP numéro 19), etc. Il est
possible pour des utilisateurs mal intentionnés de faire littéralement crouler le routeur
sous des requêtes de ce type, jusqu’à ce qu’il devienne incapable d’effectuer normalement
les opérations de routage. Les commandes "no service tcp-small-servers" et "no
service udp-small-servers" permettent au routeur d’ignorer les paquets à destination
de ces ports et d’éviter ainsi un deni de service.
service password-encryption : Par défaut, les mots de passe d’accès aux routeurs
Cisco sont stockés en clair dans les configurations. Cette commande permet de ne plus
stocker en clair les mots de passe dans les fichiers de configuration.
3. ACL (Access Control Lists) sont des fonctions appliquées à chaque paquet IP transitant à travers
le routeur et qui ont pour paramètres : l’adresse IP de l’émetteur du paquet, l’adresse IP du destinataire
du paquet, le type du paquet (tcp, udp, icmp, ip), le port de destination du paquet.
19
199) s’applique pour les paquets qui quittent le routeur par cette interface.
Rappel : les mots-clés in et out n’existent pas dans les versions inférieures à 10 du
firmware de Cisco. Pour ces versions, le fonctionnement est celui de out. Pour une
même interface, il peut y avoir plusieurs déclarations access-group. En outre, la même
commande access-group peut apparaitre dans la déclaration de plusieurs interfaces.
Nous allons présenter figure 1.2 un autre exemple de fichier de configuration, en l’occur-
rence celui d’OpenVPN (Raum, 2005) qui est un logiciel permettant de créer un réseau
privé virtuel (VPN).
— dev permet de définir le type d’interface virtuelle, ici c’est une interface Ethernet
virtuelle.
20
Nous présentons un dernier exemple de fichier de configuration cette fois-ci sur les
interfaces Ethernet dans un système Linux. Les fichiers de configuration des interfaces
contrôlent les interfaces logicielles pour les périphériques réseaux individuels. Lorsque
21
le système démarre, il utilise ces fichiers pour savoir quelles interfaces il doit utiliser
et comment les configurer. Ces fichiers sont en général nommés ifcfg-<nom> où nom
correspond au nom du périphérique contrôlé par le fichier de configuration. L’un des
fichiers d’interface le plus habituel est /etc/sysconfig/network-scripts/ifcfg-eth0, qui
contrôle la première carte d’interface réseau Ethernet ou NIC dans le système. Dans un
système comportant plusieurs cartes réseaux, il y a plusieurs fichiers ifcfg-ethX (où X
est un numéro unique correspondant à une interface spécifique). Chaque périphérique
ayant son propre fichier de configuration, un administrateur peut contrôler la façon dont
chaque interface fonctionne. La figure 1.3 présente un exemple de fichier ifcfg-eth0 pour
un système utilisant une adresse IP fixe (Red_Hat, 2013).
interface utilisant DHCP est différent, car les informations IP sont fournies par le serveur
DHCP (Red_Hat, 2013).
1.4 CAUSES
Les configurations sont parfois sujettes à des erreurs qui peuvent occasionner des
dysfonctionnements majeurs ou minimes selon la portée du paramètre ou de la valeur
mis en cause. Il peut y avoir plusieurs causes pour ces erreurs dans les fichiers de
configuration, comme des erreurs de syntaxe, de cohérence d’exécution, de logique, de
valeur inappropriée ou non supportée. Nous allons détailler dans la suite chacune.
Les erreurs syntaxiques sont presque toujours liées aux fichiers de configuration. Les
erreurs de syntaxe apparaissent lors de l’écriture du code, et peuvent être causées par le
non respect des règles, des formats des services implémentés, les erreurs de commandes
ou de règles mal écrites. Quand une erreur de syntaxe est détectée tout ou une partie du
fichier peut être ignorée et le fonctionnement du matériel ou du logiciel en sera affecté
(Buchmann, 2008). Par exemple, il suffit de faire une faute d’écriture sur une variable
ou un paramètre comme port=80 et écrire plutôt porc=8o que tout paramètre qui va
utiliser la valeur du port peut-être bloqué causant ainsi un risque de dysfonctionnement
23
Nous pouvons citer comme cas particulier des erreurs de syntaxe, l’utilisation des valeurs
inappropriée ou non supportée. Ce sont des erreurs qui apparaissent lors de l’utilisation
d’une valeur ne correspondant ni ne faisant référence à aucun type ni nom de variable
déclaré dans l’environnement.
Comme autre exemple d’erreur de cohérence, prenons le cas d’administrateur réseau lors
24
de l’écriture de son script de mise à jour des configuration d’un type de routeur X, par
exemple WiFi Aruba (ayant déjà le même script pour les routeur Cisco). Pour gagner
du temps, il copie ce script afin de le modifier pour les routeurs WiFi Aruba, mais il
oublie de changer le nom du fichier pour celui des routeurs WiFi Aruba, ceci ne pourra
être détecté qu’au moment du fonctionnement du nouveau routeur qui peut afficher
des résultats inattendus pendant que les routeurs Cisco peuvent ne plus fonctionner
correctement, car leur fichier de configuration est devenu inexistant.
Les erreurs d’exécution sont celles qui apparaissent lors de l’exécution ou du lancement
d’une application ou lors de la mise en route d’un équipement. Elles sont dues à
l’impossibilité d’exécution, malgré un code qui semble correct, par la non présence
d’erreur de syntaxe. C’est le cas par exemple, où l’on a écrit correctement une instruction
permettant de lire dans un fichier afin de récupérer certains paramètres, malheureusement
si le fichier est endommagé ou protégé contre la lecture, l’application ne pourra pas
exécuter sa fonction de lecture. Généralement on peut résoudre les erreurs d’exécution
en réécrivant le code (Microsoft, 2013).
1.5.1 SÉCURITÉ
Toute erreur dans les fichiers de configuration nécessite une attention particulière et une
résolution rapide car elle peut constituer une source de problèmes encore plus grave. La
sécurité est un souci majeur dans le monde des réseaux, des millions de dollars sont
investis par les entreprises pour faire face à cette préoccupation.
Nous pouvons dire à juste titre que le fait d’avoir une mauvaise configuration va
inéluctablement jouer sur la sécurité du système tout entier. Quand la sécurité est
compromise les risques que courent l’entreprise sont énormes. On peut citer entre autre :
— L’accès non autorisé par des tiers (y compris des tentatives de piratage),
1.5.2 ROUTAGE
Par définition le routage est l’acheminement des informations d’un réseau à un autre au
niveau de la couche 3 du modèle OSI. Le routage revêt une importance capitale dans les
communications entre ordinateurs, stations de travail et autres terminaux informatiques
(Lalitte, 2003).
Nous savons que pour son fonctionnement le routeur utilise une base de données appelée
« table de routage » qui est basée sur les politiques appliquées, et que toute erreur dans
26
1.5.3 COÛTS
Le coût financier des incidents n’est pas la chose la mieux partagée dans les entreprises
car il occasionne des manques à gagner financiers énormes, surtout de petite taille. Mais
il nous a semblé opportun d’en parler dans notre travail de recherche car il a une influence
non négligeable dans toute prise de décision informatique. Selon une étude (Angelo Rossi,
2011) menée par la société Ponemon Institute et publiée dans le journal Informatique,
49% des entreprises informatiques ont connu des incidents informatiques. En ajoutant
à ces incidents les coûts indirects comme les coûts de résolution de perturbation de
l’activité, ils auront coûté plus de 240 000 $ entre mai 2010 et mai 2011.
Dans l’article (Patterson, 2002) l’auteur nous donne une formule pour calculer le coût
occasionné par les incidents ou pannes qui peuvent aider les dirigeants ou les responsables
informatiques à une meilleure prise de décision.
27
Cm = (Cem × P e) + (Rm × P r)
Le coût des employés par heure est le total des salaires et des avantages de tous les
employés par semaine (Ts) divisé par le nombre moyen d’heures de travail fait par mois
(Ht).
Ts
Cem =
Ht
Le revenu moyen par heure est le total des recettes de l’institution par mois (Ri) divisé
par le nombre moyen d’heures par semaine d’une institution (Nm) (Patterson, 2002).
Ri
Rm =
Nm
Tableau 1.1: Coût d’une heure de panne d’après Kembel (Kembel, 2009)
T0 +A
C= avec N = T h ∗ E
N
Le tableau 1.1 présente les résultats de l’étude d’enquête faite dans le journal Inter-
netWeek rapporté par R. Kembel en 2000 sur le coût d’une heure de panne (Kembel,
2009).
Les types d’entreprises considérés dans ce tableau ne sont pas les seuls à perdre des
recettes lors d’une panne. Toujours dans cet exemple, on n’a pas tenu compte de la
perte de temps occasionnée par les employés qui ne peuvent pas faire leur travail lors
d’une panne. Mais le calcul du coût obtenu de cette façon n’est qu’un cas général.
Certaines particularités existent, car si votre ordinateur tombe en panne pendant que
vous travaillez sur une nouvelle transaction très importante, qui peut dire quel sera le
coût final de cette interruption ? De même, si votre site Internet n’est pas accessible
quand un client veut passer une commande ou envoyer une demande, ce client pourrait
ne jamais revenir.
29
Au final, on peut voir que les erreurs de configuration peuvent avoir des répercussions
profondes et difficiles à quantifier.
CHAPITRE 2
Dans cette partie nous essayerons de présenter en détail quelques approches qui ont
été utilisées pour la gestion des configurations. Ensuite, nous nous focaliserons sur la
présentation de quelques protocoles et outils de gestion automatisée des configurations.
Il faut tout d’abord rappeler que ces outils ou systèmes produisent une couche d’abs-
traction entre ce que l’on souhaite accomplir (c’est à dire les besoins) et la manière dont
ces besoins sont réellement implémentés sur les hôtes cibles (Delaet et al., 2011).
32
2. Un agent de déploiement qui est le composant de l’outil qui est chargé d’exécuter
les profils de configuration générés.
33
Il existe plusieurs approches (Clarke, 2012) pour la résolution des problèmes de confi-
guration soulevés au chapitre précédent. Une approche pourra être privilégiée à une
autre suivant plusieurs critères comme la taille du réseau, la récurrence des pannes, les
connaissances techniques etc. Dans cette section nous allons présenter les approches
existantes en gestion des configurations.
Gestion manuelle
Avantage : elle est adaptée à chaque besoin ; avec ce type de configuration on a toujours
une solution sur mesure.
Inconvénient : Problème d’échelle, le fait de répéter plusieurs fois la même chose peut
devenir fastidieux et on s’expose ainsi à des erreurs dans le fichier de configuration.
34
Duplication
Avantage : Certes, la première configuration peut être fastidieuse (ce qui est normal car
on part de zéro) mais les configurations suivantes seront rapides et faciles à déployer. Il
y aura donc un gain de temps à partir de la seconde configuration (Clarke, 2012).
Inconvénient : Difficulté à adapter les paramètres à chacun des équipements sur lesquels
la configuration est appliquée. De plus, à chaque nouveau changement on sera obligé de
dupliquer à nouveau les supports de sauvegarde (les anciennes n’étant plus à jour) pour
une nouvelle conservation et les anciens supports détruits suivant un calendrier ou une
méthode bien établie et propre à l’entreprise ou tout simplement utiliser la méthode
Grand-parent parent enfant 1 La gestion du changement dans les configurations devient
ainsi une préoccupation majeure pas toujours souhaitée.
L’autre difficulté réside dans le fait que, bien que l’on applique directement une configu-
ration entière à un équipement, cette opération doit être répétée pour chacun, ce qui va
malheureusement alourdir le travail des administrateurs systèmes ou réseaux.
Centralisation
Inconvénient : L’un des désagréments ici est la surcharge du trafic réseau lors du
déploiement et de l’exploitation, car sur chaque équipement on doit installer un agent
(ManageEngine, 2012), l’autre inconvénient est que la complexité des opérations sera
accrue.
Les travaux actuels qui traitent de la gestion et de l’intégrité des configurations réseaux
peuvent se regrouper en quatre catégories :
1. La surveillance du réseau
Cette seconde catégorie de solutions comprend les outils qui gèrent les changements
de configuration des dispositifs réseaux. Par exemple le système Really Awesome
New Cisco confIg Differ (RANCID) (Networks, 2006) se connecte à chaque routeur
d’un réseau, extrait sa configuration et l’envoie à un serveur appelé en anglais
Concurrent Version System ou (CVS) où les changements peuvent être détectés et
suivis. Plusieurs autres outils, tels que le logiciel d’accès libre ZipTie (Castillo, 2006)
et le logiciel commercialisé Voyence (Voyence, 2014), offrent des fonctionnalités
similaires permettant de comparer des configurations et garder les historiques
de changements de configuration. Cependant, même si le fait de détecter des
changements dans une configuration est un principe positif, tous les changements ne
débouchent pas sur des configurations à problèmes : à cause de nombreuses fausses
alarmes peuvent se déclencher. En outre, même si la source de la configuration à
problème se rapporte à un paramètre déterminé ayant changé, la cause de l’erreur
ne peut être recherchée que manuellement par l’ingénieur réseaux.
un test ou une action à effectuer sur le système. Les différents contours de l’arbre
apparaissent en fonction du résultat de chaque test jusqu’à ce qu’une solution
efficace soit trouvée. A l’origine, l’utilisation des arbres décisionnels requérait une
intervention humaine pour des tâches simples ; certains outils mis en place tels
que Babble (Couch, 2000) et Snitch (Mickens et al., 2007) peuvent actuellement
des scripts pouvant interagir avec des outils de commande en ligne (console)
afin d’automatiser des tâches administratives redondantes. Les réseaux bayésiens
prolongent ce principe en incorporant les probabilités dans la structure de l’arbre
décisionnel. Cette approche a été adoptée par de nombreux projets concrets tels
que le BATS (Bayesian Automated Troubleshooting System) (Langseth et Jensen,
2003) utilisé par Hewlett-Packard pour résoudre les problèmes d’imprimantes en
utilisant la méthodologie SACSO (Jensen et al., 2001). ATSIG1 est un projet de
l’UE dont le but était de développer un concept pour l’automatisation des processus
de résolution de problèmes, qui a été transformé en produit commercial appelé
2solve ; un outil commercial de résolution de problèmes, Knowledge Automation
System de Vanguard, utilise la même approche 2
4. Règles réactives
Plusieurs systèmes s’appuient sur cette idée et sont basés sur des règles sous la forme
«si condition, alors réaction» qui permettent la gestion automatisée de systèmes
informatiques complexes en déclenchant des scripts définis par l’utilisateur lorsque
des conditions précises sont remplies dans le réseau. les principaux outils qui
implémentent cette approche sont : cfengine (Burgess, 1995), LCFG (Anderson et
Scobie, 2002), PIKT (Osterlund, 2014), Bcfg2 (Desai et al., 2006) et Prodog (Couch
et Gilfix, 1999). Ces travaux concernent la configuration d’un réseau d’ordinateurs.
Cependant, il est raisonnable de penser que cette approche pourrait s’étendre à la
2. http ://www.vanguardsw.com/products/knowledge-automation-system/cms/
38
configuration d’un réseau de dispositifs tels que des routeurs et des commutateurs.
Cette approche est «réactive» car la partie active d’une règle n’est exécutée
que lorsque les conditions décrites dans la partie introductive de la proposition
correspondent à la configuration. Ainsi, chaque mauvaise configuration doit aller
de paire avec une action corrective. Une question centrale – et toujours ouverte
– est de s’assurer que l’exécution d’un script ne déclenche une série inattendue
d’événements ne conduisant pas à un point de stabilité. Une étude mathématique
des règles réactives est faite dans (Couch et Sun, 2003) où les conditions sont
réunies pour que les actions convergent. En outre, (Narain, 2005) explique que
pour qu’ils servent de moteurs de détection de mauvaise configuration, les systèmes
réactifs doivent être pourvus d’une base de règles qui devraient équivaloir à un
encodage procédural de tout le moteur.
5. Règles Déclaratives
Une dernière approche consiste à définir les contraintes qu’une configuration doit
respecter afin d’être valide. Les règles sont des affirmations sur les dispositifs et ces
affirmations sont automatiquement vérifiées avant l’application des changements.
Par exemple, (Narain, 2005) utilise des méthodes de proof plans et Prolog pour
vérifier des ordres destinés à de larges parties de systèmes informatiques. (Zeller
et Snelting, 1997) applique une logique basée sur des pairs d’attributions de fonc-
tionnalités/valeurs sur la production des versions en configuration de programme.
(Klarlund et al., 1997) utilise une logique sur les arborescences d’analyse syntaxique
pour édicter des principes sur la généralité de la formalisation des configurations.
Dans (Bush et Griffin, 2003), une approche formelle à la modélisation des Virtual
Private Networks (Réseaux Privés Virtuels) à l’aide d’une logique de premier ordre
a été employée pour présenter les propriétés d’isolation de trafic. Dans (Benedikt
39
et Bruns, 2004), Delta-X, un langage formel pour les contraintes d’intégrité de don-
nées, est présenté comme outil de construction des gardiens d’intégrité : un gardien
d’intégrité est un morceau de code exécuté avant que la mise à jour d’une donnée
ne soit exécutée. Le gardien répond vrai si la mise à jour préservera l’intégrité des
données. (Narain, 2005), (Narain et al., 2008) utilise le langage de modélisation
Alloy (Jackson, 2002) pour formaliser un ensemble de contraintes afin qu’un VPN
fonctionne convenablement. Cet ensemble de contraintes est ensuite converti en
une formule Booléenne et envoyé à un solveur de satisfabilité. La solution renvoyée
par le solveur peut être reconvertie en modèle Alloy original et constitue une
configuration qui respecte les contraintes originales. D’autres outils plus récents
tels que COOLAID (Chen et al., 2010b) utilisent une approche de gestion de
configuration déclarative similaire. L’approche utilisée par ValidMaker présenté
au chapitre 4 rentre dans cette catégorie de solutions. Cependant, ValidMaker se
distingue des travaux mentionnés ci-dessus sur plusieurs points. Contrairement au
(Rexford et Feldmann, 2001), ValidMaker utilise un langage formel pour entrer
des règles de nature plus complexe ; par conséquent, il peut fournir des messages
d’erreurs plus détaillés et une validation interactive de la configuration. En outre,
les outils actuels manquent de fonctionnalités de recherche de contre-exemple mis
en place dans ValidMaker. Ils n’offrent que des questions sur la validité de certaines
configurations par lesquelles on ne peut répondre que par oui/non. Le langage
formel qu’il propose pour exprimer les contraintes, appelé Configuration Logic, est
plus fourni que Delta-X ; il peut servir à modeler des dépendances générales entre
les paramètres de configuration et n’est pas lié à un type de dispositif comme dans
rcc. Contrairement à l’approche Alloy, ValidMaker n’essaye pas de résoudre le
problème général de génération de configuration en satisfaisant à un ensemble de
contraintes ; il se concentre plutôt sur le point spécifique portant sur la vérification
40
Un problème orthogonal aux approches de gestion est celui d’interagir avec les équi-
pements pour leur transmettre les informations de configuration pertinentes. On ne
saurait parler de réseau informatique sans faire un arrêt sur les protocoles. De façon
simplifiée on peut définir le protocole comme le langage utilisé par les équipements pour
communiquer entre eux dans un réseau (Enns et al., 2006, 2011b).
2.2.1 CLI
CLI est un acronyme qui signifie en anglais Command line interface qui est une interface
homme-machine dans laquelle la communication entre l’utilisateur et l’appareil s’effectue
en mode texte (Cisco, 2013a). Son utilisation est simple, l’utilisateur tape une ligne
de commande textuelle au clavier pour demander l’appareil d’exécuter une opération.
Ensuite, l’ordinateur affiche le texte correspondant au résultat de l’exécution de la
commande tapée ou à des questions qu’un logiciel pose à l’utilisateur. Chaque logiciel a
son interface utilisateur mais le principe reste le même (Jboss, 2013; Cisco, 2013a).
Aujourd’hui, la plupart des dispositifs ont une interface de ligne de commande encastrée
41
(CLI) pour des buts de diagnostic de pannes et de configuration. On peut prendre le cas
des équipements Cisco, et de son CLI intégré dans le système d’exploitation IOS qui
reste une référence de CLI. Certains appellent d’ailleurs le CLI ("Cisco Like-Interface").
L’accès réseau au CLI a traditionnellement été fait au travers des protocoles TELNET,
et SSH plus sécurisé. CLI présente selon (Schoenwaelder, 2003) plusieurs avantages, à
savoir :
— Les interfaces de ligne de commande sont généralement orientées sur les tâches, ce
qui les rend plus faciles à utiliser pour des opérateurs humains.
fois que cela est maîtrisé, il devient naturel d’utiliser la même interface ainsi que
les abstractions pour l’automatisation des changements de configuration.
— Les installations de contrôle d’accès sont parfois absentes, et quand elles existent
sont insuffisantes.
CLI est l’interface la plus simple à réaliser et conserve de nombreux avantages par
rapport aux environnements graphiques, notamment sur la précision et la simplicité
43
d’automatisation des tâches (mode batch) que sur le contrôle à distance, l’uniformité, et
la stabilité et surtout consomme peu de ressources.
De plus, CLI offre aussi des moyens à un utilisateur d’afficher des données diverses
sur l’état courant du dispositif, utilisant les commandes appelées « show », appelées
de cette façon en langage Cisco parce que beaucoup d’opérations de lecture sur une
configuration peuvent être transformées en opérations d’écriture en les préfixant par le
mot-clé « show ».
2.2.2 FTP
Une des manières les plus simples pour gérer les configurations consiste à transférer la
configuration comme des fichiers à travers une connexion FTP. Dans un tel scénario,
chaque dispositif agit comme un serveur FTP vers lequel les configurations sont tirées
ou poussées comme de simples fichiers et tout changement apporté à la configuration est
appliqué immédiatement. Un tel mode de fonctionnement n’offre presque qu’aucune pos-
sibilité de vérification d’erreur : un utilisateur peut facilement écraser une configuration
qui marche avec un fichier contenant des erreurs de syntaxe ou de fausses valeurs de
paramètre, paralysant ainsi le fonctionnement du dispositif. Cependant, il offre souvent
une méthode de recours pour agir sur un dispositif, au cas où les méthodes de niveau
plus élevé échouent.
2.2.3 SNMP
Comme on vient de le voir, les protocoles TELNET et FTP étaient utilisés pour des
connections distantes aux équipements, mais ces deux protocoles n’offraient pas une
vue synthétique de l’infrastructure et ne séparaient pas correctement les deux métiers
différents que sont la supervision et l’administration réseaux (Enns et al., 2006) d’où la
mise sur pied du protocole SNMP.
Il faut noter qu’il existe trois versions de SNMP (Wijnen et al., 2000; Stallings, 1999).
La version 1 notée SNMPv1 qui est la plus ancienne, mais toujours utilisée dont le
défaut de sécurité a contribué à la mise en place de la version 2 notée SNMPv2 qui
essaye de combler cette lacune de sécurité (Willm, 2005). Mais, faute d’un consensus au
niveau des groupes de travail de l’IETF, c’est la version intermédiaire et expérimentale
connue sous le nom de SNMPv2C (avec C comme nom de communauté) qui est utilisée
par la plupart des éditeurs (Interpeak, 2005). Dans cette seconde version la sécurité
est encore quasiment nulle car elle reprend tout simplement le modèle de la version 1.
Malgré tout, cette version intermédiaire comble tout de même certaines lacunes de la
version 1 notamment sur la façon de définir les objets, le traitement des notifications
et du protocole lui-même (avec l’ajout d’une commande GERBULK pour minimiser
les échanges réseau qui sont particulièrement lourds lors de la récupération de tables
avec les commandes GETNEXT de SNMPv1). Cette version intermédiaire n’a pas eu
de déploiements importants sur les réseaux, faute de progrès conséquents par rapport à
la version originale (Wijnen et al., 2000; Stallings, 1999).
Comme tout système de gestion de réseau, le protocole SNMP est basé sur trois
composants ou entités à savoir :
— une entité base de données appelée MIB ou Management Information Base qui
regroupe et gère les informations.
humain peut superviser en temps réel toute son infrastructure réseau afin de diagnostiquer
et faire intervenir un technicien pour résoudre les problèmes identifiés (Fedor et al., 1990;
Peret et al., 2005; Presuhn et al., 2002).
Les agents sont des entités qui se trouvent au niveau de chaque interface qui permet de
connecter l’équipement à administrer à distance, ces agents permettent de récupérer
des informations sur différents objets manageables. C’est une application de gestion de
réseau résidant dans un périphérique et chargée de transmettre les données locales de
gestion du périphérique au format SNMP.
Les objets manageables peuvent être gérés à distance comme ceux contenus dans certains
équipements tels que les commutateurs intelligents, hubs, routeurs et serveurs. Les objets
manageables peuvent aussi faire référence aux informations matérielles, aux paramètres
de configuration, aux statistiques de performance et à d’autres objets qui sont directement
liés au comportement en cours de l’équipement en question. Une requête est envoyée à
l’aide de la commande Get par le gestionnaire pour demander ou modifier les valeurs
à l’aide de la commande Set d’un objet MIB associé à une ressource. Il est également
possible pour un agent d’envoyer des messages non sollicités appelée Trap pour avertir le
superviseur d’un évènement, par exemple dans le cas où la congestion atteint un certain
niveau.
La MIB ou Management Information Base est sans doute l’élément le plus important
du protocole SNMP, qui a permis de décrire un grand nombre de composants (réseaux
ou autres) de façon standard (Willm, 2005). Les informations gérées par les agents sont
structurées par une base de données reprenant toutes les informations utiles concernant
l’équipement où est installé l’agent. Cette base de données collectionne toute l’expérience
des spécialistes qui ont établi les modèles concernant les sujets qu’ils maîtrisent, ce qui
47
en fait tout l’intérêt pour les administrateurs réseau. La gestion de l’information est
représentée avec des objets, un pour chacun des aspects du périphérique de gestion. Le
modèle n’est pas un modèle objet : les entités modélisées ne sont pas des objets au sens
informatique du terme, mais plutôt un ensemble de variables typées qui peuvent être lues
ou mises à jour. Un certain nombre d’astuces sont utilisées ensuite pour permettre de
définir des opérations complexes sur ces objets en utilisant les mécanismes définis dans
la Structure des informations de gestion (SMI)(Waldbusser et al., 2002a) (Waldbusser
et al., 2002b). Il faut noter ici que chaque type d’appareil a son propre MIB, par exemple
«Printer MIB» (RFC 1759) ou «UPS MIB» (RFC 1628). La figure 2.3 présente un
extrait d’un fichier MIB qui permet de collectionner les informations réseaux (L’adresse
du réseau, l’adresse IP etc.). Notre extrait de fichier MIB permet de collectionner les
informations réseaux (L’adresse du réseau, l’adresse IP etc.) d’un périphérique. Les
48
définitions d’objet SNMP qui sont des nœuds de l’arbre (mgmt, system, interfaces,
at, ip etc.) utilisent la clef OBJECT IDENTIFIER et non pas la clef OBJECT-TYPE.
NetworkAddress est un type défini qui peut représenter une ou plusieurs familles de
protocole Counter, gauge et timeticks représentent des valeurs des syntaxes.
— ...
Il faut préciser ici qu’on n’a pas besoin d’un MIB pour utiliser SNMP ou pour effectuer
des requêtes sur des périphériques SNMP mais sans la MIB, on ne pourra pas savoir
facilement la signification des données retournées par le périphérique. Dans certains cas,
c’est facile comme le nom de l’hôte, l’usage des disques ou les informations d’état des
ports. Dans d’autres cas, cela peut être plus difficile et c’est là où une MIB peut être
d’une grande aide.
D’après (Fedor et al., 1990) (Pignet, 2007) (Interpeak, 2005) le protocole SNMP est
constitué de plusieurs commandes ou messages présentés ci-dessous :
— Getbulk : Cette commande, est envoyée par le manager à l’agent pour connaître
la valeur de plusieurs variables : cela évite d’effectuer plusieurs requêtes Get en
série, améliorant les performances (implémenté dans SNMPv2)
— Inform : Cette commande est utilisée dans le but d’obtenir une confirmation de la
réception et l’analyse après l’envoi d’une « trap» par l’agent elle est implémentée
dans SNMPv2 (Interpeak, 2005).
SNMP a été l’une des premières solutions proposées dans son domaine pour effectuer la
gestion centralisée des réseaux et cette nouvelle fonction ne s’est pas faite sans difficultés
car elle comporte certaines faiblesses et naturellement quelques avantages que nous
allons énumérer ici.
Comme avantages, nous pouvons dire que le protocole SNMP permet et facilite une
certaine interopérabilité comparativement à ses prédécesseurs, grâce à l’utilisation d’une
syntaxe unique pour tous les équipements. Un autre avantage d’utiliser SNMP est son
aisance d’implémentation sur un réseau ; grâce à sa conception simple il ne nécessite pas
beaucoup de temps de travail ni de compétences particulières (Schrieck, 1998; Willm,
2005).
SNMP étant basé sur les services du protocole UDP en mode déconnecté, de ce fait
il peut arriver que les paquets « Trap » n’arrivent pas à destination. Dans ce cas, le
temps d’attente de la réponse va s’écouler et il faudra réémettre la requête. Suivant
l’implémentation des agents et la version de SNMP utilisée, si l’authentification échoue
51
Plusieurs modules MIB standardisés n’ont pas une description de procédures de haut
niveau. Il n’est donc pas toujours évident à la lecture des modules MIB de savoir
comment certaines tâches de haut niveau doivent être accomplies, ce qui conduit à
avoir pour un même objectif plusieurs solutions différentes, d’où une augmentation du
coût et l’interopérabilité tant recherchée serait ainsi entravée (Schoenwaelder, 2003). En
plus, le modèle d’information qui définit les MIB demeure globalement limité malgré
les possibilités d’extensions (Schrieck, 1998). SNMP n’est donc pas adapté à la gestion
des configurations, et ne permet pas le traitement hiérarchique de l’information de
configuration (Wallin et Wikström, 2011) ce qui permettrait de séparer les classes
d’objets.
52
2.2.5 NETCONF
Dans les dernières années, plusieurs solutions ont vu le jour dans le but d’améliorer
et de corriger les lacunes dans le domaine de la gestion des configurations réseau. Ces
solutions étaient soient partiellement adaptées, spécifiques à chaque fabriquant ou tout
simplement orientées vers un seul aspect particulier de la problématique. Il a fallu
attendre l’avènement du protocole NETCONF pour voir les choses changer.
En effet, c’est en juin 2002 que l’organisme dénommé Internet Architecture Board (IAB)
a tenu une réunion sur la gestion des réseaux (Schoenwaelder, 2003) sous l’égide de
l’IETF. À l’issue de cette réunion un groupe de travail a été constitué, afin de trouver
des solutions face aux problèmes rencontrés au quotidien par les opérateurs de réseau
dans l’exercice de leur travail.
Sur la base donc de ces manquements, un groupe de travail appelé NETCONF a été formé
et le protocole qui porte son nom a ainsi vu le jour (Shafer, 2011). NETCONF est donc
un protocole proposé par l’IETF, qui fournit un ensemble d’opérations de diagnostic,
de manipulation et de suppression de configuration dans les équipements réseau (Halle
et al., 2004; Aitken et al., 2012; Enns et Ed, 2006). Il a été conçu principalement pour
53
NETCONF est donc basé sur le langage XML permettant de coder à la fois les messages
du protocole et les données de configuration suivant un modèle appelé YANG (Bjorklund,
2010) que nous présenterons à la section suivante. Il permet, par exemple, à un utilisateur
du protocole NETCONF de pouvoir envoyer à un routeur Juniper les mêmes commandes
qu’il enverrait à un routeur Cisco : on parle alors d’indépendance de vendeur (Halle
et al., 2004; Enns et al., 2011b).
NETCONF structure ses modèles de données de façon à ce qu’ils soient plus proches de
l’architecture réelle de la configuration des équipements du réseau. Plus spécifiquement,
NETCONF doit pouvoir fournir une interface à l’appareil qui soit la plus proche possible
de son interface native. NETCONF prévoit des procédures d’installation, de manipulation,
et de suppression de la configuration des périphériques réseaux. Il fonctionne en mode
client-serveur. Un serveur ou agent dont le rôle est de recevoir, d’exécuter et de fournir
une réponse aux requêtes des clients encore appelés managers. Le serveur étant le
logiciel résidant sur l’équipement à gérer et le client (manager) le logiciel résidant
sur la machine centrale qui gère les configurations des équipements (Enns et al., 2006,
2011b). La connexion entre le serveur et le client est appelée session NETCONF. Un
appareil doit être capable de supporter au moins une session à la fois.
54
Le protocole NETCONF est bâti suivant 4 couches à savoir la couche contenu, la couche
opération, la couche RPC et la couche du protocole applicatif comme présentées sur la
figure 2.4 tirée de (Enns et Ed, 2006).
Nous présentons ici quelques opérations de base du protocole NETCONF telles que
décrites dans la RFC 6241. Selon la RFC 6241, il est important de considérer que toutes
55
les opérations ne seront pas forcément un succès et qu’il faille traiter la réponse pour
vérifier si elle est positive, par exemple une erreur résultera en une balise <rpc-error>
contenue dans la réponse <rpc-reply>.
— Get
Cette opération permet la récupération de la configuration active ainsi que les
informations sur le statut de l’équipement. On peut aussi utiliser le paramètre
«filter», un filtre permettant de restreindre la partie de la configuration à récupérer
(sinon toute la configuration sera envoyée).
— Get-config
L’opération get-config autorise 2 paramètres : le premier, nommé « source »,
permet de spécifier le nom de la configuration que l’on veut récupérer ;le second se
nomme « filter » et est le même utilisé par get.
— Edit-config
Le rôle de cette opération est de charger une partie ou une nouvelle configuration
56
— Copy-config
A la différence d’edit-config cette opération agit sur l’ensemble d’un datastore 4 de
configuration, en créant ou remplaçant la totalité de la configuration. En raison de
son caractère critique, un appareil peut choisir de ne pas permettre l’application
de cette opération sur la configuration courante.
— Delete-config
Permet de supprimer une configuration, à l’exception de la configuration active ou
courante qui ne peut être supprimée contrairement à celle utilisée lors du démarrage
ou celle permettant de modifier et tester une configuration sans perturber le
fonctionnement de l’appareil.
— Lock et unlock
Permet de verrouiller la configuration que l’on passe en paramètre afin qu’aucune
autre tentative de modification ne vienne interférer (utilisation par une autre session
NETCONF, un administrateur avec l’interface en ligne de commande).Unlock
permet de débloquer la session si elle ne l’est pas encore suite à un timeout ou
un unlock implicite (coupure de la session brutale par exemple). Seul un client
NETCONF qui a verrouillé une configuration peut demander à la déverrouiller.
— Close-session
4. Fichiers contenant chacun une version spécifique de la configuration d’un appareil
57
— Kill-session
Permet de terminer une session NETCONF. Toutes les opérations du serveur en
cours sont arrêtées, les verrous sont relâchés et si un commit était en cours, un
roll back est effectué pour revenir à l’état antérieur.
2.2.6 YANG
YANG modélise l’organisation hiérarchique des données comme un arbre dans lequel
chaque nœud a un nom et une valeur et peut avoir un ensemble de nœuds enfants. YANG
présente une description claire et concise des nœuds ainsi que l’interaction entre ces
nœuds (Bjorklund, 2010). Il structure ses modèles de données dans des modules et des
sous-modules. Un module peut importer des données d’autres modules externes et inclure
ces données dans des sous-modules. Les modèles de données décrit par YANG sont
conçus pour être facilement utilisés par NETCONF. Une fois publié, le module YANG
agit comme un contrat entre le client et le serveur et chaque partie sait exactement quel
sera son rôle. Un client sait comment créer les données valides pour le serveur, et sait
également quelles données seront envoyées au serveur. Le serveur à son tour connaît
les règles ou contraintes qui régissent ces données et la façon dont elles devraient se
comporter (Shafer, 2011). Selon (Bjorklund, 2010), la hiérarchie peut être augmentée,
permettant à un module d’ajouter des nœuds de données à la hiérarchie définie dans un
autre module. Cette augmentation peut être conditionnelle, avec de nouveaux nœuds
apparaissant seulement si certaines conditions sont remplies, ce qui fait de YANG un
langage extensible. C’est cette flexibilité qui permet à NETCONF couplé avec YANG
une certaine interopérabilité (Bjorklund, 2010). Il faut rappeler ici d’après la RFC2578
et RFC2578, que YANG maintient dans la mesure du possible, la compatibilité avec le
59
On peut définir la gestion automatique des configurations comme l’ensemble des règles
et des moyens destinés à gérer et garantir le suivi, la cohérence de la configuration d’un
ensemble fonctionnel et de ses différents composants au cours de son évolution. Le degré
d’intervention humain peut être faible (on parle alors de gestion semi-automatique),
voire inexistant.
système ?. Certes l’homme est meilleur pour penser, mais la machine est meilleure
pour la répétition, ce qui signifie en d’autres termes que l’homme doit s’occuper de
la conception de son infrastructure et laisser la machine, par l’intermédiaire de l’outil,
s’occuper de l’exécution des procédures (Zamboni, 2012).
Bien sûr l’homme doit s’occuper des tâches manuelles nécessaires une à deux fois, avant
de comprendre exactement ce qui doit être fait par lui. Après tout, un ordinateur ne serait
pas capable de comprendre par lui-même dans bien des cas par exemple : sélectionner les
paramètres que l’on doit mettre dans le fichier de configuration sshd, ou pour écrire un
script de sauvegarde d’un poste de travail vers un disque externe à chaque branchement.
Ou encore suivre les étapes de mise à jour des fichiers de configuration des nouveaux
équipements (Zamboni, 2012). Cependant, si on a complété toutes les étapes, il n’y a
donc plus de raison de continuer à le faire manuellement, la machine pouvant répéter ces
étapes dans le bon ordre et au bon moment (Zamboni, 2012). D’ailleurs, une des raisons
principales qu’ont les administrateurs système pour automatiser la configuration de leurs
appareils est d’éviter les erreurs en minimisant les tâches répétitives. D’après (Delaet
et al., 2011) un outil de configuration système qui prend en charge la modularisation
des morceaux de configuration permet de réduire la répétition dans la spécification de
configuration.
Une telle approche présente de nombreux avantages. D’abord, elle permet une reproduc-
tibilité de ce qui a déjà été fait et qui est fonctionnel. En d’autres termes, la gestion
automatique permet de mettre sur pied une bonne documentation de tous les équipe-
ments ainsi qu’une journalisation de tous les incidents déjà survenus permettant ainsi de
capitaliser les connaissances. Avec une configuration automatique, les mises à jour des
fichiers de configuration, la gestion des différentes versions de ces fichiers ainsi que l’ajout
et la configuration d’un nouvel équipement se font de façon automatique et transparente.
61
Enfin, la gestion automatique permet de fournir des alertes sur les incidents en temps réel
et, dans le cadre des systèmes autonomiques permet automatiquement de les résoudre
(ManageEngine, 2012).
Selon (Delaet et al., 2011) lorsque l’administrateur décide d’adopter un outil de gestion
de configuration, cela implique un investissement important en termes de temps ou
d’argent. Mais avant de faire un tel investissement, il a besoin de savoir si l’outil choisi est
compatible avec l’infrastructure. Par conséquent, il est primordial de pouvoir connaitre
les critères de comparaison des solutions existantes avant toute décision.
utilise cette spécification en entrée et l’applique sur tous les équipements du même type
à gérer. Chaque équipement possède un agent de traduction qui est le composant chargé
de traduire l’entrée de l’administrateur en profil de configuration compréhensible par
l’outil qui permet la communication entre lui et le serveur (Delaet et al., 2011). Cet
agent de traducteur est considéré comme le serveur et l’équipement à gérer comme l’hôte
ou client selon les outils. Comme présenté dans la figure 2.6 ci-dessous, on distingue
deux entités :
— Serveur : c’est l’application installée sur la machine qui héberge les configurations.
C’est à partir du serveur qu’on peut pousser un changement de configuration sur
les autres équipements du réseau.
— Hôte : chaque hôte va établir une connexion avec le serveur pour valider sa
configuration c’est à dire comparer sa version avec celle qui est sur le serveur et
s’assurer qu’il n y a pas eu de modification sinon elle met à jour la sienne à partir
de la copie logée sur le serveur.
Après avoir présenté une liste des différents outils existants sur la gestion automatisée
des configurations en page 63, nous allons ensuite faire une analyse complète de ces
63
2.4.1 CFENGINE
CFEngine est l’un des outils les plus répandus et le plus populaire parmi les outils de
gestion automatisée de configuration (Burgess, 1995). C’est un logiciel libre de gestion
automatique de configuration, écrit en langage C, qui utilise pour ses spécifications
d’entrées un langage de déclaration dont l’acronyme est DSL. Il utilise un langage de
déclaration (Delaet et al., 2011) pour l’entrée de ses variables, ce qui lui permet de
déclarer au préalable ses contraintes ou spécifications sur l’état de l’infrastructure, et
lors de son exécution compare ainsi la configuration désirée et celle présente sur les
équipements (Schönwälder et al., 2008).
— cf-key : c’est lui qui permet de sécuriser au minimum les flux de données, et
fonctionne à la manière du keygen d’OpenSSH.
L’un des avantages de CFEngine est aussi qu’il permet de contrôler et de coordonner la
65
distribution de charges des équipements ce qui n’est pas le cas de bien des outils. C’est
une solution de gestion de configuration réseau qui permet l’automatisation des tâches
d’administration, les notifications des sauvegardes des configurations d’équipement et
des changements au sein de ces configurations. Il fournit également un moyen facile de
pousser un changement de configuration sur tous les équipements du réseau (Zamboni,
2012). CFEngine peut-être utilisé quelque soit la taille de l’entreprise autant sur de
petits réseaux que sur des réseaux de grande taille.
CFEngine est conçu de façon à ne pas lancer en boucle les commandes afin de ne pas
saturer le système. Il est généralement exécuté périodiquement sur les hôtes. Lors de
son démarrage, il récupère une instance de la définition des politiques ou des contraintes
établies au niveau du serveur central (celui qui héberge les politiques établies) et tente
d’adapter son système local à la politique définie.
CFEngine contient aussi un utilitaire (démon) appelé cfenvd, qui collecte les statistiques
locales afin de détecter un comportement anormal (Schönwälder et al., 2008). Enfin
CFEngine contient deux algorithmes qui analysent les données pour détecter les anomalies
(Burgess, 2002).
Selon (Chuche, 2007), pour résoudre ce problème et permettre l’utilisation d’un seul
fichier de configuration pour plusieurs systèmes, CFEngine implémente la notion de
classes. Celles-ci permettent d’exécuter certaines parties des scripts sous certaines
conditions définies par l’environnement ou par l’utilisateur, à la manière du ’if ’ des
langages de programmation. La figure 2.7 présente un fichier de configuration, composé
de trois sections : control, shellcommands et tidy.
La troisième section stipule qu’il faut lancer l’action tidy (suppression) sur le répertoire
tmp et sur les fichiers dont le nom se termine par (’˜’) ∼ (pattern=*˜), vieux de plus de
deux jours (age=2), et en analysant également les sous-répertoires (recurse=inf). Pour
exécuter ce fichier, il suffit de faire :
# cfagent -q -K
cfengine::usr/bin/id: uid=0(root) gid=0(root) groups=0(root)
CatTools est une application qui permet d’automatiser la gestion des configurations des
appareils tels que les routeurs, les commutateurs et les pare-feu (CatTools, 2012). C’est
donc une solution de gestion de configurations d’équipements réseaux qui peut être
utilisé pour plusieurs types de fabricants en occurrence Cisco, 3Com, Dell, Enterasys,
Extreme, Fonderie, HP, Juniper et les équipements Nortel. Parmi les nombreuses tâches
que peut effectuer cet outil, nous pouvons citer :
67
1. If faut d’abord définir ses options de configuration telle que le courrier électronique
en utilisant le menu de configuration. (En utilisant le menu Options / Setup)
2. Entrer les détails pour au moins un périphérique réseau. (En utilisant l’onglet
Devices)
68
4. Exécuter l’activité. Ceci peut être accomplie en utilisant soit le bouton "Run now"
bouton ou le planificateur. Ces étapes sont détaillées dans le document d’aide
officiel de CatTools (CatTools, 2012).
Son fonctionnement est aussi simple. Pour chaque nouvel équipement on doit d’abord le
configurer manuellement ensuite copier le fichier de configuration sur le serveur. Après
un intervalle de temps défini par l’administrateur CatTools va comparer les deux versions
de sa configuration ; par défaut cette comparaison se fait au démarrage de CatTools.
CatTools utilise le concept de variables qui elles, peuvent être appliquées à certaines
activités ou à des propriétés de champs. Les variables peuvent être utilisées dans les
commandes pour saisir un paramètre ou modifier les activités de configuration. Les
variables peuvent également être utilisées au sein des noms de fichiers définis comme
les propriétés des activités, normalement pour les rapports ou des données capturées.
Ces variables sont réglées à des valeurs concrètes dès que l’activité est lancée. En voici
quelques exemples :
CatTools utilise aussi des méta-commandes qui peuvent être utilisés au même niveau
que les commandes, mais peuvent aussi servir à modifier les fichiers de configuration.
Voici un exemple d’utilisation de la méta-commande %ctDB, pour mettre à jour dans
le cadre d’une activité un champ directement dans une table de la base de données
CatTools :
Pour ajouter un nouvel équipement dans CatTools selon (CatTools, 2012), deux fichiers
sont nécessaires :
1. Le dossier type d’appareil (fichier .ini), qui définit les éléments suivants :
— les champs de valeurs par défaut de l’interface utilisateur qui sont affichés
sur l’équipement lorsqu’on ajoute ou lorsqu’on met à jour l’équipement.
Le format de fichier d’importation des périphériques doit commencer par une en-tête
qui définit les champs. Les lignes qui suivent l’en-tête sont traitées comme des données,
comme le montre la figure 2.4
Une activité est une tâche interne qu’effectue CatTools sur un ou plusieurs périphériques
du réseau qui ont été introduit dans la base de données de CatTools (CatTools, 2012).
Elle peut être programmée pour s’exécuter à des moments précis à l’aide de la minuterie
ou être exécutée directement. Son exécution permet de lancer le client qui va interroger
le périphérique afin d’obtenir les informations nécessaires pour compléter la tâche. Elle
va ainsi collectionner toute l’information retournée et l’analyser ou tout simplement
la stocker pour une utilisation ultérieure.Un rapport sur les résultats sera envoyé par
e-mail (CatTools, 2012).
Nous présentons ici un exemple d’activité de sauvegarde des configurations de tous les
équipements en cours d’exécution dans le réseau. Pour ce faire, l’on doit :
Sa configuration proprement dite est simple : après avoir défini au préalable les options
de configurations dans le fichier de configuration, on saisit ou on importe les détails de
l’équipement réseau dans la base de données ensuite, on crée les activités prévues pour
ce périphérique dans la base de données et enfin on exécute ou on active la minuterie de
programmation pour démarrer l’activité à une date ultérieure. Un exemple de fichier de
configuration de CatTools est proposé en annexe2
2.4.3 PUPPET
Puppet est un outil de gestion de la configuration automatique orienté vers les systèmes
d’exploitation de type serveur. Il permet le déploiement à distance des configurations
sur un ensemble de serveurs en très peu de temps.
Au niveau du client, on installe un programme qui s’exécute sur chaque machine sous le
5. Le manifeste est un extrait de code qui explique à Puppet ce qu’il doit faire, par exemple
comment un équipement devrait être configuré, ou encore quel élément (paquet, utilisateurs, fichiers et
autres ressources) doit être présent, et ce qu’ils doivent contenir.
72
Puppet utilise le langage déclaratif DSL de Ruby pour installer et exécuter les scripts
sur le serveur ou pour distribuer une spécification de configuration réutilisable pour la
gestion de certains sous-systèmes ou dispositifs (Delaet et al., 2011). Ces spécifications de
configuration, peuvent être appliquées soit directement sur le système, ou alors regroupées
dans un catalogue et distribuées sur le système cible par l’intermédiaire d’un paradigme
comme l’API REST (Arundel, 2010) 6 , et l’agent utilise les spécifications fournies par le
serveur pour faire mettre en application les spécifications contenues dans le manifeste.
Ce langage inclut toutes les principales caractéristiques de langage de haut niveau
comme les fonctions, les instructions conditionnelles, l’héritage et d’autres concepts sans
avoir besoin de spécifier les commandes du système d’exploitation (comme apt, yum
ou encore rpm). Cette fonction permet d’avoir une cohérence dans les paramètres de
configurations de Puppet et favorise leur meilleure lisibilité et leur réutilisation (Arundel,
2010; sparksupport, 2010).
Dans le but d’alléger le réseau et d’optimiser les ressources, il est important dans la
gestion des configurations de pouvoir regrouper les configurations des équipements ayant
des paramètres similaires (Delaet et al., 2011). Dans cet ordre idée, Puppet utilise le
concept de classe. Ces classes peuvent inclurent d’autres classes permettant ainsi de
créer des hiérarchies. L’utilisation des outils externes permet ainsi à Puppet de pouvoir
assigner dynamiquement ces classes. Puppet utilise ce mécanisme pour distribuer les
6. Representational State Transfer (REST) REST est un style d’architecture pour les systèmes
distribués.
73
configurations sur les équipements (Delaet et al., 2011). Par exemple, les équipements
ont besoin de la configuration du client DNS, du mécanisme d’authentification et du
système de partages de fichiers. Ces besoins peuvent être exprimés dans un seul module
et être utilisés par tous les équipements au lieu de les réécrire dans chaque fichier de
configuration.
PUPPET tout comme CFEngine permet la distribution des charges contrairement à Chef
ou à d’autres outils de configuration, mais cette distribution des charges est séquencée
en phase avec l’exportation des ressources collectées entre les équipements gérés (Delaet
et al., 2011; Anderson et Scobie, 2012). Une grande différence entre Puppet et la plupart
des autres outils, est que les configurations de Puppet sont idempotentes, c’est à dire
qu’elles peuvent être exécutées plusieurs fois sans risque.
Selon (Chawla, 2012) le serveur (puppetserver) exige qu’un manifeste soit en place avant
74
qu’il ne puisse fonctionner. La figure 2.10 présente un exemple de manifeste qui demande
à Puppet de créer le dossier "/tmp/testfile" sur le client.
2.4.4 CHEF
Chef est un outil de configuration automatique, spécialisé pour les machines tournant
sous Linux, mais pouvant aussi fonctionner sur des machines Windows. Il permet un
déploiement facile des serveurs et des postes de travail ainsi que de certaines applications
quelque soit la taille du réseau et l’emplacement de l’équipement dans le réseau ou dans
une infrastructure en nuage (Opscode, 2013).
Figure 2.11: Une vue du serveur Chef avec la liste des clients
Le fonctionnement de Chef repose sur des définitions abstraites (connu sous le nom de
livres de cuisine ou « cookbooks »qui contiennent les recettes) qui sont écrites en Ruby
et sont gérées comme du code source 7 (Delaet et al., 2011). Chaque définition décrit
comment une partie bien spécifique de l’infrastructure devrait être construite et gérée.
Ensuite Chef applique de façon automatique ces définitions sur les équipements, comme
spécifié, aboutissant ainsi à une infrastructure entièrement automatisée. Lorsqu’un
nouveau serveur est en ligne, la seule chose que Chef a besoin est de savoir dans
quel livre de recette aller chercher la définition pour l’appliquer au nouvel équipement
7. C’est la description de ce que l’on voudrait que chacune des parties de notre infrastructure fasse.
76
Le poste de travail est l’endroit à partir duquel les « cookbooks »ou recettes sont créés
et où les contraintes sont définies. Les données présentes dans le poste de travail sont
synchronisées avec celles du serveur de Chef. Ce qui permet aussi de synchroniser les
données qui sont téléchargées vers le serveur de Chef.
Un nœud peut être n’importe quel serveur physique ou virtuel qui est configuré pour
être maintenu par un client Chef. Chaque nœud contient un client Chef qui effectue les
différentes tâches d’automatisation que chaque nœud a besoin, par exemple donner des
détails de configurations tels que les recettes, les templates (modèles) et des fichiers de
distributions (Opscode, 2013).
Chaque « cookbook »définit un scénario, par exemple tout équipement doit installer et
configurer MySQL. Chaque « cookbook »contient en plus de la liste de tous les composants
qui doivent exécuter ce scénario, d’autres éléments comme, les valeurs des attributs qui
sont définies sur les nœuds. Les « cookbooks »contiennent également les définitions, les
fichiers de distribution, les bibliothèques, les recettes, les ressources personnalisées ,les
modèles, les métadonnées sur les recettes (y compris les dépendances), les contraintes
des versions, les plateformes prises en charge etc. Les définitions permettent la création
et la collections de ressources réutilisables. Les bibliothèques permettent d’étendre Chef
et/ou de fournir l’aide sur le code de Ruby. Les recettes spécifient quelles ressources
sont à gérer et l’ordre dans lequel ces ressources seront appliquées (Opscode, 2013).
La figure 2.12 présente un exemple de création d’une nouvelle ressource appelé apache_site
à partir d’un fichier de définition utilisant une ressource existante apache2 (Opscode,
2013). Une fois créée, la définition peut être utilisée en la plaçant dans une recette
78
# Enable my_site.conf
apache_site "my_site.conf" do
enable true
end
# Disable my_site.conf
apache_site "my_site.conf" do
enable false
end
c=8 c=2 f=2 c=5 c=2 c=3 e=0 c=3 e=3 e=8
d=3 e=0 d=1 d=2 d=6 d=5 d=7 d=9 d=5 d=6 g=0 d=0 d=1 d=3 d=1 d=3
2.4.5 ALLOY
Alloy est un solveur et un outil de configuration basé sur la logique du premier ordre.
Il permet de vérifier si une contrainte ou une politique à appliquer est valide dans un
domaine d’interprétation donnée.
Alloy permet, à partir de plusieurs types de raisonnement sur les exigences des réseaux,
d’accomplir plusieurs tâches de configuration (Narain, 2005). Celles-ci comprennent la
synthèse de configuration, le diagnostic d’erreur de configuration, leur résolution, l’ajout
et la suppression des composants, et enfin l’exigence de vérification. Cependant, un tel
raisonnement est actuellement bien élaboré.
79
Au niveau fonctionnel, Alloy est basé sur le concept de la recherche de modèles valides.
En utilisant la logique du premier ordre, il est capable de traduire les spécifications en
expressions booléennes qui peuvent être automatiquement analysées par des solveurs
SAT (Narain, 2005; Jackson, 2012). Ainsi, lorsqu’on donne des formules logiques à Alloy,
son analyseur va essayer de trouver un modèle qui le satisfait. En d’autres termes, Alloy
essaye de trouver des contre-exemples au modèle. En combinant ces contre modèles
avec ceux des modèles qui peuvent satisfaire les exigences, Alloy fourni un modèle
rigoureusement exact (Jackson, 2012; Narain, 2005). Il est donc utilisé pour construire
un solveur d’exigences qui prend en entrée un ensemble de composants réseau et des
exigences appliquées sur leur configuration et détermine les configurations qui répondent
à ces exigences (Narain, 2005). Au fil des ans, Alloy est devenu un langage de modélisation
structurelle complet capable d’exprimer des contraintes structurelles complexes ainsi que
les comportements (Jackson, 2012) en une expression simple de logique mathématique.
80
Tous les problèmes sont résolus dans le périmètre défini par l’utilisateur qui délimite
la taille des domaines et permet ainsi de minimiser le problème en le réduisant en une
simple formule booléenne (Dennis et Seater, 2012).
Généralement Alloy ne peut pas automatiquement prouver qu’un modèle est valable,
mais peut être utilisé pour vérifier si un modèle est correct dans un périmètre fini
ou jusqu’à une certaine taille du domaine (Dennis et Seater, 2012). Comme dit plus
haut la construction d’un modèle est un préalable à l’utilisation d’Alloy. La figure
2.14présente l’exemple d’un modèle (Dennis et Seater, 2008) dont les mots clés sont
expliqués ci-dessous.
— Fact : c’est un mot clé utilisé pour forcer certains éléments comme des contraintes
ou des prédicats à être vrai dans le modèle.
— assert : est un mot clé qui signifie qu’un objet ou une contrainte doit être vrai
en raison du comportement du modèle.
— Ione : indique simplement qu’il existe 0 ou 1 parent dir pour chaque FSObject.
En d’autres termes sachant que tous les objets du système de fichiers n’ont pas
tous de parent, c’est ce mot clé qui indique si un objet du système de fichiers a un
parent ou pas.
— Parent : c’est la relation qui lie FSObject à Dirs (répertoires). Dans Alloy chaque
81
Nous allons nous appuyer sur les travaux de (Narain, 2005) et des configurations de la
figure 2.15 pour présenter un exemple concret d’utilisation d’Alloy.
— Conf1 : Les trois lignes déclarent trois types d’objet : le routeur, le sous-réseau et
l’interface. Le dernier type a deux attributs, le châssis (de type routeur) auquel il
appartient, et le réseau (de type sous-réseau) sur lequel il est placé. Ces attributs
modélisent les paramètres de configuration d’une interface.
— Conf2 : Le Prédicat spec définit une spécification dont nous essayerons de trouver
le modèle. C’est une conjonction de trois contraintes. La première affirme que
pour chaque routeur x il y a une interface y dont le châssis est x, c’est-à-dire que
chaque routeur a au moins une interface. La seconde affirme que deux interfaces
non-égales sur le même routeur ne peuvent être placées sur le même sous-réseau.
La troisième affirme que notre réseau contient un routeur, deux sous-réseaux et
deux interfaces. Ce sont les composantes que nous voulons configurer.
— Conf4 :La première ligne affirme que la valeur du châssis pour interface_0 est
router_0 et la valeur de châssis pour interface_1 est router_0. Même chose pour la
seconde ligne. Alloy crée automatiquement des instances d’objets tels que router_0,
sous-réseau_0, et sous-réseau_1. Il faut noter qu’Alloy n’a pas placé interface_0
et interface_1 sur le même sous-réseau à cause de la seconde contrainte. D’autre
part, si nous enlevons cette contrainte, Alloy produit une solution supplémentaire
apparaissant dans Conf5 dans laquelle interface_0 et interface_1 sont placés sur
82
le même sous-réseau.
2.5.1 ORIENTÉ VERS LES POSTES DE TRAVAIL PLUTÔT QUE SUR LES
ÉQUIPEMENTS RÉSEAUX
Force est de constater que la plupart d’outils de gestion de configuration sont orientés
vers les postes de travail et les serveurs : le domaine des réseaux n’ayant que très peu
d’outils dédiés. Ceci peut s’expliquer par le fait que la plupart des types de poste de
travail peuvent communiquer entre eux, le développement d’un outil pour un type de
poste ne demande que quelques modifications pour pouvoir supporter ou communiquer
par un autre type de poste. Il y a donc une large clientèle pour la gestion des postes de
travail.
Les interfaces pour envoyer les configurations ne sont pas compatibles, ainsi que les
paramètres des fichiers de configuration. La plupart des outils qui existent utilisent un
langage de bas niveau ce qui ne permet pas une séparation entre les contraintes et le
code. En d’autres termes l’utilisation d’un langage de bas niveau ne permet pas une
abstraction des caractéristiques techniques entre les équipements de fabricants différents
(Delaet et al., 2011). Pourtant l’utilisation des langages de haut niveau, permettrait de
mettre sur pied des outils de gestion automatisée de configurations sans tenir compte de
la façon dont fonctionne le matériel. Certaines solutions comme Config Differ (RANCID)
(Networks, 2006) permettent de travailler sur des équipements de plusieurs fabricants
85
différents, il est spécialement orienté vers les équipements réseaux plus précisément ceux
de Cisco mais permet également de monitorer les équipements d’autres fabricants comme
Juniper, Redback NASs, Alteon,HP etc. Il faut aussi relever que la plupart des systèmes
d’exploitation (OS) des équipements réseaux sont apparentés au système d’exploitation
Unix ou Linux ce qui augmente aussi l’interopérabilité entre ces équipements.
La majeure partie des outils utilise un langage impératif qui décrit explicitement les
manipulations à effectuer, mais le but recherché par ces manipulations ne permet pas
de façon définitive de mieux cerner le problème. Dans les langages impératifs on cherche
à décrire « le comment »des choses c’est à dire la solution sans s’intéresser à la source,
contrairement aux langages déclaratifs qui eux cherchent à décrire le « quoi ». Par
exemple pour le développement d’un site web, les langages déclaratifs vont décrire ce
que contient une page (texte, titres, paragraphes, etc.) et non comment les afficher
(positionnement, couleurs, polices de caractères, etc.). Les langages déclaratifs cherchent
à décrire ce que l’on voudrait faire plutôt que de spécifier la façon dont on veut faire
quelque chose. Si on sait comment on veut faire quelque chose on peut l’appliquer à
d’autre types de choses, mais si on s’intéresse à la façon de faire quelque chose cela
réduit le champ d’application.
Bien que les outils présentés permettent une détection relativement efficace du comporte-
ment anormal des équipements réseau. Ils offrent un support limité pour la recherche des
causes d’erreurs possibles qui pourraient aider à revenir aux paramètres de configuration
86
de départ. Un autre inconvénient est que les erreurs sont détectées à posteriori, c’est à
dire après le dysfonctionnement. A moins que des simulations réalistes soient effectuées
avant chaque modification apportée au réseau, il faut attendre que les configurations
erronées soient mises en exécution avant de s’apercevoir que quelque chose ne fonctionne
pas comme prévu. Il y a un manque de validation des configurations avant toute confi-
guration, ce qui permettrait de gagner du temps. La plupart des outils sont basés sur la
gestion des fichiers de configuration et non sur leur validation préalable.
La plupart des outils présents sur le marché n’en sont pas capables, il s’agit pourtant
d’une nécessité étant donné l’évolution des équipements réseau.
CHAPITRE 3
Comme nous l’avons vu, la gestion des dispositifs de configuration de réseaux est un
processus complexe du fait du nombre de dispositifs et des paramètres à prendre en
considération et, plus important, de la façon très variée dont ces paramètres peuvent être
interrogés et modifiés sur chaque dispositif. Chaque fabricant offre sa propre interface de
ligne de commandes ou protocole de gestion dans lequel les paramètres sont organisés de
manière distincte, de même les différents appareils du même fabricant nécessiteraient de
pouvoir communiquer entre eux. Dans le présent chapitre, nous présentons un modèle
de données génériques pour des informations de configuration des dispositifs de réseaux
qui prennent en compte l’hétérogénéité des fabricants et de leurs versions. Un moteur de
requête de configuration permet à l’utilisateur d’identifier un paramètre de configuration
spécifique, abstrait et d’obtenir la séquence appropriée de commandes pour interroger
ce paramètre sur un dispositif d’un fabricant donné et d’une autre version de système
d’exploitation. Le contenu de ce chapitre a fait l’objet d’un article qui a été accepté et
sera présenté à la conférence IM 2015.
88
Un dispositif peut être une composante matériel telle qu’un routeur, un switch, un point
d’accès sans fil ou une passerelle. En d’autres termes c’est du matériel physique ou
virtuel utilisé pour acheminer des paquets dans un réseau informatique. Ils possèdent
leurs propres caractéristiques internes et leurs interfaces de communication et dépendent
habituellement des fabricants pour ce qui est des dispositifs physiques ou de leur version
pour les dispositifs virtuels. La principale caractéristique d’un dispositif est que son
comportement par défaut peut être modifié dynamiquement par configuration. La
configuration d’un dispositif correspond à un ensemble de paramètres et de valeurs
associées enregistrés par le dispositif. Ces réglages permettent aux administrateurs
réseaux de personnaliser le dispositif, par exemple en paramétrant les interfaces physiques,
en appliquant les règles de redirection des données, en adaptant le comportement
générique du dispositif au réseau, ou en modifiant le comportement du dispositif de
telle sorte qu’il corresponde aux évènements précédents. En matière de configuration,
les éléments éditables s’appellent les paramètres.
Le problème d’interopérabilité s’est résolu sur un plan général,car la plupart des fabricants
d’équipements ont été forcés d’ajouter une couche supplémentaire pour permettre
l’interopérabilité des appareils de réseau. C’est le cas de Cisco NORTEL. Le problème
89
d’utilisation de certains protocoles comme SNMP et CMIP a déjà trouvé une solution ; il
reste à trouver des solutions aux problèmes d’interopérabilité qui peuvent survenir dans
un même domaine entre l’utilisation des protocoles de communication et le développement
de modèles. La question suivante sera : « que se passerait-il, si deux domaines différents
représentaient le même concept mais de manière différente ? » Une traduction purement
syntaxique ne peut apporter une solution mais plutôt une traduction sémantique serait
nécessaire pour faire correspondre directement les concepts de ces deux domaines, d’où
la contribution de l’ontologie. L’ontologie offre toutes les constructions nécessaires pour
ajouter les informations sémantiques représentées (Vergara et al., 2002).
Hétérogénéité inter-fabricant
Fabricant Syntaxe
Hétérogénéité inter-version
La différence de syntaxe n’est pas seulement due à la concurrence entre fabricants. Elle
peut parfois être observée entre les produits du même fabricant lorsque les dispositifs
les plus récemment développés contiennent une version mise à jour du programme. Par
conséquent, la syntaxe peut varier d’une version à une autre. Ceci est bien illustré par
les produits Cisco dont les commandes changent lorsque les versions de ses dispositifs
changent. Par exemple, la syntaxe de la commande ip domain a évolué de la version 10
à la version 12 du Système d’Exploitation de Cisco (IOS).
— Dans la version 12.2, la syntaxe est : ip domain name list (sans les tirets)
Les outils tels que PoDIM (Delaet et Joosen, 2007) qui est un langage de haut niveau
pour la gestion de configuration qui se compose d’un langage de règles et d’un modèle
de domaine extensible comme celui de ValidMaker (Hallé et al., 2012) autorisent l’abs-
traction des programmes à travers l’utilisation des concepts ou des langages de haut
niveau. PoDIM tente de résoudre le problème posé par la complexité de la gestion de
configuration due à la multiplicité des systèmes hétérogènes à travers l’utilisation de
mécanismes permettant de spécifier de multiples contraintes croisées. En outre, PoDIM
permet la spécification de haut niveau pour une infrastructure informatique dans son
ensemble sans aller dans les détails de la syntaxe du langage afin de ne pas être lié à un
système ou appareil déterminé
En plus, PoDIM permet à l’administrateur d’exprimer des contraintes telles que «un de
mes serveurs doit être configuré comme un serveur web» et sur « chaque sous-réseau, il
doit y avoir deux serveurs DHCP »en lieu et place des affectations de paramètres. Par
exemple, l’administrateur de réseau peut instaurer des règles telles que «un serveur web
doit utiliser un numéro de port supérieur à 1024». Le logiciel d’exécution de PoDIM
prend en entrée un ensemble de règles et essaye de satisfaire ces règles en créant des objets
et des paramètres de réglage des objets. En procédant ainsi, il génère une configuration
pour chaque dispositif géré indépendamment du fabricant de l’équipement. PoDIM
utilise alors des outils de gestion de configuration existants tels que CFEngine pour
deployer la configuration générée sur tous les dispositifs gérés. Le principe de base du
logiciel d’exécution de PoDIM stipule que chaque objet du monde réel doit être simulé
92
dans le système. Les différentes classes d’objet sont définies dans le modèle de domaine
(Delaet et Joosen, 2007). Cependant, PoDIM ne permet pas la vérification de ses règles
ni des fichiers de configuration de ses dispositifs. Ceci peut conduire les utilisateurs à
rencontrer des problèmes d’état de fonctionnement stable rendant ainsi impossible le
fait d’atteindre un état stable et générer une configuration invalide. PoDIM est un outil
pour techniciens dont l’utilisation requiert, des connaissances en Eiffel.
Le modèle de configuration proposé par le modèle Meta-CLI place les informations dans
des modèles de structure arborescente qui déterminent les opérations qu’il faut faire
pour extraire, modifier, enlever et ajouter les données sans considération du fabricant
du dispositif réseau. Par conséquent, l’outil ValidMaker que nous présenterons dans un
autre chapitre, extrait le fichier de configuration du dispositif sous forme de fichiers
Meta-CLI qui peuvent être traduits à leur tour en configurations exécutables et envoyés
aux dispositifs dans un format approprié selon le système d’exploitation du vendeur du
matériel et suivant le numéro de leur version (Hallé et al., 2012). La configuration de
dispositifs réseau tels que les routeurs et les switches peuvent être représentés sous forme
93
d’arbre dans laquelle chaque noeud est une paire composée d’un nom et une valeur.
Cet arbre représente la hiérarchie de paramètres inhérents à la configuration de ces
dispositifs (Hallé et al., 2004). Les structures méta-CLI utilisées dans la représentation
interne des configurations dans ValidMaker utilisent également ce type de modèle sous
forme d’arbre.
3.2.1 ONTOLOGIE
Une ontologie est une spécification bien detaillée d’une conception d’une vue abstraite
ou simplifiée du monde que nous voulons représenter pour un but précis (Gruber, 1993).
Confère représentation de la fauve et de la flore sauvage présenté ci bas. L’ontologie
constitue en elle-même un modèle représentatif de données d’un ensemble de concepts
dans un domaine, ainsi que des relations entre ces concepts. Le premier objectif de
l’ontologie est de modéliser un ensemble de connaissances dans un domaine donné, qui
peut être réel ou imaginaire, il définit un ensemble de primitives représentatives qui
permettent de modéliser un domaine de connaissance. Les primitives représentatives
sont généralement des classes, des attributs (propriétés) ou des relations (relations
entre les membres de la classe). L’ontologie utilise le langage de spécification considéré
comme l’élément-clé sur lequel il se base (Gruber, 2009). La majorité des langages de
spécification sont basés ou proches de la logique du premier ordre et représentent ainsi
la connaissance sous la forme d’une affirmation (sujet, prédicat, objet). Ces langages
sont généralement conçus pour extraire les structures de données et en mettant l’accent
sur la sémantique. Dans le contexte des systèmes de bases de données, l’ontologie peut
être considérée comme un niveau d’abstraction de modèles de données semblable aux
modèles hiérarchiques et relationnels, mais qui vise à la modélisation des connaissances
par exemple si l’on applique l’ontologie sur les individus on va rechercher leurs attributs
et leurs relations avec d’autres individus (Gruber, 2009). En fin de compte, une ontologie
est un réseau sémantique qui se compose d’un ensemble de concepts décrivant un
domaine particulier. Ces concepts sont liés les uns aux autres d’abord par la hiérarchie
de concepts, ensuite par la sémantique. Pour construire une ontologie,au moins trois
concepts doivent être pris en compte :
6. Un Herbivore est un Animal qui ne mange qu’une Plante ou une partie d’une
plante.
9. Une Plante appétissante est une Plante qui est mangée par un Herbivore mais
aussi par un Carnivore
10. Une Girafe est un Herbivore qui ne mange que des Feuilles.
Dans notre travail, nous avons préféré utiliser le concept de modèle générique qui est une
autre forme d’ontologie, car notre objectif est de reconstruire ou de convertir les séquences
de commandes d’un modèle contrairement à l’ontologie qui est appliquée premièrement
à la modélisation des dépendances de configuration et d’autre part d’apporter une
contribution à l’automatisation de la correspondance entre les termes en vue de créer
une base de données unifiée des informations d’application de telle sorte que la gestion
des différentes marques d’équipements réseaux puisse se faire par une simple passerelle.
96
Paramètre Concret
Une paire nom/valeur représente les paramètres concrets. Les paramètres concrets
sont liés à l’implémentation des fonctionnalités au sein du composant réseau. Pour
chaque version du composant, un nouveau paramètre générique est défini qui possède
un identifiant différent. Afin de retrouver ce paramètre concret, on l’associe directement
à un paramètre générique qui lui fournira un identifiant générique. Le paramètre concret
possède sa propre syntaxe et ses fonctions d’accès et de modification. De la même
manière que les paramètres génériques, un paramètre concret est relié éventuellement
à des paramètres concrets enfants. Cette hiérarchie peut être différente de celle des
paramètres génériques et peut être différente d’une version de périphérique à une autre.
Ces paramètres regroupent des informations utiles à la configuration. On retrouve un
identifiant, un nom de paramètre, une syntaxe associée, la valeur ou l’ensemble de valeurs
prise par ce paramètre.(Parisot, 2014) Ils sont estimés en fonction de la configuration
du dispositif. Ils représentent une caractéristique particulière ou une composante du
comportement du dispositif. Il faut noter que les valeurs de chaque paramètre sont d’un
type bien défini qui peut être connu d’avance.
97
Paramètre Générique
D’un switch à un autre, les paramètres ont des noms similaires et une hiérarchie similaire.
En effet, la structure interne d’un commutateur peut varier mais l’ensemble de paramètres
reste fermé. Malgré le fait que les noms de paramètres spécifiques peuvent varier d’une
version à une autre, il est possible de combiner deux versions de paramètre avec la
même fonctionnalité. Nous pouvons faire la même chose en regroupant les paramètres
des dispositifs de différents fabricants sous le même nom de paramètres. Nous obtenons
alors un paramètre générique qui aurait la même signification pour tous les dispositifs.
Ce paramètre générique se compose d’un nom générique qui identifie de manière unique
tous les appareils (dispositifs). Il est associé à un ensemble de paramètres concrets qui
ont leur propre nom spécifique et leur valeur fixée. Ce modèle de données est utilisé pour
séparer les aspects syntaxiques et hiérarchiques des fabricants d’aspects fonctionnels
de configuration. Quel que soit le format de la configuration d’entrées, il est possible
d’identifier avec certitude un paramètre et les valeurs spécifiques en se référant au
paramètre générique.
Le concept de Commandes
Pour tenir compte de la hiérarchie des paramètres d’un dispositif, nous introduisons
le concept de commandes. Une commande comporte un ou plusieurs paramètres, un
nom et un ensemble de commandes sous-jacentes. Le modèle de données inclut de la
même manière des commandes spécifiques de dispositifs dans une commande générique.
Ceci permet de gérer les changements qui peuvent influer sur l’organisation hiérarchique
d’un dispositif à un autre, (Parisot, 2014).
3.3.1 IMPLÉMENTATION
Pour réaliser cette approche, nous avons choisi de mettre en pratique une solution
permettant à l’administrateur réseau de stocker les dispositifs avec leurs paramètres
spécifiques. Ensuite de les faire correspondre à des paramètres génériques et de trouver
la syntaxe correspondant aux dispositifs. Un dispositif est décrit par un ensemble de
commandes qui lui sont associées. Ces commandes possèdent d’autres commandes
ou paramètres sous-jacents. Ces objets forment une hiérarchie de paramètres et de
commandes qui donnent la configuration du dispositif. En fait, chaque commande
de l’appareil et chaque paramètre de l’appareil contient un lien vers une commande
99
Parallèlement à cette structure, nous avons mis en place une deuxième solution que
nous avons baptisée VendorOSReference. Elle peut stocker toutes les syntaxes utilisées
et les paramètres exigés par un fabricant pour les différentes versions de son système
d’exploitation. Nous avons ainsi trouvé VendorParameter qui est le paramètre concret du
dispositif. Ce paramètre est inclut dans un ensemble d’autres mots et forme la syntaxe
VendorSyntax. Parmi ces termes se trouvent des mots-clés et des chaînes nécessaires à la
bonne compréhension de la syntaxe. Des termes optionnels sont pris en compte dans la
solution via TermOrTerm. Nous pouvons définir plusieurs versions de commandes en
déclarant plusieurs nœuds de VendorCommandsVersion qui regroupent les différentes
syntaxes indispensables pour exécuter cette commande, pour chaque version fournie
par le fabricant. Chaque nœud fait référence au même GenericCommand qui l’identifie
de manière unique. La relation entre les paramètres concrets et génériques est établie
par la structure de données choisie. Pour exécuter le traitement de ces données, nous
avons développé une structure de données en Python basée sur le format Meta-CLI. Le
programme mis en place charge les données des dispositifs et la référence OS des fichiers
XML. Il devient donc possible de faire le traitement sur le dispositif en navigant sur les
nœuds comme des objets Python.
100
Pour que notre solution soit bien comprise, nous allons présenter un exemple dans son
entièreté. Pour ce faire, nous avons choisi de travailler avec les commutateurs Cisco (voir
figure 3.6). Nous pouvons extraire le fichier de configuration via CLI. Nous supposons
que la forme de vérification est le format NFD (Normal Form Disjunctive). Il convient
de rappeler que mettre une formule CL sous Forme Normale Disjonctive (FND) consiste
à convertir en une disjonction de clauses conjonctives. Exemple l’expression suivante est
FND (A ∧ B) ∨ (¬ C ∧ D) tandis que celle-ci ne l’est pas (A ∧ B) ∨ ¬(¬ C ∧ D).
Au départ, ce routeur Cisco a été configuré par les commandes CLI de Cisco IOS
(figure 3.6 (a)). Nous présentons également la version abstraite de ces commandes qui
caractérisent la configuration du dispositif (figure 3.6 (b)).
101
Il est donc nécessaire de vérifier que tous les masques de sous-réseau sont différents
de l’adresse 0.0.0.0. Cette formule a été écrite sous le format NFD. Nous pouvons
donc la convertir par exemple en langage Python. Pour cela, nous utiliserons les
102
éléments suivants :
Nous savons que les informations de configuration de dispositifs réseau sont stockées
dans une structure de données interne, qui peuvent être accessible par divers moyens.
Cependant, l’organisation avérée des paramètres, et la manière concrète de les atteindre,
ne reflètent pas nécessairement une vue sémantiquement exacte des opérations de confi-
guration dans toutes les situations. Dans ce paragraphe, nous proposons l’utilisation des
règles de dépendance des configurations afin de fournir une virtualisation sémantique des
paramètres. Nous montrerons ensuite comment cette virtualisation peut être superposée
avec un minimum d’interférences sur les protocoles de configuration actuelle, en prenant
en exemple le protocole Netconf. Toujours dans cette partie nous prenons une approche
opposée à la question de la restauration d’un équilibre sémantique dans les configurations.
Au lieu d’espérer un «good-for-all», pour l’organisation des paramètres nous suggérons
plutôt l’utilisation de multiples structures «locally optimal» qui fournissent chacune
une représentation fragmentée efficace de la configuration bien adaptée pour un seul
service ou une tâche de gestion. Ces structures appelées « sous arbres virtuels », sont
logiquement des sous-ensembles superposés d’une structure de configuration originale.
Historiquement, les structures de données des appareils réseau ont commencé comme un
tout petit ensemble bien organisé de commandes et paramètres. Cependant, l’ajout de
nouvelles fonctionnalités et services a au fil du temps conduit à une complexification
progressive de ces structures. Il était très souvent nécessaire d’établir la compatibilité
avec les versions antérieures du produit. Par conséquent aucune réorganisation n’était
recommandée. Le résultat final est que la plupart des structures de configuration pour
les périphériques actuels ont dépassé à plusieurs reprises leur coquille initiale et ont
ainsi perdu leur cohésion originale. C’est le cas des paramètres qui gèrent par exemple
109
un service unique qui peuvent être dispersés à plusieurs endroits et souvent mélangés
à l’intérieur des opérations de configuration d’autres paramètres provenant d’autres
services. On peut citer l’exemple des réseaux privés virtuels (VPN), qui modifient en
même temps la configuration des tables de routage, des systèmes d’adressage IP et
d’autres paramètres et le plus souvent soumis aux dépendances sémantiques. La tendance
actuelle tournée vers la virtualisation du réseau et son découplage de dispositifs physiques
rend le problème encore plus complexe. Il n’est même pas garanti que pour tous les cas
de figure, la construction d’une nouvelle configuration à partir de zéro conduirait à de
meilleurs résultats. La recherche d’un modèle de données de configuration universel a
commencé il y a longtemps avec des initiatives comme Management Information Base
(MIB) (MacFaden et al., 2003), Directory Enabled Networking (DEN) (Strassner, 1999)
et Common Information Model (cim, 2000). Le fait qu’une telle unification et des efforts
de standardisation aient proliféré au fil des années donne matière à réflexion.
Nous présentons ici une forme générale d’arbre appelé « arbre de configuration »qui
peut être utilisée pour modéliser des structures hiérarchiques (ligne de commande et
XML), ainsi que des dépendances de service entre les paramètres de ces structures.
Dans une session typique de Netconf, codée en XML les appels de procédures distantes
(RPC) sont envoyés par une application à un dispositif, qui envoie à son tour une réponse
RPC en donnant ou en reconnaissant la réception d’un ensemble de données d’une
configuration XML complète ou partielle. Afin de parvenir à une telle communication
normalisée, on a vu que le projet Netconf actuel définit un ensemble d’opérations de
base qui doivent être pris en charge ou supporté par des devices ou dispositifs réseau.
Parmi ces opérations, get-config récupère tout ou une partie d’une configuration spécifiée
d’une source dans un format donné, edit-config charge la totalité ou une partie d’une
configuration spécifiée à la configuration cible indiquée. La configuration est organisée
111
en une hiérarchie de paramètres assez précise (le plus souvent spécifique au fournisseur)
qui prend la forme d’un document XML. Comme expliqué dans (Hallé et al., 2004), la
configuration des dispositifs réseau tels que les routeurs et les commutateurs peuvent être
représentés sous forme d’arbre où chaque nœud est une paire composée d’un nom et d’une
valeur. Cet arbre représente la hiérarchie de paramètres inhérents à la configuration des
périphériques. Cette structure fournit un modèle général pour les deux transformations
tant pour les structures modernes de CLI que pour les structures d’XML supportées
par Netconf. La figure 4.1 montre une partie d’un tel arbre de configuration. Sans
aucune précision, un get-config récupère l’ensemble de la configuration. Cependant, le
présent projet Netconf définit un procédé de récupération ou de filtrage d’une partie
de la configuration que l’on peut appeler le filtrage de sous-arbres. Cette méthode est
obligatoire dans tous les appareils Netconf ; il nécessite, une section <filtre> qui est
une représentant d’un sous-document sur lequel la configuration doit être filtrée et,
éventuellement, un espace de noms pour cette section.
gestion.
Dépendances sémantiques
Pour illustrer les dépendances sémantiques, nous prenons le cas du réseau privé virtuel
(VPN). Un service de VPN (Rosen et Rekhter, 1999) est un réseau privé construit au
sein d’un réseau public tel que le réseau d’un fournisseur de services. La majorité de la
configuration d’un VPN est réalisée dans les routeurs placés à la frontière entre le client
114
et le réseau d’un fournisseur. Du côté du client, ces routeurs sont appelés customer edge
(CE) routers, et du côté de l’opérateur, ils sont appelés provider Edge (PE). La Figure
4.1 montre la partie d’une configuration de routeur pour un réseau privé virtuel. Dans la
configuration d’un VPN, le Virtual Routing and Forwarding Table (VRF), nom spécifié
pour la connectivité entre le routeur du côté fournisseur (PE) vers le routeur du côté
client (CE) et le nom VRF configuré sur l’interface PE pour le lien CE doivent être
compatibles. Cela met en lumière une première dépendance sur deux paramètres dans
la configuration : la valeur du nœud ip-vrf et la valeur de l’IP-vrf-forwarding sous
une interface spécifique.
Ceci n’est qu’un exemple de la propriété du réseau qui doit être validée sur les confi-
gurations des routeurs. En réalité, chaque service réseau impose des dizaines de ces
contraintes, et à son tour des dizaines de différents services peuvent coexister sur un
seul appareil. Dans (Hallé et al., 2004), des contraintes de service supplémentaires ont
été décrites et formalisées.
Par conséquent, dans un cas d’utilisation idéale, une tâche de configuration devrait
consister à la récupération et à la modification appropriée d’une partie de la configuration,
et à la mise à jour de cette partie modifiée dans le fichier de configuration. Si la vue
de configuration est efficiente et la partie extraite logiquement et sémantiquement d’un
seul bloc, on n’est pas tenu de vérifier l’intégrité de l’ensemble de la configuration : il
suffit de s’assurer que le bloc est correct. La cohérence globale de la configuration est
maintenue en effectuant des séquences de petites opérations atomiques qui préservent
chaque cohérence locale.
Considéront le service VPN représenté dans la section 4.1.1. Dans le cas de la formule
118
qui y est présentée, on voit trois quantificateurs, et donc trois chemins sont présents.
L’algorithme sélectionne tous les nœuds (peu importe leurs valeurs) dont le nom est
ip-vrf ou l’interface qui se trouve directement sous le nœud supérieur, et tous les nœuds
dont le nom est ip-vrf-forwarding directement en-dessous d’un des nœuds de l’interface
précédemment sélectionné. L’ajout de nouvelles contraintes au service VPN, comme cela
a été fait dans (Hallé et al., 2004), conduirait à plus de formules logiques de configuration
(CL) et par conséquent à une plus large sélection des nœuds pour le sous-arbre virtuel
VPN. Il est important de noter que l’algorithme de sélection inclut seulement les nœuds
qui sont explicitement mentionnés dans le chemin d’un des quantificateurs ; en particulier,
il n’inclut pas automatiquement le sous-arbre sous un nœud sélectionné, à moins que
chaque nœud de ce sous-arbre soit également mentionné dans l’un des quantificateurs.
Il peut y avoir beaucoup de sous-arbres virtuels définis au-dessus d’une simple structure
arborescente originale. Dans un contexte XML, des sous-arbres virtuels peuvent être
simplement ajoutés sur une structure originale en marquant, pour chaque nœud, à
quel sous-arbre virtuel il appartient. Ceci peut être réalisé en assignant un espace de
nom aux nœuds concernés. Par exemple, on pourrait facilement ajouter l’espace de
noms « service : vpn »(ou n’importe quelle autre chaîne d’ailleurs) aux nœuds XML de
l’arbre d’origine pour les marquer individuellement en tant qu’élément du sous-arbre
virtuel de service de VPN. Comme indiqué dans le cahier des charges de nommage XML
(Bray et al., 2001), plusieurs préfixes d’espaces de noms peuvent être déclarés comme
attributs d’un élément unique : il est donc possible de superposer un certain nombre de
sous-arbres virtuels d’une manière transparente au-dessus d’une structure déjà définie.
L’interrogation d’un sous-arbre virtuel se fait de la même manière que l’interrogation
d’un arbre original. Il peut y avoir beaucoup de sous-arbres virtuels définis au-dessus
d’une simple structure arborescente originale. Dans un contexte XML, des sous-arbres
119
virtuels peuvent être simplement ajoutés sur une structure originale en marquant, pour
chaque nœud, à quel sous-arbre virtuel il appartient. Ceci peut être réalisé en assignant
un espace de nom aux nœuds concernés. Par exemple, on pourrait facilement ajouter
l’espace de noms « service : vpn »(ou n’importe quelle autre chaîne d’ailleurs) aux
nœuds XML de l’arbre d’origine pour les marquer individuellement en tant qu’élément
du sous-arbre virtuel de service de VPN. Comme indiqué dans le cahier des charges
de nommage XML (Bray et al., 2001), plusieurs préfixes d’espaces de noms peuvent
être déclarés comme attributs d’un élément unique : il est donc possible de superposer
un certain nombre de sous-arbres virtuels d’une manière transparente au-dessus d’une
structure déjà définie. L’interrogation d’un sous-arbre virtuel se fait de la même manière
que l’interrogation d’un arbre original.
Avantages de la méthode
Un autre avantage est qu’il fournit une meilleure granularité pour le contrôle de sécurité
120
Ce que nous définissons comme un dispositif peut être une composante matériel telle
qu’un routeur, un commutateur, un point d’accès sans fil ou une passerelle. C’est donc un
matériel physique ou virtuel utilisé pour diriger des paquets dans un réseau informatique.
Ce dispositif a ses propres caractéristiques internes et des interfaces de communication et
dépend d’habitude du fabricant pour des dispositifs physiques ou de leur version pour les
dispositifs virtuels. La caractéristique principale d’un dispositif est que son comportement
par défaut peut être modifié de façon dynamique par configuration. La configuration
d’un dispositif correspond à un ensemble de paramètres et de valeurs associés, enregistrés
par le dispositif. Ces réglages permettent de personnaliser le dispositif par exemple en :
Les éléments éditables dans une configuration sont appelés des paramètres. Ces para-
mètres sont des éléments utilisés pour personnaliser le comportement d’un dispositif
pour un réseau donné. Les valeurs des paramètres peuvent être numériques (par exemple,
122
La forme d’une configuration dans le dispositif dépend de son fabricant. Par exemple, le
fabricant Cisco utilise un fichier batch contenant « Command Line »Interface” (l’Interface
de Ligne de commande-CLI-) des commandes et des valeurs associées. Ce fichier est
hiérarchisé, puisque certaines commandes permettent au dispositif de pouvoir changer
de mode ou de sous mode d’entrer ou d’en sortir (un contexte particulier, comme la
configuration d’une interface spécifique). Plus généralement, nous considérerons sans
perdre de vue la généralité que nous pouvons réduire la configuration de chaque fabricant
de dispositif (Cisco, Juniper, OpenFlow, etc) à une configuration générique en format
XML (ou celui appelé "Meta-CLI" vu précédemment), comme le montre le schéma 3.6.
Cette uniformisation des configurations ne fait pas partie du champ d’étude du présent
chapitre car cela a déjà été étudié dans des travaux précédents (Hallé et al., 2012).
Les contraintes sont utilisées dans le processus de configuration interactif pour prendre
en compte les dépendances entre les caractéristiques de plusieurs ou du même fabricant
(SAP, 2013). Les paramètres de configuration d’un dispositif ne peuvent pas prendre
n’importe quelle valeur ; pour qu’une configuration soit correcte, un certain nombre
de règles doivent être appliquées selon les services qui apparaissent. Les contraintes
décrivent habituellement les conditions à remplir pour une configuration cohérente. Les
contraintes peuvent être utilisées, par exemple, pour s’assurer qu’un conflit dans la
configuration n’apparaisse lorsque la cohérence de la configuration n’est plus respectée.
123
Nous illustrons ceci en utilisant un exemple simple basé sur la configuration d’un
Réseau local Virtuel (VLAN), généralement gérée par des commutateurs de réseau
et qui permettent à un réseau d’être divisé en segments logiques. Chaque port d’un
commutateur peut être assigné à un VLAN donné ; les ports qui sont assignés au
même VLAN peuvent communiquer à la Couche 2 du modèle OSI tandis que les ports
non assignés au même VLAN requièrent une communication à la Couche 3. Tous les
commutateurs qui doivent partager la Couche 2 pour la communication intra-VLAN
doivent être connectés par un lien appelé chemin réseau (trunk), qui joint deux interfaces,
une sur chaque commutateur, et ces interfaces devraient être encapsulées dans le même
mode. IEEE 802.1Q (IEEE, 2003) et VTP (Cisco, 2013b) sont deux protocoles connus
pour des chemins réseau VLAN.
1. Deux dispositifs ne peuvent avoir la même adresse pour plus d’une interface.
Puisque les adresses IP peuvent être manuellement configurées pour chaque inter-
face sur un dispositif, des conflits entre adresses peuvent survenir. Ceci peut faire
en sorte qu’une des interfaces partageant la même adresse paraisse défectueuse et
cause des interruptions dans les communications.
2. Chaque dispositif doit être un client VTP ou un serveur VTP et un seul serveur
peut exister. Cela signifie que pour chaque commutateur où VTP est activé sur le
mode client, il doit exister un commutateur où VTP est activé sur le mode serveur.
En d’autres termes ces contraintes signifient : pour tout noeud de racine avec le
nom "device" et la valeur s1, il existe un noeud sous "device = s1" ayant pour nom
"vtp mode" et pour valeur x, tel que x est égal à "client", ou qu’il existe un noeud
sous "device = s1" ayant pour nom "vtp mode" et pour valeur x, tel que x est égal
à "server".
3. Tous les dispositifs doivent être dans le même domaine VTP. Ici nous pouvons
124
Ceci n’est qu’un petit échantillon des contraintes de configuration qui peuvent être obte-
nues. La plupart des contraintes imposent des restrictions sur des valeurs de paramètres
et que plusieurs fois, les valeurs à l’intérieur d’un dispositif sont reliées aux valeurs
d’autres paramètres dans d’autres dispositifs. (Hallé et al., 2012) donne une présentation
plus détaillée des VLANs.
L’analyse des protocoles et des outils de gestion présentés dans les chapitres précédents
soulève un certain nombre de questions. D’abord, très peu de ces solutions abordent
l’exactitude de configuration. Des protocoles de gestion permettent des modifications de
configurations d’un seul dispositif à la fois et peuvent tout au plus exécuter la vérification
syntaxique de base des modifications sur les paramètres à appliquer. Les outils de gestion,
de leur côté, permettent l’automatisation de tâches diverses sur des dispositifs multiples,
mais offrent très peu en termes d’expression et de vérification de l’exactitude d’une
configuration selon des règles établies. De toutes les solutions, seul ValidMaker (et, dans
une moindre mesure, Puppet et Chef) offre de telles fonctionnalités.
Hélas, tous ces outils s’attendent à ce que les configurations soient gérées dans un
emplacement centralisé. Dans le cas de ValidMaker, la vérification de l’exactitude de
la configuration est faite localement sur une copie du réseau complet. À moins que les
modifications du réseau entier ne soient gérées que par ValidMaker, la configuration
complète de chaque dispositif doit être extraite chaque fois qu’une vérification est
exécutée pour éviter des problèmes de synchronisation. Ceci, à son tour, entraine une
125
La bande passante consommée pour une telle procédure peut être évaluée par un calcul
simple ; les réseaux de 1,000 dispositifs ne sont pas rares et les configurations non
compressées peuvent excéder la taille du NVRAM du dispositif (128 Ko est une valeur
typique) jusqu’à un facteur de 3 ; ceci indique que la vérification de la configuration
revient à extraire presque 400 Mo de données chaque fois. À moins que les modifications
du réseau entier ne soient gérées par le même outil centralisé, la configuration complète
de chaque dispositif doit être extraite chaque fois qu’une vérification est exécutée pour
éviter des problèmes de synchronisation. Cette question a longtemps été soulevée ; les
débats sur les capacités d’extraction de configuration du protocole Netconf d’il y a une
décennie mentionnaient déjà : « un mécanisme de filtrage moins puissant entraînerait
plus de trafic dans le réseau et augmenterait ainsi la charge du réseau et de charge CPU,
puisque les gestionnaires devraient extraire plus de données que nécessaire si le filtrage
requis ne peut pas être fait du côté de l’agent. » 1
Dans cette section, nous présentons une stratégie qui vise à réduire la quantité de
données de configuration qui doit être transférée à un lieu centralisé pour des besoins
de vérification. Nous appelons cet ensemble de techniques l’évaluation sélective des
configurations, puisqu’ils sont semblables dans l’esprit au concept du même nom dans
les langages de programmation (Henderson et al., 1976; Friedman et Wise, 1976).
1. http://psg.com/lists/netconf/netconf.2004/msg00448.html
126
[a = x1 ] [b = x2 ] [a = x1 ; c = x3 ] [b = x2 ; d = x4 ] x1 = x2 → x3 = x4
Il s’avère que les protocoles de gestion de réseau offrent exactement cette sorte de
fonctionnalité. En particulier Netconf, qui selon la RFC6241, offre ce qui s’appelle
le filtrage de sous-arbre XML, qui est un mécanisme qui permet à une application
de choisir précisément les sous-arbres XML à inclure dans une réponse de message
RPC get et get-config. Il est offert un petit ensemble de filtres pour l’inclusion et pour
une correspondance exact de contenu sélectionné, qui permet certains mécanismes de
sélection utile (mais aussi très limité). Conceptuellement, un filtre de sous-arbre est
composé de zéro ou plus d’élément de sous-arbre, qui représentent les critères de sélection
de filtre (Enns et al., 2006). À chaque niveau de confinement à l’intérieur d’un sous-arbre,
l’ensemble de noeuds apparentés est logiquement traité par le serveur pour déterminer si
son sous-arbre et son chemin d’accès d’éléments à la racine sont inclus dans la sortie du
filtre. Une première possibilité consiste à choisir des noeuds selon l’espace de noms auquel
ils appartiennent. Si l’attribution d’espaces de noms aux noeuds est faite soigneusement,
les noeuds peuvent être choisis d’une manière très flexible, tel que suggéré dans (Hallé
128
et al., 2012).
Un noeud de sélection est un noeud de feuille vide à l’intérieur d’un filtre. Il représente
un filtre de « sélection explicite »sur le modèle de données sous-jacentes. La présence
de tout noeud de sélection dans un ensemble de noeuds apparentés emmènera le filtre
à sélectionner le(s) sous-arbre(s) indiqué(s) et supprimera la sélection automatique de
l’ensemble tout entier des noeuds apparentés dans le modèle de données sous-jacentes,
comme dans le bout de code suivant :
<filter type="subtree">
<top xmlns="http://example.com/schema/1.2/config">
<configuration_file/>
</top>
</filter>
Dans cet exemple, les noeuds <config_file> et <parameter> sont des noeuds de retenue
(confinement), et <name_para> est un noeud de correspondance de contenu. noeud
129
([p = x ; p = x] : ϕ) ∧ ψ ⇔ [p = x ; p = x] : (ϕ ∧ ψ)
([p = x ; p = x] : ϕ) ∨ ψ ⇔ [p = x ; p = x] : (ϕ ∨ ψ)
(hp = x ; p = xi : ϕ) ∧ ψ ⇔ hp = x ; p = xi : (ϕ ∧ ψ)
(hp = x ; p = xi : ϕ) ∨ ψ ⇔ hp = x ; p = xi : (ϕ ∨ ψ)
¬hp = x ; p = xi : ϕ ⇔ [p = x ; p = x] : ¬ϕ
¬ [p = x ; p = x] : ϕ ⇔ hp = x ; p = xi : ¬ϕ
([p = x ; p = x] ϕ) → ψ ⇔ hp = x ; p = xi (ϕ → ψ)
(hp = x ; p = xi ϕ) → ψ ⇔ [p = x ; p = x] (ϕ → ψ)
ϕ → ([p = x ; p = x] ψ) ⇔ [p = x ; p = x] (ϕ → ψ)
ϕ → (hp = x ; p = xi ψ) ⇔ hp = x ; p = xi (ϕ → ψ)
Tableau 4.1: Réécriture des règles pour la forme normale prenex dans CL, où ϕ
et ψ sont des expressions arbitraires
apparenté de <name> n’est spécifié (et donc aucun noeud de retenue ni de sélection),
tous les noeuds apparentés de <name_para> sont renvoyés dans le résultat du filtre.
ϕ ∧ (ψ ∨ ψ 0 ) ⇔ (ϕ ∧ ψ) ∨ (ϕ ∧ ψ 0 )
ϕ ∨ (ψ ∧ ψ 0 ) ⇔ (ϕ ∨ ψ) ∧ (ϕ ∨ ψ 0 )
¬(ϕ ∨ ψ) ⇔ ¬ϕ ∧ ¬ψ
¬(ϕ ∧ ψ) ⇔ ¬ϕ ∨ ¬ψ
¬¬ϕ ⇔ ϕ
Tableau 4.2: Réécriture des règles pour la forme normale disjonctive dans CL, où
ϕ, ψ et ψ 0 sont des expressions arbitraires.
130
ha = x1 i [b = x2 ] ha = x1 ; c = x3 i
[a = x1 , c = x3 ; d = x4 ] hb = x2 ; e = x5 i
x1 = x2 ∧ x3 > x 1 ∧ x4 = x3 ∧ x5 > x 2
Pour cette formule, le filtrage de sous-arbres de base correspond dans la figure 2.13
au seul envoi des noeuds inclus dans la zone en pointillés de l’arbre. Il est possible,
cependant, de filtrer encore plus la quantité de données devant être envoyée au validateur
centralisé en exécutant une meilleure analyse plus fine des valeurs réelles qui pourraient
demander à être comparées avec d’autres. Cette méthode est présenté ci-dessous.
Où tous les quantificateurs sont présents au début de la formule, suivis par une expression
de la forme ϕ1 ∨ ϕ2 ∨ · · · ∨ ϕn . Chaque ϕi est lui-même un terme de la forme e1 ∧ e2 ∧
· · · ∧ em , où ei est une expression de la forme xi ? ij pour un certain opérateur binaire ?.
Par les règles du Tableau 4.1, cette expression peut alors se réécrire comme suit :
(4.1)
2) Identifier des chaînes de dépendances entre variables : la deuxième étape doit identifier
les dépendances entre les variables de l’expression qui peuvent être évaluées localement.
Ceci est fait en analysant premièrement la partie quantifiée de l’expression et en extrayant
toutes les chaînes maximales de quantificateurs Q1 Q2 . . . Qn tel que Qi+1 prolonge le
chemin d’accès défini dans Qi par un segment. Ces quantificateurs n’ont pas besoin de
se suivre directement dans la formule originale, cependant ils doivent arriver dans le bon
ordre. Pour chaque chaîne, toutes les contraintes impliquant des variables apparaissant
dans la chaîne sont alors ajoutées, produisant un ensemble de formules de CL partielles
contenant toutes les contraintes locales de chaque chaîne.
132
Dans nos expressions exemples, deux chaînes peuvent être extraites, avec leurs contraintes
respectives, à savoir :
[a = x1 ] ha = x1 ; c = x3 i ha = x1 , c = x3 ; d = x4 i x3 > x 1 ∧ x4 = x3
et [b = x2 ] hb = x2 ; e = x5 i x5 > x2
Cette étape garantit une retro-compatibilité pour les dispositifs qui ne prennent pas en
charge l’évaluation locale de contraintes. Au lieu d’exécuter un filtrage complet de sa
configuration, un dispositif peut choisir simplement de filtrer la configuration en gardant
133
x1 3 4 3 7 x2
x3 > x1 x5 > x2
x3 8 2 5 2 6 0 3 8 x5
x4 = x3
x4 3 1 2 6 5 6 0 6 1
Figure 4.3: 4.3 : l’arbre et-ou pour la configuration de la figure 2.13, pour les
deux chaînes de dépendance identifiées plus haut. Les arcs simples indiquent des
conjonctions, les arcs doubles indiquent des disjonctions.
seulement les chemins d’accès apparaissant dans les quantificateurs, sans évaluation des
conditions booléennes. Dans un cas extrême, le dispositif peut simplement ignorer les
expressions de la chaîne et retourner l’ensemble de sa configuration. Dans les deux cas,
exécuter un filtrage plus grossier (brute) de la configuration n’a aucun impact sur la
validité du résultat final de l’algorithme.
5) Transmettre l’arbre qui en résulte et évaluer : Dans la dernière étape, chaque dispositif
renvoie au validateur centralisé la configuration filtrée résultant de son traitement local
des expressions de chaîne. Dans les arbres de la figure 4.3, ceci correspond seulement
aux chemins d’accès, en commençant par la racine, qui n’est pas en pointillés. On peut
voir que la fraction de l’arbre qui doit effectivement être envoyée est beaucoup plus
petite qu’un simple filtrage de l’arbre basé sur les chemins d’accès apparaissant dans les
quantificateurs ; dans la première chaîne, seul les sous-arbres 3-5-5 et 4-6-6 est requis,
tandis que dans la deuxième chaîne, seul le sous-arbre 7-8 est envoyé.
Les arbres résultants sont alors fusionnés et le validateur centralisé continue à évaluer
la formule CL originale sur cette arborescence fusionnée. Le résultat final est que le
validateur centralisé exécute une évaluation normale de la propriété à vérifier, mais sur
une copie expurgée de la configuration globale ne contenant que les paramètres dont le
résultat global dépend.
134
Intuitivement, on peut voir que les valeurs de paramètre éliminées localement sur chaque
dispositif n’ont aucun impact sur le résultat global, puisqu’elles font en sorte que l’une
des conditions de l’expression soit évaluée à faux. Donc, même si de telles valeurs
ont des dépendances avec d’autres variables dans d’autres chaînes (et par conséquent
probablement dans d’autres dispositifs), elles ne peuvent pas rendre l’expression globale
vraie et peuvent par conséquent être ignorées sans aucun risque. Notez que ceci n’est
possible seulement que si l’expression originale est composée uniquement de conjonctions
de conditions atomiques, une hypothèse que nous pouvons supposer à cause de la
transformation en PNF et DNF à l’étape 1.
Comme optimisation supplémentaire, si on suppose que tous les dispositifs ont évalué les
conditions intra-chaînes, alors ces conditions peuvent être retirées de l’expression (plus
précisément, remplacées par la constante vrai) après évaluation au validateur centralisé.
Dans un tel cas, seul le sous-ensemble de l’arbre et/ou contenant des variables soumises
à des dépendances inter- chaînes doit être envoyé. Dans notre exemple, ceci correspond
seulement aux noeuds a = 3, a = 4 et b = 7.
4.4 EXPÉRIMENTATION
Afin d’évaluer la faisabilité de cette approche et mesurer son impact sur la quantité de
données de configuration à être transférées, nous avons mis en œuvre l’algorithme décrit
dans la partie 4.3.2 et l’avons testé sur des échantillons d’arbres de configuration. Les
résultats de ces expérimentations sont détaillés dans cette section.
La méthode valuate() de la formule est utilisée pour estimer les noeuds de l’arbre de
manière récursive, en parcourant le dispositif correspondant. Il est important de dire
que seules les valeurs strictement nécessaires à la vérification de la formule sont extraites
du dispositif. S’il reste des noeuds sans valeur ni enfant, ils sont éliminés de l’arbre de
la formule, afin de minimiser les demandes en temps et en espace. Les noeuds essentiels
sont ceux dont les noms sont mentionnés dans la formule et particulièrement dans les
conditions de cette formule (voir l’exemple complet ci-dessous).
La méthode compute() est utilisée pour évaluer les noeuds selon leur nature : NodeAnd
2. https://github.com/sylvainhalle/MetaConfig
136
(pour tous : chaque enfant doit répondre vrai), NodeOr (existe : un enfant répondant
vrai est suffisant), Node (neutre, utilisé pour les feuilles de l’arbre : seule la condition de
ce noeud doit répondre vrai) ; les conditions attachées à ces noeuds sont aussi calculées.
Les noeuds dont les conditions sont fausses sont supprimés. Par conséquent, ceci est aussi
une fonction récursive dont le résultat est un booléen. S’il y a interdépendances entre
des noeuds ou entre des dispositifs éloignés, le résultat est un arbre qui contient toutes
les valeurs acceptées des termes interdépendants. Dans ce cas, le Central Validation
récupère une copie de tous les arbres de formule logique et analyse les interdépendances
s’il y en a.
La mise en œuvre d’Alias est utilisée pour assigner une référence à un noeud. La Condi-
tion est représentée comme un lien entre 2 AbstractTerms et un opérateur. Ceux-ci
peuvent être des AtomicAliasTerm (valeur assignée à un noeud via un Alias), Atomic-
ConstantTerm (une valeur constante) ou une autre condition simple (une structure
récursive).
4.4.2 RÉSULTATS
Nous avons effectué plusieurs tests de l’algorithme tel que décrit ci-dessous. Le dispositif
utilisé pour le test est un arbre de configuration fictif avec des valeurs simples, semblables
137
Figure 4.4: Diagramme de classe pour la mise en œuvre d’une évaluation sélective
à celui de la figure 2.13. La première formule CL testée sur cette configuration est :
[d = x] [d = x ; a = y] y ≤ 0
Le calcul de cette formule doit retourner vrai pour un dispositif donné. Cette formule est
stockée sous forme d’arbre en mémoire et envoyée au dispositif. Il contient une référence
à une commande d et au paramètre a dans le fichier Meta-CLI d’un dispositif donné. La
condition logique y ≤ 0 est attachée au paramètre a du noeud.
[d = x] [d = x ; a = y] [d = x ; b = z] y < z
hd = xi hd = x ; a = yi hd = x ; b = zi z = 3 ∧ y = 0
hd = xi hd = x ; a = yi [e = w] [e = w ; c = z] y = −1 ∧ z = 3
Nous avons aussi créé plusieurs fichiers de configuration de dispositif tel que détaillé
ci-dessous. Des ensembles de fichiers contiennent de 1 à 10 fichiers avec 5 à 500 nœuds
générés aléatoirement. Pour chaque formule de CL et chaque configuration, nous avons
exécuté l’évaluation de la configuration en utilisant tant l’approche d’évaluation sélective
(simplifiée) décrite dans la partie précédente, que l’approche « totale »qui requiert le
téléchargement de la configuration complète de chaque dispositif avant le début du
calcul. Dans chaque cas, nous avons mesuré la quantité de données requises pour être
envoyé au validateur centralisé pour le calcule du résultat.
C1 C2 C3
Nombre de dispositif 2 5 10
Nombre de nœuds par dispositif 5 100 500
Les résultats que nous avons obtenus sont présentés dans le Tableau 4.3. Dans les deux
scénarios, nous avons compté comme une seule unité de bande passante chaque noeud
139
d’arbre transmis par un dispositif au validateur centralisé. Nous pouvons voir que la
quantité de données échangées dans l’approche sélective est beaucoup plus faible que dans
l’approche totale, parfois la différence s’évalue en facteur de 100. Une exception est la
configuration C1, dont la petite taille, combinée avec la surcharge de rassemblement des
chaînes de dépendance vers et en provenance des dispositifs, entraîne une consommation
de la bande passante légèrement plus élevée pour l’approche sélective. Cependant, on
peut voir que l’approche sélective est très efficace aussitôt que le nombre de dispositifs
et la taille des configurations atteignent un seuil minimal.
CONCLUSION GÉNÉRALE
De nos jours les réseaux informatiques ont une grande influence sur le niveau et la
qualité de vie de la population mondiale et plus précisément sur celle des canadiens.
Compte tenu de la géographie du Canada, les réseaux informatiques constituent une
sorte d’autoroute, qui devient ainsi une partie essentielle de l’infrastructure nationale,
permettant la création de richesses et le maintien de notre niveau de vie. Cette situation
ne pourra perdurer que si les entreprises informatiques continuent d’accentuer leurs
recherches en développement.
Au terme de nos travaux, nous avons pu démontrer que les formalismes comme la
logique de configuration est essentiel pour la validation des configurations réseaux avant
leur déploiement. L’intégration de CL dans l’outil de configuration ValidMaker montre
qu’une logique suivant la structure hiérarchique familière aux ingénieurs réseaux offre
un cadre naturel et efficace pour exprimer et vérifier les propriétés de configuration du
réseau. Les résultats expérimentaux montrent que cette approche est facile à aborder
en pratique. La fonctionnalité d’exploration du contre-exemple interactif permet aux
ingénieurs réseaux d’utiliser efficacement la configuration logique et de résolution des
problèmes avant le déploiement sur un réseau. Sur la base des résultats prometteurs
142
obtenus sur des cas d’utilisation initiaux, des extensions sur l’outil sont en cours et
prendront en compte la nature décentralisée des informations de configuration et la
validation des arbres de configuration incomplets.
Nous avons aussi pu démontrer, comment un modèle de données générique peut ac-
cueillir des informations de configuration pour des dispositifs réseaux sans dépendre
des spécifications du fabricant. Le mappage des instances de paramètres concrètes aux
noeuds génériques sur une structure arborescente permet de recréer la commande ou la
séquence de commandes nécessaire pour extraire la valeur du paramètre sur un dispositif
donné. Avec le temps, une telle approche générique devrait réduire le nombre de diffi-
cultés rencontrées dans le domaine de l’interopérabilité et dans la gestion des réseaux
hétérogènes en réduisant les écarts entre la syntaxe de ligne de commande et la structure
des dispositifs divers. Nous avons pu démontrer que très peu de solutions offrent des
capacités de vérification de configurations selon des règles définies par l’utilisateur et
que ceux qui le font supposent un accès arbitraire à une copie locale de la configuration
complète du réseau. Ceci, à son tour, provoque une consommation élevée de la bande
passante, puisque la configuration du réseau entier doit être déposée à un emplacement
central chaque fois qu’un contrôle de justesse (exactitude) doit être effectué. Nous avons
donc présenté une solution stratégique de traitement basée sur le concept d’évaluation
sélective, qui essaye de récupérer le moins d’informations possible de chaque dispositif
pour un traitement centralisé. Cette stratégie est basée sur le fait que les contraintes de
configuration peuvent être exprimées formellement dans un langage appelé Configuration
Logic et que les expressions de CL peuvent être analysées pour concevoir des règles de
filtrage à appliquer sur chaque dispositif. Les premiers résultats empiriques ont montré
que cette technique offre la possibilité de réduire considérablement la quantité de données
à récupérer de chaque dispositif, tout en préservant toujours les mêmes garanties sur la
143
Notre travail se prête à plusieurs extensions et optimisations. Par exemple, une plus
grande élimination des arbres logiques et/ou produits par chaque dispositif pourrait
être calculée localement en croisant plusieurs arbres et/ou qui partagent des variables
quantifiées, aboutissant à une économie accrue de la bande passante. L’identification
des paramètres de configuration qui sont pertinents pour le résultat Booléen d’une
règle pourrait aussi être utilisée pour créer des alarmes qui seraient déclenchées à
chaque fois qu’un paramètre présent dans un arbre et/ou pré-calculé changerait de
valeur. L’interrogation des valeurs de configuration des différents périphériques revient
simplement à indiquer ou à pointer le paramètre approprié dans cette structure.
Somme toute, cette thèse a constitué une partie importante dans la réalisation d’un
outil de gestion automatique des configurations réseau pouvant être utilisé en entreprise.
ANNEXES
1
Propriétés de déploiement
Propriété Cfengine3 Pantin BMC Chef Générateur Microsoft Server CA Réseau et Bcfg2 LCFG HP Server IBM Tivoli
BladeLogic Config Center Systèmes de Automation System
Server Netomata Configuration Management Automation for
Automation Manager Multiplatforms
Suite
Évolutivité > 10000 1000 à > 10000 inconnu inconnu inconnu inconnu <1000 1000 à inconnu inconnu
10000 10000
Workflow Coordination Coordination Coordination Soutien aux Soutien aux Coordination Coordination des
des des des politiques (règles) politiques (règles) des changements
changements changements changements organisationnelles organisationnelles changements distribués
distribués distribués distribués distribués
Architecture de déploiement
Agent de Gestion Gestion Gestion Gestion Gestion Gestion Gestion Gestion Gestion Gestion Gestion centralisée
traduction fortement centralisée faiblement centralisée centralisée faiblement faiblement centralisée centralisée centralisée
distribués distribués distribuées distribuées
Mécanisme Pull, Push Pull, Push push Pull, Push aucun Pull, Push push pull pull Push push
de
distribution
Plate-forme BSD, AIX, BSD, AIX, AIX, HP-UX, BSD, Equipements Windows AIX, HP-UX, BSD, AIX, Linux AIX, HP-UX, AIX, Linux, Solaris,
supportée HP-UX, HP-UX, Linux, Linux, Mac réseaux Linux, Mac OS X, Linux, Mac Linux, Windows
Linux, Mac Linux, Mac équipements OS X, équipements OS X, Équipements
OS X, OS X, Solaris réseaux, Solaris, réseaux, Solaris, Solaris réseaux,
Solaris, Solaris, Windows Windows Solaris,
Windows Windows Windows
2
Spécification des propriétés de gestion
Propriété Cfengine3 Pantin BMC Chef Générateu Microsoft CA Réseau Bcfg2 LCFG HP Server IBM Tivoli
BladeLogic r Config Server et Systèmes Automation System
Server Netomata Center de Automation
Automation Configurati Managemen for
Suite on Manager t Multiplatform
s
Convivialité ou Facilité d'utilisation
Facilité moyen moyen facile Pas facile Pas facile facile facile Pas facile moyen facile facile
d'utilisation
Prise en mode de mode de Intégre les mode de mode de
charge des simulation simulation, essaie de simulation simulation
tests de d'intégration test
spécifications et de test
d’essai
Suivi de surveillance interaction surveillance interaction surveillance surveillance surveillance surveillance surveillance surveillance
l'infrastructur intégrée avec la intégrée avec la intégrée intégrée intégrée intégrée, intégrée intégrée
e surveillance surveillanc l'interaction
externe e externe avec la
surveillance
externe
Gestion des référentiel référentiel référentiel référentiel référentiel référentiel référentiel référentiel référentiel référentiel
versions externe externe externe externe, externe intégré intégré externe externe externe
référentiel
intégré
Documentati documentation la documentatio la documentat documentatio documentatio d documentation
on des structurée documentatio n à usage documentat ion à usage n à usage n à usage documentation à usage libre
spécificatio n est libre ion est libre libre libre à usage libre
ns structurée et structurée
à usage libre et à usage
libre
L'intégration caractéristique bases de bases de bases de bases de caractéristiqu caractéristiqu caractéristiqu caractéristique
avec s d'exécution données données données données es es es s d'exécution
l'environne externes et externes externes, externes, les d'exécution d'exécution d'exécution
ment les les caractéristiqu
caractéristiqu caractéristi es
es ques d'exécution
d'exécution d'exécution
Contrôle basic basic Hiérarchique basic Hiérarchique Hiérarchique basic basic Hiérarchique Hiérarchique
d'accès
3
Soutenir
Propriété Cfengine3 Pantin BMC Chef Générateur Microsoft CA Réseau Bcfg2 LCFG HP Server IBM Tivoli
BladeLogic Config Server et Automation System
Server Netomata Center Systèmes Automation
Automation Configurati de for
Suite on Manager Manageme Multiplatfor
nt ms
documentati Documentati Documentati Documentati Référence et Référence et Documentati Documentati Documentati Documentati
on on des on des on des Tutoriel Tutoriel on des on des on des on des
disponible processus, processus, processus, processus, processus, processus, processus,
-livre de -livre de -livre de -livre de -livre de -livre de -livre de
référence, - référence, - référence, - référence, - référence, - référence, - référence, -
Tutoriel Tutoriel Tutoriel Tutoriel Tutoriel Tutoriel Tutoriel
Support Formation, le Formation, le Formation, le Formation, le le Formation, le Formation, le Formation, le Formation, le
commercial développem développem développem développem développem développem développem développem développeme
ent soutenu ent soutenu ent soutenu ent soutenu ent soutenu ent soutenu ent soutenu ent soutenu nt soutenu
par une par une par une par une par une par une par une par une par une
entreprise, il entreprise, il entreprise, il entreprise. entreprise entreprise, il entreprise, il entreprise, il entreprise, il
y a aussi le y a aussi le y a aussi le y a aussi le y a aussi le y a aussi le y a aussi le
support en support en support en support en support en support en support en
ligne ligne ligne ligne ligne ligne ligne
Communaut 5 5 1 4 1 4 3 2 1 5
é
Maturité 5 3 5 2 1 3 5 4 5 5 4
4
150
2000. DSP0111 Common information model (CIM) core model, version 2.4.
Aitken, P., B. Claise, et G. Muenz. 2012. « Configuration data model for the IP flow
information (RFC 6728 ».
Anderson, P. 2008. LCFG : A Practical Tool for System Configuration. Usenix Associa-
tion.
Arundel, J. 2010. Puppet tutorial for Linux : Powering up with Puppet. http://
bitfieldconsulting.com/puppet-tutorial.
Bjorklund, M. 2010. « Rfc 6020 : Yang - a data modeling language for the network
configuration protocol (netconf) », Internet Engineering Task Force (IETF).
Bono, V. J. 1997. « 7007 explanation and apology », North American Network Operators
Group.
Bray, T., D. Hollander, A. Layman, et R. Tobin. 2001. Namespaces in XML 1.0, W3C
recommendation.
——–. 2002. « Two dimensional time-series for anomaly detection and regulation in
adaptive systems ». In Proceedings of the 13th IFIP/IEEE International Workshop
on Distributed Systems : Operations and Management : Management Technologies for
E-Commerce and E-Business Applications. Coll. « DSOM ’02 », p. 169–180, London,
UK, UK. Springer-Verlag.
Bush, R. et T. Griffin. 2003. « Integrity for virtual private routed networks », INFOCOM,
p. 293–298.
Castillo, R. 2006. « Ziptie network inventory framework : Enabling the next era of
network management tools », ACM SIGCOMM, p. 10.
national COnference. Coll. « Co-NEXT ’10 », p. 6 :1–6 :12, New York, NY, USA.
ACM.
Clarke, E. M., O. Grumberg, et D. A. Peled. 2000. Model checking. The MIT Press ; 1
edition (Dec 20 1999).
Clarke, J. 2012. « Gestion de configuration : Une best practice reconnue mais difficile à
mettre en oeuvre », Normation. http://www.solutionslinux.fr/animation_87_
168_2466_p.html?cid=1382.
Colville, R. J. et G. Spafford. 2010a. « Configuration management for virtual and cloud in-
frastructures », Gartner. http://www.rbiassets.com/getfile.ashx/42112626510.
——–. 2010b. « Top seven considerations for configuration management for virtual and
cloud infrastructures », Gartner. http://www.gartner.com/id=1458131.
157
——–. 2012. Alloy analyzer 4 tutorial session 2 : Language and analysis. http:
//alloy.mit.edu/alloy/tutorials/day-course/s2_language.pdf.
DeRose, S., E. Maler, et D. Orchard. 2001. XML linking language (XLink) version 1.0,
W3C recommendation.
Henderson, P., J. H, et M. Jr. 1976. « A lazy evaluator ». In Proceedings of the 3rd ACM
SIGACT-SIGPLAN Symposium on Principles on Programming Languages, p. 95–103.
ACM.
——–. 2012. Alloy : a language and tool for relational models. http://alloy.mit.edu/
alloy/faq.html.
Journal du Net. 2012. « La panne de gmail due à une "mauvaise configuration" », Journal
du net.
Juniper Networks. 2008. « What’s behind network downtime ? », White Paper, p. 3–10.
Le, F., S. Lee, T. Wong, H. S. Kim, et D. Newcomb. 2006. « Minerals : Using data
mining to detect router misconfigurations », ACM SIGCOMM, no. CMU-CyLab-06-
008, p. 293–298.
Metz, C. 2011. The chef, the puppet, and the sexy it admin. http://www.wired.com/
wiredenterprise/2011/10/chef_and_puppet/.
Narain, S. 2005. « Network configuration management via model finding », LISA 2005,
p. 155–168.
Opscode. 2008. Opscode chef gives your it infrastructure the speed, flexibility and
efficiency you need to compete in the digital economy. http ://www.opscode.com/chef/.
Rosen, E. C. et Y. Rekhter. 1999. « BGP/MPLS VPNs (RFC 2547) », RFC 2547, p. 25.
Schaefer, M. 2003. « Courte information sur le systeme unix et les reseaux teléinforma-
tiques », p. 69.
Shafer, P. 2011. « An architecture for network management using netconf and yang
(RFC 6244) ».
Zamboni, D. 2012. « Automated system administration for sites of any size. learning
cfengine 3 », O’Reilly Media, p. 194.
Zeller, A. et G. Snelting. 1997. « Unified versioning through feature logic », ACM Trans.
Softw. Eng. Methodol., vol. 6, no. 4, p. 398–441.