Académique Documents
Professionnel Documents
Culture Documents
FRITZ Jean-Nicolas
LAMBERT Florian
LAMBERT Gaël
1. Introduction............................................................................................................. 2
1.1. Intérêt de la virtualisation ................................................................................. 2
1.2. Objectifs du projet ............................................................................................ 2
2. VirtualBox ............................................................................................................... 3
2.1. Fonctionnement global..................................................................................... 3
2.2. Commandes..................................................................................................... 3
2.2. Réseau............................................................................................................. 4
3. Installation de VirtualNet......................................................................................... 5
3.1. Modifications .................................................................................................... 5
3.3. Configuration.................................................................................................... 6
4. Création des images............................................................................................... 8
4.1. Choix des distributions utilisées ....................................................................... 8
4.2. Modification des iso de type squashfs.............................................................. 8
4.3. Modification des iso de type Posix script........................................................ 11
4.4. Scripts de démarrage..................................................................................... 14
5. Configuration des outils utilisés sur le serveur de supervision.............................. 15
5.1. Nagios2.......................................................................................................... 15
5.2. MRTG ............................................................................................................ 18
5.3. Apache........................................................................................................... 25
6. Scénario de réseau............................................................................................... 26
6.1. Trafic http ....................................................................................................... 26
6.2. Problème d’interface réseau .......................................................................... 26
7. Réseau final.......................................................................................................... 27
7.1. Test de charge ............................................................................................... 27
7.2. Schéma.......................................................................................................... 28
7.3. Fichier de topologie........................................................................................ 28
7.4. Suppléments pour le serveur de supervision ................................................. 29
8. Conclusion............................................................................................................ 31
9. Annexes................................................................................................................ 32
9.1. host-gateway_nagios2.cfg ............................................................................. 32
9.2. /etc/nagios2/conf.d/hostgroups_nagios2.cfg .................................................. 33
9.3. /etc/nagios2/conf.d/localhost_nagios2.cfg...................................................... 34
9.4. Mrtg.cfg .......................................................................................................... 35
9.5. Mrtg_serveur.cfg ............................................................................................ 40
9.6. Vie réseau.sh ................................................................................................. 42
9.7. Error_script_serveur.sh.................................................................................. 43
9.8. Error_script.sh................................................................................................ 44
9.9. error_script_modAutoCorrect.sh .................................................................... 45
9.10. error_script_serveur_modAutoCorrect.sh .................................................... 46
9.11. Feuilles d’heures .......................................................................................... 47
1. Introduction
L’objectif de notre projet était de simuler un réseau via la virtualisation en utilisant une solution
existante. Sur ce réseau, nous devions mettre en place des solutions de supervision (MRTG,
SNMP, Nagios) permettant notamment de détecter des pannes sur les différents éléments.
2.2. Commandes
Installation de VirtualBox
sudo apt-get install virtualbox
Le système répond
Virtual machine 'nom_de_machine' is created and registered.
UUID: fdde2f5c-2e96-4a33-a820-7538b6fae9f0
Settings file: '/home/…/.VirtualBox/Machines/nom_de_machine/nom_de_machine.xml'
Attribution de la mémoire vive à la machine
VBoxManage modifyvm nom_de_machine -memory "128MB"
2.2. Réseau
Virtualbox possède 3 modes de fonctionnement réseau :
o Réseau interne : les machines virtuelles sont confinées entre elles dans un réseau virtuel.
o NAT : Les machines virtuelles peuvent accéder à internet via une connexion NAT.
o Adaptateur réseau hôte : Les machines virtuelles utilisent une interface de l’ordinateur hôte
pour accéder au réseau.
Le projet Virtualnet utilise les adaptateurs réseau hôtes pour connecter les machines virtuelles au
réseau. C’est pour cette raison que nous allons voir plus précisément son fonctionnement.
10.0.X.X 10.0.X.X
192.168.0.X
Bridge Bridge
Explication : Sur notre ordinateur hôte, nous pouvons voir des machines virtuelles (réseau 10.0.X.X).
Ces machines virtuelles sont connectées sur des interfaces virtuelles appellées Tap. Les Tap sont
elles-même connectées sur un pont virtuel (bridge).
Le Bridge virtuel joue le rôle de switch et pont réseau, via ce bridge les interfaces Tap peuvent
communiquer entre elles. Mais il est possible d’y attacher aussi une interface physique de l’ordinateur
hôte (eth0). Dans le but d’atteindre un autre ordinateur physique qui possède lui aussi des machines
virtuelles.
Il est donc possible de créer un réseau de machines virtuelles reliées par un réseau physique. Cette
technique peut étre utile si nous voulons ajouter plusieurs machines virtuelles sur des ordinateurs qui
n’en supportent qu’un nombre limité.
3.1. Modifications
Lors du premier essai, nous avons constaté que le logiciel VirtualNet contenait une erreur au
lancement de la commande
virtualnet –r <Fichier_topologie>
Cette erreur empêchait le bon fonctionnement du logiciel. Nous avons donc étudié le code
source. Il s’est avéré que l’erreur apparaissait lors de la spécification d’une image iso pour les
hôtes et les routeurs.
Cette erreur était due à une taille trop petite du tableau machine_temp→machine→affichage.
case 6:
if(fscanf(network, "%s %s %s %s %s %s\n",
machine_temp->machine->nom,
machine_temp->machine->iface.mac,
machine_temp->machine->iface.ip,
machine_temp->machine->iface.mask,
machine_temp->machine->iface.def_route,
machine_temp->machine->affichage)==0)
printf("echec lecture2, indice de boucle %d\n",i);
if(strcmp(machine_temp->machine->affichage,"masquer_ecran")==0){
strcpy(machine_temp->machine->affichage,"0");
strcpy(machine_temp->machine->iso,_ISO_MACHINE);
}else{
strcpy(machine_temp->machine->iso,machine_temp->machine->affichage);
strcpy(machine_temp->machine->affichage,"1");
}
Extrait du code du fichier parser.c
Le sixième paramètre optionnel est stocké en premier lieu dans machine_temp → machine →
affichage. Une comparaison est ensuite réalisée pour déduire si ce paramètre définit
l'emplacement de l'iso où le paramètre d'affichage.
On peut ainsi constater que affichage est limité à 25 octets, ce qui est, dans certains cas, trop
petit pour indiquer l'url de l'iso.
En
char affichage[150];
Ce problème est également présent pour l'emplacement de l'image du routeur. Nous avons
donc modifié de la même manière le fichier parser.h, à la ligne 119
char affichage[150];
De plus, lors des tests du serveur de supervision, nous avons constaté que le navigateur
IceWeasel se fermait toutes les cinq minutes. Après quelques tests, nous nous sommes aperçu
que ce problème apparaissait lors du lancement de la commande mrtg par le démon cron. Il
s’est avéré que la mémoire virtuelle attribuée au serveur au lancement de VirtualNet était
insuffisante.
La solution consistait à modifier le code source de VirtualNet de façon à allouer plus de
mémoire virtuelle au serveur.
Nous avons pour cela modifié le script de lancement des machines virtuelles,
virtualnet/src/vm.sh.
Par
3.3. Configuration
Les switchs sont représentés par des interfaces TUN/TAP. Ces derniers permettent de créer
une interface réseau virtuelle.
Pour modifier une distribution Linux, nous devons commencer par organiser un répertoire de
travail. Ce répertoire contiendra des dossiers où nous placerons les fichiers de l’image iso ainsi
que son système de fichiers compressé.
mkdir iso
mkdir extract
mkdir squashfs
Ensuite nous allons monter l’image iso de la distribution que nous voulons modifier, et copier
son contenu dans le dossier extract :
Une fois l’iso copiée, nous allons extraire le système de fichier compressé afin d’y installer les
applications souhaitées :
Avant d’installer des applications dans notre distribution, nous allons préparer ce dont nous
aurons besoin pour effectuer le chroot.
o Préparation du chroot
Nous allons ensuite copier notre fichier resolv.conf pour permettre la résolution d’adresse à
l’environnement chrooter. De plus, nous allons monter les répertoires /proc et /sys permettant
d’avoir accès à Internet.
cp /etc/resolv.conf squashfs/etc/resolv.conf
mount -t proc -o bind /proc squashfs/proc
mount -t sys -o bind /sys squashfs/sys
Nous pouvons à présent utiliser chroot pour installer les paquets nécessaires. (Exemple dans la
partie 5. Configuration des outils utilisés)
o Passage en CHROOT
chroot squashfs /bin/bash
Une fois dans le chroot nous pouvons installer des paquets avec la commande suivante :
chroot:/# apt-get install ...
Avant de quitter le chroot, ne pas oublier de démonter les interfaces /proc et /sys
chroot:/# umount /sys
chroot:/# umount /proc
chroot:/# rm /etc/resolv.conf
chroot:/# exit
Il est possible de faire un backup à cette étape pour pouvoir modifier par la suite cette image
sans repartir de zéro
o Sauvegarde
mkdir squashfs.backup
mkdir extract.backup
Nous pouvons alors reconstruire notre système de fichiers compressé (en squashfs)
Une fois le système de fichiers compressé généré, nous pouvons créer notre image iso
bootable :
Modifier une image Knoppix ou Evinux de type Posix script ressemble de très près à la
modification des images de squashfs, cependant, certaines étapes importantes varient.
Comme pour la modification d’image Finnix, nous devons commencer par organiser un
répertoire de travail. Ce répertoire contiendra des dossiers où nous allons extraire les fichiers
de l’image iso.
mkdir iso
mkdir extract
mkdir squashfs
Pour extraire nos fichiers, nous allons monter notre iso puis copier son contenu dans le dossier
extract.
En tapant la commande file, on peut constater que c’est ici que réside la principale différence
entre les systèmes de fichiers compressés en squashfs, et ceux compressés en Posix script.
file KNOPPIX
KNOPPIX: POSIX shell script text executable
Nous allons extraire le système de fichier. Le principe est le même que précédemment, seule la
commande est différente.
Note : dans le système de fichier compressé, on retrouve une arborescence linux standard.
o Monter l’iso
mount -o loop cimage.iso iso
Enfin, nous allons copier le contenu de cette image en utilisant la commande rsync afin d’éviter
la duplication des liens forts.
Avant d’installer des applications dans notre distribution, nous allons préparer ce dont nous
aurons besoin pour effectuer le chroot.
o Préparation du chroot
Nous allons copier notre fichier resolv.conf pour permettre l’accès à Internet en chroot. De
plus, nous allons monter les répertoires /proc et /sys.
cp /etc/resolv.conf squashfs/etc/resolv.conf
mount -t proc -o bind /proc squashfs/proc
mount -t sys -o bind /sys squashfs/sys
Nous pouvons à présent utiliser chroot pour installer les paquets nécessaires. (Exemple dans la
partie 5. Configuration des outils utilisés)
o Passage en CHROOT
Une fois dans le chroot nous pouvons installer des paquets avec la commande suivante :
chroot:/# apt-get install ...
Avant de quitter le chroot, ne pas oublier de démonter les interfaces /proc et /sys
chroot:/# umount /sys
chroot:/# umount /proc
chroot:/# rm /etc/resolv.conf
chroot:/# exit
o Reconstruction du squashfs
mkisofs -pad -D -l -R -U squashfs | create_compressed_fs - 65536 > KNOPPIX.new
Nous allons effacer l’ancien système de fichiers compressé et le remplacer par le nouveau
Une fois le système de fichiers compressé généré, nous pouvons créer notre image iso
bootable.
A - Boot prompt
Pour enlever le choix des différents modes de boot et forcer par défaut le mode « text », il faut
modifier le fichier isolinux/isolinux.cfg contenu dans l’iso, puis régénérer l’image avec la
méthode décrite ci-dessus.
Pour cela, nous avons remplacé
DEFAULT vesamenu.c32
Par
DEFAULT text
B - Paquets installés
Nous avons installés sur les images des hôtes, du routeur et du serveur Apache un agent
SNMP. Pour cela, nous avons utilisé la méthode décrite dans le paragraphe précédent, traitant
de la modification des images de type squashfs.
Nous avons ensuite configuré les agents SNMP comme suit :
Pour rendre les agents accessibles par le réseau, il faut remplacer, dans le fichier
/etc/default/snmp la ligne :
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 127.0.0.1'
Par
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid'
Pour permettre de lire toute la MIB, dans le fichier /etc/snmp/snmpd.conf, il faut remplacer
# sec.name source community
com2sec paranoid default public
#com2sec readonly default public
Par
# sec.name source community
#com2sec paranoid default public
com2sec readonly default public
Pour vérifier si l’agent SNMP fonctionne, on peut, par exemple, utiliser la commande :
snmpwalk -c public -v1 127.0.0.1 .1.3
5.1. Nagios2
Pour commencer, il faut modifier une ligne du fichier /etc/default/apache2 sur le serveur de
supervision, afin que Apache se lance au démarrage de la machine.
# 0 = start on boot; 1 = don't start on boot
NO_START=0
Concernant la configuration de Nagios, nous allons commencer par configurer la définition des
hosts via le fichier /etc/nagios2/conf.d/host-gateway_nagios2.cfg
Nous déclarons tous les hosts ainsi que leurs parents
define host {
host_name routeur_1
alias routeur interface 0
address 10.1.0.254
use generic-host
}
define host {
define host {
host_name hote1
alias hote 1
address 10.1.0.5
use generic-host
parents switch_1
}
Chaque define host contient la définition d’une machine du réseau, le champ important pour
construire la topologie du réseau est le champ parents. Dans cet exemple nous constatons bien
que l’hote1 est relié au switch_1, qui est lui-même relié au routeur_1.
...
# A list of your web servers
define hostgroup {
hostgroup_name http-servers
alias HTTP servers
members apache
}
define hostgroup {
hostgroup_name ping-servers
alias Pingable servers
members *
}
...
Globalement nous avons ajouté les hosts au services qui leurs correspondent. Le serveur
apache pour http etc…
Nous avons aussi supprimé le service ssh car nos hosts ne le possèdent pas.
define host{
use generic-host ; Name of host template to use
host_name localhost
alias localhost
address 127.0.0.1
parents serveur
}
define service{
use generic-service ; Name of service template to use
host_name localhost
service_description Disk Space
check_command check_all_disks!20%!10%
}
...
A - Installation
L’installation de MRTG se réalise en plusieurs étapes :
Installation :
apt-get install mrtg
Pour que les graphiques de MRTG soient rafraîchit toutes les cinq minutes, il fait ajouter la ligne
suivante dans /etc/crontab
0-59/5 * * * * root env LANG=C /usr/bin/mrtg /etc/mrtg.cfg
B - Configuration
La commande cfgmaker va nous permettre de générer une configuration de base :
cfgmaker --global 'WorkDir: /var/www/mrtg' --global 'Language: french' --global 'Options[_]:
bits,growright' --ifdesc=descr public@localhost --output /etc/mrtg.cfg
La commande indexmaker permet de générer la page web contenant les graphiques MRTG.
Cette page est basée sur le fichier /etc/mrtg.cfg
indexmaker --columns=1 --sort=descr --sidebyside /etc/mrtg.cfg --
output=/var/www/mrtg/index.html
Afin que les graphiques soient affichés sur la page Web, il faut rajouter les lignes suivantes au fichier
/etc/mrtg.cfg :
#---------Apache2 hits-----------------------
Target[apache2_hits]: `/etc/mrtg/apache2 hits`
Options[apache2_hits]: perhour, nopercent, growright, noinfo, nobanner, noi
PageTop[apache2_hits]: <h1>Hits Apache2</h1>
MaxBytes[apache2_hits]: 1000000
YLegend[apache2_hits]: hits/heure
ShortLegend[apache2_hits]: par heure
LegendO[apache2_hits]: Hits:
Legend2[apache2_hits]: Hits horaires
Legend4[apache2_hits]: Hits Horaires max
Title[apache2_hits]: Hits horaires du serveur Apache
WithPeak[apache2_hits]: wmy
#------------End Apache2 Hits------------------
#---------Apache2 Traffic-----------------------
Target[apache2_traffic]: `/etc/mrtg/apache2 bytes`
Options[apache2_traffic]: nopercent, growright, noinfo, nobanner, noi
PageTop[apache2_traffic]: <h1>Traffic Apache</h1>
MaxBytes[apache2_traffic]:16000
AbsMax[apache2_traffic]:20000
YLegend[apache2_traffic]: octets/s
ShortLegend[apache2_traffic]: o/s
LegendO[apache2_traffic]: Traffic Apache:
Legend2[apache2_traffic]: Traffic Apache
Title[apache2_traffic]: Traffic du serveur Apache
WithPeak[apache2_traffic]: wmy
Legend4[apache2_traffic]: Traffic max Apache
#------------End Apache2 Traffic------------------
Pour ajouter un graphique permettant le suivi du trafic des interfaces du routeur, il suffit de
rajouter, à la fin du fichier /etc/mrtg.cfg, les lignes suivantes.
Target[10.1.0.254_eth0]: 2:public@10.1.0.254:
SetEnv[10.1.0.254_eth0]: MRTG_INT_IP="10.1.0.254" MRTG_INT_DESCR="eth0"
MaxBytes[10.1.0.254_eth0]: 1250000
Title[10.1.0.254_eth0]: eth0 -- routeur1
PageTop[10.1.0.254_eth0]: <h1>eth0 -- routeur1</h1>
<div id="sysdetails">
<table>
<tr>
<td>System:</td>
<td>routeur in Unknown (configure
/etc/snmp/snmpd.conf)</td>
</tr>
<tr>
<td>Maintainer:</td>
<td>Root <root@localhost> (configure
/etc/snmp/snmpd.conf)</td>
</tr>
<tr>
<td>Description:</td>
<td>eth0 </td>
</tr>
<tr>
<td>ifType:</td>
<td>ethernetCsmacd (6)</td>
</tr>
<tr>
<td>ifName:</td>
<td>eth0</td>
</tr>
<tr>
<td>Max Speed:</td>
<td>100.0 Mbits/s</td>
</tr>
<tr>
<td>Ip:</td>
<td>10.1.0.254 (routeur1)</td>
</tr>
</table>
</div>
/serveur
Serveur
10.3.0.5
/mrtg
Apache
10.3.0.6
Switch 3
10.3.0.1
.254
.254 .254
Switch 1
10.1.0.1 Switch 2
10.2.0.1
Routeur
Hote 2
Hote 1 10.2.0.5
10.1.0.5
Ce schéma représente une vision globale du réseau ainsi que les différents points surveillés par mrtg
qui est intégré sur le serveur de supervision réseau.
Chaque Correspond aux statistiques relevées par snmp (trafique réseau …) puis affichées sous forme de
graphiques par mrtg.
Notre serveur Apache se base sur l’image que nous avons générée pour les hôtes Finnix.
Il faut installer le package Apache2, avec la procédure décrite dans la partie précédente.
Il faut ensuite ajouter les lignes suivantes dans le fichier /etc/apache2/apache2.conf, qui
permettront d’accéder aux statistiques du serveur apache par tous les hosts et le serveur :
<Location /server-status>
SetHandler server-status
Order deny,allow
#Deny from all
Allow from all
</Location>
ExtendedStatus On
Nous avons ensuite créé quelques pages Web dans /var/www sur le thème de notre projet.
Ce site sera utilisé pour simuler un trafic sur le réseau.
Index :
Virtualnet :
Le trafic réseau est simulé grâce au script vie_reseau.sh présent sur tous les clients.
Ce script est lancé au démarrage de la machine et exécute diverses requêtes à destination du
serveur où d'autres clients.
Chaque requête est exécutée immédiatement durant l'exécution du script.
Celui-ci se relancera toutes les minutes, via l'utilisation de la commande at.
Un fichier de log (/tmp/log_vie) contient les numéros des requêtes que le client a envoyées.
Le script de vie du réseau suit la description d’algorithme suivante :
o choix éventuel de l'ip du client à tester ;
o sélection aléatoire de la requête à exécuter ;
o exécution de la requête ;
o génération de la durée avant ré exécution du script ;
o programmation de la ré exécution du script.
Tout comme pour la simulation d'un trafic réseau, les erreurs sont provoquées par le script
error_script.sh qui est exécuté lors du démarrage d'un client. Ce script choisit un type d'erreur
et programme son apparition pour entre 5 à 10 minutes après le choix de celle ci. Le script en
lui-même sera ré exécuté 1 à 20 minutes après la fin de sa dernière exécution, si cela est
possible, pour provoquer de nouvelles erreurs.
Il existe quatre versions de ce script, l'une error_script.sh étant destinée aux machines client
et une autre, error_script_serveur.sh spécifiquement créé pour le serveur web du réseau.
Les deux versions sont modifiées pour auto-corriger la plupart des erreurs au bout d'un certain
temps (5 ou 10 minutes), le script pour client est error_script_modAutoCorrect.sh et celui
dédié au serveur, error_script_serveur_modAutoCorrect.sh.
Un fichier de log est créé durant l'exécution du script à l'emplacement suivant: /tmp/log Il
contient les numéros des erreurs créées.
7. Réseau final
7.1. Test de charge
Nous avons réalisé un test de charge, afin de déterminer par la suite un fichier de topologie
optimal.
Notre idée de base était d’avoir 10 machines, 1 routeur, 4 switchs, un serveur apache et un
serveur graphique de supervision. Cette configuration nous aurait permis d’obtenir des résultats
très complets et précis.
Nous avons rapidement réalisé qu’au vu des performances de l’ordinateur qui nous était fourni,
cet objectif ne pourrait pas être atteint.
Nous sommes donc parti sur un système dégressif, en réduisant progressivement le nombre de
machines.
Au final, nous sommes arrivés à un fichier minimaliste, mais nous permettant tout de même des
résultats très intéressants.
Notre fichier final comporte :
o deux hôtes ;
o un routeur ;
o trois switchs ;
o un serveur Apache ;
o un serveur graphique de supervision.
#--------------------------------
#Fichier de Topologie d'exemple
#
#--------------------------------
# serveur
# |
# SSS
# apache--SSS
# |
# H1--SSS-----R----SSS--H2
# SSS SSS
#
#-------------------------
#Adresse du réseau et du masque
10.0.0.0 255.0.0.0
#
#--------------------------------------------------------------------
Nous avons créé une page d’index sur le serveur de supervision permettant d’accéder
facilement aux pages de Nagios, à celles de MRTG pour les clients, et à celle de MRTG pour le
serveur Apache.
Pour cela, dans le fichier /var/www/index.php, nous avons mis les lignes suivantes :
</table>
</div>
Aperçu du resultat :
Pour finir, nous avons enlevé le boot prompt en modifiant, au moment de la création de l’image,
dans le fichier /extract/boot/isolinux.cfg, la valeur suivante :
TIMEOUT 1
8. Conclusion
Ce projet tutoré nous a permis d’approfondir nos connaissances en virtualisation. Il nous a
également permis de mettre en pratique et de compléter nos connaissances en supervision.
Nous avons également appris à modifier une distribution Linux ainsi que les contraintes que
cela apporte.
Pour conclure, nous pouvons dire que ce que nous avons mis en œuvre peut s’avérer pratique
pour faire des démonstrations d’un réseau « réel ». Par contre l’inconvénient de l’utilisation de
live CD restreint son utilisation car avec cette méthode il n’est pas possible de sauvegarder son
travail puis, relancer les machines virtuelles comme elles étaient à leur dernier état. De plus, la
modification de ces live CD demande un minimum de compétences et rend plus difficile
certaines installations et configurations de logiciels.
Nous pouvons tout de même reconnaître que ce projet nous a réellement intéressé car, il nous
a fait travailler sur plusieurs domaines différents (réseau, programmation, supervision, …). De
plus, une fois pris en mains, il est possible pour toute personne de réaliser son propre scénario
réseau. Et ainsi perfectionner ses compétences dans ce domaine sans avoir besoin d’une
multitude d’ordinateurs à disposition.
Nous tenons à remercier M. NATAF, qui nous a accompagné et aiguillé tout au long de ce
projet.
9.1. host-gateway_nagios2.cfg
define host {
host_name apache
alias Apacher serveur
address 10.3.0.6
use generic-host
parents switch_3
}
define host {
host_name hote1
alias hote 1
address 10.1.0.5
use generic-host
parents switch_1
}
define host {
host_name hoste2
alias hoste 2
address 10.2.0.5
use generic-host
parents switch_2
}
define host {
host_name routeur_1
alias routeur interface 0
address 10.1.0.254
use generic-host
}
define host {
host_name routeur_2
alias routeur interface 1
address 10.2.0.254
use generic-host
}
define host {
host_name routeur_3
alias routeur interface 2
address 10.3.0.254
use generic-host
}
define host {
host_name switch_3
alias switch 3
address 10.3.0.1
use generic-host
parents routeur_3
}
define host {
host_name switch_1
alias switch 1
address 10.1.0.1
use generic-host
parents routeur_1
}
9.2. /etc/nagios2/conf.d/hostgroups_nagios2.cfg
9.3. /etc/nagios2/conf.d/localhost_nagios2.cfg
define host{
use generic-host ; Name of host template to use
host_name localhost
alias localhost
address 127.0.0.1
parents serveur
}
define service{
use generic-service ; Name of service template to use
host_name localhost
service_description Disk Space
check_command check_all_disks!20%!10%
}
define service{
use generic-service ; Name of service template to use
host_name localhost
service_description Current Users
check_command check_users!20!50
}
define service{
use generic-service ; Name of service template to use
host_name localhost
service_description Total Processes
check_command check_procs!250!400
}
9.4. Mrtg.cfg
# Created by
# /usr/bin/cfgmaker --global 'WorkDir: /var/www/mrtg' --global 'Language: french' --global
'Options[_]: bits,growright' --ifdesc=descr public@localhost --output /etc/mrtg.cfg
# for UNIX
# WorkDir: /home/http/mrtg
# for Debian
WorkDir: /var/www/mrtg
# or for NT
# WorkDir: c:\mrtgdata
EnableIPv6: no
WorkDir: /var/www/mrtg
Language: french
Options[_]: bits,growright
Target[localhost_2]: 2:public@localhost:
SetEnv[localhost_2]: MRTG_INT_IP="10.3.0.5" MRTG_INT_DESCR="eth0"
MaxBytes[localhost_2]: 1250000
Title[localhost_2]: eth0 -- serveur
PageTop[localhost_2]: <H1>eth0 -- serveur</H1>
<div id="sysdetails">
<table>
<TR>
<TD>System:</TD>
<TD>serveur in Unknown (edit /etc/snmp/snmpd.conf)</TD>
</TR>
<TR>
<TD>Maintainer:</TD>
<TD>
Root <root@localhost> (configure /etc/snmp/snmp.conf)
</TD>
</TR>
<TR>
<TD>Description:</TD>
<TD>eth0 </TD>
</TR>
<TR>
<TD>ifType:</TD>
<TD>ethernetCsmacd (6)</TD>
Target[10.1.0.5_eth0]: 2:public@10.1.0.5:
SetEnv[10.1.0.5_eth0]: MRTG_INT_IP="10.1.0.5" MRTG_INT_DESCR="eth0"
MaxBytes[10.1.0.5_eth0]: 1250000
Title[10.1.0.5_eth0]: eth0 -- host1
PageTop[10.1.0.5_eth0]: <h1>eth0 -- host1</h1>
<div id="sysdetails">
<table>
<tr>
<td>System:</td>
<td>apache in Unknown (configure /etc/snmp/snmpd.conf)</td>
</tr>
<tr>
<td>Maintainer:</td>
<td>Root <root@localhost> (configure
/etc/snmp/snmpd.conf)</td>
</tr>
<tr>
<td>Description:</td>
<td>eth0 </td>
</tr>
<tr>
<td>ifType:</td>
<td>ethernetCsmacd (6)</td>
</tr>
<tr>
<td>ifName:</td>
<td>eth0</td>
</tr>
<tr>
<td>Max Speed:</td>
<td>100.0 Mbits/s</td>
</tr>
<tr>
<td>Ip:</td>
<td>10.1.0.5 (host1)</td>
</tr>
</table>
</div>
Target[10.2.0.5_eth0]: 2:public@10.2.0.5:
SetEnv[10.2.0.5_eth0]: MRTG_INT_IP="10.2.0.5" MRTG_INT_DESCR="eth0"
MaxBytes[10.2.0.5_eth0]: 1250000
Title[10.2.0.5_eth0]: eth0 -- host2
PageTop[10.2.0.5_eth0]: <h1>eth0 -- host2</h1>
<div id="sysdetails">
<table>
Target[10.3.0.6_eth0]: 2:public@10.3.0.6:
SetEnv[10.3.0.6_eth0]: MRTG_INT_IP="10.3.0.6" MRTG_INT_DESCR="eth0"
MaxBytes[10.3.0.6_eth0]: 1250000
Title[10.3.0.6_eth0]: eth0 -- apache
PageTop[10.3.0.6_eth0]: <h1>eth0 -- apache</h1>
<div id="sysdetails">
<table>
<tr>
<td>System:</td>
<td>apache in Unknown (configure /etc/snmp/snmpd.conf)</td>
</tr>
<tr>
<td>Maintainer:</td>
<td>
Root <root@localhost> (configure /etc/snmp/snmpd.conf)
</td>
</tr>
<tr>
<td>Description:</td>
<td>eth0 </td>
</tr>
<tr>
<td>ifType:</td>
<td>ethernetCsmacd (6)</td>
</tr>
<tr>
<td>ifName:</td>
<td>eth0</td>
</tr>
<tr>
#---------Apache2 hits-----------------------
Target[apache2_hits]: `/etc/mrtg/apache2 hits`
Options[apache2_hits]: perhour, nopercent, growright, noinfo, nobanner, noi
PageTop[apache2_hits]: <h1>Hits Apache2</h1>
MaxBytes[apache2_hits]: 1000000
YLegend[apache2_hits]: hits/heure
ShortLegend[apache2_hits]: par heure
LegendO[apache2_hits]: Hits:
Legend2[apache2_hits]: Hits horaires
Legend4[apache2_hits]: Hits Horaires max
Title[apache2_hits]: Hits horaires du serveur Apache
WithPeak[apache2_hits]: wmy
#------------End Apache2 Hits------------------
#---------Apache2 Traffic-----------------------
Target[apache2_traffic]: `/etc/mrtg/apache2 bytes`
Options[apache2_traffic]: nopercent, growright, noinfo, nobanner, noi
PageTop[apache2_traffic]: <h1>Traffic Apache</h1>
MaxBytes[apache2_traffic]:16000
AbsMax[apache2_traffic]:20000
YLegend[apache2_traffic]: octets/s
ShortLegend[apache2_traffic]: o/s
LegendO[apache2_traffic]: Traffic Apache:
Legend2[apache2_traffic]: Traffic Apache
Title[apache2_traffic]: Traffic du serveur Apache
WithPeak[apache2_traffic]: wmy
Legend4[apache2_traffic]: Traffic max Apache
#------------End Apache2 Traffic------------------
Target[10.1.0.254_eth0]: 2:public@10.1.0.254:
SetEnv[10.1.0.254_eth0]: MRTG_INT_IP="10.1.0.254" MRTG_INT_DESCR="eth0"
MaxBytes[10.1.0.254_eth0]: 1250000
Title[10.1.0.254_eth0]: eth0 -- routeur1
PageTop[10.1.0.254_eth0]: <h1>eth0 -- routeur1</h1>
<div id="sysdetails">
<table>
<tr>
<td>System:</td>
<td>routeur in Unknown (configure /etc/snmp/snmpd.conf)</td>
</tr>
<tr>
<td>Maintainer:</td>
<td>Root <root@localhost> (configure
/etc/snmp/snmpd.conf)</td>
</tr>
<tr>
<td>Description:</td>
<td>eth0 </td>
</tr>
<tr>
<td>ifType:</td>
<td>ethernetCsmacd (6)</td>
Target[10.2.0.254_eth1]: 3:public@10.2.0.254:
SetEnv[10.2.0.254_eth1]: MRTG_INT_IP="10.2.0.254" MRTG_INT_DESCR="eth1"
MaxBytes[10.2.0.254_eth1]: 1250000
Title[10.2.0.254_eth1]: eth1 -- routeur2
PageTop[10.2.0.254_eth1]: <h1>eth1 -- routeur2</h1>
<div id="sysdetails">
<table>
<tr>
<td>System:</td>
<td>routeur in Unknown (configure /etc/snmp/snmpd.conf)</td>
</tr>
<tr>
<td>Maintainer:</td>
<td>Root <root@localhost> (configure
/etc/snmp/snmpd.conf)</td>
</tr>
<tr>
<td>Description:</td>
<td>eth1 </td>
</tr>
<tr>
<td>ifType:</td>
<td>ethernetCsmacd (6)</td>
</tr>
<tr>
<td>ifName:</td>
<td>eth1</td>
</tr>
<tr>
<td>Max Speed:</td>
<td>100.0 Mbits/s</td>
</tr>
<tr>
<td>Ip:</td>
<td>10.2.0.254 (routeur2)</td>
</tr>
</table>
</div>
Target[10.3.0.254_eth2]: 4:public@10.3.0.254:
SetEnv[10.3.0.254_eth2]: MRTG_INT_IP="10.3.0.254" MRTG_INT_DESCR="eth2"
MaxBytes[10.3.0.254_eth2]: 1250000
Title[10.3.0.254_eth2]: eth2 -- routeur3
PageTop[10.3.0.254_eth2]: <h1>eth2 -- routeur3</h1>
<div id="sysdetails">
<table>
9.5. Mrtg_serveur.cfg
WorkDir: /var/www/serveur
Language: french
IconDir: images/
Target[serveur_charge]: `/var/www/serveur/mrtg-sys/charge.pl`
PageTop[serveur_charge]: <h1>charge moyenne de serveur x 100</h1>
Options[serveur_charge]: growright, gauge
MaxBytes[serveur_charge]: 10000
Title[serveur_charge]: charge de serveur x 100
Ylegend[serveur_charge]: charge x 100
Legend1[serveur_charge]: charge moyenne a 1 minute
Legend2[serveur_charge]: charge moyenne a 5 minutes
LegendI[serveur_charge]: 1 minute
LegendO[serveur_charge]: 5 minutes
ShortLegend[serveur_charge]: jobs
Target[serveur_proc]: `/var/www/serveur/mrtg-sys/proc.pl`
PageTop[serveur_proc]: <h1>nb de process de serveur</h1>
Options[serveur_proc]: absolute, growright, gauge
MaxBytes[serveur_proc]: 1000000
Title[serveur_proc]: process de serveur
Ylegend[serveur_proc]: nb
Legend1[serveur_proc]: nb de process
Legend2[serveur_proc]: nb de process
LegendI[serveur_proc]: nb
LegendO[serveur_proc]: nb
Target[serveur_cpu]: `/var/www/serveur/mrtg-sys/cpu.pl`
PageTop[serveur_cpu]: <h1>CPU usage de serveur en %</h1>
Options[serveur_cpu]: growright
MaxBytes[serveur_cpu]: 100000000
Title[serveur_cpu]: espace disponible de serveur en %
Ylegend[serveur_cpu]: %
Legend1[serveur_cpu]: user
Legend2[serveur_cpu]: system + nice
LegendI[serveur_cpu]: user
LegendO[serveur_cpu]: system + nice
ShortLegend[serveur_cpu]: %
Target[serveur_tcp]: `/var/www/serveur/mrtg-sys/tcp.pl`
PageTop[serveur_tcp]: <h1>Nombre de connexion TCP simu</h1>
Options[serveur_tcp]: absolute, growright, gauge
MaxBytes[serveur_tcp]: 100000000
Title[serveur_tcp]: nombre de connexion TCP simu
Ylegend[serveur_tcp]: nombre
Legend1[serveur_tcp]: total
Legend2[serveur_tcp]: ESTABLISHED
LegendI[serveur_tcp]: total
LegendO[serveur_tcp]: ESTABLISHED
ShortLegend[serveur_tcp]: nombre
Target[serveur_inter]: `/var/www/serveur/mrtg-sys/interrupt.pl`
PageTop[serveur_inter]: <h1>interrupts reseau et HD de serveur</h1>
Options[serveur_inter]: growright
MaxBytes[serveur_inter]: 1000000000000
Title[serveur_inter]: interrupts reseau et HD de serveur
Ylegend[serveur_inter]: interrupts
Legend1[serveur_inter]: reseau
Legend2[serveur_inter]: HD
LegendI[serveur_inter]: reseau
LegendO[serveur_inter]: HD
ShortLegend[serveur_inter]: interrupts
Target[serveur_mem]: `/var/www/serveur/mrtg-sys/mem.pl`
PageTop[serveur_mem]: <h1>memoire physique libre de serveur en %</h1>
Options[serveur_mem]: growright, gauge
MaxBytes[serveur_mem]: 1000000
Title[serveur_mem]: memoire physique libre de serveur en %
Ylegend[serveur_mem]: memoire
Legend1[serveur_mem]: shared/total
Legend2[serveur_mem]: mem utilise
LegendI[serveur_mem]: shared/total
LegendO[serveur_mem]: mem utilise
ShortLegend[serveur_mem]: %
Target[serveur_ctxt]: `/var/www/serveur/mrtg-sys/ctxt.pl`
PageTop[serveur_ctxt]: <h1>ctxt/processes de serveur</h1>
Options[serveur_ctxt]: growright
MaxBytes[serveur_ctxt]: 1000000000
Title[serveur_ctxt]: ctxt/processes de serveur
Ylegend[serveur_ctxt]: ctxt/processes
Legend1[serveur_ctxt]: ctxt
Legend2[serveur_ctxt]: processes
LegendI[serveur_ctxt]: ctxt
LegendO[serveur_ctxt]: processes
ShortLegend[serveur_ctxt]: nb
Target[serveur_lo]: `/var/www/serveur/mrtg-sys/lo.pl`
PageTop[serveur_lo]: <h1>bits recu/emis de serveur</h1>
Options[serveur_lo]: growright
MaxBytes[serveur_lo]: 1000000000000000000000
Title[serveur_lo]: packets recu/emis de serveur
Ylegend[serveur_lo]: packets recu/emis
Legend1[serveur_lo]: bit recu
Legend2[serveur_lo]: bit emis
LegendI[serveur_lo]: bit recu
LegendO[serveur_lo]: bit emis
ShortLegend[serveur_lo]: bits
Target[serveur_espace]: `/var/www/serveur/mrtg-sys/espace.pl`
PageTop[serveur_espace]: <h1>espace disponible sur / et /home de serveur en %</h1>
Options[serveur_espace]: absolute, growright, gauge
MaxBytes[serveur_espace]: 1000
Title[serveur_espace]: espace disponible de serveur en %
Ylegend[serveur_espace]: %
Legend1[serveur_espace]: /home
Legend2[serveur_espace]: /
LegendI[serveur_espace]: /home
LegendO[serveur_espace]: /
ShortLegend[serveur_espace]: %
#!/bin/bash
ip1="10.1.0.5"
ip2="10.2.0.5"
serveur_web="10.3.0.6"
case $rand in
1) ping -a -c 3 -b -q $ip
at now + 1 minute <<< "ping -a -c 3 -b -q "$ip
echo "on ping une machine"
;;
2) ab -n 100 $serveur_web."/index.php"
echo "larguage de ab"
;;
3) echo "data1=blabla&data2=blabla2" | lynx -dump -post_data $serveur_web/index.php
echo "data1=blabla&data2=blabla2" | lynx -dump -post_data $serveur_web/index.php
echo "envoi requête web"
;;
4) nmap -sP 10.1-3.0.5-6
echo "mapping du réseau"
;;
5) netstat $ip
echo "test d'un client"
;;
6) netstat $serveur_web
echo "test du serveur"
;;
esac
time=$(($RANDOM%20+20))
at now + time minute <<< "./vie_script.sh >> /tmp/log_vie"
9.7. Error_script_serveur.sh
#!/bin/bash
time=$(($RANDOM%19+1))
at now + $time minutes «< ”./error_script.sh » /tmp/log”
rand=$(($RANDOM%7+1))
time2=$(($RANDOM%5+5))
case $rand in
1) #changement de l'adresse IP
at now + $time2 minutes «< “ifconfig eth0 127.0.99.5”
echo “1”
;;
2) #extinction brutale de la machine sans reboot
at now + $time2 minutes «< “shutdown -h now”
echo “2”
;;
3) #extinction brutale de la machine puis reboot
at now + $time2 minutes «< “shutdown -r now”
echo “3”
;;
9.8. Error_script.sh
#!/bin/bash
rand=$(($RANDOM%6+1))
time2=$(($RANDOM%5+5))
case $rand in
1) #changement de l'adresse IP
at now + $time2 minutes <<< “ifconfig eth0 127.0.99.5”
echo “1”
;;
2) #extinction brutale du client sans reboot
at now + $time2 minutes <<< “shutdown -h now”
echo “2”
;;
3) #extinction brutale du client puis reboot
at now + $time2 minutes <<< “shutdown -r now”
echo “3”
;;
4) #down d'une carte réseau
at now + $time2 minutes <<< “ifconfig eth0 down”
echo “4”
;;
5) #interdiction de répondre au ping
at now + $time2 minutes <<< “echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all”
echo “5”
;;
6) #extinction du client snmp
9.9. error_script_modAutoCorrect.sh
#!/bin/bash
time=$(($RANDOM%19+1))
at now + $time minutes <<< "./error_script.sh >> /tmp/log"
rand=$(($RANDOM%6+1))
time2=$(($RANDOM%5+5))
case $rand in
1) #changement de l'adresse IP
at now + $time2 minutes <<< "ifconfig eth0 127.0.99.5"
echo "1"
;;
2) #extinction brutale du client sans reboot
at now + $time2 minutes <<< "shutdown -h now"
echo "2"
;;
3) #extinction brutale du client puis reboot
at now + $time2 minutes <<< "shutdown -r now"
echo "3"
;;
4) #down d'une carte réseau puis up quelques minutes plus tard
at now + $time2 minutes <<< "ifconfig eth0 down"
time3=$time2+5
at now + $time3 minutes <<< "ifconfig eth0 up"
echo "4"
;;
5) #interdiction de répondre au ping
at now + $time2 minutes <<< "echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all"
time3=$time2+5
at now + $time3 minutes <<< "echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all"
echo "5"
;;
6) #extinction du client snmp puis relance au bout de 10 mn
at now + $time2 minutes <<< "/etc/init.d/snmpd stop"
time3=$time2+10
at now + $time3 minutes <<< "/etc/init.d/snmpd stop"
echo "6"
;;
7) #changement de l'adresse de broadcast sur localhost = création d'une boucle
at now + $time2 minutes <<< "ifconfig -broadcast localhost"
9.10. error_script_serveur_modAutoCorrect.sh
#!/bin/bash
time=$(($RANDOM%19+1))
at now + $time minutes <<< "./error_script.sh >> /tmp/log"
rand=$(($RANDOM%7+1))
time2=$(($RANDOM%5+5))
case $rand in
1) #changement de l'adresse IP
at now + $time2 minutes <<< "ifconfig eth0 127.0.99.5"
echo "1"
;;
2) #extinction brutale de la machine sans reboot
at now + $time2 minutes <<< "shutdown -h now"
echo "2"
;;
3) #extinction brutale de la machine puis reboot
at now + $time2 minutes <<< "shutdown -r now"
echo "3"
;;
4) #down d'une carte réseau
at now + $time2 minutes <<< "ifconfig eth0 down"
time3=$time2+5
at now + $time3 minutes <<< "ifconfig eth0 up"
echo "4"
;;
5) #interdiction de répondre au ping
at now + $time2 minutes <<< "echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all"
time3=$time2+10
at now + $time2 minutes <<< "echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all"
echo "5"
;;
6) #extinction de snmp
at now + $time2 minutes <<< "/etc/init.d/snmpd stop"
time3=$time2+10
at now + $time3 minutes <<< "/etc/init.d/snmpd stop"
echo "6"
;;
7) #changement de l'adresse de broadcast sur localhost = création d'une boucle
at now + $time2 minutes <<< "ifconfig -broadcast localhost"
echo "7"
;;
8) #extinction d'apache
at now + $time2 minutes <<< "/etc/init.d/apache2 stop"
time3=$time2+10
BUCHER Aurélie :
Total : 63h10
Jean-Nicolas FRITZ :
Total : 54h
Total : 80h00
Gaël LAMBERT :
Total : 81h