<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Croc-Informatique.fr &#187; Projet</title>
	<atom:link href="http://www.croc-informatique.fr/category/projet/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.croc-informatique.fr</link>
	<description>Le Blog Note d'Olivier Legras</description>
	<lastBuildDate>Wed, 18 Jan 2012 16:29:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>[MISE A JOUR] Synchroniser et superviser VULTURE</title>
		<link>http://www.croc-informatique.fr/2010/07/mise-a-jour-synchroniser-et-superviser-vulture/</link>
		<comments>http://www.croc-informatique.fr/2010/07/mise-a-jour-synchroniser-et-superviser-vulture/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 14:40:40 +0000</pubDate>
		<dc:creator>Olivier Legras</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Projet]]></category>
		<category><![CDATA[Réseau]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Nagios]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[projet]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[reverse]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[supervision]]></category>
		<category><![CDATA[synchronisation]]></category>
		<category><![CDATA[Vulture]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.croc-informatique.fr/2010/07/mise-a-jour-synchroniser-et-superviser-vulture/</guid>
		<description><![CDATA[Après avoir ajouté des interfaces à mes serveurs Vulture pour prendre en charge mes certificats SSL par domaine, j’ai du mettre à jour mes scripts de synchronisation et de supervision. Pour rappel, la première version ainsi qu’une doc explicative se trouve à cette adresse : http://www.croc-informatique.fr/2009/07/synchronisation-et-monitoring-de-deux-reverse-proxy-vulture/ J’en ai profité pour remanier un peu mon code [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Après avoir ajouté des interfaces à mes serveurs Vulture pour prendre en charge mes certificats SSL par domaine, j’ai du mettre à jour mes scripts de synchronisation et de supervision. Pour rappel, la première version ainsi qu’une doc explicative se trouve à cette adresse : <a title="http://www.croc-informatique.fr/2009/07/synchronisation-et-monitoring-de-deux-reverse-proxy-vulture/" href="http://www.croc-informatique.fr/2009/07/synchronisation-et-monitoring-de-deux-reverse-proxy-vulture/">http://www.croc-informatique.fr/2009/07/synchronisation-et-monitoring-de-deux-reverse-proxy-vulture/</a></p>
<p>J’en ai profité pour remanier un peu mon code pour qu’il soit plus exploitable par tous. J’espère que ça servira à quelqu’un.</p>
<h3>Attention :</h3>
<p><span id="more-620"></span></p>
<p>J’ai transformé le script permettant la supervision de la synchronisation du shell en perl. Donc, à présent, il faut mettre dans le fichier /etc/sudoers la ligne :</p>
<blockquote><p>nagios   ALL = NOPASSWD: /usr/bin/perl /usr/lib/nagios/plugins/check_synchro_vulture.pl</p></blockquote>
<p>Au lieu de :</p>
<blockquote><p>nagios   ALL = NOPASSWD: /bin/sh /usr/local/nagios/libexec/check_synchro_vulture.sh</p></blockquote>
<p>Modifier également la commande utilisé par Nagios.</p>
<p>La supervision des sites Web hébergés a également changée. La commande s’exécute de cette manière :</p>
<blockquote><p>./check_vulture.pl -H 192.168.0.1</p></blockquote>
<p>Il vous faudra modifier les constantes dans la plupart des scripts.</p>
<p>Vous pouvez télécharger la dernière version <a href="http://crocodanser.free.fr/fichiers/synchro-vulture-072010.zip" target="_blank">ici</a></p>
<p>Mot de passe de l&#8217;archive : http://www.croc-informatique.fr</p>
<div class="shr-publisher-620"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2010%2F07%2Fmise-a-jour-synchroniser-et-superviser-vulture%2F' data-shr_title='%5BMISE+A+JOUR%5D+Synchroniser+et+superviser+VULTURE'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2010%2F07%2Fmise-a-jour-synchroniser-et-superviser-vulture%2F' data-shr_title='%5BMISE+A+JOUR%5D+Synchroniser+et+superviser+VULTURE'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.croc-informatique.fr/2010/07/mise-a-jour-synchroniser-et-superviser-vulture/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Machines Virtuelles VBOX avec GNS3</title>
		<link>http://www.croc-informatique.fr/2010/07/machines-virtuelles-vbox-avec-gns3-2/</link>
		<comments>http://www.croc-informatique.fr/2010/07/machines-virtuelles-vbox-avec-gns3-2/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 16:06:41 +0000</pubDate>
		<dc:creator>Olivier Legras</dc:creator>
				<category><![CDATA[Cisco]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Projet]]></category>
		<category><![CDATA[Réseau]]></category>
		<category><![CDATA[Dynamips]]></category>
		<category><![CDATA[GNS3]]></category>
		<category><![CDATA[interface]]></category>
		<category><![CDATA[machine virtuelle]]></category>
		<category><![CDATA[pc]]></category>
		<category><![CDATA[TAP]]></category>
		<category><![CDATA[VirtualBox]]></category>

		<guid isPermaLink="false">http://www.croc-informatique.fr/?p=589</guid>
		<description><![CDATA[Introduction J&#8217;utilise depuis quelques temps GNS3 pour effectuer quelques maquettes et réviser mes cours Cisco. Afin de maquetter un peu la sécurité ( ACL, ASA), j&#8217;ai décidé de prendre un peu de temps pour réaliser une maquette comportant des postes de travail virtuels et ainsi tester en réel l&#8217;accès aux ports voulus. Dans ce document, [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><h3>Introduction</h3>
<p>J&#8217;utilise depuis quelques temps GNS3 pour effectuer quelques maquettes et réviser mes cours Cisco. Afin de maquetter un peu la sécurité ( ACL, ASA), j&#8217;ai décidé de prendre un peu de temps pour réaliser une maquette comportant des postes de travail virtuels et ainsi tester en réel l&#8217;accès aux ports voulus.</p>
<p>Dans ce document, je montrerais seulement la manière de faire communiquer deux machines virtuelles avec un projet GNS3/Dynamips à partir d&#8217;interfaces TAP.</p>
<h3>&#160;</h3>
<h3>Schéma Cible</h3>
<p><span id="more-589"></span></p>
<p>&#160;</p>
<p>Voici ma maquette cible: Deux machines virtuelles (PC1 et PC2) appartenant à deux réseaux différents qui pourront communiquer ensemble via le routeur R0. Ce schéma sera souvent utilisé par la suite.</p>
<p style="text-align: center"><a href="http://www.croc-informatique.fr/wp-content/uploads/2010/07/clip_image002.jpg"><img class="aligncenter" title="clip_image002" border="0" alt="clip image002 thumb Machines Virtuelles VBOX avec GNS3" src="http://www.croc-informatique.fr/wp-content/uploads/2010/07/clip_image002_thumb.jpg" width="351" height="245" /></a></p>
<p style="text-align: center"><em><span style="text-decoration: underline">Schéma 1</span></em></p>
<h3>&#160;</h3>
<h3>Pré-requis :</h3>
<p>&#160;</p>
<ul>
<li>GNS3 : Simulateur Cisco ( apt-get install gns3 ) </li>
<li>VirtualBOX : Virtualisation de postes de travail –&gt; <a href="http://www.virtualbox.org/wiki/Linux_Downloads">http://www.virtualbox.org/wiki/Linux_Downloads</a> </li>
</ul>
<h3>&#160;</h3>
<h3>Mise en place des interfaces TAP :</h3>
<p>&#160;</p>
<h4>Définition d&#8217;une interface TAP :</h4>
<p>&#160;</p>
<p>Une interface TAP permet, dans notre cas, d&#8217;établir une communication entre le programme GNS3/Dynamips et les machines virtuelles de VirtualBox. Pour pouvoir créer ces interfaces, nous allons devoir installer les packages bridge-utils et uml-utilities.</p>
<p>Pour plus d&#8217;informations, vous pouvez aller consulter ce site : <a href="http://www.linux-france.org/prj/inetdoc/articles/vm/vm.network.tun-tap.html">http://www.linux-france.org/prj/inetdoc/articles/vm/vm.network.tun-tap.html</a></p>
<h4>&#160;</h4>
<h4>Installation des paquets bridge-utils et uml-utilities :</h4>
<p>&#160;</p>
<blockquote><p>sudo apt-get install bridge-utils uml-utilities</p>
</blockquote>
<p>Maintenant, nous allons pouvoir créer nos interfaces TAP. Pour mon projet, j&#8217;ai besoin de deux interfaces TAP pour différentier les communication PC1 ↔ Fa0/0 et PC2 ↔ Fa0/1 comme indiqué sur le schéma 1.</p>
<h4>&#160;</h4>
<h4>Création d&#8217;une interface TAP :</h4>
<p>&#160;</p>
<p>Voici les commandes à taper pour créer les interfaces tap0 et tap1.</p>
<p><span style="text-decoration: underline">Création de l&#8217;interface tap0 :</span></p>
<blockquote><p>sudo tunctl -t tap0</p>
<p>sudo ifconfig tap0 0.0.0.0 promisc up</p>
</blockquote>
<p><span style="text-decoration: underline">Création de l&#8217;interface tap1 :</span></p>
<blockquote><p>sudo tunctl -t tap1</p>
<p>sudo ifconfig tap1 0.0.0.0 promisc up</p>
</blockquote>
<p>Cette configuration est éphémère. Elle disparaît au reboot. Je l&#8217;utilise seulement lorsque je fais des maquettes donc ça m&#8217;arrange.</p>
<p>Voici ce que j&#8217;ai lorsque je tape la commande ifconfig :</p>
<blockquote><p>tap0 Link encap:Ethernet HWaddr 82:9b:7e:df:7d:9b</p>
<p>adr inet6: fe80::809b:7eff:fedf:7d9b/64 Scope:Lien</p>
<p>UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1</p>
<p>Packets reçus:2216 erreurs:0 :0 overruns:0 frame:0</p>
<p>TX packets:225 errors:0 dropped:174 overruns:0 carrier:0</p>
<p>collisions:0 lg file transmission:500</p>
<p>Octets reçus:175316 (175.3 KB) Octets transmis:126614 (126.6 KB)</p>
<p>tap1 Link encap:Ethernet HWaddr 02:b4:43:5f:e2:34</p>
<p>adr inet6: fe80::b4:43ff:fe5f:e234/64 Scope:Lien</p>
<p>UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1</p>
<p>Packets reçus:2237 erreurs:0 :0 overruns:0 frame:0</p>
<p>TX packets:222 errors:0 dropped:6 overruns:0 carrier:0</p>
<p>collisions:0 lg file transmission:500</p>
<p>Octets reçus:175971 (175.9 KB) Octets transmis:127908 (127.9 KB)</p>
</blockquote>
<p>Ainsi, les interfaces tap0 et tap1 sont bien reconnu comme interface par ubuntu. Nous allons maintenant pouvoir créer nos machines virtuelles.</p>
<h3>&#160;</h3>
<h3>Création des machines virtuelles PC1 et PC2 avec VirtualBox :</h3>
<h4>&#160;</h4>
<h4>OS utilisé:</h4>
<p>&#160;</p>
<p>Pour mes maquettes, j&#8217;utilise la distribution très légère Microcore Linux. La version que je vous propose de télécharger a été modifiée par les utilisateurs de GNS3 afin d&#8217;avoir quelques outils réseaux intéressant comme :</p>
<p>- netcat</p>
<p>- tcpdump</p>
<p>- iperf</p>
<h4>&#160;</h4>
<h4>Téléchargement :</h4>
<p>&#160;</p>
<p>Voici ou vous pouvez la télécharger : Microcore-linux v2.10 à cette adresse :<a href="http://www.gns3.net/download">http://www.gns3.net/download</a></p>
<h4>&#160;</h4>
<h4>Conversion img vers vdi:</h4>
<p>&#160;</p>
<p>Le fichier téléchargé est un fichier img. Il n&#8217;est pas exploitable directement par VirtualBox. Pour remédier à ce problème, nous allons devoir le convertir en suivant ces étapes :</p>
<h6>&#160;</h6>
<h6>Installer qemu :</h6>
<blockquote><p>sudo apt-get install qemu-kvm</p>
</blockquote>
<h6>Convertir IMG vers RAW</h6>
<blockquote><p>qemu-img convert -f qcow2 /home/olivier/Bureau/linux-microcore-2.10.img -O raw /home/olivier/Bureau/linux-microcore-2.10.raw</p>
</blockquote>
<h6>Convertir RAW en VDI</h6>
<p>VBoxManage convertfromraw -format VDI /home/olivier/Bureau/linux-microcore-2.10.raw /home/olivier/Bureau/linux-microcore-2.10.vdi</p>
<p>Voilà, vous avez un beau disque dure compatible avec VirtualBOX.</p>
<h6>Création du disque de PC2 :</h6>
<p>Pour PC2, il faudra copier le fichier VDI et changer son UUID afin que VirtualBox puisse l&#8217;utiliser. Voici la commande permettant de changer l&#8217;UUID d&#8217;un fichier VDI :</p>
<blockquote><p>VBoxManage internalcommands setvdiuuid &#8216;/home/olivier/Bureau/PC2.vdi&#8217;</p>
</blockquote>
<h4>&#160;</h4>
<h4>Création sous VirtualBox:</h4>
<p>&#160;</p>
<ul>
<li>Nom de la machine : PC1 </li>
<li>Mémoire 128M ( 20 M devrait suffir) </li>
<li>Disque existant pointant vers le fichier VDI généré précédemment. </li>
</ul>
<h4>&#160;</h4>
<h4>Configuration sous VirtualBox :</h4>
<p>&#160;</p>
<p>Une fois la machine Virtuelle Créé, allez dans la configuration et éditez la partie réseau comme ceci :</p>
<p><a href="http://www.croc-informatique.fr/wp-content/uploads/2010/07/clip_image004.jpg"><img title="clip_image004" border="0" alt="clip image004 thumb Machines Virtuelles VBOX avec GNS3" src="http://www.croc-informatique.fr/wp-content/uploads/2010/07/clip_image004_thumb.jpg" width="244" height="168" /></a></p>
<p>Pour le PC1, il faudra utiliser un mode d&#8217;accès réseau par pont avec l&#8217;interface tap0</p>
<p>Pour le PC2, il faudra utiliser un mode d&#8217;accès réseau par pont avec l&#8217;interface tap1</p>
<p>Une fois que vous avez démarré vos Vms, il vous faut configurer la partie réseau de chaque VM.</p>
<h4>&#160;</h4>
<h4>Configuration réseau de l&#8217;OS</h4>
<p>&#160;</p>
<h5>Configuration PC1 :</h5>
<blockquote><p>sudo ifconfig eth0 192.168.0.1</p>
<p>sudo route add default gw 192.168.0.254</p>
<p>sudo hostname PC1</p>
</blockquote>
<h5>Configuration PC2 :</h5>
<blockquote><p>sudo ifconfig eth0 10.0.0.1</p>
<p>sudo route add default gw 10.0.0.254</p>
<p>sudo hostname PC2</p>
</blockquote>
<p>pour arrêter la machine proprement, taper :</p>
<blockquote><p>sudo halt</p>
</blockquote>
<h3>&#160;</h3>
<h3>Création de la maquette sous GNS3 :</h3>
<p>&#160;</p>
<p>Attention : Pour avoir accès aux interfaces TAP, il est nécessaire de lancer GNS3 en tant que root :</p>
<blockquote><p>sudo gns3</p>
</blockquote>
<p>Ajoutez un routeur et deux nuages comme indiqué sur le schéma 1.</p>
<p>Configurer le premier nuage avec l&#8217;interface NIO TAP : tap0</p>
<p><a href="http://www.croc-informatique.fr/wp-content/uploads/2010/07/clip_image006.jpg"><img title="clip_image006" border="0" alt="clip image006 thumb Machines Virtuelles VBOX avec GNS3" src="http://www.croc-informatique.fr/wp-content/uploads/2010/07/clip_image006_thumb.jpg" width="244" height="149" /></a></p>
<p>Après l&#8217;avoir ajoutée, elle devrait apparaître sous cette forme : nio_tap:tap0</p>
<p><a href="http://www.croc-informatique.fr/wp-content/uploads/2010/07/clip_image008.jpg"><img title="clip_image008" border="0" alt="clip image008 thumb Machines Virtuelles VBOX avec GNS3" src="http://www.croc-informatique.fr/wp-content/uploads/2010/07/clip_image008_thumb.jpg" width="244" height="182" /></a></p>
<p>Ceci permet à GNS3 d&#8217;utiliser l&#8217;interface tap0 pour émettre et recevoir du trafic réseau.</p>
<p>Effectuez la même manipulation pour le second nuage mais cette fois avec tap1 ( C01 → tap1 ).</p>
<h3>&#160;</h3>
<h3>Configuration du routeur R0 :</h3>
<p>&#160;</p>
<p>Pour cette maquette, j&#8217;utilise cette image c3640-a3jk9s-mz.124-3i.bin et j&#8217;ai configuré en tant que slot0, le module NM-16ESW afin de transformer mon routeur en switch de niveau3.</p>
<p><a href="http://www.croc-informatique.fr/wp-content/uploads/2010/07/clip_image010.jpg"><img title="clip_image010" border="0" alt="clip image010 thumb Machines Virtuelles VBOX avec GNS3" src="http://www.croc-informatique.fr/wp-content/uploads/2010/07/clip_image010_thumb.jpg" width="244" height="170" /></a></p>
<p>Afin de tester la communication, vous pouvez attribuer des ip directement aux interfaces fa0/0 et fa0/1 comme ceci :</p>
<blockquote><p>en</p>
<p>conf t</p>
<p>ip routing</p>
<p>int fa0/0</p>
<p>no switchport</p>
<p>ip address 192.168.0.254 255.255.255.0</p>
<p>no shut</p>
<p>int fa0/1</p>
<p>no switchport</p>
<p>ip address 10.0.0.254 255.255.255.0</p>
<p>no shut</p>
<p>end</p>
</blockquote>
<h3>&#160;</h3>
<h3>Conclusion :</h3>
<p>&#160;</p>
<p>Avec tout ça si vous essayez de faire des pings entre les pc, ça devrait fonctionner. Je l&#8217;ai déjà fais quelques fois et je n&#8217;ai jamais de problèmes sauf à l&#8217;utilisation de GNS3. Pensez à démarrer Dynamips avant l&#8217;ouverture de votre projet. Si vos routeurs consomment trop de cpu, utilisez idle-pc. Pensez à sauvegarder vos conf via tftp. Ça vous sera très utile.</p>
<p>Bon maquettage <img src='http://www.croc-informatique.fr/wp-includes/images/smilies/icon_wink.gif' alt="icon wink Machines Virtuelles VBOX avec GNS3" class='wp-smiley' title="Machines Virtuelles VBOX avec GNS3" /> </p>
<h3>&#160;</h3>
<h3>Infos supplementaires :</h3>
<p>&#160;</p>
<p>Ecouter un port :</p>
<blockquote><p>tcp : nc -l -p 80</p>
<p>udp : ns -l -p 53 -u</p>
</blockquote>
<h3>&#160;</h3>
<h3>Sources :</h3>
<p>&#160;</p>
<p>Tutorial Qemu GNS3 : <a href="http://docs.google.com/View?id=dfzhd6z4_397g3jjf4db">http://docs.google.com/View?id=dfzhd6z4_397g3jjf4db</a></p>
<p>Conversion IMG vers VDI : <a href="http://bber.biz/index.php?m=02&amp;y=09&amp;entry=entry090212-210202">http://bber.biz/index.php?m=02&amp;y=09&amp;entry=entry090212-210202</a></p>
<p>Autre tuto GNS3 – VirtualBox : <a href="http://www.firstdigest.com/2010/02/how-to-integrate-gns3-with-virtualbox/">http://www.firstdigest.com/2010/02/how-to-integrate-gns3-with-virtualbox/</a></p>
<div class="shr-publisher-589"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2010%2F07%2Fmachines-virtuelles-vbox-avec-gns3-2%2F' data-shr_title='Machines+Virtuelles+VBOX+avec+GNS3'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2010%2F07%2Fmachines-virtuelles-vbox-avec-gns3-2%2F' data-shr_title='Machines+Virtuelles+VBOX+avec+GNS3'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.croc-informatique.fr/2010/07/machines-virtuelles-vbox-avec-gns3-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Synchronisation et monitoring de deux reverses proxy Vulture</title>
		<link>http://www.croc-informatique.fr/2009/07/synchronisation-et-monitoring-de-deux-reverse-proxy-vulture/</link>
		<comments>http://www.croc-informatique.fr/2009/07/synchronisation-et-monitoring-de-deux-reverse-proxy-vulture/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 12:44:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Projet]]></category>

		<guid isPermaLink="false">http://www.croc-informatique.fr/2009/07/synchronisation-et-monitoring-de-deux-reverse-proxy-vulture/</guid>
		<description><![CDATA[J&#8217;ai décidé de vous faire profiter de ce projet que j&#8217;ai finalisé il y a plus d&#8217;un an. Sa mise en place m&#8217;a donné entière satisfaction et surtout, m&#8217;a simplifié la vie. J&#8217;espère que vous trouverez cet article intéressant et pertinent. Bonne Lecture DEFINITION : Vulture est un firewall applicatif Open source protégeant efficacement les [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>J&#8217;ai décidé de vous faire profiter de ce projet que j&#8217;ai finalisé il y a plus d&#8217;un an. Sa mise en place m&#8217;a donné entière satisfaction et surtout, m&#8217;a simplifié la vie.</p>
<p>J&#8217;espère que vous trouverez cet article intéressant et pertinent.</p>
<p>Bonne Lecture <img src='http://www.croc-informatique.fr/wp-includes/images/smilies/icon_smile.gif' alt="icon smile Synchronisation et monitoring de deux reverses proxy Vulture" class='wp-smiley' title="Synchronisation et monitoring de deux reverses proxy Vulture" /> </p>
<h1>DEFINITION :</h1>
<p>Vulture est un firewall applicatif Open source protégeant efficacement les applications Web.</p>
<p>Basé sur une technologie de Proxy Inverse, Vulture fait barrière entre les applications et le monde extérieur.</p>
<p>Vulture prend en charge toutes les fonctionnalités liées à la sécurité, et notamment :</p>
<ul>
<li>L&#8217;authentification des utilisateurs</li>
<li>Le chiffrement des flux</li>
<li>Le filtrage de contenu</li>
<li>La réécriture des Urls</li>
<li>La haute disponibilité</li>
<li>La répartition de charge</li>
</ul>
<p><span id="more-409"></span></p>
<h1>OBJECTIF :</h1>
<p>j’ai depuis quelques années cet outil comme reverse proxy dans mon entreprise pour sécuriser l’accès aux sites web. Je l’ai installé sur deux serveurs en Actif/Passif.  Pour améliorer la haute disponibilité, je souhaite que ces deux serveurs fonctionnent en même temps de manière à faire de la répartition de charge et rediriger tout le trafic sur un serveur dans le cas où un des deux tombe en panne. Pour cela, je dois être sûr que leur configuration est identique.</p>
<p>J’utilise Nagios pour monitorer mon système d’information. Je souhaite utilisé cet outil pour monitorer  le bon fonctionnement de mes sites WEB sur chaque reverse proxy et vérifier que la configuration des deux serveurs est identique.</p>
<p>Dans ce document, je vais expliquer ce que j’ai mis en place pour synchroniser  et la superviser ces deux serveurs.</p>
<h1>MISE EN OEUVRE DE LA SYNCHRONISATION</h1>
<h2>SERVEURS</h2>
<p>Pour mon projet, trois serveurs seront utilisés :</p>
<ul>
<li>Vulture2 : Reverse Proxy principal –&gt; 192.168.0.1</li>
<li>Vulture1 : Reverse Proxy Secondaire –&gt; 192.168.0.2</li>
<li>Admin1 : Serveur de synchronisation –&gt; 192.168.0.3</li>
</ul>
<p>Pour des raisons de sécurité, les transferts de données et le traitement seront à l’initiative du serveur Admin1.</p>
<h2>DIFFERENCE DE CONFIGURATION ENTRE LES SERVEURS</h2>
<p>Les fichiers à synchroniser seront la base de données SQLite, les fichiers de configurations et le fichier /etc/hosts.</p>
<h3>BASE DE DONNEES</h3>
<p>La base de données de Vulture se situe dans « /opt/INTRINsec/vulture/sql/db ». Vous pouvez voir sa structure dans le zip fourni à la fin de l’article.</p>
<p>La différence entre la base de Vulture1 et celle de Vulture2 sera seulement le champ “ip” de la table « if ». Cette table correspond aux interfaces http et https. Il faut spécifier à Vulture l’adresse IP d’écoute.</p>
<h3>FICHIERS DE CONF</h3>
<p>Les fichiers de conf qui diffèrent entre chaque serveur sont  «/opt/INTRINsec/vulture/conf/1.conf » et « /opt/INTRINsec/vulture/conf/2.conf ». Ils correspondent à la configuration des interfaces de Vulture. Il nous faut remplacer les adresses IP (@Ip Vulture2 &#8211;&gt; @Ip Vulture1) dans ces fichiers.</p>
<h3>FICHIER /ETC/HOSTS</h3>
<p>Le fichier host comprend une ligne différente entre les deux serveurs. Cette ligne est propre à chacun d’eux. Nous devons remplacer les noms d’hôtes et l’adresse IP.</p>
<h2>ALGORITHME DU SCRIPT DE SYNCHRONISATION</h2>
<ul>
<li>Récupération de la base de données du Vulture2 vers Admin1</li>
<li>Récupération des fichiers de conf de Vulture2 vers Admin1</li>
<li>Récupération du fichier /etc/hosts de Vulture2 vers Admin1</li>
<li>Sauvegarde du répertoire  /opt/INTRINsec/vulture  de Vulture1 sur Admin1</li>
<li>Sauvegarde du fichier /etc/hosts de Vulture1 sur Admin1</li>
<li>Remplacement des IP de la table « IF » sur la base de données de Vulture2 sur Admin1</li>
<li>Remplacement de l’IP du fichier 1.conf de Vulture2 sur Admin1</li>
<li>Remplacement de l’IP sur le fichier hosts de Vulture2 sur Admin1</li>
<li>Remplacement du nom d’hôte sur le fichier host de Vulture2 sur Admin1</li>
<li>Déplacement de la base de données de Admin1 vers Vulture1</li>
<li>Déplacement des fichiers de configuration de Admin1 vers Vulture1</li>
<li>Déplacement du fichier hosts de Admin1 vers Vulture1</li>
</ul>
<h2>PARTIE WEB</h2>
<p>La synchronisation sera lancée manuellement à partir de l’interface d’administration de Vulture dans le menu Interfaces puis Synchronisation vers Vulture1. Pour cette étape, nous avons dû configurer apache, créer une page php et donner des droits privilégiés à l’utilisateur « apache ».</p>
<h3>CONFIGURATION APACHE</h3>
<p>Pour créer cette étape, nous avons ajouté un VirtualHost sur Admin1 qui pointe sur /www/sync_vulture et dont l’adresse d’accès est : <a href="http://sync.domaine.fr">http://sync.domaine.fr</a> .<br />
Voici la configuration effectuée :</p>
<blockquote><p>&lt;VirtualHost 172.17.4.7&gt;<br />
ServerName sync.domaine.fr<br />
ServerAlias sync<br />
DocumentRoot &laquo;&nbsp;/www/sync_vulture&nbsp;&raquo;</p>
<p>&lt;Directory /www/sync_vulture/&gt;<br />
Options Indexes FollowSymLinks MultiViews<br />
AllowOverride None<br />
Order allow,deny<br />
Allow from 172.18.0.0/24<br />
&lt;/Directory&gt;<br />
CustomLog /log/httpd/sync.domaine.fr_access.log common<br />
ErrorLog  /log/httpd/sync.domaine.fr_error.log<br />
&lt;/VirtualHost&gt;</p></blockquote>
<p>Nous avons restreint l’accès au réseau 172.18.0.0/24.<br />
Les logs d’accès http sont situés dans « /log/httpd/sync.domaine.fr_access.log »<br />
Les logs d’erreur http sont situés dans « /log/httpd/sync.domaine.fr_error.log »</p>
<h3>CREATION D’UNE PAGE WEB EN PHP</h3>
<p>Pour lancer notre script perl, nous avons créé un fichier « /www/sync_vulture/sync.php ». Celui-ci exécute le fichier « synchro_vulture.pl » et renvoie sur le navigateur Internet les<br />
étapes du script de synchro et les éventuelles erreurs. Vous pouvez voir le code source du fichier /www/sync_vulture/sync.php en annexe C.</p>
<h3>AJOUT DE DROIT A L’UTILISATEUR « APACHE »</h3>
<p>Pour que le script php puisse exécuter le script « synchro_vulture.pl » qui doit être lancé en utilisateur « root », nous avons dû modifier le fichier « /etc/sudoers » de cette manière :</p>
<blockquote><p>User_Alias   SYNC_VULTURE= apache<br />
SYNC_VULTUREALL = NOPASSWD: /usr/bin/perl /www/sync_vulture/synchro_vulture.pl</p></blockquote>
<p>En modifiant ce fichier, nous permettons à l’utilisateur « apache » d’exécuter en tant que root et sans mot de passe le fichier « /www/sync_vulture/synchro_vulture.pl ».  Pour cela, il faudra utiliser la commande « sudo » avant la commande d’exécution.</p>
<p><span style="text-decoration: underline;">Exemple :</span></p>
<blockquote><p>$&gt; Sudo /usr/bin/perl /www/sync_vulture/synchro_vulture.pl</p></blockquote>
<h3>AJOUT DU LIEN A L’INTERFACE DE VULTURE2</h3>
<p>Le fichier correspondant au menu interface de Vulture2 se situe ici : « /opt/INTRINsec/vulture/www/WEB-INF/tpl/if.tpl »</p>
<p>Il suffit d’éditer ce fichier et d’y ajouter après :</p>
<blockquote><p>&lt;a href=&#8217;?do=sync&#8217;&gt;&lt;img src=&#8217;img/puce.png&#8217;&gt;&amp;nbsp;&nbsp;&raquo;.$i18n["synchronize"].&nbsp;&raquo;&lt;br&gt;&lt;/a&gt;</p></blockquote>
<p>La ligne :</p>
<blockquote><p>&lt;a href=&#8217;<a href="http://sync.domaine.fr/sync.php'">http://sync.domaine.fr/sync.php&#8217;</a> target=&#8217;_blank&#8217;&gt;&lt;img src=&#8217;img/puce.png&#8217;&gt;&amp;nbsp;Synchroniser Vulture1&lt;br&gt;&lt;/a&gt;</p></blockquote>
<p>Vous verrez apparaître un nouveau lien dans la rubrique action dans le menu interfaces :</p>
<p><a href="http://www.croc-informatique.fr/wp-content/uploads/2009/07/image2.png"><img style="display: inline; border-width: 0px;" title="image" src="http://www.croc-informatique.fr/wp-content/uploads/2009/07/image_thumb.png" border="0" alt="image thumb Synchronisation et monitoring de deux reverses proxy Vulture" width="189" height="81" /></a></p>
<p>Le lien « Synchroniser Vulture1 » pointe vers « <a href="http://sync.domaine.fr/sync.php">http://sync.domaine.fr/sync.php</a> »</p>
<h2>RECAPITULATIF DE LA SYNCHRONISATION</h2>
<p><strong>Script de synchro</strong> : « /www/sync_vulture/synchro_vulture.pl » à exécuter en root.<br />
<strong>Page Web</strong> : <a href="http://sync.domaine.fr/sync.php">http://sync.domaine.fr/sync.php</a> accessible via l’interface Web de Vulture2<br />
<strong>Les modifications doivent être effectuées seulement sur un des deux vultures. </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<h1>MISE EN ŒUVRE DE LA SUPERVISION</h1>
<p><strong> </strong></p>
<h2>SUPERVISION DE LA SYNCHRONISATION</h2>
<p>Pour superviser la synchronisation entre Vulture1 et Vulture2, j’ai créé un script shell qui permet de comparer la taille des fichiers des différents éléments.</p>
<h3>ALGORITHME</h3>
<ul>
<li>Voici l’algorithme simplifié utilisé pour vérifier la synchronisation entre Vulture2 et Vulture1 :</li>
<li>On récupère la taille de la base de Vulture2</li>
<li>On récupère la taille de la base de Vulture1</li>
<li>On compare les deux tailles</li>
<li>Si les deux tailles sont différentes, on sort avec un code erreur critique</li>
<li>On récupère la taille du fichier 1.conf de Vulture2</li>
<li>On récupère la taille du fichier 1.conf de Vulture1</li>
<li>On compare les deux tailles</li>
<li>Si les deux tailles sont différentes, on sort avec un code erreur critique</li>
<li>On récupère la taille du fichier 2.conf de Vulture2</li>
<li>On récupère la taille du fichier 2.conf de Vulture1</li>
<li>On compare les deux tailles</li>
<li>Si les deux tailles sont différentes, on sort avec un code erreur critique</li>
<li>On récupère la taille du fichier /etc/hosts de Vulture2</li>
<li>On récupère la taille du fichier /etc/hosts de Vulture1</li>
<li>On compare les deux tailles</li>
<li>Si les deux tailles sont différentes, on sort avec un code erreur critique</li>
<li>On sort avec un code erreur OK.</li>
</ul>
<p>Pour récupérer la taille des éléments, nous exécutons les commandes à distance à partir d’Admin1 via le protocole SSH.</p>
<p>Vous pouvez voir le code source du script check_synchro_vulture.sh en archive, à la fin de l&#8217;article.</p>
<h3>AJOUT DE DROIT A L’UTILISATEUR NAGIOS</h3>
<p>Ce script se situe sur admin1 dans /usr/local/nagios/libexec et se nomme check_synchro_vulture.sh. Celui-ci doit être executé en tant que root. Pour cela, nous avons ajouté cette ligne dans le fichier /etc/sudoers :</p>
<blockquote><p>nagios   ALL = NOPASSWD: /bin/sh /usr/local/nagios/libexec/check_synchro_vulture.sh</p></blockquote>
<p>De cette manière, l’utilisateur « nagios » n’aura pas besoin de mot de passe pour executer la commande en tant que root. Cette commande devra être lancer de cette manière :</p>
<blockquote><p>sudo /bin/sh /usr/local/nagios/libexec/check_synchro_vulture.sh</p></blockquote>
<h3>MESSAGE DE SORTIE</h3>
<p>Voici les différentes Sorties Possibles :<br />
Code CRITICAL : 2 -&gt; PROBLEME DE SYNCHRO<br />
Code OK : 0 -&gt; PAS DE PROBLEME DE SYNCHRO<br />
Ce script est lancé sans argument pour les deux serveurs Vulture sur Nagios.</p>
<h3>RECAPITULATIF DE LA SUPERVISION DE LA SYNCHRO</h3>
<p><strong>Script de synchro</strong> : /usr/local/nagios/libexec/check_synchro_vulture.pl à exécuter en root.<br />
<strong>Commande Nagios</strong> : check_synchro_vulture<br />
<strong>Service Nagios</strong> : synchronisation_des_vultures<br />
<strong>Nagios</strong> : ce script est appliqué au groupe INTERFACES_VULTURE sur nagios</p>
<h2>SUPERVISION DES APPLICATIONS WEB</h2>
<p>Pour vérifier les applications hébergées à travers Vulture1 et Vulture2, nous allons  utiliser  une  commande  fournie  par  Nagios.  Elle  se  nomme  check_http.  Cette commande va nous permettre de connaître l’état des interfaces http et https de Vulture et de vérifier  le contenu des pages Web  retourné par Vulture. Nous avons créé un script perl qui permet de superviser  les applications et formate l’affichage et  les codes erreur pour nagios.<br />
Les applications à superviser seront fournies au script de manière automatique en lisant la base de données de Vulture2 stockée sur Admin1 par le script de synchronisation cité en partie II.</p>
<h3>ALGORITHME</h3>
<ul>
<li>On récupère l’adresse IP du serveur à superviser en argument</li>
<li>On teste que les interfaces http et https du serveur Vulture sont bien actives</li>
<li>On récupère l’url et le type d’interface (http ou https) de l’application dans la base de données de Vulture récupérée par le script de synchronisation</li>
<li>On fait un check_http –H @IP_Serveur –I Nom_Application –v pour chaque application de la base</li>
<li>On teste que les chaines de caractères d’erreurs ne sont pas dans le code source de la page retournée.</li>
<li>Si l’application est en erreur, on stocke le nom et le type d’interface dans un tableau</li>
<li>Si un problème survient, on affiche le tableau d’erreur et on sort avec le code erreur critique</li>
<li>Sinon, on sort avec le code erreur OK.</li>
</ul>
<p>Ce script est situé dans /usr/local/nagios/libexec/ et se nomme check_vulture.pl</p>
<h3>MESSAGE DE SORTIE</h3>
<p><strong>Code Critical</strong> : 2 -&gt; <a href="http://www.croc-informatique.fr(http">www.croc-informatique.fr(http</a>)<br />
Ici, l’application <a href="http://www.croc-informatique.fr">www.croc-informatique.fr</a> n’est pas accessible sur le port 80.<br />
<strong>Code OK</strong> : 0 -&gt; PAS DE PROBLEME AVEC LES URLS</p>
<h3>RECAPITULATIF</h3>
<p><strong>Emplacement du script</strong> : /usr/local/nagios/libexec/check_vulture.pl<br />
<strong>Nagios</strong> : Ce script doit être appliqué aux deux serveurs Vulture<br />
<strong>Commande Nagios</strong> : check_vulture<br />
<strong>Exécution du script</strong> : $USER1$/check_vulture.pl -HOSTADDRESS $HOSTADDRESS$<br />
<strong>Service Nagios</strong> : Check_site_vulture</p>
<h1>Téléchargement des scripts :</h1>
<p>Les scripts utilisés dans ce document ne sont pas optimisés mais fonctionnent très bien dans mon entreprise. A vous de l’<strong>adapter</strong> à votre architecture.</p>
<p>Vous pouvez les télécharger <a href="http://crocodanser.free.fr/fichiers/synchro-vulture-072009.zip">ici</a>.</p>
<p>Le mot de passe de l’archive est : <a href="http://www.croc-informatique.fr">http://www.croc-informatique.fr</a></p>
<p>Mise à jour disponible ici : <a href="http://www.croc-informatique.fr/2010/07/mise-a-jour-synchroniser-et-superviser-vulture/">http://www.croc-informatique.fr/2010/07/mise-a-jour-synchroniser-et-superviser-vulture/</a></p>
<h1>CONCLUSION</h1>
<p>J’espère que cet article vous servira. Si oui, merci de me laisser un petit commentaire pour me dire ce que vous en pensez.</p>
<p>Je vais bientôt virtualiser mes serveurs Vulture. Donc, dans peu de temps, je rédigerai un tutorial d’installation.</p>
<p>Bon courage,</p>
<p>Olivier</p>
<div class="shr-publisher-409"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2009%2F07%2Fsynchronisation-et-monitoring-de-deux-reverse-proxy-vulture%2F' data-shr_title='Synchronisation+et+monitoring+de+deux+reverses+proxy+Vulture'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2009%2F07%2Fsynchronisation-et-monitoring-de-deux-reverse-proxy-vulture%2F' data-shr_title='Synchronisation+et+monitoring+de+deux+reverses+proxy+Vulture'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.croc-informatique.fr/2009/07/synchronisation-et-monitoring-de-deux-reverse-proxy-vulture/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Projet SYSLOG</title>
		<link>http://www.croc-informatique.fr/2008/03/projet-syslog/</link>
		<comments>http://www.croc-informatique.fr/2008/03/projet-syslog/#comments</comments>
		<pubDate>Thu, 13 Mar 2008 09:59:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Projet]]></category>
		<category><![CDATA[Réseau]]></category>

		<guid isPermaLink="false">http://o.legras.free.fr/wordpress/?p=54</guid>
		<description><![CDATA[Configuration Syslogd : Voici mon fichier syslog.conf : # Log all kernel messages to the console. # Logging much else clutters up the screen. #kern.*                                                 /dev/console # Log anything (except mail) of level info or higher. # Don&#8217;t log private authentication messages! #*.info;mail.none;authpriv.none;cron.none               /var/log/messages local1.*                                                /log/site1/all.log local2.*                                                /log/site2/all.log # The authpriv file has restricted access. [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><h3>Configuration Syslogd :</h3>
<p>Voici mon fichier syslog.conf :</p>
<blockquote><p># Log all kernel messages to the console.<br />
# Logging much else clutters up the screen.<br />
#kern.*                                                 /dev/console</p>
<p># Log anything (except mail) of level info or higher.<br />
# Don&#8217;t log private authentication messages!<br />
#*.info;mail.none;authpriv.none;cron.none               /var/log/messages<br />
<strong>local1.*                                                /log/site1/all.log<br />
local2.*                                                /log/site2/all.log</strong><br />
# The authpriv file has restricted access.<br />
authpriv.*                                              /var/log/secure</p>
<p># Log all the mail messages in one place.<br />
mail.*                                                  -/var/log/maillog</p>
<p># Log cron stuff<br />
cron.*                                                  /var/log/cron</p>
<p><span id="more-54"></span></p>
<p># Everybody gets emergency messages<br />
*.emerg                                                 *</p>
<p># Save news errors of level crit and higher in a special file.<br />
uucp,news.crit                                          /var/log/spooler</p>
<p># Save boot messages also to boot.log<br />
local7.*                                                /var/log/boot.log</p></blockquote>
<p>Ici on sépare les logs des differents sites. la séparation est utilisé uniquement pour avoir un visu des logs sur le serveur.</p>
<p> </p>
<h3>Configuration des équipements réseaux :</h3>
<blockquote><p>logging trap warning<br />
logging facility local2<br />
logging IP_SERVEUR_SYSLOG</p></blockquote>
<ul>
<li>logging trap permet de selectionner le niveau de log</li>
<li>logging facility permet de differencier au niveau serveur syslog les différents sites.</li>
<li>logging permet de specifier le serveur syslog auquel envoyé les logs.</li>
</ul>
<h3>Préparation de mysql pour la réception des logs parser :</h3>
<p>Il vous faut une base de donnée nommé syslog.</p>
<p>Voici la structure des tables :</p>
<p> </p>
<h3><a href="http://www.croc-informatique.fr/wp-content/uploads/2008/03/screenshot001.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" src="http://www.croc-informatique.fr/wp-content/uploads/2008/03/screenshot001-thumb.jpg" border="0" alt="screenshot001 thumb Projet SYSLOG" width="425" height="250" title="Projet SYSLOG" /></a></h3>
<p><a href="http://www.croc-informatique.fr/wp-content/uploads/2008/03/screenshot002.jpg"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" src="http://www.croc-informatique.fr/wp-content/uploads/2008/03/screenshot002-thumb.jpg" border="0" alt="screenshot002 thumb Projet SYSLOG" width="437" height="270" title="Projet SYSLOG" /></a></p>
<h3>Script de parsing des logs v1.0 :</h3>
<blockquote><p>#!/usr/bin/perl<br />
# Titre : Parseur de fichier log<br />
# Auteur : Olivier Legras<br />
# Date : 03/08<br />
# Version : 1.0<br />
#<br />
# Description : Ce script permet de décomposé les messages de log reçu via syslog et de les stocker dans<br />
#               une base mysql. Ce script devra être executé plusieurs fois par jour.<br />
#</p>
<p>use Parse::Syslog;<br />
use Date::Manip;<br />
use DBI(); # Utilisation de la BD<br />
use POSIX qw(strftime); #Date du jour<br />
use Getopt::Long;<br />
use strict;</p>
<p>my $help; my $client; my $chemin; my $anee;</p>
<p>#ARGUMENTS</p>
<p># Affichage de l&#8217;aide<br />
my $USAGE = &lt;&lt;EOF;<br />
usage: $0 -options<br />
  Options:<br />
    -help             Affiche cet écran<br />
    -path             Chemin du fichier log à parser<br />
    -partenaire       Partenaire à analyser en majuscule</p>
<p>    Exemple :<br />
    ./parser_syslog.pl -path /log/courneuve/all.log  -partenaire COURNEUVE<br />
EOF</p>
<p># Commandes optionnelles<br />
&amp;GetOptions(&laquo;&nbsp;help&nbsp;&raquo;    =&gt; $help,<br />
            &laquo;&nbsp;path:s&nbsp;&raquo;    =&gt; $chemin,<br />
            &laquo;&nbsp;partenaire:s&nbsp;&raquo;    =&gt; $client);</p>
<p>if ($help) {<br />
    die &laquo;&nbsp;$USAGE&nbsp;&raquo;;<br />
}</p>
<p>my $date = strftime &laquo;&nbsp;%Y&nbsp;&raquo;, localtime;<br />
print $date.&nbsp;&raquo; &#8211; &laquo;&nbsp;.$chemin.&nbsp;&raquo; &#8211; &laquo;&nbsp;.$client.&nbsp;&raquo;n&nbsp;&raquo;;</p>
<p>my $dbh = DBI-&gt;connect(&laquo;&nbsp;DBI:mysql:database=syslog;host=localhost&nbsp;&raquo;,<br />
                          &laquo;&nbsp;root&nbsp;&raquo;, &laquo;&nbsp;mdp&nbsp;&raquo;,<br />
                          {&#8216;RaiseError&#8217; =&gt; 1});</p>
<p>Parser_log($chemin,$date,$client,&#8217;Reseau&#8217;);</p>
<p>sub Parser_log {</p>
<p>  my $path = $_[0];<br />
  my $annee = $_[1];<br />
  my $partenaire = $_[2];<br />
  my $categorie = $_[3];<br />
  my $temps_ecoule; my $host2; my $timestamp;<br />
  my $type;<br />
  my $message;<br />
  my @liste;</p>
<p>my $parser = Parse::Syslog-&gt;new( $path , year =&gt; $annee);<br />
while(my $sl = $parser-&gt;next) {<br />
    $message=$sl-&gt;{text};<br />
    $timestamp=$sl-&gt;{timestamp};<br />
    $host2=$sl-&gt;{host};<br />
    $timestamp = UnixDate(ParseDate(&laquo;&nbsp;epoch $timestamp&nbsp;&raquo;), &#8216;%y-%m-%d %T&#8217;);</p>
<p>@liste = split(/:/,$message);</p>
<p>$temps_ecoule = @liste[0];<br />
$type = @liste[1];<br />
$message = @liste[2];<br />
print $timestamp.&nbsp;&raquo; &#8211; PARTENAIRE : &laquo;&nbsp;.$partenaire.&nbsp;&raquo;n&nbsp;&raquo;;<br />
$dbh-&gt;do(&laquo;&nbsp;INSERT INTO `syslog`.`message` (`id`,`timestamp`,`host`,`temps_ecoule`,`type_message`,`message`,`partenaire`,`categorie`) VALUES (&nbsp;&raquo;,&#8217;$timestamp&#8217;,'$host2&#8242;,&#8217;$temps_ecoule&#8217;,'$type&#8217;,'$message&#8217;,'$partenaire&#8217;,'$categorie&#8217;);&nbsp;&raquo;);<br />
}<br />
$dbh-&gt;disconnect();<br />
exec &laquo;&nbsp;cat /dev/null &gt; $path&nbsp;&raquo;;</p>
<p>}</p></blockquote>
<p>Veillez a bien renseigner les comptes d&#8217;accès à mysql.</p>
<p>Voici un exemple d&#8217;utilisation :</p>
<p>./parser_syslog.pl -path /log/site1/all.log  -partenaire Site1</p>
<p>Ce script doit être planifier plusieurs fois par jour.</p>
<h3>Archivage de la table message dans historique</h3>
<p>Ce script permet de rassembler tous les mêmes messages identiques par host et de stocké le message, la date et l&#8217; heure du dernier message&#8230; Puis vider la table message. De cette manière la base de donnée ne prendra pas des proportions démesurées. Ce script sera à executer une fois par jour.</p>
<p> </p>
<blockquote><p>#!/usr/bin/perl<br />
# Titre : Parseur de fichier log<br />
# Auteur : Olivier Legras<br />
# Date : 03/08<br />
# Version : 1.0<br />
#<br />
# Description : Ce script permet d&#8217;alleger la base mysql rempli par le script parser_syslog.pl.<br />
#</p>
<p>use strict;<br />
use Parse::Syslog;<br />
use Date::Manip;<br />
use DBI(); # Utilisation de la BD</p>
<p>my $temps_ecoule;my $partenaire; my $categorie; my $host2; my $timestamp2;<br />
my $type;<br />
my $message;<br />
my @liste;<br />
my $host; my $i_message;my $occurence;<br />
my $timestamp_dernier;<br />
my $type ;my $categorie; my $partenaire; my $occurence_total;<br />
my $dbh = DBI-&gt;connect(&laquo;&nbsp;DBI:mysql:database=syslog;host=localhost&nbsp;&raquo;,<br />
                          &laquo;&nbsp;root&nbsp;&raquo;, &laquo;&nbsp;mdp&nbsp;&raquo;,<br />
                          {&#8216;RaiseError&#8217; =&gt; 1});</p>
<p>#HISTORIQUE</p>
<p>##On lit la table message en fonction du hosts<br />
my $sth2= $dbh-&gt;prepare(&laquo;&nbsp;SELECT * FROM message&nbsp;&raquo;);<br />
$sth2-&gt;execute();<br />
my $i=0;<br />
my @tab_host;<br />
while (my $ref2 = $sth2-&gt;fetchrow_hashref()) {<br />
   @tab_host[$i] = $ref2-&gt;{&#8216;host&#8217;};<br />
   $i=$i+1;<br />
}<br />
$sth2-&gt;finish();</p>
<p>#On vire les doublons de tab_host</p>
<p>my %hachage   = map { $_, 1 } @tab_host;<br />
my @liste_host = keys %hachage;</p>
<p>#on lit les messages de chaque host</p>
<p>foreach $host (@liste_host)<br />
{<br />
      my $sth_host= $dbh-&gt;prepare(&laquo;&nbsp;SELECT * FROM message WHERE host=&#8217;$host&#8217;&nbsp;&raquo;);<br />
      $sth_host-&gt;execute();<br />
      my $i=0;<br />
      my @tab_host;<br />
      my @tab_message;<br />
      while (my $ref_host = $sth_host-&gt;fetchrow_hashref()) {<br />
        @tab_message[$i] = $ref_host-&gt;{&#8216;message&#8217;};<br />
        $i=$i+1;<br />
      }<br />
      $sth_host-&gt;finish();</p>
<p>      # On vire les messages en double</p>
<p>      my %hachage2   = map { $_, 1 } @tab_message;<br />
      my @liste_message = keys %hachage2;</p>
<p>      #On lit le tableau et on compte le nombre d&#8217;occurence dans la table message</p>
<p>     #print &laquo;&nbsp;HOST = $hostn&nbsp;&raquo;;</p>
<p>    foreach $message (@liste_message)<br />
    {<br />
       my $sth_message= $dbh-&gt;prepare(&laquo;&nbsp;SELECT * FROM message WHERE message=&#8217;$message&#8217; AND host=&#8217;$host&#8217; ORDER BY timestamp DESC&nbsp;&raquo;);<br />
       $sth_message-&gt;execute();<br />
       $i_message=0;<br />
       my @tab_message;<br />
       while (my $ref_message = $sth_message-&gt;fetchrow_hashref()) {<br />
          # On récupère le dernier message<br />
         if ($i_message==0){<br />
           $timestamp_dernier = $ref_message-&gt;{&#8216;timestamp&#8217;};<br />
           $type = $ref_message-&gt;{&#8216;type_message&#8217;};<br />
           $categorie = $ref_message-&gt;{&#8216;categorie&#8217;};<br />
           $partenaire = $ref_message-&gt;{&#8216;partenaire&#8217;};</p>
<p>         }<br />
       $i_message=$i_message+1;</p>
<p>      }</p>
<p>      if ($i_message&gt;0){</p>
<p>        #print &laquo;&nbsp;Nombre d&#8217;occurence du message : $i_message Timestamp=$timestamp_derniern&nbsp;&raquo;;<br />
        #print $message.&nbsp;&raquo;n&nbsp;&raquo;;<br />
        #On vérifier que le message se trouve dans la base historique en fonction<br />
        #du host et du message<br />
        my $sth_histo= $dbh-&gt;prepare(&laquo;&nbsp;SELECT * FROM historique WHERE message=&#8217;$message&#8217; AND host=&#8217;$host&#8217;&nbsp;&raquo;);<br />
        $sth_histo-&gt;execute();<br />
        #:my $i_message=0;<br />
        my @tab_message;</p>
<p>        if (my $ref_message = $sth_histo-&gt;fetchrow_hashref()) {<br />
        $occurence = $ref_message-&gt;{&#8216;occurence&#8217;};</p>
<p>        $occurence_total = $i_message + $occurence;<br />
        print $i_message.&nbsp;&raquo; + &laquo;&nbsp;.$occurence.&nbsp;&raquo; = $occurence_totaln&nbsp;&raquo;;</p>
<p>          # on modifie le compteur et la dernière date<br />
          my $sth_historique= $dbh-&gt;prepare(&laquo;&nbsp;UPDATE `syslog`.`historique` SET occurence=&#8217;$occurence_total&#8217;, timestamp=&#8217;$timestamp_dernier&#8217;  WHERE message=&#8217;$message&#8217; AND host=&#8217;$host&#8217;&nbsp;&raquo;);<br />
          $sth_historique-&gt;execute();<br />
        }<br />
        else{<br />
          #On ajoute le dernier</p>
<p>          my $sth_historique2= $dbh-&gt;prepare(&laquo;&nbsp;INSERT INTO `syslog`.`historique` (`id`,`timestamp`,`host`,`occurence`,`type_message`,`message`,`partenaire`,`categorie`) VALUES (&nbsp;&raquo;,&#8217;$timestamp_dernier&#8217;,'$host&#8217;,'$i_message&#8217;,'$type&#8217;,'$message&#8217;,'$partenaire&#8217;,'$categorie&#8217;);&nbsp;&raquo;);<br />
          $sth_historique2-&gt;execute();<br />
        }</p>
<p>      }<br />
    $sth_message-&gt;finish();<br />
    }</p>
<p>}<br />
#On vide la table message<br />
my $sth_vider= $dbh-&gt;prepare(&laquo;&nbsp;TRUNCATE TABLE `message`&nbsp;&raquo;);<br />
$sth_vider-&gt;execute();</p>
<p>#On ferme la session mysql<br />
$dbh-&gt;disconnect;</p></blockquote>
<p>Il ne reste plus qu&#8217; à utiliser les informations de la base mysql pour afficher sur des pages web.</p>
<div class="shr-publisher-54"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2008%2F03%2Fprojet-syslog%2F' data-shr_title='Projet+SYSLOG'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2008%2F03%2Fprojet-syslog%2F' data-shr_title='Projet+SYSLOG'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.croc-informatique.fr/2008/03/projet-syslog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Projet Parser Syslog WEB</title>
		<link>http://www.croc-informatique.fr/2008/02/projet-parser-syslog-web/</link>
		<comments>http://www.croc-informatique.fr/2008/02/projet-parser-syslog-web/#comments</comments>
		<pubDate>Wed, 13 Feb 2008 13:45:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Projet]]></category>
		<category><![CDATA[Réseau]]></category>

		<guid isPermaLink="false">http://o.legras.free.fr/wordpress/?p=36</guid>
		<description><![CDATA[Plan : - Parser le fichier log (Parse::Syslog) - Ajouter les donn&#233;es dans une base mysql - Afficher les donn&#233;e en fonction des hosts sur une page mysql - G&#233;rer le log rotate ( 1 jour, 1 semaine?) - Afficher les hosts en alerte sur la premi&#232;re page - Int&#233;gr&#233; &#224; l&#8217;intranet de la prod. [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Plan :</p>
<p>- Parser le fichier log (Parse::Syslog)</p>
<p>- Ajouter les donn&#233;es dans une base mysql</p>
<p>- Afficher les donn&#233;e en fonction des hosts sur une page mysql </p>
<p>- G&#233;rer le log rotate ( 1 jour, 1 semaine?)</p>
<p>- Afficher les hosts en alerte sur la premi&#232;re page</p>
<p>- Int&#233;gr&#233; &#224; l&#8217;intranet de la prod.</p>
<p>- G&#233;rer peut-etre les alerte par email avec possibilit&#233; d&#8217;acknowledger&#8230; (En option )</p>
<div class="shr-publisher-36"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2008%2F02%2Fprojet-parser-syslog-web%2F' data-shr_title='Projet+Parser+Syslog+WEB'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='false' data-shr_href='http%3A%2F%2Fwww.croc-informatique.fr%2F2008%2F02%2Fprojet-parser-syslog-web%2F' data-shr_title='Projet+Parser+Syslog+WEB'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.croc-informatique.fr/2008/02/projet-parser-syslog-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

