<?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 coin du sysadmin &#187; OpenBSD PF</title>
	<atom:link href="http://laurent.cligny.net/index.php/tag/openbsd-pf/feed/" rel="self" type="application/rss+xml" />
	<link>http://laurent.cligny.net</link>
	<description></description>
	<lastBuildDate>Wed, 01 Jul 2009 08:46:09 +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>Grapher l&#8217;activité de PF grâce à pfstat</title>
		<link>http://laurent.cligny.net/index.php/2009/02/11/graph-pfstat/</link>
		<comments>http://laurent.cligny.net/index.php/2009/02/11/graph-pfstat/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 12:57:51 +0000</pubDate>
		<dc:creator>laurent</dc:creator>
				<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[OpenBSD PF]]></category>
		<category><![CDATA[pfstat]]></category>

		<guid isPermaLink="false">http://laurent.cligny.net/?p=95</guid>
		<description><![CDATA[Aujourd&#8217;hui, point de bidouille, point de manipulations absconses, mais plutôt de jolis graphiques où l&#8217;on voit avec tendresse s&#8217;ébattre notre pare-feu OpenBSD PF. Comment celà peut-il être dans le domaine du possible ? Tout simplement grâce à l&#8217;outil pfstat, écrit par le créateur de PF lui-même. Afin de ne pas vous perdre en cours de [...]]]></description>
			<content:encoded><![CDATA[<p>Aujourd&#8217;hui, point de bidouille, point de manipulations absconses, mais plutôt de jolis graphiques où l&#8217;on voit avec tendresse s&#8217;ébattre notre pare-feu OpenBSD PF.</p>
<p>Comment celà peut-il être dans le domaine du possible ? Tout simplement grâce à l&#8217;outil pfstat, écrit par <a href="http://www.benzedrine.cx/dhartmei.html">le créateur de PF</a> lui-même.<span id="more-95"></span></p>
<p>Afin de ne pas vous perdre en cours de lecture pour cause de démotivation devant les sigles cryptiques et autres incantations shellmaniques qui parsèment comme à l&#8217;accoutumée mes billets techniques, voici un aperçu de ce que nous allons obtenir:</p>
<div id="attachment_99" class="wp-caption aligncenter" style="width: 522px"><a rel="attachment wp-att-99" href="http://laurent.cligny.net/index.php/2009/02/11/graph-pfstat/pfstat_screenshot1/"><img class="size-full wp-image-99" title="pfstat_screenshot1" src="http://laurent.cligny.net/wp-content/uploads/pfstat_screenshot1.png" alt="Pfstat Screenshot" width="512" height="466" /></a><p class="wp-caption-text">Pfstat Screenshot</p></div>
<p>Passons donc maintenant dans le vif du sujet. Nous allons créer les graphiques montrants les octets que PF à laissé passer sur l&#8217;interface sis0, ainsi que les packets passés et bloqués sur cette même interface sur une période de 24 heures.</p>
<p>Tout d&#8217;abord il faut installer pfstat:</p>
<p># pkg_add -r pfstat</p>
<p>Puis on créé un fichier de configuration adéquat /usr/local/etc/pfstat.conf contenant ceci:</p>
<table border="0" align="center">
<tbody>
<tr>
<td>
<p style="line-height: normal;"><span style="color: #008000;">#On indique l&#8217;interface réseau, l&#8217;état, l&#8217;unité de mesure, le sens, le protocole, et si les données sont différentielles</span> <span style="color: #008000;">pour chaque valeur.</span></p>
<p><span style="color: #0000ff;">collect 1 = interface &#8220;sis0&#8243; pass bytes in ipv4 diff<br />
 collect 2 = interface &#8220;sis0&#8243; pass bytes out ipv4 diff</span></p>
<p><span style="color: #0000ff;"><span style="color: #008000;">#On indique le chemin complet de l&#8217;image générée par pfstat, et qui sera affichée par notre serveur web</span><br />
 image &#8220;/usr/local/www/data/pfstat/images/pfstat-bandwidth-day.png&#8221;      {</span></p>
<p><span style="color: #0000ff;"><span style="color: #008000;">#On donne la période affichée et la taille de l&#8217;image générée en pixels</span><br />
 from 24 hours to now<br />
 width 1000 height 400</span></p>
<p><span style="color: #008000;">#On dit ce qu&#8217;on affiche comme données dans notre image</span></p>
<p><span style="color: #0000ff;"><span style="color: #008000;">#L&#8217;axe Y du graphique &#8220;1&#8243; (voir &#8220;collect 1&#8243; plus haut) se trouvera à gauche, les données sont de type bps, puis viennent les options pour la légende (nom du graphe, unité de mesure et couleur)</span><br />
 left<br />
 graph 1 bps &#8220;in&#8221; &#8220;byte/s&#8221; color 0 192 0 filled<br />
 right<br />
 graph 2 bps &#8220;out&#8221; &#8220;byte/s&#8221; color 0 0 255<br />
 }</span></p>
<p><span style="color: #0000ff;"><span style="color: #008000;">#Les même graphiques que précédemment, mais en générant une image plus petite. Seuls les noms de l&#8217;image générée, et la taille de l&#8217;image en pixels change. De même on peut créer les graphiques pour la semaine, le mois et l&#8217;année passée en modifiant l&#8217;option &#8220;from&#8221;</span><br />
 image &#8220;/usr/local/www/data/pfstat/images/pfstat-bandwidth-day-small.png&#8221;        {<br />
 from 24 hours to now<br />
 width 500 height 200<br />
 left<br />
 graph 1 bps &#8220;in&#8221; &#8220;byte/s&#8221; color 0 192 0 filled<br />
 right<br />
 graph 2 bps &#8220;out&#8221; &#8220;byte/s&#8221; color 0 0 255<br />
 }</span></p>
<p><span style="color: #0000ff;"><span style="color: #008000;">#On procède de la même manière avec les paquets, mais on y ajoute les paquets bloqués (ce qui n&#8217;avait pas sens dans les premiers graphiques qui eux affichent des octets)</span><br />
 collect 3 = interface &#8220;sis0&#8243; pass packets in ipv4 diff<br />
 collect 4 = interface &#8220;sis0&#8243; pass packets out ipv4 diff<br />
 collect 5 = interface &#8220;sis0&#8243; block packets in ipv4 diff<br />
 collect 6 = interface &#8220;sis0&#8243; block packets out ipv4 diff<br />
 image &#8220;/usr/local/www/data/pfstat/images/pfstat-packets-day.png&#8221;        {<br />
 from 24 hours to now<br />
 width 1000 height 400<br />
 left<br />
 graph 3 &#8220;pass in&#8221; &#8220;pkt/s&#8221; color 0 192 0 filled,<br />
 graph 4 &#8220;pass out&#8221; &#8220;pkt/s&#8221; color 0 0 255<br />
 right<br />
 graph 5 &#8220;block in&#8221; &#8220;pkt/s&#8221; color 255 0 0,<br />
 graph 6 &#8220;block out&#8221; &#8220;pkt/s&#8221; color 192 192 0<br />
 }<br />
 image &#8220;/usr/local/www/data/pfstat/images/pfstat-packets-day-small.png&#8221;  {<br />
 from 24 hours to now<br />
 width 500 height 200<br />
 left<br />
 graph 3 &#8220;pass in&#8221; &#8220;pkt/s&#8221; color 0 192 0 filled,<br />
 graph 4 &#8220;pass out&#8221; &#8220;pkt/s&#8221; color 0 0 255<br />
 right<br />
 graph 5 &#8220;block in&#8221; &#8220;pkt/s&#8221; color 255 0 0,<br />
 graph 6 &#8220;block out&#8221; &#8220;pkt/s&#8221; color 192 192 0<br />
 }</span></p>
</td>
</tr>
</tbody>
</table>
<p><span style="color: #0000ff;"><span style="color: #000000;">Bien sûr, il y a beaucoup d&#8217;autres possibilités, comme grapher les files d&#8217;attentes, les états. La <a href="http://www.benzedrine.cx/pfstat.html">page pfstat</a> de l&#8217;auteur en montre un bon panel.</span></span></p>
<p><span style="color: #0000ff;"><span style="color: #000000;">Mais revenons à nos affaires. Il nous faut maintenant créer le répertoire ou seront hebergées la page web d&#8217;affichage de nos graphiques ainsi que les images:</span></span></p>
<p><span style="color: #0000ff;"><span style="color: #000000;"># mkdir -p /usr/local/www/data/pfstat/images</span></span></p>
<p><span style="color: #0000ff;"><span style="color: #000000;">Puis on vérifie que ça fonctionne:</span></span></p>
<p><span style="color: #0000ff;"><span style="color: #000000;"># pfstat -q -p</span></span></p>
<p><span style="color: #0000ff;"><span style="color: #000000;">Cette commande demande à pfstat de compiler les statistiques de pf(4) pour l&#8217;instant <em>t </em>et de créer les graphiques correspondant à l&#8217;emplacement renseigné dans notre fichier de configuration. On peut vérifier le bon fonctionnement par la présence d&#8217;un fichier /var/db/pfstat.db ainsi que celle des graphiques.</span></span></p>
<p># ls -l /var/db/pfstat.db<br />
 -rw&#8212;&#8212;-  1 root  wheel  8192 Feb  6 08:41 /var/db/pfstat.db<br />
 # ls -l /usr/local/www/data/pfstat/images/<br />
 total 846<br />
 -rw-r&#8211;r&#8211;  1 root  wheel  24063 Feb  6 08:41 pfstat-bandwidth-day-small.png<br />
 -rw-r&#8211;r&#8211;  1 root  wheel  64065 Feb  6 08:41 pfstat-bandwidth-day.png<br />
 -rw-r&#8211;r&#8211;  1 root  wheel  27066 Feb  6 08:41 pfstat-packets-day-small.png<br />
 -rw-r&#8211;r&#8211;  1 root  wheel  66568 Feb  6 08:41 pfstat-packets-day.png</p>
<p>Maintenant que ça fonctionne, on automatise la récolte des statistiques de pf(4) grâce à une simple tâche cron(8). Ajoutons ceci dans /etc/crontab:</p>
<p>*    *    *    *    *    root    /usr/local/bin/pfstat -q -p -t 31:365</p>
<p>L&#8217;option -t, permet à pfstat de compresser les donnés vieilles de plus d&#8217;un mois et d&#8217;effacer celles de plus d&#8217;un an. Ainsi notre base /var/db/pfstat.db ne devrait pas grossir exagérément.</p>
<p>Il ne reste plus qu&#8217;à afficher tous ces jolis graphiques sur une page html (ou autre).</p>
<p>Par exemple:</p>
<p>Configuration Apache 2.2</p>
<p>Créer un fichier /usr/local/etc/apache22/Includes/pfstat.conf contenant</p>
<table border="0">
<tbody>
<tr>
<td><span style="color: #0000ff;">Alias /pfstat /usr/local/www/data/pfstat<br />
 DocumentRoot &#8220;/usr/local/www/data/pfstat&#8221;<br />
 &lt;Directory &#8220;/usr/local/www/data/pfstat&#8221;&gt;<br />
 DirectoryIndex index.html<br />
 Order deny,allow<br />
 Allow from all<br />
 Satisfy Any<br />
 &lt;/Directory&gt;<br />
 </span></td>
</tr>
</tbody>
</table>
<p><span style="color: #000000;">Créer un fichier /usr/local/www/data/pfstat/index.html contenant</span></p>
<p><br class="spacer_" /></p>
<table border="0">
<tbody>
<tr>
<td><span style="color: #0000ff;">&lt;!DOCTYPE HTML PUBLIC &#8220;-//W3C//DTD HTML 4.01 Transitional//EN&#8221;&gt;<br />
 &lt;html&gt;</p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p>&lt;head&gt;</p>
<p>&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=US-ASCII&#8221;&gt;<br />
 &lt;title&gt;PF Firewall Statistics&lt;/title&gt;</p>
<p>&lt;/head&gt;</p>
<p>&lt;body text=&#8221;#000000&#8243; bgcolor=&#8221;#FFFFFF&#8221; link=&#8221;#1919C0&#8243; vlink=&#8221;#101030&#8243; alink=&#8221;#FE0000&#8243;&gt;</p>
<p>&lt;h1&gt;PF Firewall Statistics for sis0 interface&lt;/h1&gt;</p>
<p>&lt;h2&gt;interface sis0 pass bytes ipv4, Bytes/s&lt;/h2&gt;<br />
 &lt;h3&gt;Daily statistics&lt;/h3&gt;<br />
 &lt;a href=&#8221;images/pfstat-bandwidth-day.png&#8221;&gt;&lt;img src=&#8221;images/pfstat-bandwidth-day-small.png&#8221; border=&#8221;0&#8243;&gt;&lt;/a&gt;<br />
 &lt;p&gt;</p>
<p>&lt;h2&gt;interface sis0 pass/block packets ipv4, Packets/s&lt;/h2&gt;<br />
 &lt;h3&gt;Daily statistics&lt;/h3&gt;<br />
 &lt;a href=&#8221;images/pfstat-packets-day.png&#8221;&gt;&lt;img src=&#8221;images/pfstat-packets-day-small.png&#8221; border=&#8221;0&#8243;&gt;&lt;/a&gt;<br />
 &lt;p&gt;</p>
<p>&lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p></span></td>
</tr>
</tbody>
</table>
<p><br class="spacer_" /></p>
<p>N&#8217;oublions pas de recharger la configuration d&#8217;apache:</p>
<p># /usr/local/etc/rc.d/apache22 reload</p>
<p>Vous pouvez bien sûr vous inspirer ma de propre <a href="http://www.cligny.net/pfstat">page pfstat</a> pour compléter le tout.</p>
<p>A bientôt chers (et de plus en plus nombreux) lecteurs <img src='http://laurent.cligny.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><br class="spacer_" /></p>
]]></content:encoded>
			<wfw:commentRss>http://laurent.cligny.net/index.php/2009/02/11/graph-pfstat/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
