<?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>Le Blog du grand loup Zeur &#187; Système</title>
	<atom:link href="http://blog.gaetan-grigis.eu/category/systeme/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gaetan-grigis.eu</link>
	<description>Le blog qui vous fait connaitre ce que vous savez déjà</description>
	<lastBuildDate>Tue, 17 Jan 2012 08:43:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Fake fencing sur Red Hat6</title>
		<link>http://blog.gaetan-grigis.eu/systeme/administration/fake-fencing-sur-red-hat6/</link>
		<comments>http://blog.gaetan-grigis.eu/systeme/administration/fake-fencing-sur-red-hat6/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 18:12:08 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[agent]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[fake fence]]></category>
		<category><![CDATA[fence]]></category>
		<category><![CDATA[red hat]]></category>
		<category><![CDATA[rhevm]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=1158</guid>
		<description><![CDATA[Plop &#8230; Un petit retour sur l&#8217;article du failover mysql avec les clusters de red hat. Lorsque l&#8217;on test son système de failover (machines virtuelles, ou &#8230;) sans matériel de fencing (switchs/routeurs/périph dédiés), les tests d&#8217;arrêts complets (coupure de courant barbare) échouent lamentablement, car pour switcher les services d&#8217;une machine à une autre, le daemon [...]]]></description>
			<content:encoded><![CDATA[<p>Plop &#8230; </p>
<p>Un petit retour sur l&#8217;article du <a href="http://blog.gaetan-grigis.eu/non-classe/mysql-failover-sur-red-hat-6-avec-drbd-et-rgmanager/">failover mysql</a> avec les clusters de red hat.<br />
<span id="more-1158"></span><br />
Lorsque l&#8217;on test son système de failover (machines virtuelles, ou &#8230;) sans matériel de fencing (switchs/routeurs/périph dédiés), les tests d&#8217;arrêts complets (coupure de courant barbare) échouent lamentablement, car pour switcher les services d&#8217;une machine à une autre, le daemon fenced envoie un signal de reboot au serveur ayant la main sur le service via le système de fencing, et si celui-ci ne répond pas, le service n&#8217;est pas redémarré (il considère qu&#8217;il a lui-même un problème), ne permettant pas de valider le test du &laquo;&nbsp;Si la machine crash, est-ce qu&#8217;une autre prendra le service ?&nbsp;&raquo;.</p>
<p>Il existe cependant des services permettant de faker ces systèmes lors d&#8217;utilisation de machines virtuelles, malheureusement pour moi, je n&#8217;utilise pas le système de machine virtuelle xen directement sur red hat6, ne me permettant de de jouir des agents fence <a href="http://linux.die.net/man/8/fence_rhevm">RHEV-M</a> et libvirt pour les machines virtuelles, et désactiver l&#8217;accès au groupe de fence empêche le rgmanager de se lancer (pose de lock sur dlm-control et dlm-rgmanager qui n&#8217;existe pas sans fence) donc passage obligé à la création d&#8217;un &laquo;&nbsp;fake fence&nbsp;&raquo;.</p>
<p>Pour simuler le système de fence de RHEV-M (un simple client http qui balance 3 requêtes pour vérifier si la machine existe et lance l&#8217;action de reboot), j&#8217;ai donc crée un serveur Web en python, qui renvoit des XMLs complétement faux, mais qui contiennent les infos que l&#8217;agent fence_rhevm cherche, lui permettant de valider le reboot  et de débloquer le service!!!</p>
<p>Le codage est très simple (avec une belle XSS en prime ^^, mais comme l&#8217;agent fence_rhevm crée ses propres urls de requêtes &#8230; osef ;=)) :</p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#!/usr/bin/python</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">SocketServer</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">re</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">status=<span class="st0">&quot;down&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> FenceHandler<span class="br0">&#40;</span><span class="kw3">SocketServer</span>.<span class="me1">BaseRequestHandler</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">def</span> handle<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">global</span> status</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">data</span> = <span class="kw2">self</span>.<span class="me1">request</span>.<span class="me1">recv</span><span class="br0">&#40;</span><span class="nu0">4096</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;re_get_name = <span class="kw3">re</span>.<span class="kw2">compile</span><span class="br0">&#40;</span><span class="st0">&quot;GET /api/vms/<span class="es0">\?</span>search=name%3D(.*) HTTP/1.1&quot;</span>,<span class="kw3">re</span>.<span class="me1">IGNORECASE</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp;result_name = re_get_name.<span class="me1">search</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">data</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="co1">#If there is no Get, it&#39;s a posted action</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">if</span> result_name == <span class="kw2">None</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">self</span>.<span class="me1">request</span>.<span class="me1">send</span><span class="br0">&#40;</span><span class="st0">&quot;HTTP/1.1 200 OK<span class="es0">\r</span><span class="es0">\n</span>Content-Type: application/xml<span class="es0">\r</span><span class="es0">\n</span><span class="es0">\r</span><span class="es0">\n</span>&lt;action /&gt;<span class="es0">\r</span><span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; status=<span class="st0">&quot;up&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="co1">#Else it&#39;s a normal request, answer &#8230;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;name = <span class="st0">&quot;none&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">if</span> result_name <span class="sy0">!</span>= <span class="kw2">None</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; name = result_name.<span class="me1">group</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">self</span>.<span class="me1">request</span>.<span class="me1">send</span><span class="br0">&#40;</span><span class="st0">&quot;HTTP/1.1 200 OK<span class="es0">\r</span><span class="es0">\n</span>Content-Type: application/xml<span class="es0">\r</span><span class="es0">\n</span><span class="es0">\r</span><span class="es0">\n</span>&lt;vms&gt;&lt;vm id=<span class="es0">\&quot;</span>id<span class="es0">\&quot;</span> href=<span class="es0">\&quot;</span>osef<span class="es0">\&quot;</span>&gt;&lt;name&gt;&quot;</span>+name+<span class="st0">&quot;&lt;/name&gt;&lt;type&gt;server&lt;/type&gt;&lt;status&gt;&lt;state&gt;&quot;</span>+status+<span class="st0">&quot;&lt;/state&gt;&lt;/status&gt;&lt;/vm&gt;&lt;/vms&gt;<span class="es0">\r</span><span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;status = <span class="st0">&quot;down&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> __name__ == <span class="st0">&quot;__main__&quot;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; HOST, PORT = <span class="st0">&quot;0.0.0.0&quot;</span>, <span class="nu0">9999</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; server = <span class="kw3">SocketServer</span>.<span class="me1">TCPServer</span><span class="br0">&#40;</span><span class="br0">&#40;</span>HOST, PORT<span class="br0">&#41;</span>, FenceHandler<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; server.<span class="me1">serve_forever</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Une fois lancé sur une machine, il ne reste plus qu&#8217;à fournir les infos dans le cluster.conf (à titre d&#8217;exemple) :</p>
<div class="geshi no xml">
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;clusternode</span> <span class="re0">name</span>=<span class="st0">&quot;mamachine&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="sc3"><span class="re1">&lt;fence<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;method</span> <span class="re0">name</span>=<span class="st0">&quot;overthelolandfaraway&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;device</span> <span class="re0">name</span>=<span class="st0">&quot;rhevm&quot;</span> <span class="re0">port</span>=<span class="st0">&quot;1337&quot;</span><span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;/method<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="sc3"><span class="re1">&lt;/fence<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/clusternode<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;fencedevices<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="sc3"><span class="re1">&lt;fencedevice</span> <span class="re0">name</span>=<span class="st0">&quot;rhevm&quot;</span> <span class="re0">agent</span>=<span class="st0">&quot;fence_rhevm&quot;</span> <span class="re0">ipaddr</span>=<span class="st0">&quot;10.1.1.1&quot;</span> <span class="re0">login</span>=<span class="st0">&quot;rhevm&quot;</span> <span class="re0">passwd</span>=<span class="st0">&quot;rhevm&quot;</span> <span class="re0">ipport</span>=<span class="st0">&quot;9999&quot;</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/fencedevices<span class="re2">&gt;</span></span></span></div>
</li>
</ol>
</div>
<p>Si jamais le script est modifié par WP, il reste accessible ici : <a href="https://raw.github.com/cipher16/script/master/fence.py">https://raw.github.com/cipher16/script/master/fence.py</a> (à n&#8217;utiliser que pour des tests bien sûr <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> )</p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=1158">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/ubuntu/controller-sa-carte-wifi-atheros-sous-ubuntu-lucid/" rel="bookmark" title="Permanent Link: Controller sa carte wifi atheros sous ubuntu Lucid">Controller sa carte wifi atheros sous ubuntu Lucid</a></li><li><a href="http://blog.gaetan-grigis.eu/securite/les-liens-du-week-end/" rel="bookmark" title="Permanent Link: Les liens du week-end">Les liens du week-end</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/centre-alsace-le-prix-du-gazole-depasse-le-prix-essence/" rel="bookmark" title="Permanent Link: Centre Alsace : Le prix du gazole dépasse le prix essence">Centre Alsace : Le prix du gazole dépasse le prix essence</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/administration/mise-en-place-discsi-pour-le-partage-de-donnees/" rel="bookmark" title="Permanent Link: Mise en place d&#8217;iSCSI pour le partage de données">Mise en place d&#8217;iSCSI pour le partage de données</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/envoyer-des-mails-dans-le-passe/" rel="bookmark" title="Permanent Link: Envoyer des mails dans le passé">Envoyer des mails dans le passé</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/systeme/administration/fake-fencing-sur-red-hat6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android C2DM Notification push en bash avec wget</title>
		<link>http://blog.gaetan-grigis.eu/systeme/android-c2dm-notification-push-en-bash-avec-wget/</link>
		<comments>http://blog.gaetan-grigis.eu/systeme/android-c2dm-notification-push-en-bash-avec-wget/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 18:00:10 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[Système]]></category>
		<category><![CDATA[authentification]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[c2dm]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[wget]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=1116</guid>
		<description><![CDATA[plop à tous &#8230; encore un article &#171;&#160;borderline&#160;&#187; et completement useless &#8230; Cette fois pour tester les notifications C2DM (cloud to device messaging), l&#8217;équivalent Android des push iphone en un peu plus complexe nécessité d&#8217;avoir un compte google devant s&#8217;authentifier pour ensuite envoyer un message par device_id (le device id pouvant expirer, tout comme l&#8217;authentification), [...]]]></description>
			<content:encoded><![CDATA[<p>plop à tous &#8230; encore un article &laquo;&nbsp;borderline&nbsp;&raquo; et completement useless &#8230;</p>
<p>Cette fois pour tester les notifications C2DM (<a href="http://code.google.com/intl/fr/android/c2dm/">cloud to device messaging</a>), l&#8217;équivalent Android des push iphone en un peu plus complexe nécessité d&#8217;avoir un compte google devant s&#8217;authentifier pour ensuite envoyer un message par device_id (le device id pouvant expirer, tout comme l&#8217;authentification), pour les push iphone il suffisait d&#8217;avoir les tokens et basta ^^).</p>
<p>Mais au final le système répond plutôt rapidement, cela dit, en suivant de nombreux tuto sur le developement d&#8217;application utilisant C2DM (ici un premier <a href="http://www.vogella.de/articles/AndroidCloudToDeviceMessaging/article.html">tuto complet</a> et ici un second tuto <a href="http://blog.octo.com/notifications-push-android-c2dm/">assez complet et intéressant</a>).</p>
<p>Le problème c&#8217;est que pour tester le C2DM, la méthode nécessitant une authentification, et l&#8217;utilisation d&#8217;un header spé, pour tester l&#8217;envoi de notifications, certains recommendent de créer une seconde appli android pour envoyer les push, ou bien encore d&#8217;utiliser curl pour les requêtes, un outil qui n&#8217;est jamais installé de base sur une machine (la plupart des sytèmes unix intégrant wget, pourquoi utiliser curl?).</p>
<p>Donc pour le fun, voici ma version wgeté (j&#8217;ai découvert l&#8217;usage des headers sur wget) :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="co0">#!/bin/bash</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re4">$#</span> <span class="sy0">!</span>= <span class="nu0">3</span> <span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Usage : $0 &#39;mail&#39; &#39;reg_id&#39; &#39;message&#39;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">fi</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">email=</span><span class="st0">&quot;$1&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">registration_id=</span><span class="st0">&quot;$2&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">message=</span><span class="st0">&quot;$3&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re2">post_data=</span><span class="st0">&quot;registration_id=$registration_id&amp;data.message=$message&amp;collapse_key=0&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#91;</span> <span class="sy0">!</span> -f <span class="sy0">/</span>tmp<span class="sy0">/</span>ClientLogin <span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">read</span> -p <span class="st0">&quot;Password : &quot;</span> -e password</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">wget</span> <span class="st0">&quot;https://www.google.com/accounts/ClientLogin&quot;</span> &#8211;post-<span class="re2">data=</span><span class="st0">&quot;Email=$email&amp;Passwd=$password&amp;accountType=GOOGLE&amp;service=ac2dm&quot;</span> -qO- <span class="sy0">&gt;</span> <span class="sy0">/</span>tmp<span class="sy0">/</span>ClientLogin</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">fi</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re2">auth=</span>`<span class="kw2">cat</span> <span class="sy0">/</span>tmp<span class="sy0">/</span>ClientLogin<span class="sy0">|</span>grep <span class="st0">&quot;Auth&quot;</span><span class="sy0">|</span>awk <span class="st0">&#39;{split($0,array,&quot;Auth=&quot;); print array[2]}&#39;</span>`</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">wget</span> <span class="st0">&quot;https://android.apis.google.com/c2dm/send&quot;</span> &#8211;<span class="re2">header=</span><span class="st0">&quot;Authorization: GoogleLogin auth=$auth&quot;</span> &#8211;post-<span class="re2">data=</span><span class="st0">&quot;$post_data&quot;</span> &#8211;no-check-certificate -qO-</div>
</li>
</ol>
</div>
<p>Si le script ne renvoit rien, c&#8217;est bon, si il répond par un Error=UnMessageDerreur, c&#8217;est pas bon, bon dev <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=1116">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/android/android-application-de-controle-a-distancebackupinfo/" rel="bookmark" title="Permanent Link: [Android] application de contrôle à distance/backup/info">[Android] application de contrôle à distance/backup/info</a></li><li><a href="http://blog.gaetan-grigis.eu/mes-applicationsscripts/" rel="bookmark" title="Permanent Link: Mes Applications/Scripts">Mes Applications/Scripts</a></li><li><a href="http://blog.gaetan-grigis.eu/android/application-android-pour-le-telechargement-des-versions-de-cyanogen/" rel="bookmark" title="Permanent Link: Application android pour le téléchargement des versions de Cyanogen">Application android pour le téléchargement des versions de Cyanogen</a></li><li><a href="http://blog.gaetan-grigis.eu/android/compiler-cyanogen-android-froyo-sur-ubuntu/" rel="bookmark" title="Permanent Link: Compiler Cyanogen (android froyo) sur Ubuntu">Compiler Cyanogen (android froyo) sur Ubuntu</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/gresillement-du-driver-em28xx-et-kernel-2-6-28-sur-ubuntu-9-04/" rel="bookmark" title="Permanent Link: Grésillement du driver em28xx et kernel 2.6.28 sur ubuntu 9.04">Grésillement du driver em28xx et kernel 2.6.28 sur ubuntu 9.04</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/systeme/android-c2dm-notification-push-en-bash-avec-wget/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ossec et stats sur munin</title>
		<link>http://blog.gaetan-grigis.eu/systeme/administration/ossec-et-stats-sur-munin/</link>
		<comments>http://blog.gaetan-grigis.eu/systeme/administration/ossec-et-stats-sur-munin/#comments</comments>
		<pubDate>Mon, 16 May 2011 19:51:42 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[graphe]]></category>
		<category><![CDATA[munin]]></category>
		<category><![CDATA[ossec]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=1069</guid>
		<description><![CDATA[Plop à tous &#8230; Encore un article sur Ossec &#8230; avec cette fois-ci quelques exemples de statistiques à afficher avec munin. Les scripts sont extrêmement simple à modifier pour chercher des infos spécifique à certaines exploitations propres à une infrastructure données (web, mails, &#8230;). Le but de l&#8217;article est de présenter rapidement comment créer des [...]]]></description>
			<content:encoded><![CDATA[<p>Plop à tous &#8230;<br />
Encore un article sur Ossec &#8230; avec cette fois-ci quelques exemples de statistiques à afficher avec munin. Les scripts sont extrêmement simple à modifier pour chercher des infos spécifique à certaines exploitations propres à une infrastructure données (web, mails, &#8230;).</p>
<p>Le but de l&#8217;article est de présenter rapidement comment créer des graphes sur <a href="http://munin-monitoring.org/wiki/HowToWritePlugins">munin en bash</a><br />
<span id="more-1069"></span><br />
Le screen pour en mettre plein la vue ^^ :<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/05/munin.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/05/munin.png" alt="" title="munin" width="1022" height="665" class="aligncenter size-full wp-image-1070" /></a></p>
<p>Pour installer les graphes représentés ci-dessus, il faut modifier le fichier de configuration <strong>/etc/munin/plugin-conf.d/munin-node</strong>, et ajouter à la fin :</p>
<div class="geshi no config">
<ol>
<li class="li1">
<div class="de1">[ossec_*]
</div>
</li>
<li class="li1">
<div class="de1">user root
</div>
</li>
<li class="li1">
<div class="de1">env.logdir /chemin/vers/logs/ossec/logs</div>
</li>
</ol>
</div>
<p>Et les graphes (les infos fournit risque de ne pas être très précise, les grep étant fait sur des periodes de ~15 minutes et munin exécutant les scripts toutes les 5 minutes mais le but ici, est juste d&#8217;avoir un rapide aperçu des risques encourant par le serveur, donc ce niveau me suffit) :<br />
 de <strong>réponse active</strong> (nb ban/deban) <strong>/etc/munin/plugins/ossec_active_resp</strong> :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="co0">#!/bin/sh</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#91;</span> <span class="st0">&quot;$1&quot;</span> = <span class="st0">&quot;autoconf&quot;</span> <span class="br0">&#93;</span>; <span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;yes&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span> <span class="nu0">0</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">fi</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#91;</span> <span class="st0">&quot;$1&quot;</span> = <span class="st0">&quot;config&quot;</span> <span class="br0">&#93;</span>; <span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;graph_title Ossec #Active Response&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;graph_args &#8211;base 1000 -l 0 &quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;graph_vlabel Number of active response&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;graph_category Ossec&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;graph_scale no&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;c_add_actions.label Number of Rules added&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;c_add_actions.draw LINE2&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&#39;c_add_actions.min 0&#39;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;c_del_actions.label Number of Rules deleted&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;c_del_actions.draw LINE2&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&#39;c_del_actions.min 0&#39;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span> <span class="nu0">0</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">fi</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">LANG=</span>fr_FR.UTF<span class="nu0">-8</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">LC_ALL=</span>fr_FR.UTF<span class="nu0">-8</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">LOG_DATE=</span>`date<span class="sy0">|</span>sed -e <span class="st0">&#39;s/[0-9]:[0-9]* (UTC+[0-9]*)//gi&#39;</span>`</div>
</li>
<li class="li1">
<div class="de1"><span class="re2">NB_ADD=</span>$<span class="br0">&#40;</span><span class="kw2">cat</span> <span class="re1">$logdir</span><span class="sy0">/</span>active-responses.log <span class="sy0">|</span>grep <span class="st0">&quot;$LOG_DATE&quot;</span><span class="sy0">|</span>grep add<span class="sy0">|</span>wc -l<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">NB_DEL=</span>$<span class="br0">&#40;</span><span class="kw2">cat</span> <span class="re1">$logdir</span><span class="sy0">/</span>active-responses.log <span class="sy0">|</span>grep <span class="st0">&quot;$LOG_DATE&quot;</span><span class="sy0">|</span>grep del<span class="sy0">|</span>wc -l<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;c_add_actions.value ${NB_ADD}&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;c_del_actions.value ${NB_DEL}&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">exit</span> <span class="nu0">0</span></div>
</li>
</ol>
</div>
<p>d&#8217;<strong>attaque par service</strong> à mettre dans <strong>/etc/munin/plugins/ossec_attack_services</strong>  :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="co0">#!/bin/sh</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#91;</span> <span class="st0">&quot;$1&quot;</span> = <span class="st0">&quot;autoconf&quot;</span> <span class="br0">&#93;</span>; <span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;yes&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span> <span class="nu0">0</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">fi</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#91;</span> <span class="st0">&quot;$1&quot;</span> = <span class="st0">&quot;config&quot;</span> <span class="br0">&#93;</span>; <span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;graph_title Ossec #Attack per services&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;graph_args &#8211;base 1000 -l 0 &quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;graph_vlabel Number of attack per services&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;graph_category Ossec&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;graph_scale no&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;apache.label Apache&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;apache.draw LINE2&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&#39;apache.min 0&#39;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;ssh.label SSH&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;ssh.draw LINE2&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&#39;ssh.min 0&#39;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span> <span class="nu0">0</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">fi</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">LANG=</span>en_US.UTF<span class="nu0">-8</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">LOGDATE=</span>`<span class="kw2">date</span> +<span class="st0">&#39;%Y %b %d %H:%M:%S&#39;</span><span class="sy0">|</span>sed -e <span class="st0">&#39;s/<span class="es0">\(</span>.*[0-9]*:[0-9]<span class="es0">\)</span>[0-9]:[0-9]*/<span class="es0">\1</span>/g&#39;</span>`</div>
</li>
<li class="li1">
<div class="de1"><span class="re2">APACHE=</span>$<span class="br0">&#40;</span><span class="kw2">cat</span> <span class="re1">$logdir</span><span class="sy0">/</span>alerts<span class="sy0">/</span>alerts.log <span class="sy0">|</span>grep -A <span class="nu0">1</span> <span class="st0">&quot;$LOGDATE&quot;</span><span class="sy0">|</span>grep apache<span class="sy0">|</span>wc -l<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">SSH=</span>$<span class="br0">&#40;</span><span class="kw2">cat</span> <span class="re1">$logdir</span><span class="sy0">/</span>alerts<span class="sy0">/</span>alerts.log <span class="sy0">|</span>grep -A <span class="nu0">1</span> <span class="st0">&quot;$LOGDATE&quot;</span><span class="sy0">|</span>grep SSH<span class="sy0">|</span>wc -l<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;apache.value ${APACHE}&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;ssh.value ${SSH}&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">exit</span> <span class="nu0">0</span></div>
</li>
</ol>
</div>
<p>Ici, ça couvre rapidement les besoins d&#8217;un blogs : SSH et Apache, il suffit de rajouter autant de grep que l&#8217;on veut sur les logs d&#8217;autres softs qu&#8217;ossec et &#8230;</p>
<p>A noter que mon système de base est en français (très mauvaise idées car les logs d&#8217;ossec sont en FR, mais les logs récupéré sont en anglais, d&#8217;où le jeux avec les LANG et LC_ALL).</p>
<p>Et on oublie pas le :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">/</span>etc<span class="sy0">/</span>init.d<span class="sy0">/</span>munin-node restart</div>
</li>
</ol>
</div>
<p>Pour prendre en compte les scripts &#8230; </p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=1069">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/mes-applicationsscripts/" rel="bookmark" title="Permanent Link: Mes Applications/Scripts">Mes Applications/Scripts</a></li><li><a href="http://blog.gaetan-grigis.eu/non-classe/ossec-et-iptables-ban-a-duree-variable/" rel="bookmark" title="Permanent Link: Ossec et Iptables : ban à durée variable">Ossec et Iptables : ban à durée variable</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/administration/nouvelle-version-de-prewikka-sur-debian-testing/" rel="bookmark" title="Permanent Link: Nouvelle version de Prewikka sur debian testing">Nouvelle version de Prewikka sur debian testing</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/securiser-un-blog-wordpress-par-un-ips-avec-wpsyslog2-et-ossec/" rel="bookmark" title="Permanent Link: Sécuriser un blog WordPress par un IPS avec wpsyslog2 et ossec">Sécuriser un blog WordPress par un IPS avec wpsyslog2 et ossec</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/perl/notification-ossec-sur-twitter-en-perl/" rel="bookmark" title="Permanent Link: Notification Ossec sur Twitter en perl">Notification Ossec sur Twitter en perl</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/systeme/administration/ossec-et-stats-sur-munin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Améliorer les performances d&#8217;apache avec nginx</title>
		<link>http://blog.gaetan-grigis.eu/systeme/administration/ameliorer-les-performances-dapache-avec-nginx/</link>
		<comments>http://blog.gaetan-grigis.eu/systeme/administration/ameliorer-les-performances-dapache-avec-nginx/#comments</comments>
		<pubDate>Fri, 15 Apr 2011 18:00:04 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[reverse proxy]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=1032</guid>
		<description><![CDATA[Plop à tous &#8230; Comme vous l&#8217;aurez surement remarqué, la quasi-totalité de mes derniers articles sont tirés d&#8217;expériences (plutôt foireuses) me poussant souvent à remettre en questions certaines notions que je pensais acquises &#8230; cet article n&#8217;y couperas pas :s. Après avoir vénéré les serveurs apache pendant 7 ans, j&#8217;ai eu récemment à m’asseoir sur [...]]]></description>
			<content:encoded><![CDATA[<p>Plop à tous &#8230;</p>
<p>Comme vous l&#8217;aurez surement remarqué, la quasi-totalité de mes derniers articles sont tirés d&#8217;expériences (plutôt foireuses) me poussant souvent à remettre en questions certaines notions que je pensais acquises &#8230; cet article n&#8217;y couperas pas :s.</p>
<p>Après avoir vénéré les serveurs apache pendant 7 ans, j&#8217;ai eu récemment à m’asseoir sur mes convictions et à installer nginx pour avoir des performances convenable &#8230;<br />
<span id="more-1032"></span></p>
<h2>La question</h2>
<p>Pour la petite histoire, on m&#8217;avait demandé si une dedibox premier prix (2gig de ram et 2ghz de CPU) pouvait supporter dans les 60000 visiteurs/jours, j&#8217;ai répondu d&#8217;un oui fier et franc tout en appuyant ma réponse avec un petit calcul :</p>
<p>60000 visiteurs/12 heures (la nuit y&#8217;a pas beaucoup de visite &#8230;) * 100 ressources / 60 / 60 = 138 connexions par secondes. (Ce qui ne devrait pas être un gros problème pour apache).<br />
Donc au minimum la config apache devait avoir un StartServer à 150 et devait pouvoir monter à 500 en jouant sur les MinSpareServers et MaxSpareServers.</p>
<p>Après achat d&#8217;un serveur avec 4 gig de ram, et une rapide configuration, le serveur apache tourne, les transferts DNS sont effectués, et là 400 visiteurs arrivent &#8230; apache consomme toute la mémoire, le serveur swap, plus rien ne répond &#8230; c&#8217;est foutu, à l&#8217;arrache je passe le swapiness à 0 et je baisse le nombre de ThreadLimit à 80 (pour 4 gig de ram c&#8217;est le maximum que l&#8217;on peut avoir).</p>
<p>Et là, le site web ram &#8230; plus de 500 personnes tente de se connecter en simultanée &#8230;<br />
Pragmatique et très calme, le propriétaire du serveur me sort un gentil : &laquo;&nbsp;C&#8217;est pas toi qui m&#8217;avait dit que ça tiendrait le choc ?&nbsp;&raquo;.</p>
<h2>L&#8217;erreur</h2>
<p>Ma grosse erreur a été de ne pas calculer la ram nécessaire pour cette configuration :<br />
Un process apache consomme 50Meg (en moyenne avec un ThreadPerChild à 5) et 50Mo * 150 processus = 7500Mo de ram nécessaire rien que pour soutenir le nombre de connexions moyen (en soirée ça devait monter à 500!!), et plus de 20 Gig de ram pour supporter plus de 400 connexions secondes.</p>
<h2>La solution</h2>
<p>Au final j&#8217;ai donc du me tourner vers nginx en reverse proxy pour apache et en fournisseur de contenu statique, la config est faite en 5 minute :</p>
<p>Dans un fichier mis dans le dossier /etc/nginx/sites-enabled/, on créée le reverse proxy sur notre serveur apache (qui écoutera sur un autre port : 8080), et toute url qui se termine en jpg,js,png &#8230; est directement cherchée sur le disque et renvoyée au client sans passer par apache</p>
<div class="geshi no confignginx">
<ol>
<li class="li1">
<div class="de1">server {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; listen 80;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; server_name www.monsite.fr monsite.fr *.monsite.fr;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; location / {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; proxy_pass http://127.0.0.1:8080/;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; access_log off;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; }
</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|txt|xml)$ {
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; root /var/www;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; access_log /var/log/nginx/monsite.fr.access.log;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; error_log /var/log/nginx/monsite.fr.errors.log;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; expires 30d;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; }
</div>
</li>
<li class="li1">
<div class="de1">}</div>
</li>
</ol>
</div>
<p>Pour apache on modifie le port d&#8217;écoute général :<br />
Dans /etc/apache2/ports.conf</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">Listen <span class="nu0">8080</span></div>
</li>
</ol>
</div>
<p>Et on modifie tout les <strong>VirtualHost *:80</strong> dans les fichiers contenu dans /etc/apache2/sites-enabled/ par <strong>VirtualHost *:8080 </strong></p>
<p>Après un redémarrage d&#8217;apache et nginx, le serveur n&#8217;utilise que 700Mo de ram pour gérer 500 connexions/secondes, apache n&#8217;utilise que 20 processus, et nginx ne consomme rien (aucun module n&#8217;a été installé sur nginx). Cela dit, utiliser un apache worker voir un event worker aurait pu &laquo;&nbsp;corriger&nbsp;&raquo; ce problème, mais n&#8217;étant pas sûr du résultat, et étant dans le feu de l&#8217;action, je n&#8217;ai pas eu le temps de trop chercher de solution (on dirait pas comme ça, mais c&#8217;est éprouvant la vie d&#8217;un sysadmin <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ).</p>
<p>Cela dit, le résultat est très probant, le wordpress et le forum sont affichés de façon quasi instantannées, et le serveur ne ram plus du tout.</p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=1032">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/systeme/administration/syn-flooding-optimisation-php/" rel="bookmark" title="Permanent Link: Syn Flooding, optimisation PHP, &#8230;">Syn Flooding, optimisation PHP, &#8230;</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/administration/systeme-dalerte-via-sms-sur-vos-serveurs-grace-a-google-calendar/" rel="bookmark" title="Permanent Link: Système d&#8217;alerte via SMS sur vos serveurs grace à google calendar.">Système d&#8217;alerte via SMS sur vos serveurs grace à google calendar.</a></li><li><a href="http://blog.gaetan-grigis.eu/securite/crackage-de-md5-encore/" rel="bookmark" title="Permanent Link: Crackage de MD5 &#8230; encore">Crackage de MD5 &#8230; encore</a></li><li><a href="http://blog.gaetan-grigis.eu/ubuntu/une-wii-hd-pour-moins-de-100e-avec-dolphin-sur-ubuntu/" rel="bookmark" title="Permanent Link: Une Wii HD pour moins de 100€ avec Dolphin sur Ubuntu">Une Wii HD pour moins de 100€ avec Dolphin sur Ubuntu</a></li><li><a href="http://blog.gaetan-grigis.eu/seo/ameliorer-le-referencement-grace-aux-php/" rel="bookmark" title="Permanent Link: Améliorer le référencement grace aux php">Améliorer le référencement grace aux php</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/systeme/administration/ameliorer-les-performances-dapache-avec-nginx/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Connecter un réseau de machines virtuelles sur un réseau local</title>
		<link>http://blog.gaetan-grigis.eu/systeme/administration/connecter-un-reseau-de-machines-virtuelles-sur-un-reseau-local/</link>
		<comments>http://blog.gaetan-grigis.eu/systeme/administration/connecter-un-reseau-de-machines-virtuelles-sur-un-reseau-local/#comments</comments>
		<pubDate>Wed, 13 Apr 2011 20:13:34 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[arp]]></category>
		<category><![CDATA[connexion]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[réseau]]></category>
		<category><![CDATA[routeur]]></category>
		<category><![CDATA[virtuel]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=1023</guid>
		<description><![CDATA[Plop à tous &#8230; Les tutos concernant les interconnexions entre réseaux virtuelles et réseaux locaux sont légions sur internet, mais leur propretés pour le réseau ou leur flexibilité laissent souvent à désirer (entre les techniques foireuse à coup de nat iptables, les rejeux arp via parprouted et j&#8217;en passe). J&#8217;ai eu récemment mis en place [...]]]></description>
			<content:encoded><![CDATA[<p>Plop à tous &#8230;</p>
<p>Les tutos concernant les interconnexions entre réseaux virtuelles et réseaux locaux sont légions sur internet, mais leur propretés pour le réseau ou leur flexibilité laissent souvent à désirer (entre les techniques foireuse à coup de nat iptables, les rejeux arp via parprouted et j&#8217;en passe).<br />
<span id="more-1023"></span><br />
J&#8217;ai eu récemment mis en place un réseau de test sur vm (avec xen, mais les réseaux de virtualbox, vmware et &#8230; devraient eux aussi fonctionner), directement connecté sur un réseau local et j&#8217;ai trouvé une méthode bien plus simple et plus rapide à mettre en place : il suffit simplement d&#8217;utiliser la machine hôte en routeur/proxy arp (suivant le type de connexion de réseau).</p>
<p><strong>Pour un réseau inclut dans un autre réseau</strong> (genre pour les VM 10.75.75.0/28 dans le réseau physique 10.75.75.0/24 (dans ce cas, il faudra que le dhcp soit configuré pour fournir des ip à partir de 10.75.75.17)).</p>
<p>Il suffit de rajouter ceci dans le fichier /etc/sysctl.conf : </p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">net.ipv4.ip_forward = <span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">net.ipv4.conf.default.proxy_arp = <span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">net.ipv4.conf.all.proxy_arp = <span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">net.ipv4.conf.default.rp_filter = <span class="nu0">0</span></div>
</li>
</ol>
</div>
<p>Et l&#8217;hôte servira de routeur entre les &laquo;&nbsp;deux&nbsp;&raquo; réseaux, ça présence sera quasi-invisible (les paquets ARP de la première interface sont rejoués sur la seconde interface seulement si l&#8217;adresse existe sur sa seconde interface, ce qui évite les surcharges).</p>
<p><strong>Sur deux réseaux &laquo;&nbsp;séparés&nbsp;&raquo;</strong> (genre pour les VM 192.168.1.0/24 et pour le réseau physique 10.8.8.0/24)</p>
<p>Il suffit de rajouter ceci dans le fichier /etc/sysctl.conf : </p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">net.ipv4.ip_forward = <span class="nu0">1</span></div>
</li>
</ol>
</div>
<p>Et rajouter la route menant au réseau 192.168.1.0/24 via l&#8217;ip de l&#8217;hôte (mettre l&#8217;ip du réseau physique <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) dans le routeur du réseau 10.8.8.0/24.</p>
<p>Et comme ça on ne pourrit pas son réseau avec du rejeu ARP entre les réseaux physique et virtuel (ça peut augmenter de façon importante le traffic du réseau).</p>
<p>Ne pas oublier un coup de <strong>sysctl -p</strong> après modification du fichier <strong>/etc/sysctl.conf</strong></p>
<p>Et on n&#8217;a pas besoin d&#8217;ajouter de surcouche iptables avec des règles dans tout les sens à chaque machine que l&#8217;on ajoute dans le réseau.</p>
<p>Y&#8217;a peut être plus simple, mais celle-ci me semble assez propre et rapide à mettre en place, tout en permettant de garder des performances assez élevées.</p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=1023">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/systeme/open-source-reseau-dentreprise-securise-ou-pas/" rel="bookmark" title="Permanent Link: Open-Source : Réseau d&#8217;entreprise sécurisé &#8230; ou pas">Open-Source : Réseau d&#8217;entreprise sécurisé &#8230; ou pas</a></li><li><a href="http://blog.gaetan-grigis.eu/securite/souhaiter-de-joyeuses-fetes-en-piratant-les-dns-de-sa-boite/" rel="bookmark" title="Permanent Link: Souhaiter de joyeuses fêtes en piratant ses DNS ^^.">Souhaiter de joyeuses fêtes en piratant ses DNS ^^.</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/annuaire-ldap-et-authentification-unixlinux/" rel="bookmark" title="Permanent Link: Annuaire LDAP et authentification UNiX/Linux">Annuaire LDAP et authentification UNiX/Linux</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/administration/fake-fencing-sur-red-hat6/" rel="bookmark" title="Permanent Link: Fake fencing sur Red Hat6">Fake fencing sur Red Hat6</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/monter-un-cluster-avec-kerrighed-sur-son-reseau/" rel="bookmark" title="Permanent Link: Monter un cluster avec kerrighed sur son réseau">Monter un cluster avec kerrighed sur son réseau</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/systeme/administration/connecter-un-reseau-de-machines-virtuelles-sur-un-reseau-local/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pourrir des votes avec bash et wget</title>
		<link>http://blog.gaetan-grigis.eu/systeme/pourrir-des-votes-avec-bash-et-wget/</link>
		<comments>http://blog.gaetan-grigis.eu/systeme/pourrir-des-votes-avec-bash-et-wget/#comments</comments>
		<pubDate>Wed, 23 Mar 2011 19:50:29 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[bot]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[wget]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=1010</guid>
		<description><![CDATA[plop à tous &#8230; encore un script super useless (comme d&#8217;hab). L&#8217;utilité du script est de bourriner une url de vote pour plomber ou augmenter des stats (le site avait une vérification par ip, donc il fallait utiliser des proxy). Connaissant samair.ru(mon fournisseur de proxy), mon script ne fonctionnera qu&#8217;une semaine ou deux, mais comme [...]]]></description>
			<content:encoded><![CDATA[<p>plop à tous &#8230; encore un script super useless (comme d&#8217;hab).</p>
<p>L&#8217;utilité du script est de bourriner une url de vote pour plomber ou augmenter des stats (le site avait une vérification par ip, donc il fallait utiliser des proxy).<br />
Connaissant samair.ru(mon fournisseur de proxy), mon script ne fonctionnera qu&#8217;une semaine ou deux, mais comme je fait appel à pas mal de trucs intéressant dans ce script, je le partage, donc c&#8217;est juste informationnel et non pas fonctionnel. </p>
<p>Je rappel que l&#8217;utilisation de mon script n&#8217;engage que vous &#8230; vous êtes seul responsable en cas d&#8217;effet de bord, ou de dégâts causé par l&#8217;utilisation de se script &#8230; (j&#8217;ai quand même mis un sleep histoire de ne pas trop surcharger le serveur &#8230;).</p>
<p><span id="more-1010"></span></p>
<p>Le fonctionnement du script :</p>
<ul>
<li>mettre à jour sa liste de proxy (chez samair.ru &#8230; malgrès leur système anti-bot ^^).</li>
<li>nettoyer la liste des proxy en &laquo;&nbsp;décodant&nbsp;&raquo; leurs ports (le système de sécurité de samair.ru contre les bots)</li>
<li>boucler sur les proxy en tapant une url fournit en parametre du script</li>
</ul>
<p>Et sans plus attendre le script :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="co0">#!/bin/bash</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re2">UA=</span><span class="st0">&quot;Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">LETTER=</span><span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">NUMBER=</span><span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">function</span> updateProxy<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">wget</span> http:<span class="sy0">//</span>www.samair.ru<span class="sy0">/</span>proxy<span class="sy0">/</span>time<span class="nu0">-01</span>.htm</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; getvariable</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">cat</span> time<span class="nu0">-01</span>.htm<span class="sy0">|</span>perl -ne <span class="st0">&#39;while(m/&lt;td&gt;([0-9]+.[0-9]+.[0-9]+.[0-9]+)[^+]+([^<span class="es0">\)</span>]+)/g){print &quot;$1:$2<span class="es0">\n</span>&quot;;}&#39;</span><span class="sy0">|</span>tr -s <span class="re1">$LETTER</span> <span class="re1">$NUMBER</span><span class="sy0">|</span>sed <span class="st0">&quot;s/+//g&quot;</span> <span class="sy0">&gt;</span> proxy</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">function</span> getvariable<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re2">LETTER=</span>`<span class="kw2">cat</span> time<span class="nu0">-01</span>.htm<span class="sy0">|</span>perl -ne <span class="st0">&#39;while(m/([a-z])=([0-9]);/g){print &quot;$1&quot;;}&#39;</span>`</div>
</li>
<li class="li1">
<div class="de1"><span class="re2">NUMBER=</span>`<span class="kw2">cat</span> time<span class="nu0">-01</span>.htm<span class="sy0">|</span>perl -ne <span class="st0">&#39;while(m/([a-z])=([0-9]);/g){print &quot;$2&quot;;}&#39;</span>`</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">function</span> plombe<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> proxy <span class="kw1">in</span> `<span class="kw2">cat</span> proxy`</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">do</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">export</span> <span class="re2">http_proxy=</span><span class="re1">$proxy</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;Using proxy : $proxy&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">wget</span> &#8211;spider &#8211;user-<span class="re2">agent=</span><span class="st0">&quot;$UA&quot;</span> &#8211;no-cookies -T30 -t1 <span class="st0">&quot;$1&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">sleep</span> &nbsp;$<span class="br0">&#40;</span><span class="br0">&#40;</span>RANDOM<span class="sy0">%</span><span class="nu0">10</span><span class="nu0">+10</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">done</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">export</span> <span class="re2">http_proxy=</span><span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#91;</span> -z <span class="st0">&quot;$1&quot;</span> <span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">then</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;$0 need an url as parameter&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; updateProxy</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; plombe <span class="st0">&quot;$1&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">rm</span> time<span class="nu0">-01</span>.htm</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">fi</span></div>
</li>
</ol>
</div>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=1010">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/mes-applicationsscripts/" rel="bookmark" title="Permanent Link: Mes Applications/Scripts">Mes Applications/Scripts</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/gresillement-du-driver-em28xx-et-kernel-2-6-28-sur-ubuntu-9-04/" rel="bookmark" title="Permanent Link: Grésillement du driver em28xx et kernel 2.6.28 sur ubuntu 9.04">Grésillement du driver em28xx et kernel 2.6.28 sur ubuntu 9.04</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/android-c2dm-notification-push-en-bash-avec-wget/" rel="bookmark" title="Permanent Link: Android C2DM Notification push en bash avec wget">Android C2DM Notification push en bash avec wget</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/telecharger-sur-mu-via-bash/" rel="bookmark" title="Permanent Link: Telecharger sur MU via bash">Telecharger sur MU via bash</a></li><li><a href="http://blog.gaetan-grigis.eu/android/compiler-cyanogen-android-froyo-sur-ubuntu/" rel="bookmark" title="Permanent Link: Compiler Cyanogen (android froyo) sur Ubuntu">Compiler Cyanogen (android froyo) sur Ubuntu</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/systeme/pourrir-des-votes-avec-bash-et-wget/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SSL via GNUTLS sur apache2</title>
		<link>http://blog.gaetan-grigis.eu/systeme/administration/ssl-via-gnutls-sur-apache2/</link>
		<comments>http://blog.gaetan-grigis.eu/systeme/administration/ssl-via-gnutls-sur-apache2/#comments</comments>
		<pubDate>Sat, 12 Mar 2011 14:42:58 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[sni]]></category>
		<category><![CDATA[ssl]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=1001</guid>
		<description><![CDATA[Plop à tous &#8230; Aujourd&#8217;hui j&#8217;ai joué a &#171;&#160;qui a la plus grosse&#160;&#187; config ssl et c&#8217;est là que j&#8217;ai remarqué que le mod_ssl d&#8217;apache ne supportait que les protocoles SSLv3 et TLSv1.0 (le TLSv1.1 est en cours de dev) ce qui donnait un score pitoyable à mon blog sur ssllabs (qui permet d&#8217;avoir une [...]]]></description>
			<content:encoded><![CDATA[<p>Plop à tous &#8230;</p>
<p>Aujourd&#8217;hui j&#8217;ai joué a &laquo;&nbsp;qui a la plus grosse&nbsp;&raquo; config ssl et c&#8217;est là que j&#8217;ai remarqué que le mod_ssl d&#8217;apache ne supportait que les protocoles SSLv3 et TLSv1.0 (le TLSv1.1 est en cours de dev) ce qui donnait un score pitoyable à mon blog sur <a href="https://www.ssllabs.com">ssllabs</a> (qui permet d&#8217;avoir une idée du niveau de sécurité de l&#8217;implémentation ssl/tls d&#8217;un serveur web).</p>
<p><a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/03/mod_ssl.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/03/mod_ssl.png" alt="" title="mod_ssl" width="787" height="327" class="aligncenter size-full wp-image-1002" /></a><br />
(Au passage certaine banques françaises en sont encore au niveau F, donc c&#8217;était déjà pas trop mal pour un blog ^^).</p>
<p><span id="more-1001"></span></p>
<p>Ma configuration pour le mod_ssl ressemblait à ça, avec un certificat gratuit de chez startssl : </p>
<div class="geshi no config">
<ol>
<li class="li1">
<div class="de1">&lt;VirtualHost *:443&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;ServerName blog.gaetan-grigis.eu
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;DocumentRoot /dossier/de/mon/blog
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;SSLEngine on
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;SSLProtocol -all +TLSv1
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;SSLCipherSuite ALL:-kEDH:-RC2:-MD5:-RC4:-DES
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;SSLCertificateFile /dossier/de/cert/blog.crt
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;SSLCertificateKeyFile /dossier/de/cert/blog.key
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;SSLCertificateChainFile /dossier/de/cert/sub.class1.server.ca.crt
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;SSLCACertificateFile /dossier/de/cert/ca.crt
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;SetEnvIf User-Agent &quot;.*MSIE.*&quot; nokeepalive ssl-unclean-shutdown
</div>
</li>
<li class="li1">
<div class="de1">&lt;/VirtualHost&gt;</div>
</li>
</ol>
</div>
<p>Mais bon, si l&#8217;on peut faire mieux gratuitement, on ne va pas s&#8217;en priver, donc on installe :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">apt-get <span class="kw2">install</span> libapache2-mod-gnutls</div>
</li>
<li class="li1">
<div class="de1">a2enmod gnutls</div>
</li>
</ol>
</div>
<p>A noter au passage, que gnutls supporte le SNI (utilisation de plusieurs certificat SSL sur une seul et même IP), et le protocole TLSv1.1</p>
<p>et on rajoute la conf : </p>
<div class="geshi no conf">
<ol>
<li class="li1">
<div class="de1">&lt;VirtualHost *:443&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;ServerName blog.gaetan-grigis.eu
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;DocumentRoot /dossier/de/mon/blog
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;GnuTLSEnable &nbsp;on
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;GnuTLSCertificateFile /dossier/certificat/gnutls/blog-gnutls.crt
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;GnuTLSKeyFile /dossier/certificat//gnutls/blog-gnutls.key
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;GnuTLSPriorities NONE:+VERS-TLS1.1:+VERS-TLS1.0:+AES-256-CBC:+DHE-RSA:+RSA:+SHA1:+COMP-NULL:+COMP-DEFLATE
</div>
</li>
<li class="li1">
<div class="de1">&lt;/VirtualHost&gt;</div>
</li>
</ol>
</div>
<p>Au passage, on remarque qu&#8217;il y a des fichiers en moins entre la config du mod_ssl et celle de gnutls &#8230; WTF ?!, en fait on a pas besoin du ca.crt, par contre, il faut concaténer le certificat du site (blog.crt) avec celui de la &laquo;&nbsp;chaine&nbsp;&raquo; (sub.class1.server.ca.crt).</p>
<p>Ce que l&#8217;on peut faire par un simple :</p>
<div class="geshi no config">
<ol>
<li class="li1">
<div class="de1">cat blog.crt sub.class1.server.ca.pem &gt; blog-gnutls.crt</div>
</li>
</ol>
</div>
<p>On peu lancer un <strong>apache2ctl configtest</strong>, pour vérifier si la conf est bonne et redémarrer si il n&#8217;y a aucun problème.<br />
Pour ma part avec startssl, le format de mon fichier key n&#8217;était pas supporté :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">GnuTLS: Failed to Import Private Key <span class="st0">&#39;/mon/dossier/de/cert/gnutls/blog-gnutls.key&#39;</span>: <span class="br0">&#40;</span><span class="nu0">-207</span><span class="br0">&#41;</span> Base64 unexpected header error.</div>
</li>
</ol>
</div>
<p>Il a fallut supprimer la protection par mot de passe de la clé (pas bien :s), que j&#8217;ai fait sur le site de startssl, ou que l&#8217;on peut faire via la commande <a href="http://www.madboa.com/geek/openssl/#key-removepass">openssl</a>.</p>
<p>Et si l&#8217;on refait un test, on a un <a href="https://www.ssllabs.com/ssldb/analyze.html?d=blog.gaetan-grigis.eu">meilleur score</a> :<br />
<a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/03/mod_gnutls.png"><img src="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/03/mod_gnutls.png" alt="" title="mod_gnutls" width="788" height="289" class="aligncenter size-full wp-image-1004" /></a>.</p>
<p>Le but de cet article n&#8217;était pas de dénigrer le mod_ssl (le fait que TLSv1.1 et TLSv1.2 ne soit pas encore supporter est juste due à ma version d&#8217;openssl de ma debian 6.0), mais juste de présenter le module gnutls (et son utilisation avec des certificats de chez startssl) qui ne semble pas supporter la renégociation et la compression (malgré l&#8217;utilisation du mot clé COMP-DEFLATE), mais qui peut supporter l&#8217;authentification par clé pgp et plein d&#8217;autre truc &#8230;</p>
<p>Un peu de doc au passage sur les différents systèmes de chiffrement :</p>
<ul>
<li><a href="http://www.carbonwind.net/TLS_Cipher_Suites_Project/tls_ssl_cipher_suites_annex_a1_main.htm">Les ciphers suites</a></li>
<li>La doc <a href="http://www.outoforder.cc/projects/apache/mod_gnutls/docs/">officiel</a></li>
</ul>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=1001">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/systeme/administration/utiliser-plusieurs-certificats-ssl-sur-un-seul-serveur-apache/" rel="bookmark" title="Permanent Link: Utiliser plusieurs certificats SSL sur un seul serveur apache">Utiliser plusieurs certificats SSL sur un seul serveur apache</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/securite-coupler-lids-prelude-avec-mod_security/" rel="bookmark" title="Permanent Link: Sécurité : Coupler l&#8217;IDS Prelude avec mod_security">Sécurité : Coupler l&#8217;IDS Prelude avec mod_security</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/administration-de-serveurs-apache-virtualhost/" rel="bookmark" title="Permanent Link: Administration de serveurs apache : virtualhost">Administration de serveurs apache : virtualhost</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/des-certificats-ssl-gratuit-pour-vos-sites-web/" rel="bookmark" title="Permanent Link: Des certificats SSL gratuit et valide pour vos sites web">Des certificats SSL gratuit et valide pour vos sites web</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/administration/reduire-la-consommation-de-bande-passante-apache-mod_deflate/" rel="bookmark" title="Permanent Link: Réduire la consommation de bande passante (Apache mod_deflate)">Réduire la consommation de bande passante (Apache mod_deflate)</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/systeme/administration/ssl-via-gnutls-sur-apache2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Protection DDos et ban de masse</title>
		<link>http://blog.gaetan-grigis.eu/systeme/protection-ddos-et-ban-de-masse/</link>
		<comments>http://blog.gaetan-grigis.eu/systeme/protection-ddos-et-ban-de-masse/#comments</comments>
		<pubDate>Sat, 05 Mar 2011 12:58:41 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Système]]></category>
		<category><![CDATA[ddos]]></category>
		<category><![CDATA[flood]]></category>
		<category><![CDATA[ossec]]></category>
		<category><![CDATA[syn]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=982</guid>
		<description><![CDATA[Plop &#8230; J&#8217;ai eu droit à ma première intervention sur serveur DDosé, au départ 2/3 machines qui envoyaient des paquets SYN en boucle sur un serveur minecraft (écrit en java donc avec 200 SYN/sec le serveur tombe), et à la fin c&#8217;est environ 150 machines qui se sont relayés pour Dosé. La plupart du temps [...]]]></description>
			<content:encoded><![CDATA[<p>Plop &#8230;<br />
J&#8217;ai eu droit à ma première intervention sur serveur DDosé, au départ 2/3 machines qui envoyaient des paquets SYN en boucle sur un serveur minecraft (écrit en java donc avec 200 SYN/sec le serveur tombe), et à la fin c&#8217;est environ 150 machines qui se sont relayés pour Dosé.</p>
<p>La plupart du temps lorsque l&#8217;on recherche des protections DDos on trouve des sites qui recommandent de mettre direct un limit sur un port sans tenir compte de la source &#8230; ce qui peut se révéler utile sur des petits serveurs, mais pas lorsque l&#8217;on tourne à plusieurs centaines de connexion seconde.</p>
<p><span id="more-982"></span><br />
La sécurisation de base est très simple, il &laquo;&nbsp;suffit&nbsp;&raquo; de limiter le nombre de syn sur le port particulier du service, ici le 25565, mais dans le cas des serveurs de jeux, il peut arriver que l&#8217;on dépasse le nombre de SYN (genre lors d&#8217;une deco/timeout), donc côté firewall ça donne ce genre de règle :</p>
<div class="geshi no iptable">
<ol>
<li class="li1">
<div class="de1">/sbin/iptables -N syn-flood
</div>
</li>
<li class="li1">
<div class="de1">/sbin/iptables -A INPUT -p tcp &#8211;syn &#8211;dport 25565 -m connlimit &#8211;connlimit-above 1 -j syn-flood
</div>
</li>
<li class="li1">
<div class="de1">/sbin/iptables -A syn-flood -m limit &#8211;limit 2/s &#8211;limit-burst 5 -j RETURN
</div>
</li>
<li class="li1">
<div class="de1">/sbin/iptables -A syn-flood -j LOG &#8211;log-prefix &quot;SYN-FLOOD &quot;
</div>
</li>
<li class="li1">
<div class="de1">/sbin/iptables -A syn-flood -j DROP</div>
</li>
</ol>
</div>
<p>Pour les explications :<br />
Si il y a plusieurs paquets TCP SYN sur le port 25565 provenant d&#8217;une même IP on lui applique la règle &laquo;&nbsp;syn-flood&nbsp;&raquo;.<br />
Tant qu&#8217;il y a moins de 2 syn/seconde, avec un burst à 5 syn on laisse passer, sinon, on LOG le paquet (histoire d&#8217;avoir une trace de l&#8217;ip) et on drop.</p>
<p>Le problème c&#8217;est que si l&#8217;on subit une attaque soutenu, le firewall va bosser en continu à checker les règles, mais comme on a log l&#8217;ip, on peut y mettre une règle avec OSSEC et mettre un ban permanent.</p>
<p>La règle de base à rajouter dans rules/local_rules.xml :</p>
<div class="geshi no xml">
<ol>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;rule</span> <span class="re0">id</span>=<span class="st0">&quot;100034&quot;</span> <span class="re0">level</span>=<span class="st0">&quot;9&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;if_sid<span class="re2">&gt;</span></span></span>4100<span class="sc3"><span class="re1">&lt;/if_sid<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;match<span class="re2">&gt;</span></span></span>SYN-FLOOD<span class="sc3"><span class="re1">&lt;/match<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;description<span class="re2">&gt;</span></span></span>SYN Flood Attempt<span class="sc3"><span class="re1">&lt;/description<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;/rule<span class="re2">&gt;</span></span></span></div>
</li>
</ol>
</div>
<p>Qui aura pour effet de bannir pour un certain temps (par défaut 6 minutes) l&#8217;ip incriminée.</p>
<p>Génial, mais comme c&#8217;était du flood continu, une fois les 6 minutes passé, le flood continuait, et comme le flood se faisait avec 150 machines, le serveur était inondé en continu, malgré les règles iptables.</p>
<p>Donc on peut reprendre, <a href="http://blog.gaetan-grigis.eu/systeme/ossec-et-sshbannissement-ip-definitif-de-cracker/">mes règles de ban définitif</a> et les appliquer ici.</p>
<p>Donc on rajoute dans local_rules.xml</p>
<div class="geshi no xml">
<ol>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;rule</span> <span class="re0">id</span>=<span class="st0">&quot;100035&quot;</span> <span class="re0">level</span>=<span class="st0">&quot;5&quot;</span> <span class="re0">frequency</span>=<span class="st0">&quot;2&quot;</span> <span class="re0">timeframe</span>=<span class="st0">&quot;370&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;if_matched_sid<span class="re2">&gt;</span></span></span>100034<span class="sc3"><span class="re1">&lt;/if_matched_sid<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;same_source_ip</span> <span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;description<span class="re2">&gt;</span></span></span>Multiple SYN Flood Attempt<span class="sc3"><span class="re1">&lt;/description<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;/rule<span class="re2">&gt;</span></span></span></div>
</li>
</ol>
</div>
<p>Et on modifie /etc/ossec.conf en ajoutant l&#8217;id 100035 dans &laquo;&nbsp;l&#8217;active response&nbsp;&raquo; du &laquo;&nbsp;deny-for-life&nbsp;&raquo; de mon autre article (dans mon cas j&#8217;ai réécrit la règle pour utiliser le firewall) et boum &#8230; après 4 heures avec ces règles un coup de :</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">iptables -L FORWARD -n<span class="sy0">|</span>wc -l</div>
</li>
</ol>
</div>
<p>Retourne 150 ip bannit et plus de SYN sur le port 25565 &#8230; victoire !! Par contre : </p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">iptables -L -v -n</div>
</li>
</ol>
</div>
<p>Montre que le firewall drop toujours encore des paquets sur les ip banni &#8230; l&#8217;attaque est toujours en cours, mais semble endiguée \o/.</p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=982">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/securite/ddos-le-retour-a-5gbs-s/" rel="bookmark" title="Permanent Link: DDoS le retour &#8230; à 5gb/s :s">DDoS le retour &#8230; à 5gb/s :s</a></li><li><a href="http://blog.gaetan-grigis.eu/securite/protection-ddos-soft/" rel="bookmark" title="Permanent Link: Protection Ddos (soft)">Protection Ddos (soft)</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/administration/tentative-de-hack-quand-les-kikoolols-attaquent/" rel="bookmark" title="Permanent Link: Tentative de Hack &#8230; quand les kikoolols attaquent!!!">Tentative de Hack &#8230; quand les kikoolols attaquent!!!</a></li><li><a href="http://blog.gaetan-grigis.eu/mes-applicationsscripts/" rel="bookmark" title="Permanent Link: Mes Applications/Scripts">Mes Applications/Scripts</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/administration/syn-flooding-optimisation-php/" rel="bookmark" title="Permanent Link: Syn Flooding, optimisation PHP, &#8230;">Syn Flooding, optimisation PHP, &#8230;</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/systeme/protection-ddos-et-ban-de-masse/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>[OSSEC et SSH]Bannissement ip définitif de cracker</title>
		<link>http://blog.gaetan-grigis.eu/systeme/ossec-et-sshbannissement-ip-definitif-de-cracker/</link>
		<comments>http://blog.gaetan-grigis.eu/systeme/ossec-et-sshbannissement-ip-definitif-de-cracker/#comments</comments>
		<pubDate>Sat, 19 Feb 2011 12:59:53 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Système]]></category>
		<category><![CDATA[ban]]></category>
		<category><![CDATA[cracker]]></category>
		<category><![CDATA[fail2ban]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[ossec]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[syngress]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=959</guid>
		<description><![CDATA[plop, today du ban au menu, à la base j&#8217;utilise au minimum fail2ban pour me protéger des attaques par bruteforce et ossec pour une protection plus personnalisée, mais depuis peu, j&#8217;ai remarqué que bannir un host 5/10 minutes ne servait à rien contre des machines automatisées dédiée à cette tâche, et une fois la période [...]]]></description>
			<content:encoded><![CDATA[<p>plop,</p>
<p>today du ban au menu, à la base j&#8217;utilise au minimum fail2ban pour me protéger des attaques par bruteforce et ossec pour une protection plus personnalisée, mais depuis peu, j&#8217;ai remarqué que bannir un host 5/10 minutes ne servait à rien contre des machines automatisées dédiée à cette tâche, et une fois la période de ban terminée recommençaient leur manège, me polluant de mails me signalant une tentative de bruteforce.<br />
<span id="more-959"></span><br />
Alors j&#8217;ai imaginé des règles plus simple pour mettre en place un ban définitif des méchants cracker pour ossec :<br />
L&#8217;idée est simple, j&#8217;ai deux utilisateurs sur ma machine (toto et root, root ne s&#8217;authentifiant que par clé et toto par mot de passe) :</p>
<ul>
<li>tout utilisateur tentant de se logguer en root via mot de passe est banni définitivement</li>
<li>tout utilisateur tentant de se logguer via un utilisateur invalide (autre que toto) est banni définitivement</li>
</ul>
<p>Comme ça, on évite les bruteforces à répétition, et on est tranquille pour longtemps avec ces ip là.</p>
<p>Côté règles sur ossec, c&#8217;est assez simple à mettre en place :<br />
<strong>Dans le fichier rules/local_rules.xml on ajoute entre les balises (group) :</strong></p>
<div class="geshi no conf">
<ol>
<li class="li1">
<div class="de1">&nbsp; &lt;rule id=&quot;100033&quot; level=&quot;10&quot;&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;if_sid&gt;5716&lt;/if_sid&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;match&gt;root&lt;/match&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;description&gt;A noob tryed to login as root with password !!&lt;/description&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;group&gt;authentication_failed,&lt;/group&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &lt;/rule&gt;</div>
</li>
</ol>
</div>
<p>La règles 5716 (if_sid) étant celle des authentifications failed par mot de passe  et match root  pour trouver l&#8217;utilisateur root (ça veux donc dire que si on à le bon mot de passe root du premier coup, on peut quand même se logger, ce qui peut être utile dans certain cas, et assez improbable pour un cracker de se logguer).</p>
<p><strong>Ensuite on ajoute dans le fichier etc/ossec.conf</strong></p>
<div class="geshi no conf">
<ol>
<li class="li1">
<div class="de1">&nbsp; &lt;command&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;name&gt;host-deny-for-life&lt;/name&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;executable&gt;host-deny.sh&lt;/executable&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;expect&gt;srcip&lt;/expect&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;timeout_allowed&gt;no&lt;/timeout_allowed&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &lt;/command&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &lt;active-response&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;command&gt;host-deny-for-life&lt;/command&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;location&gt;local&lt;/location&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;rules_id&gt;5710,100033&lt;/rules_id&gt;
</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &lt;/active-response&gt;</div>
</li>
</ol>
</div>
<p>La règle 100033 étant celle que l&#8217;on vient de rajouter et la règle 5710, étant l&#8217;utilisation d&#8217;un mauvais login, et on applique à ces deux règles la commande host-deny-for-life qui rajoute l&#8217;ip au fichier /etc/hosts.deny sans timeout (pour autoriser l&#8217;ip, il faudra l&#8217;enlever à la main).</p>
<p>Et comme ça plus de bruteforce sur des utilisateurs invalide et sur root.</p>
<p>Cela dit, on peut rajouter se genre de système de ban pour le serveur smtp lorsque d&#8217;autres machines tente de l&#8217;utiliser comme relay, voir faire des règles de ban automatique pour des serveurs de jeux vidéo avec des logs sur des cheaters, &#8230;</p>
<p>Si vous voulez en savoir plus sur ossec, un bouquin de syngress (de très bon bouquin sur l&#8217;IT en général) dédié à Ossec a été en partie publié et téléchargeable en pdf sur le <a href="http://www.ossec.net/main/week-of-ossec-2woo-oct-17-23">site officiel</a> (ça couvre l&#8217;installation, la configuration et la création de règle maison).</p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=959">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/non-classe/ossec-et-iptables-ban-a-duree-variable/" rel="bookmark" title="Permanent Link: Ossec et Iptables : ban à durée variable">Ossec et Iptables : ban à durée variable</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/protection-ddos-et-ban-de-masse/" rel="bookmark" title="Permanent Link: Protection DDos et ban de masse">Protection DDos et ban de masse</a></li><li><a href="http://blog.gaetan-grigis.eu/securite/crackage-de-md5-encore/" rel="bookmark" title="Permanent Link: Crackage de MD5 &#8230; encore">Crackage de MD5 &#8230; encore</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/securiser-un-blog-wordpress-par-un-ips-avec-wpsyslog2-et-ossec/" rel="bookmark" title="Permanent Link: Sécuriser un blog WordPress par un IPS avec wpsyslog2 et ossec">Sécuriser un blog WordPress par un IPS avec wpsyslog2 et ossec</a></li><li><a href="http://blog.gaetan-grigis.eu/programmation/perl/notification-ossec-sur-twitter-en-perl/" rel="bookmark" title="Permanent Link: Notification Ossec sur Twitter en perl">Notification Ossec sur Twitter en perl</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/systeme/ossec-et-sshbannissement-ip-definitif-de-cracker/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Configuration de processus apache au poil &#8230;</title>
		<link>http://blog.gaetan-grigis.eu/systeme/configuration-de-processus-apache-au-poil/</link>
		<comments>http://blog.gaetan-grigis.eu/systeme/configuration-de-processus-apache-au-poil/#comments</comments>
		<pubDate>Sat, 05 Feb 2011 13:45:55 +0000</pubDate>
		<dc:creator>Gaëtan</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Système]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[configuration]]></category>
		<category><![CDATA[crash]]></category>
		<category><![CDATA[memoire]]></category>
		<category><![CDATA[ovh]]></category>
		<category><![CDATA[processus]]></category>

		<guid isPermaLink="false">http://blog.gaetan-grigis.eu/?p=947</guid>
		<description><![CDATA[salut à tous &#8230; Aujourd&#8217;hui on va parler configuration de processus apache &#8230; J&#8217;ai eu l&#8217;occasion en 3-4 jours de connaitre des problèmes sur plusieurs serveurs différents liée à une surconsommation de mémoire due à apache et à sa gestion des processus faisant littéralement planter mon blog (ça swap mal un RPS! donc 2 crash de la [...]]]></description>
			<content:encoded><![CDATA[<p>salut à tous &#8230;</p>
<p>Aujourd&#8217;hui on va parler configuration de processus apache &#8230; J&#8217;ai eu l&#8217;occasion en 3-4 jours de connaitre des problèmes sur plusieurs serveurs différents liée à une surconsommation de mémoire due à apache et à sa gestion des processus faisant littéralement planter mon blog (ça swap mal un RPS! donc 2 crash de la machine en 24 heures &#8230; avec les nouveaux prix des serveurs dédiés de chez online.net &#8230; je risque probablement de migrer prochainement <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ).</p>
<p><span id="more-947"></span>Néanmoins ce genre d&#8217;incident n&#8217;empêche pas de revoir sa configuration, d&#8217;autant plus que comme pas mal d&#8217;administrateur débutant, l&#8217;installation d&#8217;un serveur web consiste en un simple apt-get install apache2 (en prenant le temps quand même d&#8217;installer modsecurity et les dernières règles depuis le site officiel) et pis c&#8217;est tout.</p>
<p>On se retrouve donc avec une configuration qui plafonne à 150 clients max en simultanés, sachant que mon blog n&#8217;a que 200 visites par jours, cette configuration est vraiment surestimée.</p>
<h2>1.L&#8217;estimation du nombre de visiteurs/connexions</h2>
<p>La première chose à savoir c&#8217;est bien entendu, le nombre de visite, mais aussi le nombre de fichiers auxquels les personnes auront accès lors de leurs première visite, car lors d&#8217;une visite, on télécharge la page html, mais aussi toutes ses ressources liées (css, js, images, &#8230;), pour un site moyen, il y a entre 20 et 50 connexions quasi simultanée (avec entre 1 et 10 secondes d&#8217;écart, suivant son type de connexion).</p>
<p>Pour mon site, j&#8217;utilise un <a href="http://blog.gaetan-grigis.eu/systeme/administration/mise-en-place-dun-cdn-via-google-app-engine/">CDN</a>, hébergé par google (GAE), qui stock toutes mes données statiques (js,css,images), résuisant de façon assez significative le nombre de connexion sur mon serveur, comme le prouve le pannel de ressource de chrome :</p>
<p><a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/02/nbrequete.png"><img class="aligncenter size-full wp-image-948" title="nbrequete" src="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/02/nbrequete.png" alt="" width="465" height="496" /></a>Il n&#8217;y a donc qu&#8217;une seule requête effectuée sur mon serveur lors de la connexion d&#8217;un visiteur, le reste étant directement lié au domaine cdn.gaetan-grigis.eu (hébergé sur appengine et donc ne consommant pas de ressource pour mon serveur web).</p>
<p>Sachant qu&#8217;en plus de n&#8217;avoir que 200 visiteurs par jours, je n&#8217;ai donc que 200 connexions http à gérer (gràce au CDN, ce qui n&#8217;est pas le cas de tout les serveurs &#8230;).</p>
<p>En partant de ces chiffres, je peux désormais passer à l&#8217;étape suivante :</p>
<h2>2.Découverte de la cible</h2>
<p>Apache ayant plusieurs type de fonctionnement, suivant qu&#8217;il soit en prefork ou en worker, nous devons donc savoir à quoi nous avons à faire pour ensuite le configurer :</p>
<pre>sudo aptitude search apache2|grep "^i"</pre>
<p>qui renvoit le type de serveur installé, ici un mpm prefork (surligné en jaune) :</p>
<p><a href="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/02/serveur.png"><img class="aligncenter size-full wp-image-949" title="serveur" src="http://blog.gaetan-grigis.eu/wp-content/uploads/2011/02/serveur.png" alt="" width="804" height="99" /></a></p>
<p>Je peux donc passer à la suite :</p>
<h2>3.Détection de la menace</h2>
<p>On peut passer à la configuration!! Comme je suis en mpm_prefork, j&#8217;ai juste à trouver les lignes correspondantes, qui par défaut contiennent ceci :</p>
<pre>&lt;IfModule mpm_prefork_module&gt;
StartServers          5
MinSpareServers       5
MaxSpareServers      10
MaxClients          150
MaxRequestsPerChild   0
&lt;/IfModule&gt;</pre>
<p>Ce qui signifie :</p>
<ul>
<li>StartServers : nombre de serveur démarré par défaut</li>
<li>MinSpareServers : nombre de serveur de &laquo;&nbsp;rechange&nbsp;&raquo; <span style="color: #ff0000;">EN PLUS</span> du nombre de StartServers (donc par défaut 10 processus au démarrage!!!).</li>
<li>MaxSpareServers : nombre maximal de serveur de &laquo;&nbsp;rechange&nbsp;&raquo;, si ces serveurs ne sont pas utilisés, leurs processus sont tués!! BOUCHERIE!!! (façon Flander&#8217;s Company <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> )</li>
<li>MaxClients : Nombre de clients simultanées &#8230; <a href="http://httpd.apache.org/docs/2.0/mod/mpm_common.html#maxclients">en prefork</a>, il s&#8217;agit du nombre de process max qui peuvent être crée. Son nombre multiplié à la taille moyenne d&#8217;un processus apache ne doit pas dépasser la taille de la ram dispo (sinon le kernel devra lutter pour libérer ce qu&#8217;il peux).</li>
<li>MaxRequestsPerChild : nombre de requête qu&#8217;un processus va faire avant de mourir (0 = infinie), si vos applications web (phpmyadmin, wp, &#8230;) bouffe beaucoup de mémoire, cette mémoire sera consommée jusqu&#8217;à ce que le processus soit tué, donc plus vous avez d&#8217;application gourmande et plus ce chiffre est élevé, plus apache va consommé de mémoire (et si en plus ce chiffre est 0, la mémoire ne sera jamais libéré!!).</li>
</ul>
<p>Il y a donc de l&#8217;optimisation à faire !!</p>
<h2>4.Les calculs pour l’éradication de la menace</h2>
<p>Mes petits calculs pour optimiser la bête et ne plus utiliser le swap lorsqu&#8217;apache déconne : Un <a href="http://www.ovh.com/fr/produits/rps1.xml">RPS chez OVH</a> (probablement un SC chez online.net d&#8217;ici peut).</p>
<p>J&#8217;ai donc 512Mo de ram (493636 ko pour être exact <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) à partager entre plusieurs services : MYSQL et Apache principalement.</p>
<p>En faisant quelque test, avec unMaxRequestsPerChild à 3, un process apache en fin de vie utilisera 50Mo (avec en application principal WordPress).</p>
<p>Avec ma machine et les contraintes de services j&#8217;ai donc : 120Mo (Mysql) + 100Mo (Système : IPS, &#8230;)  + 100Mo (libre pour des bursts ou autre) = 320Mo, il me reste donc 200Mo de libre pour apache (200Mo/50Mo) = 4 processus.</p>
<p>Donc par défaut, ma machine pourra avoir 3/4 processus apache qui tourne en continue avec plusieurs processus apache en burst. Sachant qu&#8217;en plus le kernel est censé un peu gérer la mémoire lorsque ça devient serré, ça devrait pouvoir tenir mon nombre de visiteurs, sans avoir à exploser ma mémoire inutilement &#8230; au pire, les visiteurs patienteront <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Note : Mon calcul est très sévère, mon serveur peut faire tourner facilement une dizaine de processus apache sans trop de soucie, mais lors de pic de fréquentation élevé, il va commencer à swaper et devenir très lent (sur les RPS le disque dur est en réseau à 1Mo/s ..). Mais, avec cette configuration, je peux servir 3/4 clients par seconde, ce qui est amplement suffisant au vue de mes besoins.</p>
<h2>5.Mise en place de la configuration</h2>
<p>J&#8217;ai donc remplacé mon ancienne configuration par celle-ci, qui correspond à mes besoins actuelle.</p>
<pre>&lt;IfModule mpm_prefork_module&gt;
StartServers          2 #démarrage de 2 processus
MinSpareServers       1 #1 processus de rechange par défaut donc 3 processus au démarrage
MaxSpareServers       3 #3 processus de rechange max, le reste étant tué lorsqu'il rentre en inactivité
MaxClients           12 #12 process max (12 processus*40Mo = 480Mo Max pour apache en cas de gros coup dur), 40Mo étant la taille moyenne d'un processus apache.
MaxRequestsPerChild   3 #une fois que le process à fait 3 réponse, il se tue et un autre est crée, histoire de renouveler la mémoire
&lt;/IfModule&gt;</pre>
<p>Et on oublie pas de redémarrer <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Après plusieurs heures de fonctionnement, mon RPS a toujours 100Mo de libre (à part lorsque le nombre de visiteur augmente de façon importante), ce qui était plus ou moins le but de cette configuration.</p>
<h2>6.Note</h2>
<p>Si votre machine fait uniquement tourner un serveur apache (sur une machine stable), il n&#8217;y a pas besoin d&#8217;être aussi strict que je l&#8217;ai été (il n&#8217;y a pas de mal à swapper <img src='http://blog.gaetan-grigis.eu/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ), mais visiblement chez OVH, dès qu&#8217;une machine swap (et pas seulement sur les RPS apparement), elle ne répond plus très bien et si apache est mal configuré, il faudra généralement redémarrer apache pour le forcer à libérer toute la mémoire qu&#8217;il vampirise, ce qui peut poser problème pour des serveurs de jeux ou autre &#8230;</p>
<p>Pour mes calculs je me suis basé sur la valeur moyenne de la mémoire consommée par MES processus apaches (cette taille peut dépendre des modules utilisés et de leurs configurations : mod_php, mod_security, &#8230;). Cette taille peut donc changer, suivant votre configuration.</p>

                            <div id="aspdf">
                                <a href="http://blog.gaetan-grigis.eu/wp-content/plugins/as-pdf/generate.php?post=947">
                                    <span>Télécharger l'article au format PDF</span>
                                </a>
                            </div>
                        <hr /><h2>Articles similaires : </h2><ul><li><a href="http://blog.gaetan-grigis.eu/systeme/administration/ameliorer-les-performances-dapache-avec-nginx/" rel="bookmark" title="Permanent Link: Améliorer les performances d&#8217;apache avec nginx">Améliorer les performances d&#8217;apache avec nginx</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/administration/utiliser-plusieurs-certificats-ssl-sur-un-seul-serveur-apache/" rel="bookmark" title="Permanent Link: Utiliser plusieurs certificats SSL sur un seul serveur apache">Utiliser plusieurs certificats SSL sur un seul serveur apache</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/htop-ou-comment-faire-revivre-le-top/" rel="bookmark" title="Permanent Link: htop &#8230; ou comment faire revivre le top">htop &#8230; ou comment faire revivre le top</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/administration/reduire-la-consommation-de-bande-passante-apache-mod_deflate/" rel="bookmark" title="Permanent Link: Réduire la consommation de bande passante (Apache mod_deflate)">Réduire la consommation de bande passante (Apache mod_deflate)</a></li><li><a href="http://blog.gaetan-grigis.eu/systeme/administration/ossec-et-stats-sur-munin/" rel="bookmark" title="Permanent Link: Ossec et stats sur munin">Ossec et stats sur munin</a></li></ul><hr /><small>Copyright &copy; 2008-2011 - Gaetan Grigis - <a href="http://blog.gaetan-grigis.eu">blog.gaetan-grigis.eu</a> </small>]]></content:encoded>
			<wfw:commentRss>http://blog.gaetan-grigis.eu/systeme/configuration-de-processus-apache-au-poil/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

