<?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>Emmanuel Belair</title>
	<atom:link href="http://www.ebelair.fr/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ebelair.fr</link>
	<description>Développeur indépendant PHP - Zend Framework</description>
	<lastBuildDate>Sun, 22 Apr 2012 20:05:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Documentation Zend Framework 2 disponible</title>
		<link>http://www.ebelair.fr/2012/01/08/documentation-zend-framework-2-disponible/</link>
		<comments>http://www.ebelair.fr/2012/01/08/documentation-zend-framework-2-disponible/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 13:25:38 +0000</pubDate>
		<dc:creator>manu</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[doc]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.ebelair.fr/?p=160</guid>
		<description><![CDATA[Depuis quelques jour, a été rendu disponible la documentation Zend Framework 2. Bien sûr celle-ci est toujours en cours de finalisation mais elle déjà très complète. Bonne lecture {lang: 'fr'}]]></description>
			<content:encoded><![CDATA[<p>Depuis quelques jour, a été rendu disponible la <a title="Documentation Zend Framework 2" href="http://packages.zendframework.com/docs/latest/manual/en/index.html" target="_blank">documentation Zend Framework 2</a>. Bien sûr celle-ci est toujours en cours de finalisation mais elle déjà très complète.</p>
<p>Bonne lecture <img src='http://www.ebelair.fr/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: left; margin-right: 10px; margin-left: 80px;"><g:plusone size="medium" count="1" href="http://www.ebelair.fr/2012/01/08/documentation-zend-framework-2-disponible/">{lang: 'fr'}</g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.ebelair.fr/2012/01/08/documentation-zend-framework-2-disponible/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutoriel Zend Framework 2 par Rob Allen (beta)</title>
		<link>http://www.ebelair.fr/2012/01/08/tutoriel-zend-framework-2-par-rob-allen/</link>
		<comments>http://www.ebelair.fr/2012/01/08/tutoriel-zend-framework-2-par-rob-allen/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 12:56:38 +0000</pubDate>
		<dc:creator>manu</dc:creator>
				<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[rob allen]]></category>
		<category><![CDATA[tutoriel]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.ebelair.fr/?p=147</guid>
		<description><![CDATA[En attendant la sortie tant attendue de la librairie, Rob Allen nous dévoile un nouveau tutoriel Zend Framework 2 en version beta. Pour ne pas nous dépayser, il reprend son premier tutoriel v1 basé sur un gestionnaire d&#8217;albums et l&#8217;adapte &#8230; <a href="http://www.ebelair.fr/2012/01/08/tutoriel-zend-framework-2-par-rob-allen/">Continuer la lecture de <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>En attendant la sortie tant attendue de la librairie, Rob Allen nous dévoile un nouveau <a title="Tutoriel Zend Framework 2" href="http://akrabat.com/getting-started-with-zend-framework-2/" target="_blank">tutoriel Zend Framework 2</a> en version beta.</p>
<p>Pour ne pas nous dépayser, il reprend son <a title="Tutoriel Zend Framework 1" href="http://akrabat.com/zend-framework-tutorial/" target="_blank">premier tutoriel v1</a> basé sur un gestionnaire d&#8217;albums et l&#8217;adapte à la v2. Dans les grandes lignes il reprend le modèle MVC en y intégrant l&#8217;injection de dépendance, les espaces de nom et le module manager.</p>
<p><a title="tutoriel Zend Framework 2 de Rob Allen" href="http://akrabat.com/getting-started-with-zend-framework-2/" target="_blank">Accéder au tutoriel Zend Framework 2 de Rob Allen</a></p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: left; margin-right: 10px; margin-left: 80px;"><g:plusone size="medium" count="1" href="http://www.ebelair.fr/2012/01/08/tutoriel-zend-framework-2-par-rob-allen/">{lang: 'fr'}</g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.ebelair.fr/2012/01/08/tutoriel-zend-framework-2-par-rob-allen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installer Snort Snort-MySql et AcidBase sur Debian squeeze</title>
		<link>http://www.ebelair.fr/2011/06/21/installer-snort-snort-mysql-et-acidbase-sur-debian-squeeze/</link>
		<comments>http://www.ebelair.fr/2011/06/21/installer-snort-snort-mysql-et-acidbase-sur-debian-squeeze/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 19:46:08 +0000</pubDate>
		<dc:creator>manu</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[acidbase]]></category>
		<category><![CDATA[debian squeeze]]></category>
		<category><![CDATA[snort]]></category>
		<category><![CDATA[snort mysql]]></category>
		<category><![CDATA[tutoriel]]></category>

		<guid isPermaLink="false">http://www.ebelair.fr/?p=108</guid>
		<description><![CDATA[Snort est un IDS (Intrusion Detection System) permettant de sniffer le réseau et de rapporter les tentatives d&#8217;intrusions, scan de port etc&#8230;. Il est maintenu par la société Sourcefire et bénéficie d&#8217;une communauté importante. Vous trouverez beaucoup de documentation à &#8230; <a href="http://www.ebelair.fr/2011/06/21/installer-snort-snort-mysql-et-acidbase-sur-debian-squeeze/">Continuer la lecture de <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a title="Snort - Wikipédia" href="http://fr.wikipedia.org/wiki/Snort" target="_blank">Snort</a> est un IDS (Intrusion Detection System) permettant de sniffer le réseau et de rapporter les tentatives d&#8217;intrusions, scan de port etc&#8230;. Il est maintenu par la société <a title="Sourcefire Cybersecurity |" href="http://www.sourcefire.com/" target="_blank">Sourcefire</a> et bénéficie d&#8217;une communauté importante. Vous trouverez beaucoup de documentation à son sujet.<br />
Ici je vais vous décrire une méthode simple via les paquets pour installer snort sur une Debian squeeze. On va installer la version mysql de snort qui permet de loguer directement en base de donnée et se servir d&#8217;<a title="Basic Analysis and Security Engine (BASE) -- Homepage" href="http://base.secureideas.net/" target="_blank">AcidBase</a> pour interpréter ces données.<br />
<span id="more-108"></span></p>
<h2>Versions</h2>
<p>A l&#8217;heure où j&#8217;écris ces lignes les versions sont les suivantes:<br />
Snort 2.8.5.2<br />
AcidBase 1.4.5-2</p>
<h2>Prérequis</h2>
<p>Avoir une debian squeeze <a href="http://www.ebelair.fr/?p=110">à jour</a><br />
Avoir installé apache, php et mysql (je n&#8217;expliquerais pas ici car vous pouvez trouver moult ressources sur le sujet <img src='http://www.ebelair.fr/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
Avoir installé nmap sur votre pc</p>
<p>Être logué en root pour ce qui va suivre:</p>
<h2>Installation de la base Snort</h2>
<p>Créer un utilisateur mysql <strong>snort</strong> une base de donnée <strong>snort</strong> et donner à l&#8217;utilisateur tout les droits sur cette base:</p>
<pre class="brush: bash; title: ; notranslate">
mysql
mysql&gt; CREATE DATABASE snort;
mysql&gt; grant CREATE, INSERT, SELECT, UPDATE on snort.* to snort@localhost;
mysql&gt; grant CREATE, INSERT, SELECT, UPDATE on snort.* to snort;
mysql&gt; SET PASSWORD FOR snort@localhost=PASSWORD('votrePasswordSnort');
mysql&gt; SET PASSWORD FOR snort=PASSWORD('votrePasswordSnort');
mysql&gt; flush privileges;
</pre>
<h2>Installation de Snort</h2>
<pre class="brush: bash; title: ; notranslate">apt-get install snort-mysql snort-rules-default</pre>
<p>Répondez aux questions concernant les paramètres de connexion à la base de donnée. Ce n&#8217;est pas bien grave si vous ne répondez pas maintenant.<br />
Une fois l&#8217;installation terminée vous aurez un message comme quoi l&#8217;installation n&#8217;est pas complète, snort aura créé un fichier &#8216;flag&#8217; empêchant la suite du paramétrage. C&#8217;est normal car il faut importer le schéma de base de donné de snort qui se trouve dans /usr/share/doc/snort-mysql. Nous allons donc l&#8217;importer:</p>
<pre class="brush: bash; title: ; notranslate">cd /usr/share/doc/snort-mysql
zcat create_mysql.gz | mysql -u snort -D snort -pvotrePasswordSnort
</pre>
<p>Si l&#8217;importation s&#8217;est bien passé, vous devriez voir les tables dans la base snort. Supprimez alors le fichier flag:</p>
<pre class="brush: bash; title: ; notranslate">rm /etc/snort/db-pending-config</pre>
<p>Et relancez l&#8217;utilitaire de configuration de snort:</p>
<pre class="brush: bash; title: ; notranslate">dpkg --configure --pending
dpkg-reconfigure snort-mysql</pre>
<p>Répondez aux questions et à la fin vérifiez si snort est bien lancé:</p>
<pre class="brush: bash; title: ; notranslate">/etc/init.d/snort status</pre>
<h2>Installation d&#8217;AcidBase</h2>
<pre class="brush: bash; title: ; notranslate">apt-get install acidbase</pre>
<p>A un moment l&#8217;instaler vous demande le mot de passe, mettez celui de votre user snort.<br />
A la fin de l&#8217;installation, acidBase aura créé un lien symbolique /etc/apache2/conf.d/acidbase.conf -&gt; /etc/acidbase/apache.conf qui est le fichier de config pour ajouter l&#8217;alias acidbase.<br />
Editer le fichier:</p>
<pre class="brush: bash; title: ; notranslate">vi /etc/acidbase/apache.conf</pre>
<p>Modifiez la ligne &laquo;&nbsp;allow from 127.0.0.0/255.0.0.0&#8243; pour mettre votre ip (pas celle de votre serveur) sinon vous aurez un joli forbiden.<br />
Exemple:<br />
allow from 82.234.53.205/255.255.255.255</p>
<pre class="brush: bash; title: ; notranslate">service apache2 reload</pre>
<p>Connectez-vous à votreSite.com/acidbase. Au départ vous aurez un message comme quoi il faut paramétrer acidbase et adapter la configuration de la base de snort. Suivez le wizard et c&#8217;est bon, tout est installé ^^</p>
<h2>Test</h2>
<p>Un simple scan de port avec nmap va entrainer des alertes snort. Lancez cette commande depuis votre pc:</p>
<pre class="brush: bash; title: ; notranslate">nmap -p1-65535 -sV -sS -O votreSite.com</pre>
<p>Ensuite rendez-vous sur votreSite.com/acidbase et admirez le résultat.</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: left; margin-right: 10px; margin-left: 80px;"><g:plusone size="medium" count="1" href="http://www.ebelair.fr/2011/06/21/installer-snort-snort-mysql-et-acidbase-sur-debian-squeeze/">{lang: 'fr'}</g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.ebelair.fr/2011/06/21/installer-snort-snort-mysql-et-acidbase-sur-debian-squeeze/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Debian squeeze source.list</title>
		<link>http://www.ebelair.fr/2011/06/21/debian-squeeze-source-list/</link>
		<comments>http://www.ebelair.fr/2011/06/21/debian-squeeze-source-list/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 19:09:48 +0000</pubDate>
		<dc:creator>manu</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[source.list]]></category>

		<guid isPermaLink="false">http://www.ebelair.fr/?p=110</guid>
		<description><![CDATA[Voici un exemple du fichier sources.list permettant d&#8217;avoir une Debian incluant les paquets non-free et contrib: Explication sur les types de paquets main : paquets Debian stable les plus à jours. non-free : paquets dont la distribution est restreinte par &#8230; <a href="http://www.ebelair.fr/2011/06/21/debian-squeeze-source-list/">Continuer la lecture de <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Voici un exemple du fichier sources.list permettant d&#8217;avoir une Debian incluant les paquets non-free et contrib:</p>
<pre class="brush: bash; title: ; notranslate">vi /etc/apt/sources.list</pre>
<pre class="brush: bash; title: ; notranslate">
## squeeze
deb http://ftp.fr.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ squeeze main contrib non-free

# squeeze security
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free

# squeeze update
deb http://ftp.fr.debian.org/debian/ squeeze-updates main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ squeeze-updates main contrib non-free
</pre>
<h3>Explication sur les types de paquets</h3>
<p>main : paquets Debian stable les plus à jours.<br />
non-free : paquets dont la distribution est restreinte par une licence quelconque.<br />
contrib : paquets main qui dépendent d&#8217;un paquet non-free.</p>
<p>Ensuite mettez à jour:</p>
<pre class="brush: bash; title: ; notranslate">apt-get update</pre>
<pre class="brush: bash; title: ; notranslate">apt-get upgrade</pre>
<div name="googleone_share_1" style="position:relative;z-index:5;float: left; margin-right: 10px; margin-left: 80px;"><g:plusone size="medium" count="1" href="http://www.ebelair.fr/2011/06/21/debian-squeeze-source-list/">{lang: 'fr'}</g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.ebelair.fr/2011/06/21/debian-squeeze-source-list/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Zend Framework 2.0.0dev3 Release</title>
		<link>http://www.ebelair.fr/2011/06/15/zend-framework-2-0-0dev3-release/</link>
		<comments>http://www.ebelair.fr/2011/06/15/zend-framework-2-0-0dev3-release/#comments</comments>
		<pubDate>Wed, 15 Jun 2011 09:35:56 +0000</pubDate>
		<dc:creator>manu</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zend framework]]></category>
		<category><![CDATA[zf2]]></category>

		<guid isPermaLink="false">http://www.ebelair.fr/?p=104</guid>
		<description><![CDATA[La version Zend Framework 2.0.0dev3 Release est sortie. Vous pouvez la trouver ici Vous trouverez sur cette page les sources ainsi qu&#8217;un tutoriel et un wiki. Attention toutefois il ne s&#8217;agit pas d&#8217;une version de production donc be careful! {lang: &#8230; <a href="http://www.ebelair.fr/2011/06/15/zend-framework-2-0-0dev3-release/">Continuer la lecture de <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>La version Zend Framework 2.0.0dev3 Release est sortie. Vous pouvez la trouver <a href="http://devzone.zend.com/article/15448-Zend-Framework-2.0.0dev3-Release">ici</a><br />
Vous trouverez sur cette page les sources ainsi qu&#8217;un tutoriel et un wiki.<br />
Attention toutefois il ne s&#8217;agit pas d&#8217;une version de production donc be careful!</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: left; margin-right: 10px; margin-left: 80px;"><g:plusone size="medium" count="1" href="http://www.ebelair.fr/2011/06/15/zend-framework-2-0-0dev3-release/">{lang: 'fr'}</g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.ebelair.fr/2011/06/15/zend-framework-2-0-0dev3-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installer et configurer ModSecurity</title>
		<link>http://www.ebelair.fr/2011/06/07/installer-et-configurer-modsecurity/</link>
		<comments>http://www.ebelair.fr/2011/06/07/installer-et-configurer-modsecurity/#comments</comments>
		<pubDate>Tue, 07 Jun 2011 19:03:17 +0000</pubDate>
		<dc:creator>manu</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Tutoriels]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[mosecurity]]></category>
		<category><![CDATA[tutoriel]]></category>

		<guid isPermaLink="false">http://ebelair.fr/?p=18</guid>
		<description><![CDATA[ModSecurity est un module open source apache faisant office de firewall web. Il analyse et protège les sites internet contre les attaques diverses comme l&#8217;injection de script par exemple. Sa force réside dans le fait qu&#8217;il agit au niveau du &#8230; <a href="http://www.ebelair.fr/2011/06/07/installer-et-configurer-modsecurity/">Continuer la lecture de <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>ModSecurity est un module open source apache faisant office de firewall web. Il analyse et protège les sites internet contre les attaques diverses comme l&#8217;injection de script par exemple. Sa force réside dans le fait qu&#8217;il agit au niveau du protocole HTTP et qu&#8217;il peut donc protéger des sites internet qui possèdent des failles de sécurité. Il est donc un complément aujourd&#8217;hui indispensable à iptables et surtout à tous les cms actuels dont la sécurité est relativement douteuse.</p>
<p>Ce document est une version light de la documentation officielle que vous pouvez trouver ici: <a title="http://www.modsecurity.org" href="http://www.modsecurity.org" target="_blank">www.modsecurity.org</a> et que je vous conseille vivement de parcourir!<br />
Le présent tuto est adapté à une Debian squeeze, pour toute autre distrib, il vous faudra surement adapter le code. Toutes les commandes ci-après seront réalisées en root.<br />
<span id="more-18"></span><br />
A l&#8217;heure où j&#8217;écris ces lignes les versions de ModSecurity sont les suivantes:<br />
ModSecurity stable: 2.6.0<br />
CRS (jeu de règles): 2.1.2</p>
<h3>Prérequis:</h3>
<p>Activer le module unique_id dans apache (normalement déjà installé):</p>
<pre class="brush: bash; title: ; notranslate">a2enmod unique_id</pre>
<p>Installer les librairies suivantes:</p>
<pre class="brush: bash; title: ; notranslate">apt-get install libapr1 libapr1-dev
apt-get install libpcre3 libpcre3-dev
apt-get install libxml2 libxml2-dev
</pre>
<p>Si vous souhaitez installer ModSecurity Log Collector (mlogc &#8211; optionnel et non traité dans ce tuto) vous devez installer libcurl:</p>
<pre class="brush: bash; title: ; notranslate">apt-get install libcurl4-gnutls-dev</pre>
<h3>Téléchargement et installation de ModSecurity</h3>
<pre class="brush: bash; title: ; notranslate">cd /root
wget http://www.modsecurity.org/download/modsecurity-apache_2.6.0.tar.gz
tar -zxvf modsecurity-apache_2.6.0.tar.gz
cd modsecurity-apache_2.6.0/
./autogen.sh
./configure
make
make install</pre>
<p>Ignorer les erreurs de make et make install, elles portent uniquement sur l&#8217;absence de libcurl qui n&#8217;est pas nécessaire, l&#8217;installation se fera quand même.<br />
Normalement modsecurity doit être installé dans /usr/local/modsecurity<br />
Copier le module dans apache:</p>
<pre class="brush: bash; title: ; notranslate">cp /usr/local/modsecurity/lib/mod_security2.so /usr/lib/apache2/modules/
chmod 644 /usr/lib/apache2/modules/mod_security2.so</pre>
<p><strong>Le module est installé mais n&#8217;est pas encore activé</strong>. Nous allons donc créer deux fichier, un pour charger le module et l&#8217;autre pour le configurer.</p>
<p>Commençons par le fichier de chargement du module:</p>
<pre class="brush: bash; title: ; notranslate">vi /etc/apache2/mods-available/mod_security2.load</pre>
<p>Y insérer le code suivant:</p>
<pre class="brush: bash; title: ; notranslate">LoadModule security2_module /usr/lib/apache2/modules/mod_security2.so</pre>
<p>Ensuite nous allons utiliser la configuration de base proposée par <a title="Configuration de base" href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Reference_Manual#A_Recommended_Base_Configuration" target="_blank">www.modsecurity.org</a> que nous allons modifier légèrement pour l&#8217;adapter à nos besoins:</p>
<pre class="brush: bash; title: ; notranslate">vi /etc/apache2/mods-available/mod_security2.conf</pre>
<p>Y insérer le code suivant:</p>
<pre class="brush: bash; collapse: true; light: false; title: /etc/apache2/mods-available/mod_security2.conf; toolbar: true; notranslate">
&lt;IfModule mod_security2.c&gt;
# -- Rule engine initialization ----------------------------------------------

# Enable ModSecurity, attaching it to every transaction. Use detection
# only to start with, because that minimises the chances of post-installation
# disruption.
#
SecRuleEngine On

# -- Request body handling ---------------------------------------------------

# Allow ModSecurity to access request bodies. If you don't, ModSecurity
# won't be able to see any POST parameters, which opens a large security
# hole for attackers to exploit.
#
SecRequestBodyAccess On

# Enable XML request body parser.
# Initiate XML Processor in case of xml content-type
#
SecRule REQUEST_HEADERS:Content-Type &quot;text/xml&quot; \
&quot;phase:1,t:none,t:lowercase,pass,nolog,ctl:requestBodyProcessor=XML&quot;

# Maximum request body size we will accept for buffering. If you support
# file uploads then the value given on the first line has to be as large
# as the largest file you are willing to accept. The second value refers
# to the size of data, with files excluded. You want to keep that value as
# low as practical.
#
SecRequestBodyLimit 134217728
SecRequestBodyNoFilesLimit 131072

# Store up to 128 KB of request body data in memory. When the multipart
# parser reachers this limit, it will start using your hard disk for
# storage. That is slow, but unavoidable.
#
SecRequestBodyInMemoryLimit 131072

# What do do if the request body size is above our configured limit.
# Keep in mind that this setting will automatically be set to ProcessPartial
# when SecRuleEngine is set to DetectionOnly mode in order to minimize
# disruptions when initially deploying ModSecurity.
#
SecRequestBodyLimitAction Reject

# Verify that we've correctly processed the request body.
# As a rule of thumb, when failing to process a request body
# you should reject the request (when deployed in blocking mode)
# or log a high-severity alert (when deployed in detection-only mode).
#
SecRule REQBODY_ERROR &quot;!@eq 0&quot; \
&quot;phase:2,t:none,log,deny,status:400,msg:'Failed to parse request body.',logdata:'%{reqbody_error_msg}',severity:2&quot;

# By default be strict with what we accept in the multipart/form-data
# request body. If the rule below proves to be too strict for your
# environment consider changing it to detection-only. You are encouraged
# _not_ to remove it altogether.
#
SecRule MULTIPART_STRICT_ERROR &quot;!@eq 0&quot; \
&quot;phase:2,t:none,log,deny,status:44,msg:'Multipart request body \
failed strict validation: \
PE %{REQBODY_PROCESSOR_ERROR}, \
BQ %{MULTIPART_BOUNDARY_QUOTED}, \
BW %{MULTIPART_BOUNDARY_WHITESPACE}, \
DB %{MULTIPART_DATA_BEFORE}, \
DA %{MULTIPART_DATA_AFTER}, \
HF %{MULTIPART_HEADER_FOLDING}, \
LF %{MULTIPART_LF_LINE}, \
SM %{MULTIPART_SEMICOLON_MISSING}, \
IQ %{MULTIPART_INVALID_QUOTING}, \
IH %{MULTIPART_INVALID_HEADER_FOLDING}, \
IH %{MULTIPART_FILE_LIMIT_EXCEEDED}'&quot;

# Did we see anything that might be a boundary?
#
SecRule MULTIPART_UNMATCHED_BOUNDARY &quot;!@eq 0&quot; \
&quot;phase:2,t:none,log,deny,status:44,msg:'Multipart parser detected a possible unmatched boundary.'&quot;

# PCRE Tuning
# We want to avoid a potential RegEx DoS condition
#
SecPcreMatchLimit 1000
SecPcreMatchLimitRecursion 1000

# Some internal errors will set flags in TX and we will need to look for these.
# All of these are prefixed with &quot;MSC_&quot;.  The following flags currently exist:
#
# MSC_PCRE_LIMITS_EXCEEDED: PCRE match limits were exceeded.
#
SecRule TX:/^MSC_/ &quot;!@streq 0&quot; \
&quot;phase:2,t:none,deny,msg:'ModSecurity internal error flagged: %{MATCHED_VAR_NAME}'&quot;

# -- Response body handling --------------------------------------------------

# Allow ModSecurity to access response bodies.
# You should have this directive enabled in order to identify errors
# and data leakage issues.
#
# Do keep in mind that enabling this directive does increases both
# memory consumption and response latency.
#
SecResponseBodyAccess On

# Which response MIME types do you want to inspect? You should adjust the
# configuration below to catch documents but avoid static files
# (e.g., images and archives).
#
SecResponseBodyMimeType text/plain text/html text/xml

# Buffer response bodies of up to 512 KB in length.
SecResponseBodyLimit 524288

# What happens when we encounter a response body larger than the configured
# limit? By default, we process what we have and let the rest through.
# That's somewhat less secure, but does not break any legitimate pages.
#
SecResponseBodyLimitAction ProcessPartial

# -- Filesystem configuration ------------------------------------------------

# The location where ModSecurity stores temporary files (for example, when
# it needs to handle a file upload that is larger than the configured limit).
#
# This default setting is chosen due to all systems have /tmp available however,
# this is less than ideal. It is recommended that you specify a location that's private.
#
SecTmpDir /tmp/

# The location where ModSecurity will keep its persistent data.  This default setting
# is chosen due to all systems have /tmp available however, it
# too should be updated to a place that other users can't access.
#
SecDataDir /tmp/

# -- File uploads handling configuration -------------------------------------

# The location where ModSecurity stores intercepted uploaded files. This
# location must be private to ModSecurity. You don't want other users on
# the server to access the files, do you?
#
SecUploadDir /opt/modsecurity/var/upload/

# By default, only keep the files that were determined to be unusual
# in some way (by an external inspection script). For this to work you
# will also need at least one file inspection rule.
#
SecUploadKeepFiles RelevantOnly

# Uploaded files are by default created with permissions that do not allow
# any other user to access them. You may need to relax that if you want to
# interface ModSecurity to an external program (e.g., an anti-virus).
#
#SecUploadFileMode 0600

#Antivirus
SecRule FILES_TMPNAMES &quot;@inspectFile /etc/apache2/modsecurity/util/runav.pl&quot; &quot;phase:2,t:none,log,deny,msg:'Malicous File Attachment Identified.'&quot;

# -- Debug log configuration -------------------------------------------------

# The default debug log configuration is to duplicate the error, warning
# and notice messages from the error log.
#
SecDebugLog /var/log/apache2/modsec_debug.log
SecDebugLogLevel 3

# -- Audit log configuration -------------------------------------------------

# Log the transactions that are marked by a rule, as well as those that
# trigger a server error (determined by a 5xx or 4xx, excluding 404,
# level response status codes).
#
SecAuditEngine RelevantOnly
SecAuditLogRelevantStatus &quot;^(?:5|4(?!04))&quot;

# Log everything we know about a transaction.
SecAuditLogParts ABIJDEFHKZ

# Use a single file for logging. This is much easier to look at, but
# assumes that you will use the audit log only ocassionally.
#
SecAuditLogType Serial
SecAuditLog /var/log/apache2/modsec_audit.log

# Specify the path for concurrent audit logging.
#SecAuditLogStorageDir /opt/modsecurity/var/audit/

# -- Miscellaneous -----------------------------------------------------------

# Use the most commonly used application/x-www-form-urlencoded parameter
# separator. There's probably only one application somewhere that uses
# something else so don't expect to change this value.
#
SecArgumentSeparator &amp;

# Settle on version 0 (zero) cookies, as that is what most applications
# use. Using an incorrect cookie version may open your installation to
# evasion attacks (against the rules that examine named cookies).
#
SecCookieFormat 0

Include /etc/apache2/modsecurity/activated_rules/*.conf
&lt;/IfModule&gt;
</pre>
<h4>Modifications apportées au fichier</h4>
<p><strong>Ligne 8 :</strong> SecRuleEngine On<br />
Ici on active ModSecurity pour bloquer et logguer les attaques. Deux autre modes sont possibles:<br />
Off: désactivé<br />
DetectionOnly: Fonctionnera comme un IDS, c&#8217;est à dire qu&#8217;il se contentera de logguer les attaques sans pour autant les bloquer.</p>
<p><strong>Ligne 141 :</strong> SecUploadDir /opt/modsecurity/var/upload/<br />
On défini l&#8217;emplacement sécurisé pour les fichiers uploadés, si le répertoire n&#8217;existe pas il faudra le créer:</p>
<pre class="brush: bash; title: ; notranslate">mkdir -p /opt/modsecurity/var/upload/</pre>
<p><strong>Ligne 156 :</strong> SecRule FILES_TMPNAMES &laquo;&nbsp;@inspectFile /etc/apache2/modsecurity/util/runav.pl&nbsp;&raquo; &laquo;&nbsp;phase:2,t:none,log,deny,msg:&#8217;Malicous File Attachment Identified.&#8217;&nbsp;&raquo;<br />
On défini le chemin vers le script qui va scanner les fichiers uploadé contre les virus, le fichier nécessite que clamav soit installé. Si vous ne souhaitez pas l&#8217;utiliser vous pouvez commentez cette ligne.</p>
<p><strong>Ligne 163 :</strong> SecDebugLog /var/log/apache2/modsec_debug.log<br />
Ici on souhaite dupliquer les erreurs de Error.log dans un autre fichier, c&#8217;est plus pratique pour le debug.</p>
<p><strong>Ligne 182 :</strong> SecAuditLog /var/log/apache2/modsec_audit.log<br />
On défini le fichier de log qui contiendra la trace complète des attaques.</p>
<p><strong>Ligne 201 :</strong> Include /etc/apache2/modsecurity/activated_rules/*.conf<br />
Cette ligne inclue le chemin des fihiers de regles dont l&#8217;installation est decrite ci-dessous.</p>
<h3>Mises en place des règles</h3>
<p><a href="http://www.modsecurity.org">www.modsecurity.org</a> met à votre disposition des jeux de règles à installer, pour cela nous allons les télécharger:</p>
<pre class="brush: bash; title: ; notranslate">
cd /etc/apache2/
wget http://sourceforge.net/projects/mod-security/files/modsecurity-crs/0-CURRENT/modsecurity-crs_2.2.0.tar.gz
tar -zxvf modsecurity-crs_2.2.0.tar.gz
mv modsecurity-crs_2.2.0 modsecurity
cd modsecurity
ls -la
</pre>
<p>Vous pouvez remarquer qu&#8217;il y a tout un tas de règles diverses et variées qui peuvent rendre votre ModSecurity plus ou moins paranoïaque! Pour le tuto nous allons installer uniquement celle proposées par la configuration decrite dans le fichier INSTALL.</p>
<p>En gros, nous avons un répertoire &laquo;&nbsp;activated_rules&nbsp;&raquo; qui, dans le même principe que mods-enabled ou sites-enabled va contenir des liens symboliques vers les fichiers de règles que nous souhaitons ajouter.<br />
Pour commencer nous allons dupliquer le fichier modsecurity_crs_10_config.conf.example qui contiendra vos règles personnelles:<br />
Note pour la suite: Vérifiez que vous vous trouvez bien dans le répertoire /etc/apache2/modsecurity.</p>
<pre class="brush: bash; title: ; notranslate">cp modsecurity_crs_10_config.conf.example modsecurity_crs_10_config.conf</pre>
<p>Il faut ensuite l&#8217;activer &#8230;</p>
<pre class="brush: bash; title: ; notranslate">ln -s /etc/apache2/modsecurity/modsecurity_crs_10_config.conf /etc/apache2/modsecurity/activated_rules/modsecurity_crs_10_config.conf</pre>
<p>Ensuite nous allons activer toutes les règles du répertoire &laquo;&nbsp;base_rules&nbsp;&raquo; qui contient les règles de base de ModSecurity:</p>
<pre class="brush: bash; title: ; notranslate">for f in `ls base_rules/` ; do ln -s /etc/apache2/modsecurity/base_rules/$f /etc/apache2/modsecurity/activated_rules/$f ; done</pre>
<p>Nous allons activer aussi le jeu de règle comment_spam:</p>
<pre class="brush: bash; title: ; notranslate">for f in `ls optional_rules/ | grep comment_spam` ; do ln -s /etc/apache2/modsecurity/optional_rules/$f /etc/apache2/modsecurity/activated_rules/$f ; done</pre>
<p>Si vous listez le repertoire activated_rules vous devriez voir les liens symboliques de tout les fichiers de règles activés.</p>
<pre class="brush: bash; title: ; notranslate">ls -la activated_rules</pre>
<h3>Anti-virus</h3>
<p>Vus pouvez également lier ModSecurity à votre antivirus grâce à un script perl.  A chaque upload de fichier ModSecurity demandera à l&#8217;antivirus de le scanner pour vérifier son intégrité.<br />
Dans notre cas nous utiliserons clamav, ce qui tombe bien car un script est déjà mis à disposition dans le répertoire &laquo;&nbsp;util&nbsp;&raquo;! Il s&#8217;agit du fichier runav.pl<br />
Ici il n&#8217;y a rien à faire car la directive pour utiliser ce script a déjà été définie précédemment dans le fichier /etc/apache2/mods-available/mod_security2.conf ligne 156.</p>
<h3>Activation de ModSecurity et Test</h3>
<p>Maintenant que tout est prêt, il ne reste plus qu&#8217;à activer le module.<br />
Attention, si vous êtes sur un serveur en production, je vous conseille de modifier le paramètre SecRuleEngine ligne 8 du fichier /etc/apache2/mods-available/mod_security2.conf à DetectionOnly ce qui permettra en cas de faux positifs de ne pas bloquer les utilisateurs.</p>
<pre class="brush: bash; title: ; notranslate">
a2enmod mod_security2
service apache2 restart
</pre>
<p>Si apache redémarre correctement c&#8217;est que le module est bien paramétré. Sinon désactivez le module, redémarrez apache et essayez de résoudre les erreurs éventuelles.</p>
<p>Normalement vos fichiers de log devraient se créer automatiquement et commencer à se remplir, inspectez donc le fichier /var/log/apache2/modsec_audit.log</p>
<pre class="brush: bash; title: ; notranslate">tail -f /var/log/apache2/modsec_audit.log</pre>
<p>Allez sur un de vos site et ajoutez dans l&#8217;url : www.votre_site.com/?p=&lt;script&gt;<br />
Vous devriez voir apparaitre un log de tentative d&#8217;attaque et si SecRuleEngine est à on, vous vous faites simplement jeter.</p>
<p>Essayez d&#8217;uploader un fichier infecté par un virus, un simple fichier test eicar fera l&#8217;affaire, créez le fichier testeicar.txt et ajoutez cette ligne:</p>
<pre class="brush: bash; title: ; notranslate">X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*</pre>
<p>Essayez ensuite de l&#8217;uploader, si vous voyez des logs c&#8217;est que le fichier a été scanné et si SecRuleEngine est à on, votre fichier est refusé par le serveur.</p>
<h3>Erreurs et Faux positifs</h3>
<p>Upload de fichiers: si vous obtenez cette erreur: mod_fcgid: HTTP request length 135714 (so far) exceeds MaxRequestLen (131072)<br />
Vous devez modifier le module fcgid et autoriser une plus grosse taille pour les fichiers:</p>
<pre class="brush: bash; title: ; notranslate">vi /etc/apache2/mods-available/fcgid.conf</pre>
<p>et modifiez-le comme ceci:</p>
<pre class="brush: bash; title: ; notranslate">
  AddHandler    fcgid-script .fcgi
  FcgidConnectTimeout 20
  # Accepte de gros fichiers
  MaxRequestLen 15728640
</pre>
<p>C&#8217;est la config de php.ini permettra de limiter la taille des fichiers.</p>
<h4>Faux positifs</h4>
<p>Il y a de grandes chances pour que certaines pages de vos sites deviennent inaccessibles car détectées par ModSecurity comme contenant du code suspicieux. C&#8217;est par exemple le cas de piwik ou de wordpress qui chargent nombre de fichiers javascripts et autres. Plusieurs solutions sont possibles mais la plus simple est de désactiver certaines règles pour des pages demandée. Il suffit de regarder les logs et de prélever l&#8217;id de la règle qui nous bloque et de la désactiver.<br />
Nous allons commencer par créer un fichier /etc/apache2/modsecurity/whitelist.conf, ce fichier contiendra nos règles de faux positifs</p>
<pre class="brush: bash; title: ; notranslate"> vi /etc/apache2/modsecurity/whitelist.conf</pre>
<p>Nous allons prendre comme exemple wordpress et l&#8217;accès à l&#8217;admin impossible<br />
Ajoutons la règles suivante au fichier :</p>
<pre class="brush: bash; title: ; notranslate">
#Ici on désactive 5 règles pour tout le répertoire wp-admin
&lt;LocationMatch &quot;/wp-admin/&quot;&gt;
SecRuleRemoveById 970901 970903 960009 950109 950907
&lt;/LocationMatch&gt;

#Ici on désactive une règle pour un script en particulier
&lt;LocationMatch &quot;/wp-admin/theme-editor.php&quot;&gt;
SecRuleRemoveById 958885
&lt;/LocationMatch&gt;
</pre>
<p>Ne pas oublier d&#8217;ajouter notre fichier au répertoire activated_rules:</p>
<pre class="brush: bash; title: ; notranslate">
ln -s /etc/apache2/modsecurity/whitelist.conf /etc/apache2/modsecurity/activated_rules/whitelist.conf
service apache2 restart
</pre>
<p>On devrais maintenant pouvoir accéder à l&#8217;admin de wordpress et si c&#8217;est pas bon, c&#8217;est que l&#8217;on a pas désactivé les bonne règles!<br />
J&#8217;en profite pour ajouter que certaines règles on été créées pour coller à certains cms ou sites préconçus. Vous trouverez ces règles dans le répertoire slr_rules.</p>
<p>Maintenant que ModSecurity est installé et configuré, n&#8217;hésitez pas à consulter la <a href="http://sourceforge.net/apps/mediawiki/mod-security/index.php?title=Main_Page" target="_blank">documentation</a> pour en faire le tour et en maitriser tout ses aspects!</p>
<div name="googleone_share_1" style="position:relative;z-index:5;float: left; margin-right: 10px; margin-left: 80px;"><g:plusone size="medium" count="1" href="http://www.ebelair.fr/2011/06/07/installer-et-configurer-modsecurity/">{lang: 'fr'}</g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.ebelair.fr/2011/06/07/installer-et-configurer-modsecurity/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

