<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Sécurité</title>
  <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/taxonomy/term/1058"/>
  <link rel="self" type="application/atom+xml" href="http://artisan.karma-lab.net/taxonomy/term/1058/atom/feed"/>
  <id>http://artisan.karma-lab.net/taxonomy/term/1058/atom/feed</id>
  <updated>2008-10-01T02:27:10+02:00</updated>
  <entry>
    <title>Navigo Parano ? peut-être pas tant que cela...</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1669" />
    <id>http://artisan.karma-lab.net/node/1669</id>
    <published>2008-10-03T17:49:15+02:00</published>
    <updated>2008-10-06T10:14:04+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Sécurité" />
    <category term="Planet Libre" />
    <category term="Article" />
    <summary type="html"><![CDATA[
<p>
  Le navigo, ça va, tous les franciliens connaissent. Il nous est vendu depuis des lustres autant comme l'objet top-hapy-cool qui va bien avec l'iPod, qu'une nécessité imposée par la terrible réalité de l'armée de fraudeurs qui chaque jour que dieu fait dépouille les transporteurs. Pour d'autres, c'est plus le son de "Bienvenue à Gattaca" que leur évoque le son du passage au tourniquet... 
</p>
    ]]></summary>
    <content type="html"><![CDATA[
<p>
  Le navigo, ça va, tous les franciliens connaissent. Il nous est vendu depuis des lustres autant comme l'objet top-hapy-cool qui va bien avec l'iPod, qu'une nécessité imposée par la terrible réalité de l'armée de fraudeurs qui chaque jour que dieu fait dépouille les transporteurs. Pour d'autres, c'est plus le son de "Bienvenue à Gattaca" que leur évoque le son du passage au tourniquet... 
</p>
<!--break-->

	<a name='chapter_1'></a>
	<h2>Navigo késako ?</h2>
	
<p>
   Le Navigo est le billet électronique qui sera à terme utilisé par tous les franciliens dans tous les transports en commun. La technologie du Navigo (nom de code Calypso) est une carte à microprocesseur (comme sur votre carte bleue) dotée d'une antenne lui permettant de communiquer sans contact avec le valideur. La mémoire de la puce contient quant à elle un numéro d'identification unique, toutes les informations relatives à l'abonnement, ainsi que celles relatives à l'abonné (nom, adresse, parait-il photo numérisée). 
</p>
<p>
  Lorsque le contact avec le valideur est établie, un enregistrement part vers les bases de données du transporteur, puis vers celles du <a class='external' target='_blank' href='http://www.stif-idf.fr/' >STIF</a>. Le premier jeu de base est sensé servir à détecter les fraudes, le second à établir des statistiques pour "améliorer" les services. Admettons.</p>
<p>
   Cet enregistrement, qui file je ne sais où, contient les données de passage (localisation, heure, etc) ainsi que le numéro d'identification de la carte. Et déjà à ce stade, deux problèmes se posent...
</p>


	<a name='chapter_2'></a>
	<h2>Conservation des données</h2>
	
<p>
 Le premier, évident, est celui concernant le rapprochement que l'on peut faire entre ce numéro magique et les coordonnées de l'usager, permettant théoriquement de connaître ses déplacements urbains. A cela le STIF a toujours répondu que, suivant maintenant scrupuleusement les directives de la CNIL, la durée de conservation de ces enregistrements n'est plus que de 48h. L'informaticien que je suis se dit déjà que cela doit être un paramétrage facile à changer "en cas de besoin". Le citoyen lui, est un peu gêné de savoir que, même pour "seulement" 48h, une petite cartographie le concernant est réalisable. Faut pas que l'histoire se répète ou qu'une bombe explose dans Paris sinon ça va être le drame...
</p>

<p>
  Maintenant l'informaticien reprend le dessus et se demande bien ce que veut dire "effacé". Après quelque recherche il semble que l'effacement soit tout relatif mais néanmoins efficace puisqu'il s'agirait de celui du numéro d'identification. Il ne resterait donc plus que les données horaires et géographiques, toujours utiles au STIF pour ses statistiques, un peu moins aux transporteurs, mais admettons...
</p>


	<a name='chapter_3'></a>
	<h2>Good evening, John Anderton</h2>
	
<p>
  Le second problème, un peu moins évident celui-là, est posé par la carte en elle-même. C'est bien gentil de faire disparaître tout contact, mais qu'est-ce qui m'assure, à moi citoyen, que les données qu'elle contient ne peuvent être lues à mon insu ? Ceux qui rigolent en pensant aux porteurs de navigo qui frottent désespérément leur carte "sans contact" sur la borne se disent qu'il y a peu de risque de ce côté là. Mais en fait ce n'est pas tout à fait exact.
</p>
<p>
 En effet, petit rappel sur le principe même du RFID, ce n'est pas la carte qui fournit l'énergie permettant les échanges, mais la borne. L'émission de radio-fréquence va fournir à la carte le jus nécessaire à l'activation de la puce et l'établissement d'un dialogue. En augmentant l'énergie émise, on augmente la distance possible. Et à ce stade rien n'empêche, théoriquement parlant, d'activer les puces par une borne placée dans la rue par exemple. Comme cela peut être pratique dans certains contextes... genre un passage de manif. Mais cela n'arrive qu'en chine ce genre de choses, admettons...
</p>

<p>
  Mais l'histoire a eu un heureux dénouement, dont CNIL a pu à juste titre <a class='external' target='_blank' href='http://www.cnil.fr/index.php?id=2243' >s'enorgueillir</a> ,lorsqu'est arrivé le "<a class='external' target='_blank' href='http://www.ratp.info/informer/passe_navigo_orange.php' >Navigo Découverte</a>". Ce passe sera par la suite plus connu sous le nom de "Navigo Anonyme" car fonctionnant comme notre bonne vieille carte orange, en deux morceaux et sans vilaines données stockées à l'intérieur. Un anonymat qui n'est pas gratuit celui-là, il vous en coûtera 5€. Admettons...
</p>


	<a name='chapter_4'></a>
	<h2>lapsus linguae</h2>
	
<p>
   Mais revenons plutôt à l'effacement tout relatif de nos données vieilles de plus de 48h. Récemment <kbd>Actuchomage.org</kbd> s'est ému de la "vente forcée" de passes Navigo aux demandeurs d'emploi franciliens et a envoyé, par courrier, une demande d'explication au STIF. Je passe sur la qualité contre-argumentaire irréprochable de <a class='external' target='_blank' href='http://www.actuchomage.org/modules.php?op=modload&amp;name=News&amp;file=article&amp;sid=4050&amp;mode=thread&amp;order=0&amp;thold=0' >la réponse du STIF</a>, avec citations latines et tout. Prêtons plutôt oreille au contrepoint, je veux dire au "punctus contra punctum".
   <blockquote><p>
   En pratique, les entreprises de transport procèdent, le plus rapidement possible après la validation (au maximum quelques heures, les délais dépendant du flux), à un codage réalisé sur le numéro de série. Le procédé de chiffrement rend impossible tout rapprochement avec un numéro de dossier commercial et donc avec l'identité du porteur. Cette anonymisation est irréversible et concerne aussi bien le passe Navigo personnalisé que le passe Navigo Découverte
   </p></blockquote>
</p>
<p>
  Pour le coup, c'est l'informaticien qui est intrigué. Déjà il se dit que de nos jours il peut s'en passer des choses en "quelques heures maximum". Mais ce qui a réellement attiré mon attention, c'est que je croyais que le fameux numéro de série était effacé, et voilà maintenant qu'il serait chiffré ? Et qui plus est par un <strong>procédé irréversible</strong> ? Mon dieu mais je n'imaginais même pas qu'une telle technique existait sur terre. Pour moi chiffrement implique déchiffrement sinon je ne vois pas bien l'intérêt de la manoeuvre. Un cryptage avec un nombre aléatoire comme clef ? faut être un peu tordu tout de même... 
</p>
<p>
  Mais dans le cas d'un lapsus plutôt révélateur cela voudrait surtout dire qu'en réalité les données sont belle et bien conservées, et ce "Ad Vitam Eternam"... Elles resteront là, attendant sagement que la nécessité aidant, le fameux identifiant puisse révéler qui se cache derrière le cryptique numéro d'identification. Un jour qui n'arrivera jamais, admettons...
</p>


	<a name='chapter_5'></a>
	<h2>Conclusion</h2>
	
<p>
   Comme souvent dans les nombreuses histoires de fichiers qui troublent notre citoyenne quiétude, ce n'est pas plus l'information stockée que l'encadrement de son usage qui devrait inquiéter. Quitte à en braquer quelques-un, je me moque royalement de savoir si mes orientations, même sexuelles, puissent être consignées quelque part si je peux 1/ Avoir accès à l'ensemble des informations qui <b>me concernent</b>, 2/ Pouvoir obtenir rectification de <b>mes</b> données, 3/ Avoir le contrôle sur qui a le droit ou pas de les consulter. Ou alors, dans le cadre d'une procédure légale, l'absolue et inaltérable assurance sur qui, et dans quelles circonstances précises, a le pouvoir de les consulter. 
</p>

    ]]></content>
  </entry>
  <entry>
    <title>Protéger ses données sur un serveur Apache</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/22" />
    <id>http://artisan.karma-lab.net/node/22</id>
    <published>2008-05-04T18:55:21+02:00</published>
    <updated>2008-10-06T11:32:48+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Sécurité" />
    <category term="Planet Libre" />
    <category term="Tutoriel" />
    <summary type="html"><![CDATA[<p>
Protéger ses données exposées sur le WEB n'est pas toujours évident et comporte quelques pièges qui donnent une illusion de sécurité alors qu'il n'en est rien. Ce tutoriel ne va pas, loin de là, couvrir tous les aspects du sujet, mais juste tenter d'apporter quelques bases permettant de se protéger à travers quelques cas pratiques. 
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
Protéger ses données exposées sur le WEB n'est pas toujours évident et comporte quelques pièges qui donnent une illusion de sécurité alors qu'il n'en est rien. Ce tutoriel ne va pas, loin de là, couvrir tous les aspects du sujet, mais juste tenter d'apporter quelques bases permettant de se protéger à travers quelques cas pratiques. 
</p>
<!--break-->


	<a name='chapter_31'></a>
	<h2>.htaccess vs configuration</h2>
	
<p>
Pour tout ce qui suit, ou presque, existe deux méthodes de paramétrages. La plus simple consiste à placer dans le dossier web à protéger un fichier <kbd>.htaccess</kbd> qui contiendra une configuration <u>spécifique à ce dossier</u>. Le contenu d'un tel dossier pourrait être :
<div class='code-container-area'><div class='code-container-caption'>Exemple de fichier .htaccess</div><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">AuthType Basic</div></li>
<li class="li1"><div class="de1">AuthName &quot;Accès protégé&quot;</div></li>
<li class="li1"><div class="de1">AuthUserFile &quot;/mon_chemin_vers_mots_de_passe/passwd&quot;</div></li>
<li class="li1"><div class="de1">require valid-user</div></li></ol></div></div></div>
</p>
<p>
Cette méthode a le mérite de la simplicité et protège autant le dossier lui-même que les sous-dossiers qu'il contient, sauf si un autre fichier <kbd>.htaccess</kbd> y contrevient.
</p>
<p>
L'autre méthode, sûrement plus pérenne, est de modifier directement un des fichiers de configuration Apache. Ces derniers se trouvent généralement en <kbd>/etc/httpd</kbd> et vous pouvez soit modifier <kbd>/etc/httpd/httpd.conf</kbd>, soit créer votre propre fichier <kbd>.conf</kbd> dans le dossier <kbd>/etc/httpd/conf.d</kbd>. A notez que les localisations peuvent changer d'une distribution à l'autre. Dans tous les cas la syntaxe est à peu près la même que pour un <kbd>.htaccess</kbd>:
<div class='code-container-area'><div class='code-container-caption'>Exemple de fichier &#039;/etc/httpd/conf.d/ma_protection.conf&#039;</div><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="sc3"><span class="re1">&lt;directory</span> <span class="st0">&quot;/mon/dossier/a/proteger&quot;</span><span class="re2">&gt;</span></span></div></li>
<li class="li1"><div class="de1">AuthType Basic</div></li>
<li class="li1"><div class="de1">AuthName &quot;Accès protégé&quot;</div></li>
<li class="li1"><div class="de1">AuthUserFile &quot;/mon_chemin_vers_mots_de_passe/passwd&quot;</div></li>
<li class="li2"><div class="de2">require valid-user</div></li>
<li class="li1"><div class="de1"><span class="sc3"><span class="re1">&lt;/directory<span class="re2">&gt;</span></span></span></div></li></ol></div></div></div>
</p>
<p>
La seule différence ici est donc la balise <kbd>Directory</kbd> qui encadre le code qui aurait été dans un fichier <kbd>.htaccess</kbd> et qui indique le chemin absolu à protéger, comme la position d'un <kbd>.htacess</kbd> l'aurait fait. Une autre différence cependant tient à la manière dont apache gère les deux types de fichier. En effet, un <kbd>.htaccess</kbd> est affectif tout de suite, dés que le fichier est créé et contient les données. En revanche un fichier de configuration nécessite le redémarrage du serveur Apache par un redémarrage du serveur apache. 
</p>
<p>
Maintenant le choix <kbd>.htaccess</kbd> ou fichier de configuration vous appartient. Tout ce qui suit devrait fonctionner dans les deux cas. 
</p>


	<a name='chapter_32'></a>
	<h2>Fichier de mots de passe</h2>
	
<p>
Si nous voulons qu'Apache protège notre dossier, il nous faut lui fournir une liste d'utilisateurs, voire de groupes d'utilisateurs. C'est ce que fait le code suivant en créant d'abord un répertoire et en changeant ses droits, puis en ajoutant avec la commande Apache <kbd>htpasswd</kbd> le premier utilisateur (le chemin du dossier et le nom du fichier n'ont aucune importance) :

<div class='code-container-area'><div class='code-container-caption'>Création du fichier et ajout d&#039;un utilisateur</div><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="kw2">mkdir</span> <span class="sy0">/</span>var<span class="sy0">/</span>secured<span class="sy0">/</span>passwords</div></li>
<li class="li1"><div class="de1"><span class="kw2">chown</span> apache:apache <span class="sy0">/</span>var<span class="sy0">/</span>secured<span class="sy0">/</span>passwords</div></li>
<li class="li1"><div class="de1">htpasswd -c <span class="sy0">/</span>var<span class="sy0">/</span>secured<span class="sy0">/</span>passwords gaston</div></li></ol></div></div></div>
</p>

<p>
Pour l'ajout des utilisateurs suivants, le fichier étant déjà créé, le paramètre <kbd>-c</kbd> n'est plus nécessaire :
<div class='code-container-area'><div class='code-container-caption'>Ajout de l&#039;utilisateur &#039;martine&#039;</div><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">htpasswd &nbsp;<span class="sy0">/</span>var<span class="sy0">/</span>secured<span class="sy0">/</span>passwords &nbsp;martine</div></li>
<li class="li1"><div class="de1">htpasswd &nbsp;<span class="sy0">/</span>var<span class="sy0">/</span>secured<span class="sy0">/</span>passwords &nbsp;robert</div></li></ol></div></div></div>
</p>

<p>
Un utilisateur préalablement créé, pourra être retiré de la manière suivante :
<div class='code-container-area'><div class='code-container'><div class="code">htpasswd -D <span class="sy0">/</span>var<span class="sy0">/</span>secured<span class="sy0">/</span>passwords &nbsp;martine</div></div></div>
</p>

<p>
Maintenant si nous vidons le contenu du fichier <kbd>/var/secured/passwords</kbd>, nous aurons ceci :
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">gaston:v/nTde818O.jQ</div></li>
<li class="li1"><div class="de1">martine:CsE8VK.qdaFj.</div></li>
<li class="li1"><div class="de1">robert:wKahxQnVtqyS6</div></li></ol></div></div></div>
</p>
<div class='inline-box attention'>
	Si vous n'avez pas accès à votre serveur en ligne de commande, rien ne vous empêche d'utiliser <kbd>htpasswd</kbd> à partir d'une autre machine et de télécharger ensuite le fichier résultant. Il existe aussi pas mal de scripts PHP sur le net permettant de fabriquer sur votre serveur une page de génération de mots de passe (la partie de droite). En revanche les générateurs de mot de passe en ligne sont <strong>simplement à proscrire</strong> pour d'évidentes raisons de sécurité. 
</div>
<p>
Nous avons donc maintenant les utilisateurs, leur mot de passe, il ne nous reste plus qu'à définir des groupes, même si c'est optionnel. Si nous voulons indiquer que l'utilisateur <kbd>gaston</kbd> appartient au groupe <kbd> webmasters </kbd> il suffit de créer un second fichier <kbd>/var/secured/groups</kbd> contenant les données suivantes :
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">webmasters: gaston martine</div></li>
<li class="li1"><div class="de1">visiteurs : robert</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">Maintenant que nous avons notre fichier de mots de passe et notre fichier de groupes, il ne nous reste plus qu'à protéger nos dossiers avec.</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">&lt;h3&gt;Protéger un répertoire physique&lt;/h3&gt;</div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">Pour ce faire, nous allons, dans le dossier à protéger, créer un fichier &lt;kbd&gt;.htaccess&lt;/kbd&gt;. Mais comme nous l'avons vu plus haut, ceci peut aussi se trouver dans la configuration apache, en dure.</div></li>
<li class="li1"><div class="de1">&lt;code&gt;</div></li>
<li class="li1"><div class="de1">AuthName &quot;Bienvenue sur mon serveur web&quot;</div></li>
<li class="li1"><div class="de1">AuthType Basic</div></li>
<li class="li2"><div class="de2">AuthUserFile &quot;/var/secured/passwords&quot;</div></li>
<li class="li1"><div class="de1">require valid-user</div></li></ol></div></div></div>
</p>

<p>
La syntaxe est ici simple à comprendre. <kbd>AuthName</kbd> est le message qui sera affiché dans la boite de dialogue de saisie de l'identifiant et du mot de passe. Gardez cela en tête pour ne pas y mettre de chose trop explicites comme "Bienvenue dans le site contenant tous mes numéros de carte bleue" <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>.
</p>

<p>
Le second paramètre, <kbd>AuthType</kbd> indique à Apache d'utiliser le protocole <kbd>Basic</kbd> pour authentifier l'utilisateur. Comme son nom le laisse présager, ce protocole est le plus simple, le plus compatibles avec tous les navigateurs, mais aussi le moins sécurisé comme nous le verrons un peu plus loin. D'autres type d'authentification existent sous Apache par l'intermédiaire de modules spécifiques, comme nous allons le voire aussi plus loin.
</p>
<p>
Ensuite nous avons <kbd>AuthUserFile</kbd> qui indique le chemin vers le fichier que nous avons créé dans le chapitre précédent, et contenant donc nos utilisateurs et leurs mots de passe.
</p>
<p>
Enfin, la règle d'authentification à proprement parler, <kbd>require valid-user</kbd>. Elle indique à Apache que tout utilisateur ayant réussi à rentrer son mot de passe est autorisé à rentrer dans le dossier. Si nous voulions spécifiquement autoriser Robert à rentrer, nous aurions mis <kbd>require user robert</kbd>, et pour Gaston et Martine, cela aurais été <kbd>require user gaston martine</kbd>.
</p>
<p>
Vu que nous avons créé un fichier de groupes d'utilisateur au chapitre précédent, autant en profiter. Et si voulions n'autoriser que le groupe <kbd>webmaster</kbd> à rentrer, nous aurions cette fois un fichier <kbd>.htaccess</kbd> comme ceci :
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">AuthName &quot;Bienvenue sur mon serveur web&quot;</div></li>
<li class="li1"><div class="de1">AuthType Basic</div></li>
<li class="li1"><div class="de1">AuthUserFile &quot;/var/secured/passwords&quot;</div></li>
<li class="li1"><div class="de1">AuthGroupFile &quot;/var/secured/groups&quot;</div></li>
<li class="li2"><div class="de2">require group webmaster</div></li></ol></div></div></div>
</p>
<p>
   Plus complet, les deux chemins vers les deux fichiers mots de passe et groupes sont indiqués (apparition du mot clef <kbd>AuthGroupFile</kbd>). 
</p>
<p>
    Enfin il est possible de panacher tout cela avec des choses du genre : <kbd>require user robert, group webmaster</kbd>. Ceci indique à apache que seuls les membres du groupe <kbd>webmaster</kbd> sont autorisés, à l'exception de robert.
</p>


	<a name='chapter_33'></a>
	<h2>Utiliser un serveur LDAP</h2>
	
<p>
    Comme je le disais plus haut, il y a de nombreux modules liés à l'authentification disponibles pour Apache sous la forme de modules. Par exemple si vous vouliez utiliser un protocole <a class='external' target='_blank' href='/%20http%3A/%252Fen.wikipedia.org/wiki/Digest_access_authentication' >Digest</a> au lien du simple <kbd>Basic</kbd>, vous utiliseriez le module <a class='external' target='_blank' href='/%20http%3A/%252Fhttpd.apache.org/docs/2.0/mod/mod_auth_digest.html' >mod_auth_digest</a>. 
</p>
<p>
  De même différent modules permettent de vérifier les utilisateurs, groupes et mots de passe sur une base de donnée plutôt qu'un fichier texte, ou encore un serveur 
		  <a target='_blank' href='http://fr.wikipedia.org/wiki/ldap'>
		  ldap
		  </a> par le biais du module <a class='external' target='_blank' href='http://httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html' >mod_authnz_ldap</a>. Il dépends du module Apache d'accès  à LDAP, <kbD>mod_ldap</kbd> qu'il faut aussi installer. Ce module permet une authentification <kbd>Basic</kbd> adossée à un base LDAP.  Un bloc de configuration pour un tel système se présente comme cela
<div class='code-container-area'><div class='code-container-caption'>.htaccess via LDAP</div><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">AuthType Basic</div></li>
<li class="li1"><div class="de1">AuthName &quot;Bienvenue sur mon serveur web&quot;</div></li>
<li class="li1"><div class="de1">AuthBasicProvider ldap</div></li>
<li class="li1"><div class="de1">AuthLDAPURL ldap://localhost:389/dc=mon-domaine,dc=com</div></li>
<li class="li2"><div class="de2">AuthLDAPGroupAttribute memberUid</div></li>
<li class="li1"><div class="de1">AuthLDAPGroupAttributeIsDN off</div></li>
<li class="li1"><div class="de1">Require ldap-group cn=webmasters,ou=Group,dc=mon-domaine,dc=com</div></li></ol></div></div></div>
</p>

<p>
Comme vous le voyez l'esprit est à peu prés le même que précédemment. La ligne <kbd>AuthBasicProvider</kbd> indique à apache de se baser sur un serveur LDAP plutôt qu'un fichier. Les coordonnées du serveur apparaissent avec la ligne <kbd>AuthLDAPURL</kbd> qui indique le nom de la machine, le port en écoute, ainsi que le domaine pris en charge.
</p>

<p>
Les deux attributs suivant permettent au module apache de se repérer dans les enregistrements LDAP et d'y trouver les utilisateurs. Le paramétrage que j'utilise ici se base sur la disposition standard d'une base LDAP sous Unix et est à adapter pour un ActiveDirectory sous Windows, par exemple. 
</p>

<p>
Enfin la dernière ligne indique à apache de n'autoriser à rentrer que le group ldap spécifié (ici webmasters). L'utilisateur de <kbd>ldap-user</kbd> (ex. <kbd>Require  ldap-user Gaston) permettrait de n'autoriser qu'un utilisateur spécifique. Et ici aussi, le panachage est autorisé en séparant les éléments par des virgules. 
</p>
<div class='inline-box attention'>
Utiliser les mêmes mots de passe pour un service web publique et des utilisateurs locaux présente un risque car le protocole <kbD>Basic</kbd> ne permet pas de se protéger d'une attaque en "brut force". C'est-à-dire qu'un vilain peu faire autant de tentatives qu'il le désire sans qu'apache ne l'en empêche et ainsi trouver un mot de passe critique, même s'il met des jours a le faire. Le risque n'est pas énorme mais doit être pris en compte dans la qualité des mots de passe utilisables sur le WEB.
</div>

<p>
A ce stade, nous avons déjà pas mal d'outils pour protéger nos données mais si nous nous arrêtions à cela, cela ne servirait à rien... En effet, ce type de sécurité est aussi valable qu'une porte blindée sur des murs en cartons. Car le gros inconvénient du mode <kbd>basic</kbd> est que les mots de passes circulent <strong>en clair</strong>. Protéger par mot de passe un dossier accessible avec le protocole HTTP est donc très dangereux. Une simple écoute active (mode Promisc) du réseau, si par exemple vous utilisez cela de votre bureau, dévoile aussi sûrement vos secrets que si vous les aviez envoyé à tout le monde par courriel. Pour parfaire notre protection il est donc obligatoire de mettre en œuvre le protocole HTTPS, ce que j'aborderais dans un autre article. 
</p>


	<a name='chapter_34'></a>
	<h2>Empêcher le téléchargement des images à partir d'un autre site</h2>
	
<p>
Un problème classique est de se retrouver avec une bande passante "volée" parce qu'un
Malotru a eu l'indélicatesse de mettre vos images en référence directe sur son site. Ici, pas question de mettre un mot de passe qui bloquerait les utilisateurs légitimes. Les techniques précédentes sont donc inutiles. A la place nous allons utiliser les variables dont nous disposons au sein d'Apache et particulièrement du <kbd>Referer</kbd>.
</p>

<p>
Pour ceux qui ne le savent pas, un navigateur WEB a pour obligation de transmettre au serveur l'adresse WEB de la page qui contient le lien qui a permis d'arriver sur notre site. Cette indiscrétion est déjà bien connu et c'est elle qui permet de savoir d'où viennent nos visiteurs. Cette adresse est le fameux <kbd>Referer</kbd>. 
</p>
<p>
Ce qui est un peu moins connu c'est que chaque élément lié à une page de notre site (ex. une image ou une feuille de style), est demandée au serveur distant avec lui aussi un <kbd>Referer</kbd>. Sauf que cette fois, c'est l'adresse de notre propre site qui est passé par le navigateur, ce qui est somme toute très logique. 
</p>
<p>
En d'autres termes, toute demande d'image n'ayant pas notre site pour <kbd>Referer</kbd>, est sûrement l'objet d'un vol de bande passante… C'est cette caractéristique que nous allons exploiter avec ce code qui peut aussi bien être, comme toujours, dans un <kbd>.htaccess</kbd> qu'un fichier de configuration Apache.
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">SetEnvIfNoCase Referer &quot;^http://www\.monsite\.net/&quot; acces_local=1</div></li>
<li class="li1"><div class="de1"><span class="sc3"><span class="re1">&lt;FilesMatch</span> <span class="st0">&quot;.(gif|jpg|png|pdf|css|js)&quot;</span><span class="re2">&gt;</span></span></div></li>
<li class="li1"><div class="de1">Deny from all</div></li>
<li class="li1"><div class="de1">Allow from env=acces_local</div></li>
<li class="li2"><div class="de2"><span class="sc3"><span class="re1">&lt;/FilesMatch<span class="re2">&gt;</span></span></span></div></li></ol></div></div></div>
</p>
<p>
Ce qui se passe c'est que si le <kbd>Referer</kbd> est bien notre site, nous positionnons une variable <kbd>acces_local</Kbd> à 1. Ensuite nous ajoutons une règle qui interdit le téléchargement des images (Deny from all) sauf pour les requêtes qui ont la variable <kbd>acces_local</kbd> définie. Voilà, c'est tout. La directive <kbd>FilesMatch</kbd> est elle là pour n'opérer cette sécurité que sur les fichiers images, feuilles de style, scripts, etc. Il serait en effet un peu idiot d'appliquer cette règles au fichier .php par exemple, cela interdirait systématique l'accès du site à tout le monde….
 </p>


	<a name='chapter_35'></a>
	<h2>Empêcher certains navigateurs</h2>
	
<p>
Vous aurez remarqué dans l'exemple précédent la syntaxe un peu étrange du paramètre de la directive <kbd>SetEnvIfNoCase</kbd>. On appelle cela une 
		  <a target='_blank' href='http://fr.wikipedia.org/wiki/expression régulière'>
		  expression régulière
		  </a>. Une expression régulière est une sorte de motif permettant de décrire une chaîne de caractère attendue. On peut ainsi créer des expressions régulières décrivant un numéro de téléphone ou une adresse courriel. Dans l'exemple précédent, elle signifiait "toute les URL qui commencent par (symbole ^) http://www.monsite.net/".  Les <kbd>\.</kbd> étaient là pour indiquer que l'on voulait que le vrai caractère <kbd>.</kbd> soit utilisé, car sinon, ce symbole a un sens particulier dans une expression régulière. 
</p>
<p>
Maintenant imaginons qu'un vilain spammeur qui me fasse des misères et que son adresse IP varie de 81.95.144.X à 81.95.147.X. Je peux le bloquer par la configuration suivante :
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">SetEnvIf Remote_Addr &quot;^81\.95\.14[4-7]\.&quot; bad_bot</div></li>
<li class="li1"><div class="de1">Deny from env=bad_bot</div></li></ol></div></div></div>
</p>
<p>
C'est à peu prés le même exemple que précédemment sauf que cette fois on utilise, non pas <kbd>Referer</kbd> mais <kbd>Remote_Addr</kbd> qui est l'adresse IP du navigateur client. Je ne vais pas faire ici un cours sur les expressions régulière, il y a de <a class='external' target='_blank' href='http://www.regular-expressions.info/' >magnifique tutoriaux</a> sur ce sujet.
</p>
<p>
Juste un dernier exemple, si cette fois c'est la chaîne d'identification (
		  <a target='_blank' href='http://fr.wikipedia.org/wiki/User Agent'>
		  User Agent
		  </a>) d'un navigateur que je veux bloquer, par exemple un bot malveillant :
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">BrowserMatchNoCase &quot;.*HTTrack*&quot; bad_bot</div></li>
<li class="li1"><div class="de1">Deny from env=bad_bot</div></li></ol></div></div></div>
<p>
   Là, j'utilise une directive un peu spéciale qui a le même rôle que les précédentes mais cette fois sur la variable <kbd>User_Agent</kbd> sans distinction de majuscules/minuscules. 
</p>
<p>
Bien évidement, vous pouvez mettre une liste complète de définitions <i>avant</i> d'insérez votre directive <kbd>Deny</kbd> :
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">BrowserMatchNoCase &quot;.*HTTrack*&quot; bad_bot</div></li>
<li class="li1"><div class="de1">BrowserMatchNoCase &quot;.*ICC-Crawler*&quot; bad_bot</div></li>
<li class="li1"><div class="de1">BrowserMatchNoCase &quot;.*Nutch*&quot; bad_bot</div></li>
<li class="li1"><div class="de1">SetEnvIf Remote_Addr &quot;^82\.246\.40\.31&quot; bad_bot # un gars de free...</div></li>
<li class="li2"><div class="de2">SetEnvIf Remote_Addr &quot;^195\.69\.171\.86&quot; bad_bot # mirotel.net</div></li>
<li class="li1"><div class="de1">Deny from env=bad_bot</div></li></ol></div></div></div>
</p>

<p>
Cette méthode n'est pas aussi fiable que je le voudrais car les adresses change, et les chaînes d'identification de navigateur aussi. Mais au moins est-ce un moyen de contrer efficacement une attaque ponctuelle. Pour une liste complète des directives touchant à la définition de variables, je vous renvoie à la <a class='external' target='_blank' href='http://httpd.apache.org/docs/2.0/mod/mod_setenvif.html' >documentation d'Apache</a>.
</p>


	<a name='chapter_36'></a>
	<h2>Protéger par adresse IP</h2>
	
<p>
Même si cela fonctionne, passer par les variables pour interdire une IP avec des expressions régulières est un peu sauvage pour un usage courrant. Si vous voulez pour votre dossier, ne soit accessible que pour une seule IP, ou un groupe d'IP, nous pouvons plus simplement utiliser la directive <kbD>Deny From</kbd>. Par exemple ici, pour n'autoriser que l'IP 192.168.0.10 nous utiliserons la configuration suivante :
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">Deny from all</div></li>
<li class="li1"><div class="de1">Allow from 192.168.0.10</div></li></ol></div></div></div>
</p>
<p>
Nous pouvons assouplir la règle en enlevant un group de chiffre à la fin de l'IP. Par exemple <kbd>Allow from 192.168.0</kbd> autorise les adresses allant de <kbd>192.168.0.0</kbd> à <kbd>192.168.0.255</kbd>, à se connecter.
</p>


	<a name='chapter_37'></a>
	<h2>Mixer les plaisirs</h2>
	
<p>
Pour finir, un petit mélange. Imaginons que nous protégions notre dossier par mot de passe via LDAP mais qu'en même temps nous ayons besoins que les clients se connectant d'un adresse IP spécifique, puise le faire sans mot de passe. Cela nous donnerais le code suivant :
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">Allow from 192.168.0.10</div></li>
<li class="li1"><div class="de1">AuthType Basic</div></li>
<li class="li1"><div class="de1">AuthName &quot;Acces au dossier&quot;</div></li>
<li class="li1"><div class="de1">AuthBasicProvider ldap</div></li>
<li class="li2"><div class="de2">AuthLDAPURL ldap://localhost:389/dc=mon-domaine,dc=com</div></li>
<li class="li1"><div class="de1">AuthLDAPGroupAttribute memberUid</div></li>
<li class="li1"><div class="de1">AuthLDAPGroupAttributeIsDN off</div></li>
<li class="li1"><div class="de1">Require ldap-group cn=webmaster,ou=Group,dc=mon-domaine,dc=com</div></li>
<li class="li1"><div class="de1">Satisfy Any</div></li></ol></div></div></div>
</p>
<p>
Rien d'inconnu maintenant dans ces syntaxes, à l'exception de la dernière ligne, qui fait toute la différence. En effet, elle indique à Apache que l'une ou l'autre des conditions suffit à autoriser l'accès : soit l'IP, soit le mot de passe.
</p>


	<a name='chapter_38'></a>
	<h2>Conclusion</h2>
	
<p>
L'article est déjà long et nous sommes loin d'avoir totalement couvert le sujet. J'espère seulement que cela vous donnera assez de pistes pour trouver la solution qui convient le mieux à vos besoins. L'agressivité et l'automatisation des attaques comme en témoignent souvent les fichiers de traces, prouvent que ce genre de précaution est simplement obligatoire. Il n'y a à ma connaissance pas de moyens systématique de valider qu'un serveur est correctement fermé, et ce qui est réellement ouvert. Google permet par le biais d'une requête de type <kbD>site:mon-site.com</kbd> d'avoir la liste de ce qu'il voit mais cela se limite à ce qui a été lié, quelque part, sur le Web, ce qui est loin d'être suffisant. 
</p>
<p>
Car croire que le seul fait de ne pas publier sur le web le lien vers un dossier le rend invisible est pure crédulité comme en témoigne <a class='external' target='_blank' href='http://www.zataz.com/news/16768/SOS-Racisme-sauver-des-pirates.html' >cette ânerie là, </a>, que j'avais trouvé par hasard, en bidouillant l'URL d'annulation d'un courriel de pub, sans l'aide google. 
</p>
    ]]></content>
  </entry>
  <entry>
    <title>Installer un proxy pour se cacher un peu</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1531" />
    <id>http://artisan.karma-lab.net/node/1531</id>
    <published>2008-05-02T13:50:34+02:00</published>
    <updated>2008-08-05T12:39:03+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Sécurité" />
    <category term="Planet Libre" />
    <category term="Tutoriel" />
    <summary type="html"><![CDATA[<p>
   Lorsque l'on est amené à bosser chez un client, il est très rare d'avoir accès au net autrement qu'à travers un proxy type 
		  <a target='_blank' href='http://fr.wikipedia.org/wiki/Squid'>
		  Squid
		  </a>. Le problème avec cette situation et que l'on expose ainsi nos données à des regards indiscrets. Le but de ce tutoriel est donc de vous proposer une solution pour palier à cela.
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
   Lorsque l'on est amené à bosser chez un client, il est très rare d'avoir accès au net autrement qu'à travers un proxy type 
		  <a target='_blank' href='http://fr.wikipedia.org/wiki/Squid'>
		  Squid
		  </a>. Le problème avec cette situation et que l'on expose ainsi nos données à des regards indiscrets. Le but de ce tutoriel est donc de vous proposer une solution pour palier à cela.
</p>
<!--break-->
<div class='inline-box attention'>
Ayez conscience qu'en utilisant ce qui suit, il y a de fortes chances que vous contreveniez à une des règles de la charte informatique que vous avez signé en entrant dans l'entreprise. Et qu'à ce titre, l'utilisation de ce type d'outil peut être considéré comme une faute grave. A utiliser donc avec la plus grand modération, et à vos risques et périls. Je ne pourrais être tenu responsable d'un licenciement lié directement ou indirectement à l'utilisation des ces informations. 
</div>

	<a name='chapter_1'></a>
	<h2>Un proxy ?</h2>
	
<p>
   D'un point de vue général un proxy est un bout de logiciel qui va recevoir vos demandes réseau et les retransmettre, après un éventuel traitement, à qui de droit. Il existe de nombreux types de proxy mais en entreprise il s'agit très souvent d'un proxy type 
		  <a target='_blank' href='http://fr.wikipedia.org/wiki/HTTP'>
		  HTTP
		  </a>.  Le principe est que chaque requête HTTP est envoyé par le navigateur au serveur Proxy qui va tout d'abord en examiner la légitimité et renvoyer une erreur si l'on cherche à atteindre une URL interdite. Ensuite le proxy va effectuer la vraie requête vers l'URL demandée et recevoir la page résultat. Généralement, et c'est le second rôle d'un tel proxy, cette page va être stockée en local sur le disque du serveur, avec tous les fichiers associés (feuilles de style, images, etc.). Le proxy va enfin renvoyer la page stockée en local au navigateur. 
</p>
<p>
  Ainsi un proxy permet à une entreprise de limiter l'utilisation d'Internet au seul WEB, de filtrer les accès pour ne pas autoriser les sites n'étant pas en rapport avec le travail (blog, sites de jeu et j'en passe), enfin réduire les besoins en bande passante stockant une copie des pages en local.
</p>
<p>
  Maintenant, d'un point de vue "utilisateur" cette approche a l'inconvénient de ses avantages. On ne peut aller où l'on veut. On ne peut utiliser autre chose que le WEB (IRC, Messagerie instantanée, etc.), et surtout, l'ensemble des pages visitées, des mots de passe utilisés est tracé et stocké. 
</p>

	<a name='chapter_2'></a>
	<h2>Accès sécurisé</h2>
	
<p>
  Fort heureusement, il existe une parade à cette approche : l'accès au WEB sécurisé via 
		  <a target='_blank' href='http://fr.wikipedia.org/wiki/HTTPS'>
		  HTTPS
		  </a>. En effet, il est rare que ce mode de connexion à la toile soit bloquée tant cela deviendrait contraignant pour l'utilisateur (aucun accès à une zone abonnée chez un éditeur, à une banque, etc.). Or le HTTPS est absolument impossible à filtrer par le proxy d'entreprise dans la mesure où toutes les données circulent d'un un tuyau crypté dont la clef de décodage n'est partagée qu'entre vous et votre serveur cible. Ceci dit il est toujours possible de créer un proxy qui vous fasse croire que vous êtes en communication sécurisée avec votre serveur mais je n'ai pas entendu parler d'une telle implémentation en standard.
</p>
<p>
  Ainsi donc, dés que vous accédez à un site en HTTPS, le proxy devient aveugle, il ne stocke plus les pages en local, ne voit plus les mots de passe, mais il peut toujours voir les URL. De plus, tous les sites auquel nous voudrions accéder n'ont pas forcement un accès HTTPS de disponible. Pour exploiter cela nous avons plusieurs possibilités. 
</p>

	<a name='chapter_3'></a>
	<h2>PhpProxy</h2>
	
<p>
  Techniquement, une méthode qui permettrait de court-circuiter totalement un proxy serait de passer par un service type <a class='external' target='_blank' href='http://anonymizer.secuser.com/' > anonymizer</a>. En effet, ce type de site est accessible en HTTPS et permet dans une zone de la page de rentrer l'URL "interdite". Ces sites fonctionnent comme notre proxy d'entreprise et vont chercher, eux-mêmes les données, pour les renvoyer sur leur propre page. 
</p>
<p>
  Si cette méthode marche pour vous, c'est parfait, d'autant plus qu'il existe de nombreux site du même genre, il suffit de demander cela à google. Cependant cette approche pose deux problèmes. Le premier est que les administrateurs de votre proxy d'entreprise ne sont pas idiots et ont sûrement la liste exhaustive des services publiques d’anonymisations indiquées comme URL interdites dans le proxy. Et si ce n'est pas le cas, l'autre soucis est que si ce n'est plus l'entreprise qui peut voir où vous aller, ce site dont vous ne savez rien, lui, le peux. 
</p>
<p>
  La solution ultime consiste donc à monter son propre service d'anonymisation. Pour cela deux pré requis : disposer d'un serveur WEB équipé de PHP accessible d'une IP publique et que ce serveur soit accessible en HTTPS. Le cas échéant, vous pouvez utiliser votre propre ligne Internet personnel en installant chez vous un serveur Apache/PHP et en utilisant un service du genre de celui que propose <a class='external' target='_blank' href='/dyndns.org' >dynDNS</a>. Pour ce qui suit, je pars du principe que vous avez la main sur un serveur unix avec apache, https (mod_ssl) et PHP correctement installés. 
</p>
<p>
  La marche à suivre est très simple. Tout d'abord télécharger <a class='external' target='_blank' href='https://sourceforge.net/projects/phpproxy/' >phpProxy</a>. Décompressez le dans le dossier de votre choix (ex. /documents/web/phpProxy). Ensuite, ajoutez à la configuration du vhost https quelque chose du genre :
  Alias /farfelu /documents/web/phpProxy
  <Directory "/documents/web/phpProxy">
    SSLRequireSSL
    Options Indexes FollowSymLinks MultiViews IncludesNoExec
    AddOutputFilter Includes html
    AllowOverride All
    AuthType Basic
    AuthName "Accès à Farfelu"
    AuthUserFile /usr/local/apache/passwd/passwords
    Require valid user
  </Directory>
</p>
<p>
   Les points important ici sont que nous créons un alias <kbd>/farfelu</kbd> car il ne serait pas très malin que l'URL d'accès à votre proxy soit <kbd>/mon_proxy</kbd> <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>. Ensuite le <kbd>SSLRequireSSL</kbd> qui oblige l'utilisateur de cette URL à passer par HTTPS. Enfin, trèèèèès important, ajoutez un identifiant/mot de passe sur cette URL si vous ne voulez pas que quelqu'un tombant dessus par hasard, puisse utiliser votre proxy à votre insu pour faire des choses répréhensibles. Si vous êtes un peu paumé avec ces options, vous pouvez faire un tour <a class='external' target='_blank' href='http://artisan.karma-lab.net/node/22' >ici</a>.
</p>
<p>
<image id="1" width="300px"/>
  Une fois qu'apache a été redémarré, il ne reste plus qu'à tester notre URL <kbd>https://mon_serveur_publique/farfelu</kbd>. Si tout fonctionne correctement, vous devriez obtenir quelque chose conforme à l'illustration. 
</p>
<p>
  Après l'utilisation est relativement intuitive, plusieurs options permettent de modifier le comportement du proxy comme la possibilité de supprimer les JavaScript, gérer les coockies, etc. 
</p>

	<a name='chapter_4'></a>
	<h2>Utilisez la commande CONNECT</h2>
	
<p>
   HTTPS implique une connexion directe entre vous et le serveur cible. Pour que cela puisse fonctionner, existe une commande CONNECT dans la norme du protocole HTTP. Cette commande indique au proxy que l'on désire établir une connexion directe avec la cible, en se passant de ces services. Autant dire qu'il s'agit là d'un magnifique trou dans lequel il est possible de s'engouffrer. 
</p>
<p>
  Dans la norme HTTP, rien n'interdit de donner le port de son choix à la commande CONNECT. De fait il devrait donc être possible de se connecter, via cette "faille", à un serveur distant SSH, écoutant classiquement le port 22. Cependant ce n'est pas aussi simple. Pour limiter la casse, les proxy interdisent généralement une commande CONNECT qui chercherait à atteindre un port autre que le 443, qui est le port "officiel" d'HTTPS. La conséquence pour vous, est que pour exploiter cette "faille", il faut obligatoirement que votre serveur SSH soit en écoute du port 443, rendant du coup l'utilisation de cette astuce incompatible avec l'utilisation conjointe d'un Apache en HTTPS. Si vous n'avez pas ce problème, nous pouvons poursuivre. 
</p>
<p>
   Mettre un ssh en écoute sur le port 443 ne pose aucun problème en soit. Il suffit pour cela de modifier le fichier de configuration <kbd>/etc/sshd_config</kbd> et d'y placer ou modifier le paramètre <kbd>Port 443</kbd>. Après redémarrage, un <kbd>netstat -anlo | grep 443</kbd> nous confirme bien que SSH est en écoute sur le port HTTPS. 
</p>
<p>
  Vous pouvez aussi doubler les ports en écoute par le serveur SSH en utilisation xinetd. Après l'avoir installé, il faut désactiver le service sshd (par un <kbd>chkconfig -del sshd</kbd>) . Ensuite vous allez modifier <kbd>/etc/xinetd.d/sshd-xinetd</kbd> de sorte à avoir un <kbd>disabled=no</kbd>. L'étape suivant consiste à simplement dupliquer ce fichier dans le même répertoire sous le nom <kbd>sshd-xinetd-https</kbd> et l'éditez pour changer la ligne <kbd>service ssh</kbd> en <kbd>service ssh-https</kbd>. Enfin, indiquez le port de connexion de ce nouveau service en éditant le fichier <kb>/etc/services</kbd> et ajoutant à la fin <kbd>ssh-https   443/tcp</kbd>. Un petit redémarrage de xinetd cette fois et ssh devrait être accessible des deux ports 22 et 443. 
</p>
<p>
  Maintenant, pour se connecter à travers un proxy HTTP, sur un serveur Serveur SSH, nous avons besoin  d'un client capable de causer avec le proxy et donc de générer cette fameuse commande CONNECT. Pour Windows, rien de plus simple, il suffit pour cela d'utiliser <a class='external' target='_blank' href='http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html' >PuTTY</a>. On prendra alors soin, dans le paramétrage de la connection, à la section <kbd>proxy</kbd>, de bien sélectionner <kbd>HTTP</kbd>, ainsi qu'indiquer l'adresse et le port du dit proxy. 
</p>
<p>
  Ensuite, dans les coordonnées du serveur cible, il faut bien sur renseigner le nom ou l'IP du serveur cible, et surtout changer le port pour utiliser le 443. Sauvegardez la connexion et cliquer ensuite sur <kbD>Open</kbd>. Si le proxy est suffisamment ouvert, il devrait vous laisser passer et vous aurez un login. 
</p> 
<p>
  Pour faire la même chose d'un client Linux, il suffit d'installer le paquet <kbD>corkscrew</kbd>. Ensuite la commande est très simple :
<div class='code-container-area'><div class='code-container'><div class="code">ssh -p443 gaston@mon_server -o&quot;ProxyCommand corkscrew leur_proxy le_port_du_proxy %h %p&quot;</div></div></div>
</p>
<p>
  Là aussi, si tout va bien, vous devriez pouvoir vous connecter. A partir de là vous pouvez faire à peu prés ce que vous voulez, y compris mettre en <a class='external' target='_blank' href='/node/82' >œuvre un proxy SOCKS</a>. 
</p>


	<a name='chapter_5'></a>
	<h2>Tunnel HTTP</h2>
	
<p>
   Autre option, utiliser cette fois le vrai protocole HTTP, sans truquage. La magie est à mettre ici au compte de <external href="">HttpTunnel</external>. Sur le site vous trouverez les binaires pour Windows, et pour Linux, tout est généralement dans votre distribution à partir d'un <kbd>urpmi ou apt-get httptunnel</kbd>. 
</p>
<p>
  HttpTunnel se compose de deux parties. Un serveur et un client. Le client va se mettre en écoute d'un port local et rediriger toute demande vers le serveur, en prenant soin de tout encapsuler dans du HTTP classique. De l'autre côté, le serveur HttpTunnel va recevoir les demandes, décapsuler les données contenues dans les trames HTTP, et rediriger le tout vers le port de votre choix. 
</p>

<p>
   Par l'exemple, imaginons que sur la machine <kbd>SERVEUR</kbd>, nous ayons un service SSH qui tourne en écoute du port 22 (classique). Nous allons donc lancer notre serveur HttpTunnel :
<div class='code-container-area'><div class='code-container'><div class="code">hts -F localhost:<span class="nu0">22</span> <span class="nu0">80</span></div></div></div>
</p>
<p>
  Le serveur HttpTunnel est donc en écoute du port 80 (HTTP) et décapsulera tout ce qu'il recevra vers le serveur SSH en écoute du port 22. Maintenant du côté client :
<div class='code-container-area'><div class='code-container'><div class="code">htc -P LEUR_PROXY:LE_PORT_DU_PROXY -F 1222 123.34.22.23:80</div></div></div>
</p>
<p>
  Le client va ainsi utiliser le proxy HTTP de manière standard, pour contacter le serveur HttpTunnel qui se trouve à l'adresse IP indiqué et au port 80. J'utilise l'adresse IP car le nom de la machine semble ne pas toujours fonctionner chez moi. 
</p>
<p>
   Maintenant que notre tunnel est en place, reste à l'utiliser et à lancer un 
<div class='code-container-area'><div class='code-container'><div class="code"><span class="kw2">ssh</span> localhost -p <span class="nu0">1222</span></div></div></div>
</p>
<p>
  Et là magie, avec un temps de réaction qui m'a clairement surpris, tout fonctionne. Ici aussi, disposant d'un SSH classique, il est possible de mettre en œuvre ensuite un mini proxy SOCKS. 
</p>
<p>
Maintenant cette méthode a beau très fonctionnelle, elle présente de nombreux inconvénient. Tout d’abord elle squatte le port 80, ou au mieux le 8080 si votre Proxy l’autorise. Il semblerait qu’il n’y ait aucun moyen de changer cela, y compris en utilisant une combinaison Apache/VHOST/ReverseProxy. 
</p>
<p>
Enfin, il n’y a aucune authentification. C’est un système ouvert aux quatre vents.  Et ça c’est déjà plus sérieux. 
</p>


	<a name='chapter_6'></a>
	<h2>AjaxTerm</h2>
	
<p>
<image id="2"/>
   Pour finir, personnellement ma méthode préférée, en conjonction avec phpProxy. Car si ce dernier me permet d'aller où je veux, <a class='external' target='_blank' href='http://antony.lesuisse.org/qweb/trac/wiki/AjaxTerm' >AjaxTerm</a> va me permettre de faire ce que je veux. Et le tout, comme PhpProxy, sans configuration compliquée et avec un simple navigateur WEB. 
</p>
<p>
  Cet outil est tout simplement un terminal totalement fonctionnel, colorisé, réactif qui fait presque oublier que l'on est en réalité dans un navigateur. Toutes les applications type nCurse fonctionnent, toutes les commandes sont disponibles, il n'y a tout marche <q>comme à la maison</q>, y compris la tabulation pour compléter les commandes. Que demander de mieux ? 
</p>
<p>
  Côté installation, AjaxTerm est un serveur écrit en pyton disponibles dans vos dépôts sans aucun doute via un <kbd>urpmi/apt-get ajaxterm</kbd>. Ensuite il n'y a plus qu'à lancer le service du même nom : <kbd>/etc/init.d/ajaxterm start</kbd>. Par défaut le serveur se met en écoute du port localhost:8022. Il n'est donc pas disponible directement à partir du réseau public, et c'est tant mieux. Car nous allons du coup pouvoir utiliser un reverse proxy apache pour le coller dans notre conteneur HTTPS, avec le cryptage et l'authentification qui va bien. Le tout au côté de nos autres applications WEB, sans conflit. 
</p>
<p>
  Une fois le serveur lancé, vous pouvez vérifier son fonctionnement avec un navigateur WEB en allant sur <kbd>http://localhost:8022</kbd>. Une fois que vous avez constaté son bon fonctionnement, il faut rajouter dans la configuration d'apache, de préférence dans le <kbd>vhost</kbd> en charge du port 443/HTTPS, les lignes suivantes. Pour les détails sur les paramètres d'authentification, se reporter à <a class='external' target='_blank' href='/node/22' >ce billet </a>. 
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">LoadModule proxy_module &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; modules/mod_proxy.so</div></li>
<li class="li1"><div class="de1">LoadModule proxy_http_module &nbsp; &nbsp; &nbsp; &nbsp;modules/mod_proxy_http.so</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;ProxyRequests Off</div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;Proxy</span> *<span class="re2">&gt;</span></span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AuthType Basic</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AuthName &quot;Ne pas mettre ici un message trop explicite&quot;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AuthUserFile /etc/apache2/htpasswd</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Require user tom</div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Order deny,allow</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Allow from all</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;/Proxy<span class="re2">&gt;</span></span></span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;ProxyPass /mon_machin/ http://localhost:8022/</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;ProxyPassReverse /mon_machin/ http://localhost:8022/</div></li></ol></div></div></div>
</p>
<p>
  Maintenant pour que cela fonctionne, assurez vous que vous avez installé le module apache <kbd>apache-mod_proxy</kbd>.  Après un petit redémarrage d'apache et l'on peut se connecter du monde extérieur, de manière sécurisée et authentifié, à l'adresse <kbd>http://mon_server/mon_machin/</kbd>. Remplacez <kbd>mon_machin</kbd> dans la configuration par quelque chose de plausible mais n'attirant pas l'attention. Evitez les choses du genre <kbd>/je_vous_ai_bien_eu/</kbd>, ça ne va pas le faire bien longtemps <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>
</p>
<p>
Ne laissez pas non plus la console activée en permanence car étant de l'ajax, je soupçonne qu'il fasse sur le serveur des requêtes récurrentes qui pourraient attirer l'attention. 
</p>



	<a name='chapter_7'></a>
	<h2>Conclusion</h2>
	
<P>
Voilà, c'est la fin de la seconde édition de ce tutoriel, avec mes remerciements aux gens en dessous (Dab & co <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/> ) qui m'ont donné suffisamment d'idée pour ne pas en rester à un simple proxy en php <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/smile.gif" title="Smiling" alt="Smiling" class="smiley-content"/>
</P>    ]]></content>
  </entry>
  <entry>
    <title>Avoir son adresse openID</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1128" />
    <id>http://artisan.karma-lab.net/node/1128</id>
    <published>2008-02-06T11:29:29+01:00</published>
    <updated>2008-10-01T14:34:13+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Sécurité" />
    <category term="Planet Libre" />
    <category term="Tutoriel" />
    <summary type="html"><![CDATA[<p>
  <a class='external' target='_blank' href='http://www.openIDfrance.fr/' >openID</a> a le vent en poupe et j'en veut pour preuve que <a class='external' target='_blank' href='http://www.pcinpact.com/actu/news/34547-openID-microsoft-identification.htm' >même Microsoft</a> et Yahoo s'y mettent. C'est dire... Il était donc temps pour moi de voir comment mettre en place son <b>propre serveur openID</b> et comment <b>publier</b> ce serveur.
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
  <a class='external' target='_blank' href='http://www.openIDfrance.fr/' >openID</a> a le vent en poupe et j'en veut pour preuve que <a class='external' target='_blank' href='http://www.pcinpact.com/actu/news/34547-openID-microsoft-identification.htm' >même Microsoft</a> et Yahoo s'y mettent. C'est dire... Il était donc temps pour moi de voir comment mettre en place son <b>propre serveur openID</b> et comment <b>publier</b> ce serveur.
</p>
<!--break-->

	<a name='chapter_1'></a>
	<h2>openID, quoi qu'est-ce ?</h2>
	
<p>
   Sans trop revenir sur les plus ou moins fumeux mythes de WEB 2.0, il est au moins clair que si la toile de <q>l'après Wikipedia</q> n’a rien de technologique, elle a intégré trois évolutions d'usages majeures :
   <ul>
   <li>Le <q>
		  <a target='_blank' href='http://fr.wikipedia.org/wiki/crowdsourcing'>
		  crowdsourcing
		  </a></q> qui délègue aux internautes le soin de fournir (gracieusement... ) des contenus.</li>
   <li>Les <q>
		  <a target='_blank' href='http://fr.wikipedia.org/wiki/réseaux sociaux'>
		  réseaux sociaux
		  </a></q> qui relient les internautes entre eux à travers de simples commentaires ou par des outils évolués de mise en relation (facebook, viadeo, etc.)</li>
   <li>Et enfin l'<q>
		  <a target='_blank' href='http://fr.wikipedia.org/wiki/identité numérique'>
		  identité numérique
		  </a></q>, qui fait passer l'internaute du statut de simple <q>visiteur</q> à celui <q>d'utilisateur</q>, avec son profil, ses préférence, son pseudo, etc.</li>
    </ul>
</p>
<p>
   Or d'identité numérique nous sommes vite passé à la <q>schizophrénie numérique</q> tant sont multiples les comptes, les points d'intervention, les mots de passe à mémoriser, etc.
</p>
<p>
   OpenID est donc l’une des réponses à cette schizophrénie et en tout cas la seule qui soit <a class='external' target='_blank' href='http://fr.wikipedia.org/wiki/Logiciel_libre' >libre</a>. Pour rapidement comprendre en quoi cela consiste, prenons un exemple classique, la saisie d'un commentaire sur un billet :
   <ul>
    <li>Comme chaque matin, je vais faire un tour sur <kbd>auBlogDuCoin.fr</kbd>, et j'y découvre un très intéressant article.</li>
    <li>Je veux intervenir dans la conversation et donc saisir un commentaire.</li>
    <li>C'est cool le site utilise l'openID, je n'ai donc plus besoin de donner mon pseudo, l’adresse de mon site web et mon email, mais juste mon openID qui est une adresse WEB unique du genre <kbd>http://ulhume.fr/monopenID</kbd>. </li>
    <li>Je poursuis en rédigeant un commentaire éclairé et je valide. </li>
    <li>Sans rien me dire et de manière invisible, le site va aller faire un tour sur <kbd>http://ulhume.fr/monopenID</kbd> pour récupérer cette fois l'adresse de <b>mon VRAI serveur openID</b>. Cette adresse peut être quelque chose comme <kbd>http://serveuropenID.fr/ulhume</kbd>.</li>
    <li>Le site va alors me rediriger sur <kbd>http://serveuropenID.fr/ulhume</kbd> pour authentification.</li>
    <li>A partir de maintenant, ce n’est pas <kbd>www.auBlogDuCoin.fr</kbd> mais bien <kbd>http://serveuropenID.fr/ulhume</kbd> qui me demande mon login et mot de passe.</li>
    <li>Si le login et le mot de passe sont bon, <kbd>http://serveuropenID.fr/ulhume</kbd> me redirige sur <kbd>auBlogDuCoin.fr</kbd> qui va ainsi recevoir, de manière totalement invisible pour moi, les informations me concernant : psoeudo, site web, adresse eMail, avatar, etc.</li>
    <li><kbd>auBlogDuCoin.fr</kbd> a maintenant toutes les informations nécessaires et peut donc enfin valider mon commentaire.</li>
   </ul>
</p>
<p>
  La question que l'on peut se poser c'est : <q>pourquoi aller d'abord sur un première adresse pour ensuite aller sur le "vrai" serveur openID ? Pourquoi ne pas y aller directement ?</q>. La réponse est assez simple. La première adresse, <q>http://ulhume.fr/monopenID</q> m'appartient. C'est généralement votre site web ou votre blog. En revanche le serveur openID, <q>http://serveuropenID.fr/ulhume</q>, ne m'appartient pas forcement. Du coup si je donne la seconde adresse comme étant mon adresse openID, je suis pieds et poings liés avec un fournisseur. Si je veux en changer je vais <b>perdre mon openID</b>. En terme technique, on dit que la première page <b>délègue</b> l'authentification à la seconde adresse. 
</p>
<p>
  De tout ceci nous pouvons retirer plusieurs choses sur l'openID :
  <ul>
    <li>Jamais le site que je visite ne voit mon mot de passe. Il n'a qu'un identifiant unique, mon adresse openID.</li>
    <li>Mon adresse openID peut ne pas être la même que l'adresse du serveur openID. Il est ainsi possible de changer de fournisseur, sans pour autant changer d'identifiant.</li>
    <li>Je peux fournir au serveur openID que j'utilise des informations plus où moins complètes selon mes besoins. Certains serveurs permettent même de fournir des informations différentes en fonction du site qui y fait appel. </li>
    <li>Si je change mes informations, cela change celles de toutes mes interventions sur WEB. Par exemple si je change mon Avatar, ou mon pseudo, cela va être répercuté partout où l'openID a été utilisé. C'est en tout cas théoriquement le cas, car beaucoup de sites "copient" en local ces informations. 
    </li>
  </ul>
</p>
<p>
  C'est bon je crois pour la théorie. Maintenant mettons cela en musique et commençons par nous créer un compte sur un serveur openID. 
</p>

	<a name='chapter_2'></a>
	<h2>Création d'un compte</h2>
	
<p>
  Le serveur openID est un logiciel sur lequel vous devez avoir un compte au sein duquel vous allez stocker vos informations personnelles (pseudo, avatar, etc.). C'est ce serveur qui va réaliser l'authentification réelle sur tous les sites WEB où vous utiliserez votre adresse openID. 
</p>
<p>
  A ce stade, vous avez deux options possibles : soit vous décidez d'utiliser un service publique, soit vous préférez fabriquer vous-même votre propre serveur openID.  
</p>

<h3>Fabriquer son propre serveur openID</h3>
<p>
  Choisir entre serveur publique et serveur perso revient à mettre en balance la toute relative difficulté de l'opération avec l'importance que vous accordez à votre vie privée. En effet, toute enthousiasmante soit cette technologie, cela ne doit pas vous faire perdre de vue que votre serveur openID est par définition au courant de toute votre vie sur le WEB. Comme le soulignait, à juste titre Tuxicoman (un peu plus bas dans les commentaires), mettez un serveur openID dans les main d'un Google, et je rajoute, avec le succès d'un Google Analytics, et vos balades sur le net vont vite devenir de la pâtée à fabriquer de l'AddSens...  
</p>
<p>
  Pour qui dispose d'un simple hébergement PHP, il existe plusieurs serveurs openID mais le plus simple est définitivement <a class='external' target='_blank' href='http://siege.org/projects/phpMyID/' >phpMyID</a>. Constitué de seulement deux fichiers il a pour seuls inconvénients que de devoir être paramétré à la mano et d'être mono utilisateur. Si vous cherchez un serveur plus complet (et complexe), orientez vous plutôt pour <a href='#' title='Avant de mourrir, ce lien pointait sur : http://www.openidenabled.com/openID/php-standalone-openID-server/' >PHP Standalone openID Server</a> qui a juste l'inconvénient (pour moi) de fonctionner seulement avec MySql. Je vais pour l'instant donc me concentrer sur l'installation de phpMyID. 
</p>
<p>
  Pour l'installer vous pouvez soit télécharger et décompresser la dernière archive dans votre dossier web ou alors, ma solution préférée, utiliser <external href="">subversion</external> :
  <div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="kw3">cd</span> <span class="sy0">/</span>var<span class="sy0">/</span>www</div></li>
<li class="li1"><div class="de1">svn <span class="kw2">co</span> phpMyID</div></li>
<li class="li1"><div class="de1"><span class="kw2">chown</span> apache:apache phpMyID -Rc</div></li></ol></div></div></div>
</p>
<p>
  L'avantage de la solution subversion est que la mise à jour est simple comme un :
  <div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="kw3">cd</span> <span class="sy0">/</span>var<span class="sy0">/</span>www<span class="sy0">/</span>phpMyID</div></li>
<li class="li1"><div class="de1">svn up</div></li></ol></div></div></div>
</p>
<p>
  Dans un cas comme dans l'autre, vous devez avoir maintenant un dossier <kbd>/var/www/phpMyID</kbd>. Nous allons donc maintenant paramétrer le serveur en commençant par générer une clef d’identification qui va servir pour l'authentification. Imaginons que votre pseudo soit <kbd>roberto</kbd> et que le mot de passe soit <kbd>secret</kbd>. Pour fabriquer la clef d’identification il vous suffit alors de taper la commande :
  <div class='code-container-area'><div class='code-container'><div class='traces'><ul><li><span class='prompt'></span><span class="kw3">echo</span> <span class="st0">&quot;roberto:monSite.com:secret&quot;</span> <span class="sy0">|</span> md5sum</li><li class='result'>69f48b88c2171415117f29eff63da779  -</li></ul></div></div></div>
</p>
<p>
  Si vous n'avez pas accès à un shell, le code php suivant (à détruire après usage !!) fera l'affaire :
  <div class='code-container-area'><div class='code-container-caption'>genkey.php</div><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="kw2">&lt;?</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp;<a target="blank" &nbsp;href="http://www.php.net/print"><span class="kw3">print</span></a> <a target="blank" &nbsp;href="http://www.php.net/md5"><span class="kw3">md5</span></a><span class="br0">&#40;</span><span class="st0">&quot;roberto:monSite.com:secret&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="kw2">?&gt;</span></div></li></ol></div></div></div>
</p>
<p>
  Une fois la clef en main, nous devons la coller, avec notre pseudo, dans le fichier <kbd>MyID.config.php</kbd> :
  <div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="st0">'auth_username'</span> <span class="sy0">=&gt;</span> &nbsp; &nbsp; &nbsp;<span class="st0">'roberto'</span><span class="sy0">,</span></div></li>
<li class="li1"><div class="de1"><span class="st0">'auth_password'</span> <span class="sy0">=&gt;</span> &nbsp; &nbsp; &nbsp;<span class="st0">'69f48b88c2171415117f29eff63da779'</span><span class="sy0">,</span></div></li></ol></div></div></div>
</p>
<p>
  Maintenant il ne nous reste maintenant plus qu'à modifier la configuration d'apache (si c'est nécessaire) :
  <div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">Alias /phpMyID/ &quot;/var/www/phpMyID/&quot;</div></li>
<li class="li1"><div class="de1"><span class="sc3"><span class="re1">&lt;Directory</span> <span class="st0">&quot;/var/www/phpMyID/&quot;</span><span class="re2">&gt;</span></span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; Order allow,deny</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; Allow from all</div></li>
<li class="li2"><div class="de2"><span class="sc3"><span class="re1">&lt;/Directory<span class="re2">&gt;</span></span></span></div></li></ol></div></div></div> 
</p>
<p>
  Et c'est fini !! Votre serveur openID est prêt à être publié grâce à ces coordonnées :
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">&lt;link rel=&quot;openID.server&quot; href=&quot;http://monSite.com/phpMyID/MyID.config.php&quot; /&gt;</div></li>
<li class="li1"><div class="de1">&lt;link rel=&quot;openID.delegate&quot; href=&quot;http://monSite.com/phpMyID/MyID.config.php&quot; /&gt; &nbsp;</div></li></ol></div></div></div>
</p>
<div class='inline-box attention'>
  MyPhpID est incompatible avec l'extension PHP <a class='external' target='_blank' href='http://www.hardened-php.net/' >Suhosin</a>. Vérifiez donc que celle-ci n'est pas présente sur le serveur que vous utilisez ou désactivez-le si vous en avez la possibilité (ne faites pas cela si vous hébergez du code PHP ne vous appartenant pas !!). 
</div>


<h3>Serveurs openID publiques</h3>
<p>
  Si pour des raisons d'hébergement ou de temps (ou simplement pour tester), vous préférez l'option serveur publique, il existe aujourd'hui de nombreux services gratuits et relativement fiable qui permettent l'authentification openID. La section <q>Well Known &amp; Simple Providers</q> du site <a class='external' target='_blank' href='http://openID.net/get/' >openID.net</a> vous en fournit une liste.</p>
  <p>Il est aussi possible de passer par <a class='external' target='_blank' href='http://www.openIDfrance.fr/home-2/Creez+votre+openID.html' >openID France</a> qui est une association 1901. 
</p>
<p>
  La création d’un compte y est aussi simple que classique. Une fois que vous l’avez activé, vous n'avez plus qu'à vous connecter pour paramétrer votre profil. Sur la page d'accueil vous sont fournis deux informations. Une adresse openID fonctionnelle :
  <div class='code-container-area'><div class='code-container'><div class="code">http://www.openIDfrance.fr/roberto</div></div></div>
</p>
<p>
  Et un bout de code HTML pour que vous puissiez créer votre propre adresse openID :
  <div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">&lt;link rel=&quot;openID.server&quot; href=&quot;http://www.openIDfrance.fr/index.php&quot; /&gt;</div></li>
<li class="li1"><div class="de1">&lt;link rel=&quot;openID.delegate&quot; href=&quot;http://www.openIDfrance.fr/roberto&quot; /&gt; </div></li></ol></div></div></div>
</p>
<p>
  Une fois de plus, je radote pour la bonne cause, il ne faut pas utiliser l'adresse openID fournit par ce site, car sinon, vous seriez définitivement liés à celui-ci. Il faut que vous utilisiez le code HTML comme nous allons le voir un peu plus loin pour créer votre propre adresse openID. 
</p>



	<a name='chapter_3'></a>
	<h2>Votre adresse openID</h2>
	
<p>
   Que vous ayez créé un compte sur un serveur publique, ou que vous ayez monté votre propre serveur, vous avez maintenant deux lignes de code HTML qui vont vous permettre de créer votre adresse openID.
</p>
<p>
  Là, vous avez le choix. Si vous avez un site web ou un blog, il suffit de coller ces deux lignes dans la balise <kbd>&lt;HEAD&gt;</kbd> de la page d’accueil et l'adresse WEB de votre site ou blog est maintenant, votre adresse openID. Vous pouvez créer aussi une page spécifique comme <kbd>http://monSite.com/roberto/index.html</kbd> et y mettre le code suivant :
  <div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="sy0">&lt;</span>html<span class="sy0">&gt;</span></div></li>
<li class="li1"><div class="de1"><span class="sy0">&lt;</span>head<span class="sy0">&gt;</span></div></li>
<li class="li1"><div class="de1"><span class="sy0">&lt;</span>TITLE<span class="sy0">&gt;</span>L<span class="st0">'openID de Roberto !&lt;/TITLE&gt;</span></div></li>
<li class="li1"><div class="de1"><span class="st0">&lt;link rel=&quot;openID.server&quot; href=&quot;http://monSite.com/robertoopenID/MyID.config.php&quot; /&gt;</span></div></li>
<li class="li2"><div class="de2"><span class="st0">&lt;link rel=&quot;openID.delegate&quot; href=&quot;http://monSite.com/robertoopenID/MyID.config.php&quot; /&gt; &nbsp;</span></div></li>
<li class="li1"><div class="de1"><span class="st0">&lt;/head&gt;</span></div></li>
<li class="li1"><div class="de1"><span class="st0">&lt;body&gt;</span></div></li>
<li class="li1"><div class="de1"><span class="st0">La page openID de Roberto !</span></div></li>
<li class="li1"><div class="de1"><span class="st0">&lt;/body&gt;</span></div></li>
<li class="li2"><div class="de2"><span class="st0">&lt;/html&gt;</span></div></li>
<li class="li1"><div class="de1"><span class="st0"></span</div></li></ol></div></div></div>
</p>


<p>
  Il ne vous reste maintenant plus qu'à tester votre nouvelle adresse openID. Pour se faire vous pouvez aller sur <a href='#' title='Avant de mourrir, ce lien pointait sur : http://www.biff.org.uk/dave/openid/guestbook.cgi' > cette application de test </a> ou alors pour traquer les problèmes, utiliser <a class='external' target='_blank' href='http://openIDenabled.com/resources/openid-test/' >cette page de validation</a> très complète (et plus complexe...). 
</p>


	<a name='chapter_4'></a>
	<h2>Conclusion</h2>
	
<p>
  OpenID a un réel avenir et présente une véritable solution à l'épineux problèmes des identités numériques multiples. Reste maintenant à ce que de plus en plus de site utilise cet identifiant unique. 
</p>    ]]></content>
  </entry>
  <entry>
    <title>Un firewall minimaliste</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1318" />
    <id>http://artisan.karma-lab.net/node/1318</id>
    <published>2008-02-01T12:35:36+01:00</published>
    <updated>2008-02-01T12:37:05+01:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Sécurité" />
    <category term="Aucun" />
    <category term="Snipet" />
    <summary type="html"><![CDATA[<p>L'objectif de ce script est de mettre en place une protection minimum très rapidement.</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>L'objectif de ce script est de mettre en place une protection minimum très rapidement.</p>
<!--break-->

	<a name='chapter_1'></a>
	<h2>Syntaxe</h2>
	
<kbd>./firewall etat</kbd>
<dl>
<dt>etat</dt><dd>start|stop<dd>
</dl>

	<a name='chapter_2'></a>
	<h2>Scripte</h2>
	
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="sy0">!/</span>bin<span class="sy0">/</span><span class="kw2">sh</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="kw1">function</span> start<span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1"><span class="co0"># vidage des regles</span></div></li>
<li class="li2"><div class="de2">iptables -F</div></li>
<li class="li1"><div class="de1">iptables -X</div></li>
<li class="li1"><div class="de1">iptables -t nat -F</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># chargement des modules kernel necessaires au FTP</span></div></li>
<li class="li2"><div class="de2"><span class="sy0">/</span>sbin<span class="sy0">/</span>modprobe ip_nat_ftp</div></li>
<li class="li1"><div class="de1"><span class="sy0">/</span>sbin<span class="sy0">/</span>modprobe ip_conntrack_ftp</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># garde les connexions ouvertes</span></div></li>
<li class="li1"><div class="de1">iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT</div></li>
<li class="li2"><div class="de2">iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># autorise les connexions SSH entrantes</span></div></li>
<li class="li1"><div class="de1">iptables -A INPUT -p tcp --dport <span class="nu0">22</span> -j ACCEPT</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2"><span class="co0"># autorise le ping (décommenter la ligne ci-dessous)</span></div></li>
<li class="li1"><div class="de1">iptables -A INPUT -p icmp -j ACCEPT</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># autorise les connexions HTTP entrantes</span></div></li>
<li class="li1"><div class="de1">iptables -A INPUT -p tcp --dport <span class="nu0">80</span> -j ACCEPT</div></li>
<li class="li2"><div class="de2">iptables -A INPUT -p tcp --dport <span class="nu0">443</span> -j ACCEPT</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># autorise les connexions SMTP et POP entrantes</span></div></li>
<li class="li1"><div class="de1">iptables -A INPUT -p tcp --dport <span class="nu0">25</span> -j ACCEPT</div></li>
<li class="li1"><div class="de1">iptables -A INPUT -p tcp --dport <span class="nu0">993</span> -j ACCEPT</div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># autorise les connexions Jabber entrantes</span></div></li>
<li class="li1"><div class="de1">iptables -A INPUT -p tcp --dport <span class="nu0">5222</span> -j ACCEPT</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1">iptables -A INPUT -p tcp --dport <span class="nu0">8000</span> -j ACCEPT</div></li>
<li class="li2"><div class="de2">iptables -A INPUT -p udp --dport <span class="nu0">8000</span> -j ACCEPT</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1">iptables -A INPUT -p tcp --dport <span class="nu0">21</span> -j ACCEPT</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># bloque les connexions entrantes</span></div></li>
<li class="li2"><div class="de2">iptables -P INPUT DROP</div></li>
<li class="li1"><div class="de1">iptables -P FORWARD DROP</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># bloque les connexions sortantes</span></div></li>
<li class="li1"><div class="de1">iptables -P OUTPUT DROP</div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># autorise loopback</span></div></li>
<li class="li1"><div class="de1">iptables -A INPUT -i lo -j ACCEPT</div></li>
<li class="li1"><div class="de1">iptables -A OUTPUT -o lo -j ACCEPT</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2">iptables -A INPUT -i tun1 -j ACCEPT</div></li>
<li class="li1"><div class="de1">iptables -A OUTPUT -o tun1 -j ACCEPT</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># connexions sortantes autorisees (FTP, DNS, HTTP, HTTPS) pour les mises-a-jour</span></div></li>
<li class="li1"><div class="de1">iptables -A OUTPUT -p tcp --dport <span class="nu0">20</span> -j ACCEPT</div></li>
<li class="li2"><div class="de2">iptables -A OUTPUT -p tcp --dport <span class="nu0">21</span> -j ACCEPT</div></li>
<li class="li1"><div class="de1">iptables -A OUTPUT -p tcp --dport <span class="nu0">53</span> -j ACCEPT</div></li>
<li class="li1"><div class="de1">iptables -A OUTPUT -p udp --dport <span class="nu0">53</span> -j ACCEPT</div></li>
<li class="li1"><div class="de1">iptables -A OUTPUT -p tcp --dport <span class="nu0">80</span> -j ACCEPT</div></li>
<li class="li1"><div class="de1">iptables -A OUTPUT -p tcp --dport <span class="nu0">443</span> -j ACCEPT</div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># connexions SMTP, POP et IMAP sortantes autorisees</span></div></li>
<li class="li1"><div class="de1">iptables -A OUTPUT -p tcp --dport <span class="nu0">25</span> -j ACCEPT</div></li>
<li class="li1"><div class="de1">iptables -A OUTPUT -p tcp --dport <span class="nu0">110</span> -j ACCEPT</div></li>
<li class="li1"><div class="de1">iptables -A OUTPUT -p tcp --dport <span class="nu0">143</span> -j ACCEPT</div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># connexions NTP sortantes autorisees</span></div></li>
<li class="li1"><div class="de1">iptables -A OUTPUT -p tcp --dport <span class="nu0">123</span> -j ACCEPT</div></li>
<li class="li1"><div class="de1">iptables -A OUTPUT -p udp --dport <span class="nu0">123</span> -j ACCEPT</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2"><span class="co0"># connexions SSH sortantes autorisees</span></div></li>
<li class="li1"><div class="de1">iptables -A OUTPUT -p tcp --dport <span class="nu0">22</span> -j ACCEPT</div></li>
<li class="li1"><div class="de1">iptables -A OUTPUT -p udp --dport <span class="nu0">22</span> -j ACCEPT</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># connexions WHOIS sortantes autorisees</span></div></li>
<li class="li2"><div class="de2">iptables -A OUTPUT -p tcp --dport <span class="nu0">43</span> -j ACCEPT</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># connexions USENET sortantes autorisees</span></div></li>
<li class="li1"><div class="de1">iptables -A OUTPUT -p tcp --dport <span class="nu0">119</span> -j ACCEPT</div></li>
<li class="li1"><div class="de1">iptables -A OUTPUT -p tcp --dport <span class="nu0">8000</span> -j ACCEPT</div></li>
<li class="li2"><div class="de2">iptables -A OUTPUT -p udp --dport <span class="nu0">8000</span> -j ACCEPT</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> stop <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1"><span class="co0">#!/bin/sh</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># vidage des regles</span></div></li>
<li class="li1"><div class="de1">iptables -F</div></li>
<li class="li1"><div class="de1">iptables -X</div></li>
<li class="li1"><div class="de1">iptables -t nat -F</div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># chargement des modules kernel necessaires au FTP</span></div></li>
<li class="li1"><div class="de1"><span class="sy0">/</span>sbin<span class="sy0">/</span>modprobe ip_nat_ftp</div></li>
<li class="li1"><div class="de1"><span class="sy0">/</span>sbin<span class="sy0">/</span>modprobe ip_conntrack_ftp</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2"><span class="co0"># garde les connexions ouvertes</span></div></li>
<li class="li1"><div class="de1">iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT</div></li>
<li class="li1"><div class="de1">iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># bloque les connexions entrantes</span></div></li>
<li class="li2"><div class="de2">iptables -P INPUT ACCEPT</div></li>
<li class="li1"><div class="de1">iptables -P FORWARD ACCEPT</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># bloque les connexions sortantes</span></div></li>
<li class="li1"><div class="de1">iptables -P OUTPUT ACCEPT</div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co0"># autorise loopback</span></div></li>
<li class="li1"><div class="de1">iptables -A INPUT -i lo -j ACCEPT</div></li>
<li class="li1"><div class="de1">iptables -A OUTPUT -o lo -j ACCEPT</div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="kw1">case</span> <span class="st0">&quot;$1&quot;</span> <span class="kw1">in</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; start<span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; start_firewall</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">;;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; stop<span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; stop_firewall</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">;;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="sy0">*</span><span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; gprintf <span class="st0">&quot;Usage: $s start|stop|restart|status}<span class="es0">\n</span>&quot;</span> $<span class="nu0">0</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">exit</span> <span class="nu0">1</span></div></li>
<li class="li1"><div class="de1"><span class="kw1">esac</span></div></li></ol></div></div></div>    ]]></content>
  </entry>
  <entry>
    <title>Utiliser une clef USB comme mot de passe</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1164" />
    <id>http://artisan.karma-lab.net/node/1164</id>
    <published>2007-11-08T10:46:34+01:00</published>
    <updated>2007-11-08T10:46:34+01:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Sécurité" />
    <category term="Planet Libre" />
    <category term="Tutoriel" />
    <summary type="html"><![CDATA[<p>
  L'idée ici est assez simple : utiliser la partition d'un clef usb pour s'authentifier sur un serveur grâce au plugin <external href="http://www.pamusb.org/">pam_usb</kbd>. Ainsi, plus aucun mot de passe n'est demandé.
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
  L'idée ici est assez simple : utiliser la partition d'un clef usb pour s'authentifier sur un serveur grâce au plugin <a class='external' target='_blank' href='http://www.pamusb.org/' >pam_usb</kbd>. Ainsi, plus aucun mot de passe n'est demandé.
</p>
<!--break-->

	<a name='chapter_1'></a>
	<h2>Deux mots sur PAM</h2>
	
<p>
  L'authentification sous Linux est aujourd'hui quasi-universellement confiée à PAM pour <external href=\"http://fr.wikipedia.org/wiki/Pluggable_authentication_module\">Plugin Authentification Module</a>. PAM est utilisé à chaque fois que vous vous connectez sur votre système. Son fonctionnement consiste à confier à une série de modules enfichables, des plugins, le soin de déterminer si votre accès est autorisé ou pas. Les plugins sont appelés les uns après les autres et chacun dit oui ou non. Le paramétrage de PAM permet alors de savoir si un OUI est nécessaire ou s'il suffisant pour vous accepter.</p>
<p>
  En standard, PAM utilise surtout un seule plugin, pam_unix, qui va vérifier votre mot de passe dans <kbd>/etc/shadow</kbd>. Mais il est possible d'ajouter toute sorte de plugins pour enrichir la politique d'authentification. Par exemple <external href=\"node/1158\">pam_ldap pour s'authentifier sur un serveur LDAP</a>. Et dans notre cas <kbd>pam_usb</kbd> pour le faire via une simple clef USB.
</p>
<p>
  Les modules PAM sont situés en <kbd>/lib/security</kbd> et leur configuration en <kbd>/etc/pam.d</kbd>. Dans le cas d'une Mandriva, ce dossier contient un fichier par application utilisant PAM (imap, sshd, etc..) qui contient généralement des directives 
<kbd>include</kbd> permettant d'avoir un comportement commun par défaut, via le fichier <kbd>system-auth</kbd>. Les lignes qui nous intéressent ici sont celles qui régissent l'authentification et qui commencent par le mot clef <kbd>auth</kbd>:
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">auth &nbsp; &nbsp; &nbsp; &nbsp;sufficient &nbsp; &nbsp;pam_unix.so likeauth nullok</div></li>
<li class="li1"><div class="de1">auth &nbsp; &nbsp; &nbsp; &nbsp;sufficient &nbsp; &nbsp;pam_ldap.so use_first_pass</div></li>
<li class="li1"><div class="de1">auth &nbsp; &nbsp; &nbsp; &nbsp;required &nbsp; &nbsp; &nbsp;pam_deny.so</div></li></ol></div></div></div>
</p>
<p>
  Dans ce fragment, on s'aperçoit que l'authentification va d'abord se faire via le système classique d'UNIX (fichier /etc/shadow), puis, le cas échéant, via LDAP. Si aucun des deux n'as fonctionné, c'est pam_deny qui prends le relais et vous envois balader. 
</p>
<p>
  Le mot clef <kbd>sufficient</kbd> indique que si le module a correctement authentifié l'utilisateur, les modules suivants ne sont pas interrogés. Le mot clef <kbd>required</kbd> indique quant à lui que l'on doit passer par lui obligatoirement. Ainsi dans l'exemple précédent si nous avions remplacé (ne le faite pas !) les <kbd>sufficient</kbd> par des <kbd>required</kbd>, il faudrait pour qu'un utilisateur qui s'autentifie, soit présent dans /etc/shadow ET sur LDAP. 
</p>


	<a name='chapter_2'></a>
	<h2>Préparation de la clef USB</h2>
	
<p> 
Première étape, préparer le clef usb. Soit vous utilisez une veille clef et vous la dédiez totalement, soit vous pouvez créer sur votre clef de travail une minuscule partition dédiée au stockage des clefs. Dans un cas comme dans l'autre la partition ne peut être formatté qu'en EXT3 ou REISER. Pas de FAT32 donc. C'est pour cela que sur ma clef de 1GO, j'ai formatté une première partition de 1GO-7Mo en FAT32 pour une utilisation classique, et une petite partition de 7Mo (j'ai pas réussi à faire moins) en EXT3 pour mes clefs. A 2ko la clef, cela en fait 3500, ce qui me semble suffisant <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>
</p>
<p>
Pour créer et formatter la ou les partitions, je vous conseille d'utiliser <kbd>drakdisk</kbd>. Il vous faut donc supprimer les partitions existantes, en créez deux nouvelles en ne laissant que 1mo à la seconde. Puis enfin formatter la deuxième partition en EXT3 ou Reiser. La première partitions peut quant à elle être formattée selon vos goûts. 
</p>
<p>
La clef formattée, nous allons donner un label à la seconde partition. Ce label va nous permettre de localiser la clef plus facilement par la suite et aussi, pour les unix modernes, va être utilisé lors d'une insertion comme nom pour le point de montage automatique. Pour changer le label d'une partition, <a class='external' target='_blank' href='/node/1130' >allez voir par là</a>. Tapez <kbd>sync</kbd> puis débranchez et rebranchez la clef pour être sur que tout va bien.
</p>
<p>
  Pour la suite de ce tutorial, je part du principe que la partition a pour label <kbd>usb-pass</kbd>. Qu'elle est donc accessible via <kbd>/dev/disk/by-label/usb-pass</kbd> et qu'elle dispose d'un UUID proprement définit.
</p>


	<a name='chapter_3'></a>
	<h2>Installation de pam usb</h2>
	
<p>
  La solution adoptée par pam_usb est d'écrire une série de nombre aléatoire sur notre partition de 1Mo. A la connexion, cette série de chiffre (nommée pad) est comparée à celle qui a été copie dans le dossier utilisateur. Si ça colle, l'utilisateur est validé et pam_usb générée une nouvelle série de chiffres qui stock à nouveau sur la clef et dans le dossier utilisateur. Et ainsi de suite. Cette méthode garantie que toute donnée copies deviendra vite caduque à un détail près. En effet, si je débranche ma clef, que quelqu'un la copie, et se reconnecte avant moi, je suis grillé... La solution a donc ses limites qu'il est important de connaître. 
</p>
<p>
La version 0.4.1 incluse dans la Mandriva 2008.0 était un peu buggée, il est plus sage de compiler soit même la dernière version du module. Il faut pour cela aller sur le site de pam_usb pour télécharger le dernier tarball (<kbd>pam_usb-0.4.2.tar.gz</kbd>) et le compiler :
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="kw2">tar</span> -zxvf pam_usb<span class="nu0">-0.4</span><span class="nu0">.2</span>.<span class="kw2">tar</span>.gz</div></li>
<li class="li1"><div class="de1"><span class="kw3">cd</span> pam_usb<span class="nu0">-0.4</span><span class="nu0">.2</span></div></li>
<li class="li1"><div class="de1">urpmi libhal1-devel libpam0-devel pmount</div></li>
<li class="li1"><div class="de1"><span class="kw2">make</span> <span class="kw2">install</span></div></li></ol></div></div></div>
</p>
<p>
Ceci fait, branchez votre clef USB, et lancez la commande suivante. Il va vous être demandé de choisir parmi les partitions de clef usb présente sur le système celle qui contiendra les données d'authentification. Choisissez la petite partition <kbd>pass-usb</kbd>. Tapez enfin <kbd>Y</kbd> pour sauver ces informations dans le fichier de configuration <kbd>/etc/pamusb.conf</kbd>.
<div class='code-container-area'><div class='code-container'><div class="code">pamusb-conf --add-device maClef</div></div></div>
</p>
<p>
  Ensuite nous allons ajouter un utilisateur authentifiable sur la clef. Pour cela utilisez la commande suivante en indiquant en paramètre l'utilisateur à rajouter. 
<div class='code-container-area'><div class='code-container'><div class="code">pamusb-conf --add-user gaston</div></div></div>
</p>
<p>
Voilà, c'est terminé. Il suffit maintenant d'ajouter dans <kbd>/etc/pam.d/system-auth</kbd> la ligne indiquant à PAM que la clef USB est le premier moyen suffisant pour s'authentifier sur ce système :
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">auth &nbsp; &nbsp; &nbsp; &nbsp;required &nbsp; &nbsp; &nbsp;pam_env.so</div></li>
<li class="li1"><div class="de1">auth &nbsp; &nbsp; &nbsp; &nbsp;sufficient &nbsp; &nbsp;pam_usb.so</div></li>
<li class="li1"><div class="de1">auth &nbsp; &nbsp; &nbsp; &nbsp;sufficient &nbsp; &nbsp;pam_unix.so likeauth nullok</div></li>
<li class="li1"><div class="de1">auth &nbsp; &nbsp; &nbsp; &nbsp;required &nbsp; &nbsp; &nbsp;pam_deny.so</div></li></ol></div></div></div>
</p>
<p>
Il ne reste maintenant plus qu'à tester. Une fois que tout est bon, vous pouvez rendre pam_usb moins bavard en modifiant <kbd>/etc/pamusb.conf</kbd> comme suite :
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="sc3"><span class="re1">&lt;defaults<span class="re2">&gt;</span></span></span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;option</span> <span class="re0">name</span>=<span class="st0">&quot;debug&quot;</span><span class="re2">&gt;</span></span>false<span class="sc3"><span class="re1">&lt;/option<span class="re2">&gt;</span></span></span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;option</span> <span class="re0">name</span>=<span class="st0">&quot;quiet&quot;</span><span class="re2">&gt;</span></span>true<span class="sc3"><span class="re1">&lt;/option<span class="re2">&gt;</span></span></span></div></li>
<li class="li1"><div class="de1"><span class="sc3"><span class="re1">&lt;/defaults<span class="re2">&gt;</span></span></span></div></li></ol></div></div></div>
</p>
    ]]></content>
  </entry>
  <entry>
    <title>Se prémunir des &quot;SpyWebs&quot; avec Privoxy</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1204" />
    <id>http://artisan.karma-lab.net/node/1204</id>
    <published>2007-10-18T16:17:09+02:00</published>
    <updated>2008-10-01T02:29:02+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Sécurité" />
    <category term="Planet Libre" />
    <category term="Tutoriel" />
    <summary type="html"><![CDATA[<p>
  Dans de précédents billets, nous parlions de <a class='external' target='_blank' href='http://artisan.karma-lab.net/node/1202' >Google Analytics et des moyens de se prémunir de ce \"spyweb\"</a> et de ses nombreux <a class='external' target='_blank' href='/node/1205' >petits frères</a> à l'aide de l'extension FireFox, AdBlock. Et même si cette solution marche merveilleusement et reste très utile pour protéger un poste de travail isolé (en entreprise par exemple), son champ d'action reste limité à une seule machine. Je vous propose donc donc de passer la vitesse au-dessus et de protéger cette fois l'ensemble de votre réseau à l'aide de l'outil 
		  <a target='_blank' href='http://fr.wikipedia.org/wiki/Privoxy'>
		  Privoxy
		  </a>, un proxy filtrant aux possibilités étonnantes disponibles sur tous les systèmes de Windows à Linux en passant par Mac. Il existe même une version 
		  <a target='_blank' href='http://fr.wikipedia.org/wiki/AmigaOS'>
		  AmigaOS
		  </a>, c'est dire <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/> 
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
  Dans de précédents billets, nous parlions de <a class='external' target='_blank' href='http://artisan.karma-lab.net/node/1202' >Google Analytics et des moyens de se prémunir de ce \"spyweb\"</a> et de ses nombreux <a class='external' target='_blank' href='/node/1205' >petits frères</a> à l'aide de l'extension FireFox, AdBlock. Et même si cette solution marche merveilleusement et reste très utile pour protéger un poste de travail isolé (en entreprise par exemple), son champ d'action reste limité à une seule machine. Je vous propose donc donc de passer la vitesse au-dessus et de protéger cette fois l'ensemble de votre réseau à l'aide de l'outil 
		  <a target='_blank' href='http://fr.wikipedia.org/wiki/Privoxy'>
		  Privoxy
		  </a>, un proxy filtrant aux possibilités étonnantes disponibles sur tous les systèmes de Windows à Linux en passant par Mac. Il existe même une version 
		  <a target='_blank' href='http://fr.wikipedia.org/wiki/AmigaOS'>
		  AmigaOS
		  </a>, c'est dire <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/> 
</p>
<!--break-->


	<a name='chapter_3'></a>
	<h2>Qu'est-ce qu'un proxy ?</h2>
	
<p>
Pour faire simple, un proxy est une application qui va jouer le rôle d'intermédiaire entre un logiciel client (ici votre navigateur WEB) et un serveur (ici, le site WEB visité). Il existe toute sorte de proxy différents permettant de partager une connexion internet ou encore de cacher son identité. Privoxy, lui, est un proxy "filtrant". Son rôle est "simplement" de regarder tous les sites que vous visitez avant vous pour y traquer les publicités et autre spywebs. Pour cela, il dispose de deux stratégies. Soit il va interdire comme AdBlock l'accès à certains sites au navigateur, soit il va modifier, "à la volée" les pages que vous recevez (par exemple pour y modifier des scripts dangereux). 
</p>
<p>
Privoxy est aussi capable de "désanimer" des images GIF, de nettoyer vos 
		  <a target='_blank' href='http://fr.wikipedia.org/wiki/cookies'>
		  cookies
		  </a> pour qu'ils ne laissent pas passer d'information, de maquiller l'identité de votre navigateur. Bref, c'est un outil complet, simple d'utilisation, rapide à installer, prêt à l'emploi et complètement paramétrable pour filtrer encore plus loin. 
</p>



	<a name='chapter_4'></a>
	<h2>Installation</h2>
	
<p>
   L'objectif de ce tutoriel est de mettre en place Privoxy pour tout votre réseau. Il va donc falloir choisir une machine qui sera connue des autres sur laquelle sera installé l'application. Il n'est pas nécessaire que ce soit une machine dédiée. Privoxy prend peu de ressource mémoire et CPU, n'importe quelle machine sous n'importe quel système devrait convenir. Pour la suite j'appellerais cette machine <kbd>machine_de_gaston</kbd>. Cependant, vous pouvez aussi utiliser ce proxy sur une machine seule. Auquel cas, vous remplacerez simplement dans ce qui va suivre <kbd>machine_gaston</kbd> par <kbd>localhost</kbd>. 
</p>
<p>
	Quel que soit votre système, toutes les versions binaires pour tous les Systèmes sont téléchargeables <a class='external' target='_blank' href='http://sourceforge.net/project/showfiles.php?group_id=11118' >ici</a>. L'installation se fait, comme dit plus haut, sur la machine <kbd>machine_de_gaston</kbd>. 
</p>
<h3>Installation sous Linux</h3>
<p>
	Il y a fort à parier que Privoxy est déjà intégré dans votre distribution. Sous Mandriva, l'installation se fait par la plus que classique commande :
  <div class='code-container-area'><div class='code-container'><div class="code">&nbsp; urpmi privoxy</div></div></div>
</p>
<p>
  Une fois qu'URPMI a terminé son travail, il vous suffit de lancer le service :
  <div class='code-container-area'><div class='code-container'><div class="code">&nbsp; service privoxy start</div></div></div>
</p>
<h3>Installation sous Windows</h3>
<p>
   Pour les Windowsiens, téléchargez <a class='external' target='_blank' href='http://sourceforge.net/project/showfiles.php?group_id=11118' >le fichier .exe d'installation</a> et exécutez-le. Validez toutes les demandes qui vous sont faites et à la fin de l'assistant, privoxy devrait être installé, lancé et en plus vous avez droit une belle petite console vous indiquant que le proxy est actif. Il ne reste plus qu'à configurer votre navigateur. 
<p>


	<a name='chapter_5'></a>
	<h2>Paramétrage du navigateur</h2>
	
<p>
  L'avantage d'un proxy est qu'il n'existe pas à ma connaissance de navigateur qui ne sache pas l'utiliser. Pour l'exemple nous allons faire ici le paramétrage de FireFox, mais il pourrait tout aussi bien s'agir de Safari, Opéra et même Internet Explorer... 
</p>
<p>
  Il faut donc maintenant aller sur la machine cliente pour indiquer à son navigateur d'aller chercher ses pages web sur la <kbd>machine_de_gaston</kbd>. Dans FireFox allez dans les menus <kbd>Edition/Préférence/Réseau/Paramétres</kbd>. Sélectionnez <kbd>configuration manuelle du proxy</kbd> et entrez pour <kbd>HTTP</kbd> les valeurs <kbd>machine_de_gaston</kbd> et <kbd>8118</kbd>. Cliquer ensuite sur <kbd>OK</kbd> et enfin <kbd>Fermer</kbd>. 
</p>
<p>
  C'est tout ! Pour vérifier que tout fonctionne, saisissez l'adresse <kbd>http://config.privoxy.org/</kbd> et validez. Vous devez voir apparaître la page de configuration de privoxy. Tout est donc opérationnel. 
</p>

	<a name='chapter_6'></a>
	<h2>Privoxy à l'oeuvre</h2>
	
<p>
Pour se convaincre que tout est en place, il suffit d'aller sur la "machine de gaston" et de regarder les traces. Pour les Windowsiens cela se fait dans la console que vous avez découverte à l'installation, pour les Linuxiens, les logs se trouvent en <kbd>/var/log/privoxy/logfile</kbd>. 
</p>
<p>
Sur le poste client, allez faire un tout avec votre navigateur sur le site <kbd>www.liberation.fr</kbd> et regardez ce qu'affiche privoxy sur la machine de gaston :
<div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">Request: www.liberation.fr<span class="sy0">/</span></div></li>
<li class="li1"><div class="de1">Request: www.liberation.fr<span class="sy0">/</span>_looks<span class="sy0">/</span>liberation<span class="sy0">/</span>scripts<span class="sy0">/</span>rObj.js</div></li>
<li class="li1"><div class="de1"><span class="br0">&#40;</span>...<span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1">www.smartadserver.com<span class="sy0">/</span>call<span class="sy0">/</span>pubj<span class="sy0">/</span><span class="nu0">252</span><span class="sy0">/</span><span class="nu0">1276</span><span class="sy0">/</span><span class="nu0">225</span><span class="sy0">/</span>M<span class="sy0">/</span><span class="nu0">7424944326</span><span class="sy0">/</span>? crunch<span class="sy0">!</span></div></li>
<li class="li2"><div class="de2">Request: www.liberation.fr<span class="sy0">/</span>_looks<span class="sy0">/</span>liberation<span class="sy0">/</span>images<span class="sy0">/</span>fond_pub_728x90.gif</div></li>
<li class="li1"><div class="de1"><span class="br0">&#40;</span>...<span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1">Request: www.smartadserver.com<span class="sy0">/</span>call<span class="sy0">/</span>pubj<span class="sy0">/</span><span class="nu0">252</span><span class="sy0">/</span><span class="nu0">1276</span><span class="sy0">/</span><span class="nu0">163</span><span class="sy0">/</span>S<span class="sy0">/</span><span class="nu0">7424944326</span><span class="sy0">/</span>? crunch<span class="sy0">!</span></div></li>
<li class="li1"><div class="de1">Request: www.liberation.fr<span class="sy0">/</span>_looks<span class="sy0">/</span>liberation<span class="sy0">/</span>images<span class="sy0">/</span>onglet_forum_on.gif</div></li>
<li class="li1"><div class="de1"><span class="br0">&#40;</span>...<span class="br0">&#41;</span></div></li>
<li class="li2"><div class="de2">Request: cmhtml.fr.overture.com<span class="sy0">/</span>d<span class="sy0">/</span>search<span class="sy0">/</span>p<span class="sy0">/</span>standard<span class="sy0">/</span>eu<span class="sy0">/</span>js<span class="sy0">/</span>flat<span class="sy0">/</span>ctxt<span class="sy0">/</span><span class="kw2">ls</span><span class="sy0">/</span>?<span class="re2">ctxtId=</span>libe_fr_annuaire<span class="sy0">&amp;</span><span class="re2">NGrp=</span><span class="nu0">2</span><span class="sy0">&amp;</span><span class="re2">NKw=</span><span class="nu0">4</span><span class="sy0">&amp;</span><span class="re2">Pg=</span><span class="nu0">1</span><span class="sy0">&amp;</span><span class="re2">keywordCharEnc=</span>utf<span class="nu0">-8</span><span class="sy0">&amp;</span><span class="re2">outputCharEnc=</span>utf<span class="nu0">-8</span><span class="sy0">&amp;</span><span class="re2">Partner=</span>liberation_js_fr_ctxtls_libe crunch<span class="sy0">!</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#40;</span>...<span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1">www.liberation.fr<span class="sy0">/</span>interactif<span class="sy0">/</span>question<span class="sy0">/</span>libeblogs<span class="sy0">/</span>_files<span class="sy0">/</span>file_258326_34465_petite_vignette.jpg</div></li>
<li class="li1"><div class="de1">Request: www.smartadserver.com<span class="sy0">/</span>call<span class="sy0">/</span>pubj<span class="sy0">/</span><span class="nu0">252</span><span class="sy0">/</span><span class="nu0">1276</span><span class="sy0">/</span><span class="nu0">276</span><span class="sy0">/</span>S<span class="sy0">/</span><span class="nu0">7424944326</span><span class="sy0">/</span>? crunch<span class="sy0">!</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#40;</span>...<span class="br0">&#41;</span></div></li>
<li class="li2"><div class="de2">Request: www.smartadserver.com<span class="sy0">/</span>call<span class="sy0">/</span>pubj<span class="sy0">/</span><span class="nu0">252</span><span class="sy0">/</span><span class="nu0">1276</span><span class="sy0">/</span><span class="nu0">94</span><span class="sy0">/</span>S<span class="sy0">/</span><span class="nu0">7424944326</span><span class="sy0">/</span>? crunch<span class="sy0">!</span></div></li>
<li class="li1"><div class="de1">Request: www.liberation.fr<span class="sy0">/</span>interactif<span class="sy0">/</span>question<span class="sy0">/</span>libeblogs<span class="sy0">/</span>_files<span class="sy0">/</span>file_260788_26585_petite_vignette.jpg</div></li>
<li class="li1"><div class="de1"><span class="br0">&#40;</span>...<span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1">Request: www.google-analytics.com<span class="sy0">/</span>urchin.js crunch<span class="sy0">!</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#40;</span>...<span class="br0">&#41;</span></div></li>
<li class="li2"><div class="de2">Request: logi8.xiti.com<span class="sy0">/</span>hit.xiti?<span class="re2">s=</span><span class="nu0">197813</span><span class="sy0">&amp;</span><span class="re2">s2=</span><span class="nu0">2</span><span class="sy0">&amp;</span><span class="re2">p=</span>homepage<span class="sy0">&amp;</span><span class="re2">hl=</span>8x59x22<span class="sy0">&amp;</span><span class="re2">lng=</span>fr<span class="sy0">&amp;</span><span class="re2">r=</span>1280x886x32x32<span class="sy0">&amp;</span><span class="re2">re=</span>1280x746<span class="sy0">&amp;</span><span class="re2">ref=</span> crunch<span class="sy0">!</span></div></li></ol></div></div></div>
</p>
<p>
A chaque fois que privoxy affiche <kbd>crunch</kbd>, il a bloquer le navigateur. Nous voyons ainsi qu'en standard, privoxy bloque efficacement les publicités, Google Analytics et  Xiti. Cela fait déjà beaucoup de nuisance en moins. Mais nous allons pouvoir aller un peu plus loin. 
</p>


	<a name='chapter_7'></a>
	<h2>Améliorer le filtrage</h2>
	

<h3>Les fichiers à modifier</h3>
<p>
  Comme vous l'avez vu, Privoxy par défaut marche déjà très bien. Il est cependant possible de pousser encore et de l'adapter parfaitement à vos besoins. Pour changer les paramètres de Privoxy, vous avez deux solutions. Soit vous utilisez l'interface WEB (personnellement je ne la trouve pas très simple), Soit vous éditez directement les fichiers de configuration. Pour les Windowsiens, il suffit d'aller dans la console de Privoxy dans les menus <kbd>Options/Edit User Actions</kbd>. Pour les autres, il faut simplement éditer le fichier <kbd>/etc/privoxy/user.actions</kbd>. Notez que le simple fait de sauver le fichier reconfigure Privoxy. Pas besoin de donc de redémarrer. 
</p>

<p>
  Le fichier <kbd>user.actions</kbd> contient les règles que vous avez le "droit" de changer. Vous pouvez changer aussi les autres mais cela risque de vous créer plus de problèmes qu'autre chose. Par défaut il contient déjà plein d'exemple utiles. 
</p>
<p>
  Vous allez pouvoir ajouter ici, des règles et des Aliases. Une règle est la combinaison d'une ou plusieurs Actions à une ou plusieurs URL auxquelles ces actions s'appliquent. Pour la liste complète des actions que Privoxy propose, allez jeter un oeil <a class='external' target='_blank' href='http://www.privoxy.org/3.0.6/user-manual/actions-file.html' >ici</a>.
<p>
<h3>Ajout de nouvelles règles</h3>
<p>
  Prenons un exemple et imagions que nous voulions supprimer l'envoi de tous les cookies pour le site <kbd>wwww.mauvais-site.fr</kbd>. Ce besoin traduit donnerait  :
  <div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="br0">&#123;</span> <span class="sy0">+</span>crunch<span class="sy0">-</span>outgoing<span class="sy0">-</span>cookies <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">.<span class="me1">mauvais</span><span class="sy0">-</span>site.<span class="me1">fr</span></div></li></ol></div></div></div>
</p>
<p>
  Cette règle très simple va ajouter l'action "crunch-outgoing-cookies" (qui supprime les envois de cookies) à toutes les urls appartenant à <kbd>.mauvais-site.fr</kbd>. Le signe <kbd>+</kbd> indique que la directive doit être ajoutée. En effet, les règles s'additionnent. Par exemple si plus loin de le fichier <kbd>user.action</kbd> j'écris :
  <div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="br0">&#123;</span> <span class="sy0">-</span>crunch<span class="sy0">-</span>outgoing<span class="sy0">-</span>cookies <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">bonne<span class="sy0">-</span>page.<span class="me1">mauvais</span><span class="sy0">-</span>site.<span class="me1">fr</span></div></li></ol></div></div></div>
</p>
<p>
  Toutes les pages du domaine <kbd>mauvais-site.fr</kbd> auront leur cookie mangé <b>sauf</b> <kbd>bonne-page.mauvais-site.fr</kbd>. 
</p>  
<p>
  Vous pouvez des <kbd>*</kbd> dans les URL, par exemple <kbd>ad*.site-de-pube.fr</kbd>, ou même une 
		  <a target='_blank' href='http://fr.wikipedia.org/wiki/expression régulière'>
		  expression régulière
		  </a> comme pour adBlock comme <kbd>www[1-9a-ez].example.c*</kbd>. 
</p>
<p>
  Vous pouvez aussi mettre plusieurs actions entre les accolades, soit sur une seule ligne en les séparant par des espaces, soit sur plusieurs lignes en ajoutant un <kbd>\</kbd> à la fin de chaque ligne. Cela nous donne par exemple :
  <div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="br0">&#123;</span> <span class="sy0">+</span>crunch<span class="sy0">-</span>outgoing<span class="sy0">-</span>cookies \</div></li>
<li class="li1"><div class="de1">&nbsp; <span class="sy0">+</span>crunch<span class="sy0">-</span>incoming<span class="sy0">-</span>cookies <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">ad<span class="sy0">*</span>.<span class="me1">mauvais</span><span class="sy0">-</span>site.<span class="me1">fr</span></div></li>
<li class="li1"><div class="de1">www<span class="br0">&#91;</span><span class="nu0">1</span><span class="sy0">-</span>9a<span class="sy0">-</span>ez<span class="br0">&#93;</span>.<span class="me1">example</span>.<span class="me1">c*</span></div></li></ol></div></div></div>
</p>
<h3>Ajout d'Alias</h3>
<p>
  Comme nous l'avons vu, il est possible de mettre plusieurs actions entre accolade. Il peut être alors pratique de pouvoir regrouper un ensemble d'actions sous un seul alias. Par exemple, si nous voulons regrouper la suppression de tous les cookies, nous ajouterions dans le fichier <kbd>user.actions</kbd> :
  <div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span><span class="br0">&#123;</span>alias<span class="br0">&#125;</span><span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="sy0">+</span>crunch<span class="sy0">-</span>all<span class="sy0">-</span>cookies <span class="sy0">=</span> <span class="sy0">+</span>crunch<span class="sy0">-</span>incoming<span class="sy0">-</span>cookies <span class="sy0">+</span>crunch<span class="sy0">-</span>outgoing<span class="sy0">-</span>cookies</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="sy0">-</span>crunch<span class="sy0">-</span>all<span class="sy0">-</span>cookies <span class="sy0">=</span> <span class="sy0">-</span>crunch<span class="sy0">-</span>incoming<span class="sy0">-</span>cookies <span class="sy0">-</span>crunch<span class="sy0">-</span>outgoing<span class="sy0">-</span>cookies</div></li></ol></div></div></div>
</p>
<p>
  Une règle pour ajouter, une autre pour enlever, je pense que l'exemple parle de lui-même. Ainsi la règle du chapitre précédent pourrait s'écrire :
  <div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="br0">&#123;</span> <span class="sy0">+</span>crunch<span class="sy0">-</span>all<span class="sy0">-</span>cookies &nbsp;<span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">ad<span class="sy0">*</span>.<span class="me1">mauvais</span><span class="sy0">-</span>site.<span class="me1">fr</span></div></li>
<li class="li1"><div class="de1">www<span class="br0">&#91;</span><span class="nu0">1</span><span class="sy0">-</span>9a<span class="sy0">-</span>ez<span class="br0">&#93;</span>.<span class="me1">example</span>.<span class="me1">c*</span></div></li></ol></div></div></div>
</p>

<div class='inline-box note'>
  Par défaut dans <kbd>user.action</kbd> il y a deux aliases très pratiques. Le premier <kbd>shop</kbd> va nous permettre d'assouplir les règles pour un site donné. Si un site ne passe pas avec Privoxy, c'est une bonne manière d'arranger les choses. L'autre s'apelle <kbD>fragile</kbd> et permet de ne pas "casser" les sites souvent mal fait. Si vous avez une boutique qui ne marche plus, ou un site fragile, vous pouvez alors ajouter :
  <div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="br0">&#123;</span> shop <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">www.<span class="me1">boutique</span><span class="sy0">-</span>branlante.<span class="me1">fr</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="br0">&#123;</span> fragile <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">www.<span class="me1">site</span><span class="sy0">-</span>mal<span class="sy0">-</span>fichu.<span class="me1">fr</span></div></li></ol></div></div></div>
</div>

<h3>Ajout de règles supplémentaires</h3>

<p>
Avec ces informations, il est possible donc d'améliorer encore privoxy pour ne plus rien laisser passer ou presque. Au début, comme moi, vous allez observer ce que les sites font exactement avec votre ligne en regardant les logs de Privoxy. C'est très instructif. Et à chaque fois que vous voyez quelque chose de louche, vous pouvez ajouter une règle comportant l'action <kbd>{ +block }</kbd> suivi à la ligne suivante de chaque url posant problèmes. Voici ma liste que vous pouvez adapter à vos besoins :
  <div class='code-container-area'><div class='code-container'><div class="code"><ol><li class="li1"><div class="de1"><span class="br0">&#123;</span><span class="br0">&#123;</span>alias<span class="br0">&#125;</span><span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; big<span class="sy0">-</span>block &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="sy0">=</span> <span class="sy0">+</span>block <span class="sy0">+</span>handle<span class="sy0">-</span>as<span class="sy0">-</span>empty<span class="sy0">-</span>document</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co1"># Régies publicitaires/ Plateformes d'annonce</span></div></li>
<li class="li2"><div class="de2"><span class="br0">&#123;</span> big<span class="sy0">-</span>block <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">.netavenir.com &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1"># http://www.netavenir.com/</span></div></li>
<li class="li1"><div class="de1">.turn.com &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.turn.com/corp/how/how-it-works.jsp</span></div></li>
<li class="li1"><div class="de1">.bluestreak.com &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.bluestreak.com/whowhat/index.asp</span></div></li>
<li class="li1"><div class="de1">.criteo.com &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.criteo.com/en/bloggers.aspx</span></div></li>
<li class="li2"><div class="de2">.blogbang.com<span class="sy0">/</span>demo<span class="sy0">/</span>js<span class="sy0">/</span>blogbang_ad.php\<span class="sy0">?</span>id<span class="sy0">=</span>&nbsp; <span class="co1"># http://www.blogbang.com/demo/</span></div></li>
<li class="li1"><div class="de1"><span class="sy0">/</span>.<span class="sy0">*</span>\<span class="sy0">/</span>microsoft_adcenterconversion\.js &nbsp; &nbsp; &nbsp; <span class="co1"># Régie Microsoft</span></div></li>
<li class="li1"><div class="de1"><span class="sy0">*</span>.<span class="sy0">*</span>.marketingsolutions.yahoo.com<span class="sy0">/*</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1"># Régie Yahoo</span></div></li>
<li class="li1"><div class="de1">www.googleadservices.com<span class="sy0">/*</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Régie Google</span></div></li>
<li class="li1"><div class="de1">.fmpub.net&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://federatedmedia.net/whyadvertise/index</span></div></li>
<li class="li2"><div class="de2">pubsrv.allopass.com<span class="sy0">/*</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.allopass.com/</span></div></li>
<li class="li1"><div class="de1">.comclick.com &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.comclick.com/</span></div></li>
<li class="li1"><div class="de1">.regieci.com&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.regieci.com/fr/accueil/index.asp</span></div></li>
<li class="li1"><div class="de1">.allo<span class="sy0">-</span>audience.fr &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.allo-audience.fr/</span></div></li>
<li class="li1"><div class="de1">.audientia.net&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.audientia.net/new/fr/new/</span></div></li>
<li class="li2"><div class="de2">.clickintext.com&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.clickintext.com/</span></div></li>
<li class="li1"><div class="de1">.clickintext.net</div></li>
<li class="li1"><div class="de1">.intellitxt.com</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co1"># Les enregistreurs/relecteurs</span></div></li>
<li class="li2"><div class="de2"><span class="br0">&#123;</span> big<span class="sy0">-</span>block <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">.clicktale.<span class="sy0">*</span> &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.clicktale.com/faq.html</span></div></li>
<li class="li1"><div class="de1">cetrk.com<span class="sy0">/*</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://crazyegg.com/overview </span></div></li>
<li class="li1"><div class="de1"><span class="sy0">*</span>.robotreplay.com<span class="sy0">/*</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.robotreplay.com/</span></div></li>
<li class="li1"><div class="de1"><span class="sy0">/</span>.<span class="sy0">*/</span>clickheat.js</div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co1"># médiamêtrie/traçage</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#123;</span> big<span class="sy0">-</span>block <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">.estat.com&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.estat.com/service/services_form.html</span></div></li>
<li class="li1"><div class="de1">.sitemeter.com&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.sitemeter.com/</span></div></li>
<li class="li2"><div class="de2">.w3counter.com&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.w3counter.com/</span></div></li>
<li class="li1"><div class="de1">.reinvigorate.net &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://report.reinvigorate.net/snoop</span></div></li>
<li class="li1"><div class="de1"><span class="sy0">/</span>.<span class="sy0">*</span>\<span class="sy0">/</span>webanalytics &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://france.webanalytics.be/</span></div></li>
<li class="li1"><div class="de1">.opentracker.net&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.opentracker.net/index.jsp</span></div></li>
<li class="li1"><div class="de1">.weborama.<span class="sy0">*</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://weborama.com/</span></div></li>
<li class="li2"><div class="de2">.quantserve.com &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.quantcast.com/</span></div></li>
<li class="li1"><div class="de1">.performancing.com&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://performancing.com/tracker</span></div></li>
<li class="li1"><div class="de1">.ToutLeMondeEnBlogue.com&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.toutlemondeenblogue.com/index.aspx</span></div></li>
<li class="li1"><div class="de1">stats.wordpress.com &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.wordpress.com</span></div></li>
<li class="li1"><div class="de1"><span class="sy0">*</span>.technorati.com<span class="sy0">/*</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.technorati.com</span></div></li>
<li class="li2"><div class="de2">embed.technorati.com<span class="sy0">/</span>linkcount &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">#</span></div></li>
<li class="li1"><div class="de1"><span class="sy0">/</span>.<span class="sy0">*</span>xiti.js&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.xiti.com/</span></div></li>
<li class="li1"><div class="de1"><span class="sy0">*</span>.getclicky.com<span class="sy0">/*</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.getclicky.com/help/</span></div></li>
<li class="li1"><div class="de1"><span class="sy0">*</span>.iminr.com<span class="sy0">/*</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.iminr.com/</span></div></li>
<li class="li1"><div class="de1">.netprofitblueprint.com<span class="sy0">/*</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.netprofitblueprint.com/capture.html (assez opaque celui-la...)</span></div></li>
<li class="li2"><div class="de2">.converdge.com&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.converdge.com/features</span></div></li>
<li class="li1"><div class="de1">.cybermonitor.com</div></li>
<li class="li1"><div class="de1"><span class="kw1">my</span>.blogitexpress.com<span class="sy0">/</span>.<span class="sy0">*</span>\.js &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.blogitexpress.com/</span></div></li>
<li class="li1"><div class="de1">www.atoomic.com<span class="sy0">/</span>js<span class="sy0">/*</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># http://www.atoomic.com/</span></div></li>
<li class="li1"><div class="de1">.clustrmaps.com<span class="sy0">/</span>counter<span class="sy0">/*</span></div></li>
<li class="li2"><div class="de2"><span class="sy0">/</span>phpmyvisites.js</div></li>
<li class="li1"><div class="de1">.trackalyzer.com</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co1"># Page ranking</span></div></li>
<li class="li1"><div class="de1">www.free<span class="sy0">-</span>pagerank.com<span class="sy0">/</span>fcgi<span class="sy0">-</span>bin<span class="sy0">/</span>alive_js.fcgi.<span class="sy0">*</span>&nbsp; &nbsp; </div></li>
<li class="li2"><div class="de2">external.wikio.fr<span class="sy0">/</span>blogs<span class="sy0">/</span>top<span class="sy0">/</span>getrank</div></li>
<li class="li1"><div class="de1">www.pagerank.fr<span class="sy0">/</span>pagerank<span class="sy0">-</span>actuel.gif</div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>