<?xml version="1.0" encoding="ISO-8859-1"?>
<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 de Michauko &#187; statistiques</title>
	<atom:link href="http://michauko.org/blog/tag/statistiques/feed/" rel="self" type="application/rss+xml" />
	<link>http://michauko.org/blog</link>
	<description>Si le titre de l&#039;article ne te fait pas mal au crâne, ce blog est pour toi :)</description>
	<lastBuildDate>Tue, 24 Aug 2010 08:45:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Statistiques mises en images</title>
		<link>http://michauko.org/blog/2008/11/25/statistiques-mises-en-images/</link>
		<comments>http://michauko.org/blog/2008/11/25/statistiques-mises-en-images/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 08:05:20 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[coup de coeur]]></category>
		<category><![CDATA[hors sujet]]></category>
		<category><![CDATA[statistiques]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=169</guid>
		<description><![CDATA[Trop énorme pour ne pas le mentionner : http://www.chrisjordan.com/current_set2.php?id=7]]></description>
			<content:encoded><![CDATA[<p>Trop énorme pour ne pas le mentionner : <a href="http://www.chrisjordan.com/current_set2.php?id=7">http://www.chrisjordan.com/current_set2.php?id=7</a></p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2008/11/25/statistiques-mises-en-images/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ressusciter de l&#8217;historique (Apache) pour Webalizer</title>
		<link>http://michauko.org/blog/2008/03/11/ressusciter-de-lhistorique-apache-pour-webalizer/</link>
		<comments>http://michauko.org/blog/2008/03/11/ressusciter-de-lhistorique-apache-pour-webalizer/#comments</comments>
		<pubDate>Tue, 11 Mar 2008 20:06:31 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[autres outils]]></category>
		<category><![CDATA[ligne de commande]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[flood]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[referrer]]></category>
		<category><![CDATA[statistiques]]></category>
		<category><![CDATA[stats]]></category>
		<category><![CDATA[webalizer]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/2008/03/11/ressusciter-de-lhistorique-apache-pour-webalizer/</guid>
		<description><![CDATA[Derrière ce titre qui veut tout et rien dire, un besoin réel. Récemment, sur un site web avec une audience non négligeable (sans être démentielle : 70 000 hits hebdo), j&#8217;ai eu à mettre en place un outil de statistiques vite fait bien fait. J&#8217;ai choisi webalizer car je connaissais et car ça se met [...]]]></description>
			<content:encoded><![CDATA[<p>Derrière ce titre qui veut tout et rien dire, un besoin réel.</p>
<p>Récemment, sur un site web avec une audience non négligeable (sans être démentielle : 70 000 hits hebdo), j&#8217;ai eu à mettre en place un outil de statistiques vite fait bien fait. J&#8217;ai choisi <a href="http://www.webalizer.org/">webalizer</a> car je connaissais et car ça se met en place en 3 minutes et que ça sort mine de rien déjà pas mal d&#8217;infos (volume de hits, pays d&#8217;origine, mots-clefs, référant etc). Et c&#8217;est mieux que &#8220;pas de stats du tout&#8221; dans un premier temps.</p>
<p>Il y avait deux trucs tout bêtes dans l&#8217;histoire : j&#8217;avais un an de logs non &#8220;synthétisés&#8221; par webalizer. Il a donc fallu les faire passer dans webalizer pour rattraper l&#8217;historique. Et deuxièmement, c&#8217;est à ce moment là que j&#8217;ai vu que le <code>HostnameLookups</code> était à Off dans la conf <code>/etc/apache2/apache2.conf</code>. <strong>Donc les logs ne contenaient que les IP, pas les hostname</strong>. Donc pas de statistiques par pays dans Webalizer. Dommage pour une boîte internationale qui veut voir un peu où en est sa notoriété sur la planète&#8230;</p>
<p>J&#8217;ai donc remédié à tout ça. Cet article présente donc l&#8217;installation de la conf rapide de Webalizer (et Apache2 en conséquence) et donne une ligne de commande pour récupérer l&#8217;année d&#8217;historique (apache2 garde par défaut 52 fichiers de logs en rotation hebdo) et enfin, le plus marrant, mouliner sur les logs pour retrouver les <em>hostnames</em> correspondants aux IP&#8230; (en espérant que mon hébergeur ne me flingue pas en voyant le nombre de requête DNS que je crache en ce moment même <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Je lui ai posé la question, ne négligez pas ce point, ce serait bête de se faire des ennemis)<span id="more-111"></span></p>
<h3>Installation et conf Webalizer</h3>
<p>Sous Debian, un simple :</p>
<pre>aptitude install webalizer</pre>
<p>L&#8217;outil de conf pose 2/3 questions assez simples à répondre, comme votre nom de serveur web, le nom du fichier &#8220;logrotaté&#8221;, typiquement <code>/var/log/apache2/access.log.1</code> (et pas <code>/var/log/apache2/access.log</code>).<br />
De toute manière, on va repasser sur le fichier de conf tout de suite après l&#8217;install. Sachez que &#8220;webalizer&#8221; fait ses calculs via la <code>cron.daily</code>, au petit matin (par défaut sur Debian) quand vous dormez.<br />
Je mets 2/3 commentaires sur certains paramètres ; voyons ce que donne <code>egrep -v "^$|^#" /etc/webalizer/webalizer.conf</code> :</p>
<pre>LogFile         /var/log/apache2/access.log.1
OutputDir       /var/www/webalizer # A vous de voir. Pensez à un htaccess si besoin...
Incremental     yes
ReportTitle     Statistiques d'utilisation de mon serveur web
HostName        toto.com
TopReferrers    50
TopAgents       30
HideSite        *toto
HideSite        *toto.com
HideReferrer    www.toto.com/ # sinon vous passez votre temps à votre les mouvements interne au site
HideReferrer    toto.com/ # idem
HideReferrer    Direct Request
HideURL         *.gif
HideURL         *.GIF
HideURL         *.jpg
HideURL         *.JPG
HideURL         *.ra
HideURL         *.png
GroupURL        /cgi-bin/*
GroupAgent      MSIE
HideAgent       MSIE*
GroupAgent      Mozilla
HideAgent       Mozilla*
GroupAgent      Lynx
HideAgent       Lynx*
GroupAgent      Konqueror
HideAgent       Konqueror*
GroupAgent      Opera
HideAgent       Opera*
IgnoreSite      localhost # je tunnele l'accès à mon propre site et je suis un gros visiteur de mon propre site
IgnoreReferrer  localhost # idem
MangleAgents    4</pre>
<p>Dans la conf Apache2 <code>/etc/apache2/apache2.conf</code>, pensez à activer le paramètre <code>HostnameLookups</code> si vous voulez avoir un semblant de trace des pays rendant visite à votre site web (et rechargez Apache).</p>
<h3>Chargement de l&#8217;historique</h3>
<p>Il faut décompresser les logs Apache puis les importer un à un dans webalizer.Simple.<br />
En considérant que vous avez copié vos fichiers access.log.*.gz dans /tmp, vous faites ceci :</p>
<pre>for i in access*gz
do
        gunzip $i
done</pre>
<p>Et ensuite, lancement de l&#8217;import :</p>
<pre>for i in `./seq_reverse.py`
do
        webalizer access.log.$i
done</pre>
<p>Je ne sais plus si on peut faire un <code>seq</code> sortant les chiffres de 1 à 52 dans l&#8217;ordre inverse, <a href='http://michauko.org/blog/wp-content/uploads/2008/03/seq_reverse.py' title='seq -r ça n’existe pas ?'>alors j&#8217;ai pondu un script python pour le faire</a>.</p>
<p>A la fin, si votre répertoire <code>/var/www/webalizer</code> est blindé de fichiers, c&#8217;est bon. Vous pouvez voir vos stats sur l&#8217;année écoulée.</p>
<h3>Retrouver les hostnames</h3>
<p>C&#8217;est la partie amusante (et bourrin). Si vous n&#8217;aviez pas les hostnames des IP visitant votre serveur web, vos logs Apache ressemblait à ça :</p>
<pre>86.x.y.190 - - [15/Mar/2007:06:25:25 +0100] "GET /favicon.ico HTTP/1.1" 200 2238 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2"</pre>
<p>Si vous aviez activé le lookup dans Apache, vos logs ressemblent partiellement à ce qu&#8217;il y a ci-dessus (pour les serveurs n&#8217;ayant pas de nom) et généralement, ils contiennent plutôt ça :</p>
<pre>truc.machin.com - - [02/Mar/2008:06:26:27 +0100] "GET / HTTP/1.1" 200 27488 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"</pre>
<p>L&#8217;idée est de retrouver les noms lorsque vous n&#8217;avez que les IP. J&#8217;ai écrit un script Python pour ça (excusez-moi, je débute en Python). <a href='http://michauko.org/blog/wp-content/uploads/2008/03/retrouve_hostname.py' title='Script Python pour retrouver les hostnames à partir des IP d’un log Apache2'>Script Python pour retrouver les hostnames à partir des IP d’un log Apache2</a></p>
<p>Et donc à la fin, vous envoyez la purée :</p>
<pre>for i in /tmp/access.log.*
do
        ./retrouve_hostname.py $i
done</pre>
<p>Attention, c&#8217;est bourrin, faites le sur un petit fichier d&#8217;abord. Le script vous génère un fichier <code>$i.new</code>, à vous de vider vos statistiques webalizer (<code>rm /var/www/webalizer/*</code>) ensuite et de relancer la moulinette d&#8217;import sur ces nouveaux fichiers.</p>
<p>walaaaa, c&#8217;est tout pour aujourd&#8217;hui.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2008/03/11/ressusciter-de-lhistorique-apache-pour-webalizer/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Statistiques de greylisting</title>
		<link>http://michauko.org/blog/2008/03/05/statistiques-de-greylisting/</link>
		<comments>http://michauko.org/blog/2008/03/05/statistiques-de-greylisting/#comments</comments>
		<pubDate>Wed, 05 Mar 2008 15:42:54 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[backup MX]]></category>
		<category><![CDATA[blacklist]]></category>
		<category><![CDATA[greylist]]></category>
		<category><![CDATA[greylisting]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[postgrey]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[statistiques]]></category>
		<category><![CDATA[stats]]></category>
		<category><![CDATA[whitelist]]></category>
		<category><![CDATA[zombie]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/2008/03/05/statistiques-de-greylisting/</guid>
		<description><![CDATA[Pour ceux qui ne connaissent pas, le &#8220;Greylisting&#8221; est un mécanisme utile et extrêmement simple à mettre en oeuvre pour réduire significativement le nombre de spams en entrée des serveurs de mails, sans même avoir besoin de les analyser. En gros, vous pouvez diviser par 10 vos mails entrants et le boulot de votre spamassassin, [...]]]></description>
			<content:encoded><![CDATA[<p>Pour ceux qui ne connaissent pas, le &#8220;Greylisting&#8221; est un mécanisme utile et extrêmement simple à mettre en oeuvre pour réduire significativement le nombre de spams en entrée des serveurs de mails, sans même avoir besoin de les analyser. En gros, vous pouvez diviser par 10 vos mails entrants et le boulot de votre spamassassin, du coup.<br />
Magique ? non, logique.<br />
Je vous propose dans cet article un résultat chiffré sur une installation comptant un backup MX, un frontal (qui encaisse les tentatives d&#8217;abus etc + analyse virus) relayant enfin à un serveur final (backend) faisant tourner un bon gros spamassassin/SARE des familles avant la distribution du courrier. Le tout pour desservir 150 utilisateurs et/ou boîtes mails environ (sans compter des vieux comptent qui n&#8217;existent plus et que les spammeurs doivent avoir encore &#8220;en tête&#8221;).<br />
La mise en place du greylisting pour postfix est détaillée dans <a href="http://michauko.org/docs/debian_testing/">ma doc</a>, il ne manque qu&#8217;une indication : démarrer le service postgrey après installation <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <span id="more-107"></span></p>
<h3>Informations en préambule</h3>
<p>Les impacts pour l&#8217;utilisateur sont minimes : délai d&#8217;environ 30 minutes (en théorie 5 minutes) lors des x (x = 5 par défaut) premiers échanges entrants avec un serveur donné. L&#8217;article <a href="http://en.wikipedia.org/wiki/Greylisting">anglais sur wikipedia</a> se veut un peu plus méfiant que sa <a href="http://fr.wikipedia.org/wiki/Greylisting">traduction minimaliste en français</a>. A vous de voir. L&#8217;autre risque serait de se retrouver face à un vieux serveur de mails tout pourri qui implémente mal le protocole&#8230; boarf, je doute que ça arrive dans la pratique. Au pire l&#8217;utilisateur verra le problème et il sera temps de whitelister ledit serveur.</p>
<h3>Principe</h3>
<p>Le principe  &#8211; je vous renvois à l&#8217;article wikipedia pour plus de détails &#8211; est d&#8217;utiliser <strong>une fonction standard du procotole SMTP</strong> pour redemander l&#8217;envoi d&#8217;un mail lorsqu&#8217;on le reçoit. On indique au serveur de renvoyer le message dans 5 minutes. Deux options : le serveur en face le fait, ou non. Au bout de x fois &#8211; si le serveur s&#8217;est bien comporté &#8211; on le &#8220;whiteliste&#8221; pour de bon et il n&#8217;y aura plus de délai pour celui-ci.</p>
<h3>Quel lien avec les spammeurs ?</h3>
<p>Imaginez une armée de PC <s>(windows)</s> zombies envoyant des mails à tout va (à l&#8217;insu de l&#8217;utilisateur, forcément). Le zombie utilise un programme le plus simple possible qui se contente d&#8217;envoyer la purée. De toute manière, un PC zombie comme de ce type n&#8217;a en général pas de lien retour possible vers lui même sur le port 25 (pensez à votre PC derrière un routeur genre freebox). Donc il ne recevra jamais votre demande standard de renvoi de mails. Et donc vous n&#8217;aurez jamais le mail, qui était un spam à coup sûr. CQFD.<br />
Lisez plus bas dans l&#8217;article quelques extraits d&#8217;adresses &#8220;greylistées&#8221;, vous comprendrez que des zombies, il y en a des millions sur la planète&#8230; que fait Buffy ???<br />
Reste ensuite les *vrais* spammeurs. Je ne sais pas dire si beaucoup d&#8217;entre eux utilisent des serveurs standard de mails. Ceux qui n&#8217;ont pas prévu le coup en tout cas, ils passent aussi à la benne. Les autres, je ne sais pas s&#8217;ils perdent du temps à renvoyer la purée alors que des gens mal protégés, il y en a tant d&#8217;autres&#8230;<br />
Alors, en attendant que les zombies prennent en charge correctement le protocole et fasse des contournements réseaux compliqués (impossible ?), le greylisting peut vous aider.</p>
<h3>Léger pré-requis sur les backups MX</h3>
<p>Dernière petite remarque en préambule : il faut que tous vos serveurs frontaux (donc les backups MX) implémentent le greylisting !!! Donc oubliez les backups gracieusement offerts par votre fournisseur/hébergeur etc. En général ils ne le font pas. Si vous avez un tel backup MX &#8211; par pseudo-sécurité &#8211; il est en général déclaré de faible priorité et c&#8217;est justement celui qui est d&#8217;abord visé par les envois de spammeurs car on n&#8217;a moins souvent la main dessus. S&#8217;il ne greyliste pas, alors il enverra tout à votre MX principal qui acceptera sans broncher. Le greylisting ne servira pas à grand chose dans ce cas.<br />
(Tiens, ça me fait penser à une technique qui consiste à utiliser un serveur inexistant comme MX de plus faible priorité. Faudra que je teste ça un jour. Si quelqu&#8217;un a un retour, je suis preneur)</p>
<h3>Graphiques après plusieurs semaines d&#8217;utilisation</h3>
<p>Plutôt qu&#8217;un long discours, quelques dessins. Je vous laisse deviner la date de mise en place&#8230;</p>
<p>Sur le frontal (MX primaire) :<br />
<a href='http://michauko.org/blog/wp-content/uploads/2008/03/grey1.png' title='Greylisting sur le frontal'><img src='http://michauko.org/blog/wp-content/uploads/2008/03/grey1.png' alt='Greylisting sur le frontal' /></a></p>
<p>Et sur le backend (qui identifie les spams une fois le mail accepté) :<br />
<a href='http://michauko.org/blog/wp-content/uploads/2008/03/grey2.png' title='Greylisting sur le backend'><img src='http://michauko.org/blog/wp-content/uploads/2008/03/grey2.png' alt='Greylisting sur le backend' /></a></p>
<h3>En chiffres</h3>
<p>Avec quelques chiffres moyens pris avant et après le greylisting (ceux sur le graphe sont pris &#8220;pendant&#8221; la mise en place, donc une moyenne d&#8217;avant/après, pas terrible), ça donne ça :<br />
- Sur le frontal, avant, on recevait environ 9,5 msg/min et on rejetait 1/3 (tentatives d&#8217;openrelay, destinataires bidon etc). Maintenant, on en reçoit 3,2 par minute, toujours 1/3 de rejet pour les mêmes motifs.<br />
- Sur le backend du coup, il y a une sacrée chute d&#8217;occupation CPU par &#8220;spamd&#8221; et on identifie 0,6 msg/min contre 6 par minute avant (même taux de faux-positifs ou d&#8217;oubli, à savoir presque nul).<br />
- En une semaine, ce ne sont pas moins de 137000 &#8220;serveurs&#8221; (zombies) qui ont été greylistés, avec des charmants noms comme :</p>
<pre>         0x50a1511f.hknxx3.adsl-dhcp.tele.dk[80.161.81.31] 2 Time(s)
         0x50a403bf.abnxx10.adsl-dhcp.tele.dk[80.164.3.191] 2 Time(s)
         103.95.119-80.rev.gaoland.net[80.119.95.103] 4 Time(s)
         12-208-209-2.client.mchsi.com[12.208.209.2] 2 Time(s)
         12-219-39-94.client.mchsi.com[12.219.39.94] 2 Time(s)
         124-171-184-145.dyn.iinet.net.au[124.171.184.145] 2 Time(s)
         129-28-235-201.fibertel.com.ar[201.235.28.129] 2 Time(s)
         131.201.218.87.dynamic.jazztel.es[87.218.201.131] 2 Time(s)
         131.206.50.60.cbj04-home.tm.net.my[60.50.206.131] 2 Time(s)
         1434933186.ip2long.net[85.135.87.194] 2 Time(s)
         149.pool85-49-8.dynamic.orange.es[85.49.8.149] 2 Time(s)
         1503021874.dhcp.dbnet.dk[89.150.75.50] 4 Time(s)
         152-60.go.evo.bg[85.217.152.60] 2 Time(s)
         156-90-99-58-T-tdtv.tinp.net.tw[58.99.90.156] 2 Time(s)
         167-68-246-201.adsl.terra.cl[201.246.68.167] 2 Time(s)
         168-226-244-166.mrse.com.ar[168.226.244.166] 2 Time(s)
...
         adsl-67-114-84-118.dsl.lsan03.pacbell.net[67.114.84.118] 2 Time(s)
         adsl-68-23-4-190.dsl.ipltin.ameritech.net[68.23.4.190] 2 Time(s)
         adsl-69-209-147-42.dsl.sfldmi.ameritech.net[69.209.147.42] 2 Time(s)
         adsl-69-209-154-96.dsl.sfldmi.ameritech.net[69.209.154.96] 2 Time(s)
...
         host234-234-static.116-81-b.business.telecomitalia.it[81.116.234.234] 2 Time(s)
         host241-167-dynamic.19-79-r.retail.telecomitalia.it[79.19.167.241] 2 Time(s)
         host246-209-dynamic.15-87-r.retail.telecomitalia.it[87.15.209.246] 2 Time(s)
         host248-13-dynamic.1-87-r.retail.telecomitalia.it[87.1.13.248] 2 Time(s)
...
         pool-71-241-246-243.washdc.fios.verizon.net[71.241.246.243] 2 Time(s)
         pool-71-244-163-181.chi01.dsl-w.verizon.net[71.244.163.181] 2 Time(s)
         pool-71-246-128-243.aubnin.fios.verizon.net[71.246.128.243] 2 Time(s)
         pool-71-251-115-130.tampfl.fios.verizon.net[71.251.115.130] 2 Time(s)
         pool-71-251-140-235.cmdnnj.east.verizon.net[71.251.140.235] 2 Time(s)
         pool-71-252-137-81.dllstx.fios.verizon.net[71.252.137.81] 2 Time(s)
         pool-71-99-87-26.tampfl.dsl-w.verizon.net[71.99.87.26] 6 Time(s)
...
         ppp83-237-30-117.pppoe.mtu-net.ru[83.237.30.117] 2 Time(s)
         ppp85-140-146-212.pppoe.mtu-net.ru[85.140.146.212] 2 Time(s)
         ppp85-140-21-109.pppoe.mtu-net.ru[85.140.21.109] 2 Time(s)
         ppp85-140-43-193.pppoe.mtu-net.ru[85.140.43.193] 2 Time(s)
         ppp85-141-174-160.pppoe.mtu-net.ru[85.141.174.160] 4 Time(s)
...
         unknown[116.22.163.196] 6 Time(s)
         unknown[116.45.106.170] 2 Time(s)
         unknown[117.12.65.40] 4 Time(s)
...

- </pre>
<h3>Conclusion</h3>
<p>N&#8217;hésitez pas, apt-get install postgrey, modif du fichier main.cf et reload de postfix. Ca prend 3 minutes et ça envoi du gros !</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2008/03/05/statistiques-de-greylisting/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
