<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Linux Attitude</title>
	<atom:link href="http://linux-attitude.fr/feed" rel="self" type="application/rss+xml" />
	<link>http://linux-attitude.fr</link>
	<description>Le libre est un état d&#039;esprit</description>
	<lastBuildDate>Mon, 30 Aug 2010 16:35:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>La grande famille des processus</title>
		<link>http://linux-attitude.fr/post/la-grande-famille-des-processus</link>
		<comments>http://linux-attitude.fr/post/la-grande-famille-des-processus#comments</comments>
		<pubDate>Mon, 09 Aug 2010 17:12:48 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Curiosité]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Savoir-faire]]></category>
		<category><![CDATA[Système]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=1000</guid>
		<description><![CDATA[Niveau&#160;:     
Résumé&#160;: /proc/&#60;pid&#62;


Les processus comme je l'ai déjà décrit, forment une grande famille.


La famille processus




Dans la famille processus je voudrais le père


Les processus se reproduisent par fork (Mitose en français). Ce qui veut dire qu'à la genèse il n'y avait qu'un processus que nous ne nommerons pas Adam mais init.


Tous les [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /><br />
<strong>Résumé</strong>&nbsp;: /proc/&lt;pid&gt;</p>


<p><a href="/post/brutus-processus">Les processus</a> comme je l'ai déjà décrit, forment une grande famille.</p>


<h2>La famille processus</h2>

<p><br /></p>


<h3>Dans la famille processus je voudrais le père</h3>


<p>Les processus se reproduisent par fork (<a href="http://fr.wikipedia.org/wiki/Mitose" hreflang="fr">Mitose</a> en français). Ce qui veut dire qu'à la genèse il n'y avait qu'un processus que nous ne nommerons pas <a href="http://fr.wikipedia.org/wiki/Adam" hreflang="fr">Adam</a> mais <a href="/post/processus-de-boot">init</a>.</p>


<p>Tous les processus possèdent un identifiant (pid) ainsi qu'un identifiant de processus parent (ppid) permettant de les repérer dans un arbre généalogique (<a href="http://linux.die.net/man/1/pstree" hreflang="en">pstree</a>).</p>


<p>Comment reconnait-on le père du fils lors du fork d'un processus&nbsp;? Uniquement par le code de retour de la méthode fork qui vaut 0 pour le fils et donne le pid du fils au père. En dehors de cela les 2 processus sont rigoureusement identiques.</p>


<h3>Dans la famille processus je voudrais la mère</h3>

<p>Désolé, il n'y a pas de femme chez les processus, la reproduction est asexuée, mais c'est une idée à creuser ...</p>


<h3>Dans la famille processus je voudrais le fils</h3>

<p>Lorsqu'un processus forke, en général le père poursuit sa vie comme si de rien n'était, par contre le fils va muter. La mutation génétique chez les processus est bien plus violente que chez les êtres vivants. En effet, le code (l'<a href="http://fr.wikipedia.org/wiki/Adn" hreflang="fr">ADN</a> en français) est intégralement relu et remplacé depuis un nouveau fichier sur le disque. C'est ce qu'on appelle un <a href="http://linux.die.net/man/3/exec" hreflang="en">exec</a>.</p>


<p>Il existe quelques cas de processus qui ne fonctionnent pas comme ceci, mais qui laissent leur père mourir (ingrats !) et qui prennent leur place. C'est le cas des <a href="http://fr.wikipedia.org/wiki/Daemon" hreflang="fr">démons</a> (un parricide est-il un démon ?) dont le but est de devenir indépendants (émancipés) et ne plus avoir de problèmes d'adolescence (le tty du père) ou de famille (le <a href="http://en.wikipedia.org/wiki/Process_group" hreflang="fr">groupe de processus</a>).</p>


<h3>Dans la famille processus je voudrais le grand-père</h3>

<p>Lorsqu'un processus meurt, sa dépouille est remise à son père. Elle est essentiellement constituée de son code de retour.</p>


<p>Lorsque le père est déjà mort, c'est le doyen qui a la charge de récupérer le code de retour, par exemple avec la méthode <a href="http://linux.die.net/man/2/wait" hreflang="en">wait</a>.</p>


<p><span id="more-1000"></span></p>

<h3>Dans la famille processus je voudrais le zombie</h3>

<p>Si le père ne s'occupe pas des funérailles du fils bien aimé, celui-ci erre dans les méandres du noyau en attendant que quelqu'un veuille bien l'enterrer.</p>


<p>C'est ce qu'on appelle un zombie, caractérisé par la lettre Z ou par le mot defunct dans la liste des processus. Il est impossible de tuer un zombie (il est déjà mort). Seul son ascendant le plus proche le peut.</p>


<p>Heureusement l'ascendant universel, père de tous les processus, j'ai nommé init, prend soin de la dépouille de tous les enfants qui lui sont confiés. Donc si le père d'un zombie meurt, init s'occupera de le faire disparaître.</p>


<h2>Les non processus</h2>

<p><br /></p>


<h3>Chez les amis des processus voudrais le thread</h3>

<p>Le thread n'est pas vraiment un processus, c'est un élément de processus, tout comme la main est un élément du corps. Avoir plusieurs threads permet à un processus de faire plusieurs choses en même temps tout en restant une seule entité. Cela permet par exemple de dédier une main au traitement et un pied à l'affichage (oui on s'y prend souvent comme des pieds pour faire des <a href="http://ihm09.imag.fr/" hreflang="fr">IHM</a>, sauf certains qui y dédient <a href="http://johnnylee.net/projects/wii/" hreflang="en">la casquette</a>).</p>


<h3>Chez les amis des processus je voudrais le binaire</h3>

<p>Le binaire (ou fichier exécutable) est le modèle du processus, l'ADN si vous préférez. Sans binaire, impossible de créer un processus. Celui-ci est inerte et manipulable aisément.</p>


<h3>Chez les amis des processus je voudrais la bibliothèque</h3>

<p>La bibliothèque c'est un bout de code qui peut être réutilisé par des processus, tout comme <a href="http://fr.wikipedia.org/wiki/Plasmide" hreflang="fr">les plasmides </a>, elles s'intègrent à n'importe quel autre processus pour leur apporter une fonctionnalité donnée.</p>


<h3>Chez les amis des processus je voudrais le thread noyau</h3>

<p>Le thread noyau est un cas particulier de thread, il tourne dans l'espace noyau et ne partage donc sa mémoire qu'avec le noyau mais ne rentre dans aucun processus. On devrait les appeler des anges puisque ce sont des être invisibles (ou presque) agissant au compte de dieu (le noyau).</p>


<h3>Chez les amis des processus je voudrais le core</h3>

<p>Le core, ou core dump est la version fossilisée d'un processus mort au combat. Lorsqu'un processus meurt il est effacé de la mémoire, mais s'il meurt dans des conditions exceptionnelle, par exemple s'il s'est pris un coup de signal (<a href="http://linux.die.net/man/1/kill" hreflang="en">man kill</a>) dans la tête et qu'un résineux est à proximité (<a href="http://linux.die.net/man/1/ulimit" hreflang="en">ulimit -c</a>) on le coule dans l'ambre pour une analyse ultérieure. gdb est un grand ami médecin qui est aussi légiste, il saura vous aider le temps venu.</p>
	Tags:<a href="http://linux-attitude.fr/tag/curiosite" title="Curiosité" rel="tag">Curiosité</a>, <a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/savoir-faire" title="Savoir-faire" rel="tag">Savoir-faire</a>, <a href="http://linux-attitude.fr/tag/systeme" title="Système" rel="tag">Système</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/la-grande-famille-des-processus/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Le NAT sans NAT</title>
		<link>http://linux-attitude.fr/post/le-nat-sans-nat</link>
		<comments>http://linux-attitude.fr/post/le-nat-sans-nat#comments</comments>
		<pubDate>Tue, 20 Jul 2010 18:10:19 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Réseau]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Routeur]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=951</guid>
		<description><![CDATA[Niveau&#160;:     
Résumé&#160;: slirp


Si vous n'êtes pas admin de la machine sur laquelle vous êtes (université ?), mais que vous voudriez partager votre connexion, par exemple pour une machine virtuelle ou pour des amis qui voudraient emprunter votre IP ... Il vous faut du NAT (a moins que vous vous contentiez d'un [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/e.gif" alt="Empty" /><br />
<strong>Résumé</strong>&nbsp;: slirp</p>


<p>Si vous n'êtes pas admin de la machine sur laquelle vous êtes (université ?), mais que vous voudriez partager votre connexion, par exemple pour une machine virtuelle ou pour des amis qui voudraient emprunter votre IP ... Il vous faut du NAT (a moins que vous vous contentiez d'un simple tunnel).</p>


<p><em>Problème</em>&nbsp;: vous ne pouvez pas le mettre en place puisque vous n'êtes pas admin sur la machine qui partage la connexion. <br />
<em>Solution</em>&nbsp;: slirp.</p>


<p>Hé oui c'est tout simple, slirp décapsule du PPP pour l'injecter dans de une socket normale et donc fait l'équivalent du NAT. Mais avec quelques limitations, on ne peut pas faire passer n'importe quel paquet (genre ping) depuis l'espace utilisateur, malgré tout c'est largement suffisant.</p>


<h3>Le serveur de NAT (enfin le routeur quoi)</h3>

<p>Bon c'est pas si simple mais presque.</p>


<p>Slirp est une commande qui utilise le l'entrée et sortie standard pour communiquer ce qui fait que si on veut l'utiliser à distance il faut le connecter à un "listener", ici nous allons utiliser socat, mais si vous voulez un tunnel chiffré, utilisez stunnel.</p>


<p>Donc vous avez besoin de socat et slirp sur la machine où vous êtes simple utilisateur. Si vous ne les avez pas recompilez les vous avez le droit. Si vous n'avez pas de compilateur copiez-lez depuis une autre machine, si cela ne fonctionne pas, recompilez les chez-vous en statique ... enfin vous êtes grands que diable, ne me posez pas cette question&nbsp;!</p>


<p>Il vous faut un fichier de configuration minimaliste pour slirp (à mettre dans ~/.sliprc)&nbsp;:</p>
<pre>
ppp
asyncmap 0
</pre>


<p>Puis lancez le service genre sur le port 2000 (fullbolt = pas de limitation de vitesse)&nbsp;:</p>
<pre>
$ socat -s tcp4-listen:2000,fork system:/usr/bin/slirp-fullbolt
</pre>

<p><br /></p>


<p><span id="more-951"></span></p>

<h3>Le client de NAT (enfin le terminux quoi)</h3>

<p>Ici c'est légèrement plus compliqué. Tout d'abord il faut être root puisque nous allons faire un vpn, donc un réseau, donc une interface et du routage.
Pour cela il nous faut l'autre bout du tunnel (toujours socat dans l'exemple, mais vous pouvez utiliser stunnel pour faire du ssl) et pppd qui est en quelque sorte le client naturel de slirp.</p>


<p>Petite configuration optimisée de pppd pour correspondre à celle de slirp (à mettre dans /etc/ppp/peers/slirp)&nbsp;:</p>
<pre>
notty 115200
noauth
lcp-echo-interval 0
asyncmap 0
nodefaultroute
nodetach
</pre>


<p>Et c'est parti on se connecte&nbsp;:</p>
<pre> 
$ socat tcp-connect:host3.enstb.com:2000 system:&quot;pppd call slirp&quot;
</pre>


<p>Maintenant nous avons une connexion mais un peu spéciale car slirp a des exigences&nbsp;:</p>
<ul>
<li>IP&nbsp;: 10.0.2.15</li>
<li>Réseau&nbsp;: 10.0.2.0/24 (ou autre, il s'en fout)</li>
<li>Gateway(machine distante)&nbsp;: 10.0.2.2</li>
<li>IP de commande de slirp&nbsp;: 10.0.2.0 (! une adresse en 0, beware of the netmask !)</li>
<li>IP spéciale&nbsp;: 10.0.2.1</li>
<li>+ route directe vers l'ip du host</li>
</ul>

<p>Et ppd configure le tout pas proprement donc il faut supprimer l'ip qu'il a ajouté. Malheureusement slirp non plus n'est pas très doué en configuration réseau et utilise l'adresse 10.0.2.0 ce qui fait que soit vous utilisez un /16 soit vous vous débrouillez pour que 10.0.2.0 soit correctement routée soit vous n'accédez jamais à l'interface de slirp à distance.</p>


<p>Choisissons le premier cas, donc pour activer le routage coté client configurez comme indiqué, en live cela donne&nbsp;:</p>
<pre>
$ ip addr del 10.0.2.15 dev ppp0
$ ip addr add 10.0.0.0/16 dev ppp0
$ ip route add default via 10.0.2.2 dev ppp0 # tout ce que vous voulez tout router par là
</pre>


<p>Et oualà&nbsp;!</p>


<h3>Forwarding</h3>

<p>Slirp est configurable dynamiquement, ce qui veut dire qu'un telnet 10.0.2.0 permet d'accéder à une interface d'admin de slirp.</p>


<p>Les commandes disponibles sont les mêmes que celle qu'on peut mettre dans le fichier de configuration.
L'une de ces commandes est redir qui permet de faire des redirections qu'on appellerait port forwarding sur un routeur NAT.</p>
<pre>
redir [once|time] [udp|tcp] PORT [to] [ADDRESS:]LPORT
</pre>


<p>Exemple pour permettre l'accès au port ssh local depuis l'extérieur sur le port 2222&nbsp;:</p>
<pre>
$ telnet 10.0.2.0
redir 2222 22
quit
</pre>

<p><br /></p>


<h3>Mais encore</h3>

<p>Slirp a bien d'autres usages. Au départ slirp a été inventé pour faire du réseau sur un modem.</p>


<p>Mais il est aussi intégré à certains autre outils comme&nbsp;:</p>
<ul>
<li><a href="http://user-mode-linux.sourceforge.net/old/" hreflang="en">uml</a>&nbsp;: il est possible de définir une interface réseau uml comme étant une interface slirp ce qui vous permet d'avoir une machine virtuelle uml disponible directement sur le réseau local à travers un NAT</li>
<li><a href="http://vde.sourceforge.net/" hreflang="en">vde</a>&nbsp;: il est possible de définir un lien slirp pour vde ce qui permet tout comme pour uml de mettre en place une certaine forme de NAT derrière un switch virtuel (en général pour un ensemble de vm) sans avoir besoin d'être root</li>
<li><a href="http://www.colinux.org/" hreflang="en">colinux</a>&nbsp;: colinux intègre aussi slirp pour la même raison</li>
</ul>
	Tags:<a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/reseau" title="Réseau" rel="tag">Réseau</a>, <a href="http://linux-attitude.fr/tag/routeur" title="Routeur" rel="tag">Routeur</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/le-nat-sans-nat/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Présentation, cours</title>
		<link>http://linux-attitude.fr/post/presentation-cours</link>
		<comments>http://linux-attitude.fr/post/presentation-cours#comments</comments>
		<pubDate>Thu, 15 Jul 2010 21:07:02 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Commande]]></category>
		<category><![CDATA[planet-libre]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=949</guid>
		<description><![CDATA[Niveau&#160;:     
Résumé&#160;: script, scriptreplay


Vous voulez préparer un cours ou une présentation à base de ligne de commande, espionner quelqu'un ...&#160;?


Ça vous ennuie de taper les commandes en direct&#160;?


J'ai la solution&#160;: script.


Script

Script est une commande qui crée un faux terminal virtuel et duplique tout ce qui s'y passe dans un fichier typescript.


Exemple&#160;:

$ [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /><br />
<strong>Résumé</strong>&nbsp;: script, scriptreplay</p>


<p>Vous voulez préparer un cours ou une présentation à base de ligne de commande, espionner quelqu'un ...&nbsp;?</p>


<p>Ça vous ennuie de taper les commandes en direct&nbsp;?</p>


<p>J'ai la solution&nbsp;: script.</p>


<h3>Script</h3>

<p>Script est une commande qui crée un faux terminal virtuel et duplique tout ce qui s'y passe dans un fichier typescript.</p>


<p>Exemple&nbsp;:</p>
<pre>
$ script
# on est ici dans un terminal
$ echo coucou
&gt; coucou
$ exit
# on est sorti du terminal
$ cat typescript
&gt; $ echo coucou
&gt; coucou
&gt; $ exit
</pre>


<p>Dit comme ça, ça ne semble pas très utiles mais 2 choses vont tout changer. La première c'est que script fait un vrai terminal virtuel et pas seulement une redirection, ce qui veut dire que contrairement aux pipe (|) et autres redirections (&gt;), il est capable d'enregistrer ce qui va sur le terminal (Il est important de savoir faire la différence entre le terminal et stdout).</p>


<p>Exemple&nbsp;: la commande time. Cette commande écrit le temps d'exécution directement sur le terminal et pas dans la sortie standard, on ne peut donc pas la récupérer facilement, script le peut.
<span id="more-949"></span></p>


<h3>Scriptreplay</h3>

<p>La 2e commande qui va tout changer&nbsp;: scriptreplay.</p>


<p>Maintenant faites le même test mais enregistrez vos commande avec le paramètre -t (la sortie de -t va dans stderr, ça pourrait être mieux, mais c'est comme ça)&nbsp;:</p>
<pre>
$ script -t 2&gt; timer
</pre>


<p>Et cette fois utilisez scriptreplay pour lire ce qui a été généré&nbsp;:</p>
<pre>
$ scriptreplay timer typescript
</pre>


<p>Et là vous avez out ce qu'il faut pour faire une présentation qui dure exactement le même temps que celui qui vous a été nécessaire pour taper les commandes.</p>


<p>Si vous voulez adapter les timer vous pouvez, le script est éditable, mais bon à la main c'est un peu chiant. Par contre vous pouvez utiliser ctrl-s (pause) et ctrl-q (unpause) pour contrôler l'exécution du rendu.</p>


<p><strong>PS</strong>&nbsp;: pour ceux qui suivent, il est possible de remplacer mon ssh -t de l'article sur <a href="/post/test-de-bootloader-a-distance">le test de bootloader</a> par une commande script, ce qui est un peu plus propre.</p>
	Tags:<a href="http://linux-attitude.fr/tag/commande" title="Commande" rel="tag">Commande</a>, <a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/presentation-cours/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Hébergement</title>
		<link>http://linux-attitude.fr/post/hebergement</link>
		<comments>http://linux-attitude.fr/post/hebergement#comments</comments>
		<pubDate>Thu, 08 Jul 2010 18:07:26 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Hébergement]]></category>
		<category><![CDATA[Matériel]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=945</guid>
		<description><![CDATA[Niveau&#160;:     
Résumé&#160;: housing, server hosting, vps, web hosting


Petite fiche technique pour ne pas se perdre dans le monde de l'hébergement&#160;:


Housing

C'est le même terme en français, on dit aussi colocation, il désigne en général la fourniture de l'espace dans une armoire, du réseau et de l'électricité et c'est tout.


Pourtant c'est en général [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /><br />
<strong>Résumé</strong>&nbsp;: housing, server hosting, vps, web hosting</p>


<p>Petite fiche technique pour ne pas se perdre dans le monde de l'hébergement&nbsp;:</p>


<h4>Housing</h4>

<p>C'est le même terme en français, on dit aussi colocation, il désigne en général la fourniture de l'espace dans une armoire, du réseau et de l'électricité et c'est tout.</p>


<p>Pourtant c'est en général l'offre la plus chère car la plus lourde à gérer pour l'hébergeur. C'est plutôt destiné aux entreprises qui ont leur propre matériel et/ou dont l'activité sera de revendre l'accès à leur propre matériel.</p>


<h4>Server hosting</h4>

<p>Ou serveur dédié en français. Pratique pour une PME, ce concept permet à un sysadmin ou une petite boite d'avoir un ou des serveurs qu'elle gère entièrement, sans contraintes mais aussi sans avoir à gérer la redondance électrique ou la redondance du réseau.</p>


<p>On a en général une bien meilleure disponibilité et un bien meilleur débit qu'un serveur hébergé chez soi. Donc valable dès qu'on offre des services à l'extérieur. De plus on ne s'embête plus avec les matériel et ses pannes ou presque.</p>


<h4>VPS</h4>

<p>Ou serveur virtuel en français. C'est une machine virtuelle sur laquelle vous avez tout pouvoir (root) mais située sur une machine physique partagée avec d'autres clients.</p>


<p>Cela permet de faire des machines très peu chères en contrepartie d'une absence de garantie de performances.</p>


<p>A noter qu'OVH a sorti un produit intermédiaire entre le vps et le dédié nommé RPS. Il s'agit d'un dédié léger mais dont le disque est partagé sur le réseau.
<span id="more-945"></span></p>


<h4>Web hosting</h4>

<p>Hébergement mutualisé en français. Ce genre d'offre en général est la moins cher et la plus facile à gérer. Disponible immédiatement ou presque, vous avez plus ou moins d'espace disque, une base de données plus ou moins grosse et un virtualhost php avec parfois un nom de domaine.</p>


<p>A choisir lorsqu'on fait un "simple" site web.</p>


<h4>Cloud</h4>

<p>Petit nouveau, le cloud désigne en fait un groupe de machines dont on vous vend la puissance de calcul. Il existe autant de formes de cloud que de vendeurs de cloud, tous ont cette particularité de vendre des quantités variables.. Il y a ceux qui vous vendent des vm en grande quantité, il y a ceux qui vous vendent des serveurs d'application, il y a ceux qui vous vendent de la base de données ou du simple dépôt de fichier.</p>


<p>A choisir lorsqu'on a des applications scalable et qu'on prévoit un grand nombre de clients <em>potentiels</em>.</p>


<h4>Autres</h4>

<p>Les hébergeur offrent aussi sous forme de pack des noms de domaine, des services dns, des services de boite mail, d'envoi en masse de mail, en général pour pas trop cher, cherchez, vous trouverez.</p>


<p>Il existe aussi d'autres offres plus rares d'hébergement d'application ruby, python, java mais il faudra chercher pour trouver quelque chose d'intéressant.</p>


<p>Dans le genre exotique vous verrez aussi des offres de type shell où vous avez un shell sur une machine partagée entre plusieurs utilisateurs. Ce genre d'activité nécessite en général une certaine confiance et a plutôt tendance à fonctionner à travers des réseaux sociaux.</p>
	Tags:<a href="http://linux-attitude.fr/tag/hebergement" title="Hébergement" rel="tag">Hébergement</a>, <a href="http://linux-attitude.fr/tag/materiel" title="Matériel" rel="tag">Matériel</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/hebergement/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Traitement d&#8217;une url par apache</title>
		<link>http://linux-attitude.fr/post/traitement-dune-url-par-apache</link>
		<comments>http://linux-attitude.fr/post/traitement-dune-url-par-apache#comments</comments>
		<pubDate>Mon, 05 Jul 2010 16:53:26 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Serveur]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=914</guid>
		<description><![CDATA[Niveau&#160;:     
Résumé&#160;: apache, virtualhost, configuration


Que se passe-t-il lorsqu'apache reçoit une requête&#160;?


La question peut paraître anodine jusqu'à ce qu'on ait à écrire un fichier de configuration un peu complexe. Il faut alors avoir une idée de l'ordre dans lequel les opérations sont effectuées.


Commençons par un aperçu rapide&#160;: 
-&#62; récupération du virtualhost concerné [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/e.gif" alt="Empty" /><br />
<strong>Résumé</strong>&nbsp;: apache, virtualhost, configuration</p>


<p>Que se passe-t-il lorsqu'apache reçoit une requête&nbsp;?</p>


<p>La question peut paraître anodine jusqu'à ce qu'on ait à écrire un fichier de configuration un peu complexe. Il faut alors avoir une idée de l'ordre dans lequel les opérations sont effectuées.</p>


<p>Commençons par un aperçu rapide&nbsp;: <br />
-&gt; récupération du virtualhost concerné <br />
-&gt; récupération de la partie requête  <br />
-&gt; rewrite rules et redirect  <br />
-&gt; alias et réécriture de la requête nom de fichier <br />
-&gt; traitement par &lt;Directory&gt;, &lt;DirectoryMatch&gt;, .htaccess, &lt;Files&gt;, &lt;FilesMatch&gt;, &lt;Location&gt; et &lt;LocationMatch&gt; <br />
-&gt; droits d'accès <br />
-&gt; traitement du fichier en fonction de son type. <br /></p>


<p>Ouf c'est long&nbsp;!
Comme cet article, alors prenez votre temps ...</p>


<h2>Traitement de l'URL</h2>

<p>Pour <em>chaque requête</em>, apache relit sa configuration (en fait il récupère la version parsée en mémoire).
Ensuite il parcourt les éléments dans l'ordre, les compile en une seule conf puis la utilise cette conf spécifiquement pour cette requête.</p>


<h3>Virtualhost</h3>

<p>Bon ca c'est facile, on se base sur les <strong>ServerName</strong> définis dans les <strong>&lt;Virtualhost&gt;</strong>. Si on n'en trouve pas, on cherche dans les <strong>ServerAlias</strong>, si on n'en trouve pas on cherche encore, mais cette fois avec les wildcard (*.mondomaine.com), si on ne trouve toujours pas, on prend le premier &lt;Virtualhost&gt; qui a été dacléré. Et enfin s'il n'y a pas de virtualhost, on prend le <strong>DocumentRoot</strong> défini à la racine du serveur apache lui-même.</p>


<p>Voilà on a trouvé le virtualhost, maintenant on prend la requête, qui est la partie située à droite de l'URL après l'hôte et le port.</p>


<p><span id="more-914"></span></p>


<h3>Transformation de l'URL</h3>


<p>Contrairement à ce qu'on pourrait penser, lorsqu'il y a modification de l'url, il n'y a pas de gestion de droits d'accès sur la requête originale, seulement sur l'url modifiée (par rewriterule en général).</p>


<p>On traite d'abord les <strong>RewriteRule</strong>, dans l'ordre de leur priorités.</p>


<p>Si aucune ne correspond, on traite ensuite les <strong>Redirect</strong> et les <strong>RedirectMatch</strong> dans l'ordre de leur écriture. Attention on prend aussi en compte ceux qui sont dans les <strong>&lt;Location&gt;</strong> qui correspondent, mais on fait comme s'ils avaient été écrits à la racine. C'est-à-dire qu'on n'enlève pas le préfixe du location pour les traiter.</p>


<p>On traite ensuite les <strong>Alias</strong>, <strong>AliasMatch</strong>, <strong>ScriptAlias</strong> et <strong>ScriptAliasMatch</strong> dans l'ordre de leur apparition. Ce traitement fournit le nom de fichier réel à utiliser pour une URL donnée.</p>


<p>Si on ne trouve pas d'alias on ajoute le <strong>DocumentRoot</strong> à la requête pour obtenir le chemin complet du fichier.</p>


<h2>Configuration et droits d'accès</h2>

<p>A partir de maintenant on repart de la configuration du virtualhost et pour chaque section on prend la configuration qui correspond à la requête en cours. Et à la fin on fusionne les configurations récupérées selon une règle de fusion dépendant de chaque module.</p>


<p>C'est complexe et chiant à retenir, donc pour simplifier retenez que les configurations spécifiques aux droits d'accès sont en mode <em>remplacement</em>, c'est-à-dire que la dernière configuration remplace toutes les autres.</p>


<h3>Directory et DirectoryMatch</h3>


<p>On sait maintenant quel chemin doit être lu, on parcourt l'arborescence pour savoir si c'est un fichier et si on peu le lire s'il a un vrai chemin sur le système ...</p>


<p>On part de / et au fur et a mesure qu'on descend dans le système de fichier on vérifie les <strong>&lt;Directory&gt;</strong>, puis les <strong>.htaccess</strong>, puis les <strong>&lt;DirectoryMatch&gt;</strong> dans l'ordre pour chacun des répertoires. On a donc séquentiellement pour par exemple /var/www&nbsp;:</p>
<ul>
<li>&lt;Directory /&gt;</li>
<li>/.htaccess</li>
<li>&lt;DirectoryMatch /&gt;</li>
<li>&lt;Directory /var&gt;</li>
<li>/var/.htaccess</li>
<li>&lt;DirectoryMatch /var&gt;</li>
<li>&lt;Directory /var/www&gt;</li>
<li>/var/www/.htaccess</li>
<li>&lt;DirectoryMatch /var/www&gt;</li>
</ul>

<p>Toutes les sections qui correspondent sont accumulées dans la configuration en cours.</p>


<p>Attention&nbsp;! Si l'option <strong>FollowSymLinks</strong> est <em>activée</em>, on fait la correspondance sur les liens symboliques <em>avant</em> de les déréférencer. Si l'option est <em>désactivée</em>, on la fait sur les liens <em>après</em> les avoir déréférencés. C'est assez contre intuitif&nbsp;!</p>


<h3>Files et FilesMatch</h3>


<p>Une fois arrivé au bout, on a un fichier, on lit alors les sections <strong>&lt;Files&gt;</strong> et <strong>&lt;FilesMatch&gt;</strong> dans l'ordre de leur apparition, y compris celles qu'on a trouvé dans les .htaccess ou les &lt;Directory&gt;.</p>


<p>Notez que ces sections ne prennent en compte que le nom de fichier, sans chemin.</p>


<p>Attention, même remarque que précédemment sur les liens symboliques&nbsp;: "Si l'option <strong>FollowSymLinks</strong> est <em>activée</em>, on matche sur les liens symboliques <em>avant</em> de les déréférencer. Si l'option est <em>désactivée</em>, on matche sur les liens <em>après</em> les avoir déréférencés."</p>



<h3>Location et LocationMatch</h3>


<p>Maintenant il nous reste à prendre en compte tous les <strong>&lt;Location&gt;</strong> et <strong>&lt;LocationMatch&gt;</strong> de la configuration qui correspondent à notre URL. Cette fois on les prend séquentiellement et uniquement en fonction de l'url.</p>


<p>Attention les étapes de réécriture de règle sont passées, on matche donc sur l'url <em>réécrite</em>.</p>



<h3>Configuration des droits</h3>


<p>Dans le cas des droits d'accès, les blocs de directives se remplacent. C'est-à-dire que si vous avez une série de "<strong>order</strong> / <strong>allow</strong> / <strong>deny</strong>" dans une section, elle remplace <em>intégralement</em> toute autre série de "order / allow / deny" que vous pourriez trouver dans une section précédente.</p>


<p>Attention ceci est valable pour chacun des modules <em>séparément</em>.</p>


<p>Un exemple pour être plus clair&nbsp;:</p>
<pre>
&lt;Location /&gt;
    order allow,deny
&lt;/Location&gt;
&lt;Directory /html&gt;
    deny from all
    AuthUserFile users.txt
&lt;/Directory&gt;
&lt;DirectoryMatch /&gt;
    AuthUserFile web.txt
&lt;/DirectoryMatch&gt;
&lt;Directory /&gt;
    order deny,allow
    allow from all
    AuthUserFile admins.txt
&lt;/Directory&gt;
</pre>


<p>Le premier &lt;Directory&gt; est lu, puis il est remplacé par le 2e &lt;Directory&gt;, puis il est remplacé par le &lt;DirectoryMatch&gt; puis par le &lt;Location&gt; <em>intégralement</em>, mais séparément pour le module authz_host (order, allow, deny) et le module authnz_user (AuthUserFile). On a donc pour une requête qui matcherait les 3 sections la configuration suivante&nbsp;:</p>
<pre>
order allow,deny
AuthUserFile web.txt
</pre>


<p>Pas évident hein :-) Surtout que cette règle n'est pas la même pour d'autres modules comme mod_rewrite.</p>


<h3>Traitement des droits</h3>


<p>Le traitement des droits lui-même est particulier.</p>


<p>Si on est en <strong>satisfy all</strong> (par défaut)&nbsp;:</p>
<ul>
<li>On prend tous les modules de traitement des droits d'accès et si l'un d'entre eux interdit l'accès, on interdit l'accès. <br /></li>
<li>Puis on prend tous les modules d'authentification utilisateur et si l'un d'entre eux autorise l'accès ou s'il n'y en a pas, on autorise l'accès.</li>
</ul>

<p>Si on est en <strong>satisfy any</strong>&nbsp;:</p>
<ul>
<li>On prend tous les modules de traitement des droits d'accès et si l'un d'entre eux interdit l'accès&nbsp;:
<ul>
<li>On demande son avis aux modules d'authentification, si l'un d'entre eux autorise l'accès ou s'il n'y en a pas, on autorise.</li>
</ul></li>
</ul>

<h3>Rewrite (again)</h3>


<p>Arrivé ici, on repasse dans les <strong>RewriteRules</strong> Mais cette fois on ne traite que le cas particulier des rewrite dans les sections <strong>&lt;Location&gt;</strong>, <strong>&lt;Directory&gt;</strong>, <strong>&lt;Files&gt;</strong> et <strong>.htaccess</strong></p>


<p>Ces rewrite se cumulent cette fois (contrairement aux module d'accès, mais toujours selon le même parsing vu précédemment).</p>


<p>Ces rewrites sont cette fois relatifs, contrairement aux rewrite globaux. Ce qui veut dire qu'on les écrit par rapport à une racine qui est l'endroit où la règle est écrite.</p>


<h2>Réponse</h2>


<p>Cool maintenant on a notre requête nettoyée et on sait vers quelle fichier elle pointe.</p>


<p>Reste à la traiter.</p>


<h3>Filter</h3>


<p>On cherche tous les filtres (input et output) associés à cette url. Par exemple il y a mod_include, vous savez, pour les fichier .shtml qui contiennent des truc genre&nbsp;:</p>
<pre>
&lt;!--#echo var=&quot;DATE_LOCAL&quot; --&gt; 
</pre>


<p>Il y a aussi les filtres pour compresser (oui pas besoin de zipper en php, apache peut le faire tout seul).</p>


<p>Tout ceci avec <strong>SetInputFilter</strong> et <strong>SetOutputFilter</strong>.</p>


<h3>Handler</h3>


<p>Ensuite on cherche le handler associé à ce type de fichier. Il y a bien sur le handler fichier (incroyable), mais aussi le handler php, le handler perl (sisi), le handler cgi, mais aussi le handler proxy, et tous ceux que vous pourriez définir avec <strong>SetHandler </strong>.</p>


<p>On et hop lance le tout&nbsp;: inputfilter -&gt; handler -&gt; outputfilter.</p>



<h2>Conclusion</h2>


<p>En résumé c'est le bordel&nbsp;! Celui qui a écrit ça devait en avoir pris une sacrée dose et pas que de la farine. Probablement un pote de celui qui a fait X11 ...</p>


<p>Ne supposez jamais que ça marche comme vous le pensez, testez à chaque modification de votre conf.</p>


<p>Espérons que le prochain apache en développement tiendra ses promesses et nettoiera un peu la gestion de la configuration et surtout des droits d'accès. Sinon je prédis un avenir merveilleux pour toutes les alternatives soit disant "légères" comme lighthttpd ou nginx.</p>
	Tags:<a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/serveur" title="Serveur" rel="tag">Serveur</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/traitement-dune-url-par-apache/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Débit maximum</title>
		<link>http://linux-attitude.fr/post/debit-maximum</link>
		<comments>http://linux-attitude.fr/post/debit-maximum#comments</comments>
		<pubDate>Mon, 28 Jun 2010 16:16:05 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Réseau]]></category>
		<category><![CDATA[planet-libre]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=928</guid>
		<description><![CDATA[Niveau&#160;:     
Résumé&#160;: TCP + RTT + window size = debit


Si je me connecte au réseau local gigabit, que je fais un transfert de fichier ... je n'arrive pas à dépasser 200Mb/s&#160;! Vous rendez-vous compte que c'est normal&#160;?


Vous allez me dire que je ne suis pas doué, mais ce n'est pas moi, [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /><br />
<strong>Résumé</strong>&nbsp;: TCP + RTT + window size = debit</p>


<p>Si je me connecte au réseau local gigabit, que je fais un transfert de fichier ... je n'arrive pas à dépasser 200Mb/s&nbsp;! Vous rendez-vous compte que c'est normal&nbsp;?</p>


<p>Vous allez me dire que je ne suis pas doué, mais ce n'est pas moi, ce sont les lois de la physique.</p>


<p>Bon puisque nous somme dans un cas particulier je m'explique.</p>


<h3>Temps de réponse</h3>

<p>Le débit a beau toujours augmenter, il y a quelque chose qui s'améliore beaucoup moins vite&nbsp;: le temps de réponse. Pour une bonne raison, l'information a une vitesse limite, celle de la lumière. La limite est un peu inférieure sur une fibre optique et encore inférieure sur un câble cuivre.</p>


<p>De plus il faut une certaine électronique pour traiter tous ces paquets et ce débit. Du coup la traversée de switchs et de firewall en fout un coup à la latence. Et pourtant le débit ne change quasiment pas.</p>


<p>Tout ceci se voit avec la commande ping. Si vous lancez un ping sur la machine d'à coté, vous constatez un temps de réponse de l'ordre de la milliseconde.</p>


<p>Par exemple&nbsp;:</p>
<pre>
PING mamachine (10.0.0.0.1) 56(84) bytes of data.
64 bytes from mamachine (10.0.0.0.1): icmp_seq=1 ttl=61 time=1.16 ms
</pre>


<p>C'est le temps qu'il a fallu pour créer le paquet ping, l'envoyer à travers le switch, le réceptionner, répondre, repasser dans le switch, lire la réponse. Donc il faut la diviser par deux pour avoir un ordre de grandeur du temps de transfert du paquet.</p>


<p>Pour une machine sur un autre réseau c'est plus dans les 20ms voire 100ms.</p>


<p>Dans cette histoire les plus gros temps de latence dépendent de votre infrastructure, si vous êtes sur une fibre de 100km c'est elle qui contribuera à la latence, si vous êtes sur un réseau local c'est plus le temps de traitement par la carte réseau et le noyau, et s'il y a plusieurs switchs ou un routeurs c'est l'électronique des ces appareils.</p>


<p><span id="more-928"></span>
Tout ça pour dire qu'il y a plusieurs limitations qui font que la latence ne s'améliore pas aussi vite que le débit.</p>


<h3>TCP</h3>

<p>Le TCP a été inventé à une époque où le débit d'une connexion était de l'ordre du Mb/s en local.</p>


<p>Une des limite du TCP est la taille des données pouvant être envoyés sans attendre de réponse (window size). Celle-ci est variable mais est limitée à 65535. Ce qui veut dire qu'une fois qu'on a envoyé 64ko de données il faut attendre une réponse, sinon on est coincé.</p>


<p>On voit donc bien une limite en débit apparaître à cause de la latence.</p>


<p>Cette limite est toute simple à calculer&nbsp;: <br />
débit max = taille fenêtre / latence d'un paquet</p>


<p>Ce qui nous donne pour la connexion précédente&nbsp;: <br />
débit max = 64ko*8 / 0.00116 = 450Mb/s</p>


<p>Dommage, je pensais avoir du gigabit&nbsp;!</p>


<p>Donc pensez-y la prochaine fois que vous faites un test de transfert réseau et que vous constatez que vous n'atteignez pas la limite théorique de votre réseau. Commencez par faire un ping et refaites le calcul ci dessus pour voir quelle était la limite.</p>


<p><strong>PS</strong>&nbsp;: ce calcul n'est valable que pour une unique connexion. Si vous en avec 2 vous avez deux fois cette limite.</p>


<h3>Erreurs</h3>

<p>De plus, une chose qu'on ignore car elles sont devenues rares et corrigées, ce sont les erreurs.</p>


<p>Elles ont beau être rares lorsqu'on envoi des milliards d'octets par seconde il commence à y en avoir pas mal.</p>


<p>Chaque perte de paquet provoque un renvoi de touts les paquets non acquittés depuis, soit dans le pire des cas la taille de la fenêtre. La forte utilisation d'un réseau peut augmenter la perte de paquet et donc avoir un impact visible sur le débit total obtenu.</p>


<p>La formule est cette fois&nbsp;: <br />
débit max = MSS / latence / sqrt(Proba perte de paquet)</p>


<p>Pour un réseau local, en général MSS=1460, prenons une perte de 0.1% on obtient&nbsp;: <br />
débit max = 1460*8 / 0.00116 / sqrt(0.001) = 320Mb/s</p>


<p>Encore pire&nbsp;!</p>



<h3>La suite</h3>


<p>Mais non, TCP a beau être vieux, il a toujours des réserves. 2 évolutions ont donc été ajoutées à ce protocole il y a déjà un certain temps&nbsp;: window scaling et selective acknowledgement.</p>


<p>Window scaling est une extension TCP permettant d'augmenter la taille de la fenêtre jusqu'à 1Go, ça nous laisse un peu de marge.</p>


<p>Sous linux on vérifie l'utilisation de cette option et la taille de fenêtre associée avec&nbsp;:</p>
<pre>
$ cat /proc/sys/net/ipv4/tcp_window_scaling
$ cat /proc/sys/net/core/wmem_default
$ cat /proc/sys/net/core/wmem_max
</pre>


<p>Selective acknowledgement permet de demander la retransmission d'un seul paquet et non pas de toute la fenêtre. Cela permet de limiter l'impact des pertes de paquet sur les réseaux avec une forte latence.</p>


<p>Sous linux on vérifie l'utilisation de cette option avec&nbsp;:</p>
<pre>
$ cat /proc/sys/net/ipv4/tcp_sack
</pre>
	Tags:<a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/debit-maximum/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Firewall en 2 temps 3 mouvements</title>
		<link>http://linux-attitude.fr/post/firewall-en-2-temps-3-mouvements</link>
		<comments>http://linux-attitude.fr/post/firewall-en-2-temps-3-mouvements#comments</comments>
		<pubDate>Wed, 23 Jun 2010 16:44:15 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Réseau]]></category>
		<category><![CDATA[Firewall]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Système]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=908</guid>
		<description><![CDATA[Niveau&#160;:     
Résumé&#160;: ferm


Ferm

Vous battez-vous toujours avec vos scripts shell pour configurer les firewall de vos serveurs&#160;?
Ne ramez plus, j'ai la solution&#160;: Ferm.


Pourquoi ferm&#160;? Ben pourquoi pas&#160;?


Je l'ai choisi car il ne fait qu'une chose (et le fait bien), il remplace vos scripts shell de lancement de firewall. Et c'est tout&#160;! Pas [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /><br />
<strong>Résumé</strong>&nbsp;: ferm</p>


<h3>Ferm</h3>

<p>Vous battez-vous toujours avec vos scripts shell pour configurer les firewall de vos serveurs&nbsp;?
Ne ramez plus, j'ai la solution&nbsp;: <a href="http://ferm.foo-projects.org/" hreflang="en">Ferm</a>.</p>


<p>Pourquoi ferm&nbsp;? Ben pourquoi pas&nbsp;?</p>


<p>Je l'ai choisi car il ne fait qu'une chose (et le fait bien), il remplace vos scripts shell de lancement de firewall. Et c'est tout&nbsp;! Pas d'interface graphique, pas d'assistance à création de règle, pas de gestion de votre serveur DHCP ...</p>


<p>Donc si votre machine de bureau sert de passerelle vers internet, ou si vous ne connaissez pas bien iptables, ce n'est probablement pas le meilleur outil. Par contre si vous avez l'habitude d'écrire des scripts shell pour gérer votre firewall, ferm est là pour vous simplifier la vie.</p>


<h3>Configuration</h3>

<p>Ferm génère des règles iptables à partir de son fichier de configuration. Il n'invente rien, il ne fait qu'écrire sous forme hiérarchique les règles iptables et vous permet d'utiliser des variable et des listes. Il faut donc les connaître un peu.</p>


<p>Petit exemple pour vous montrer comment gagner du temps (il se comprend tout seul)&nbsp;:
<span id="more-908"></span></p>

<pre>
@def $SERVERS = (10.0.0.2 10.0.0.3);
table filter {
    chain FORWARD {
        policy DROP;
        proto tcp dport (80 443) daddr $SERVERS ACCEPT;
    }
}
</pre>


<p>On demande à ferm de générer les règles iptables mais sans les mettre dans le firewall (pas fou)&nbsp;:</p>
<pre>
$ ferm -n --lines firewall.conf
</pre>


<p>Et on obtient directement nos 4 règles auxquelles on s'attendait&nbsp;:</p>
<pre>
*filter
:FORWARD DROP [0:0]
-A FORWARD --protocol tcp --dport 80 --destination 10.0.0.2 --jump ACCEPT
-A FORWARD --protocol tcp --dport 80 --destination 10.0.0.3 --jump ACCEPT
-A FORWARD --protocol tcp --dport 443 --destination 10.0.0.2 --jump ACCEPT
-A FORWARD --protocol tcp --dport 443 --destination 10.0.0.3 --jump ACCEPT
COMMIT
</pre>


<p>On comprend bien qu'on va gagner du temps en scripting. Il faudra toujours écrire ses propres règles, mais elles seront "standardisées" et factorisées. Donc le <strong>transfert de compétence</strong> d'une personne à l'autre sera facilité. Le transfert de script aussi puisque ferm sait générer des scripts qui devront être poussés et lancés sur d'autres machines. Pratique pour ceux qui veulent une gestion centralisée des firewall de leurs serveurs/routeurs.</p>


<h3>Mieux</h3>

<p>Vous aurez remarqué que ferm génère des règles de type "sauvegarde iptables". Ce que je suis sur que vous ne faites pas dans vos script. Et pourtant c'est un gain de performance et de sécurité car l'ensemble des règles sera chargé en mémoire d'un coup.</p>


<p>De plus ferm gère lui-même le lancement du firewall au boot de la machine.</p>


<h3>La cerise</h3>

<p>Et si vous comptez passer à l'ipv6&nbsp;! Hé bien surtout ne faites rien&nbsp;! Réutilisez le même firewall, entourez vos règles de</p>
<pre>
domain (ip ip6) {
 ....
}
</pre>


<p>Et voila votre firewall dualstack est prêt.</p>
	Tags:<a href="http://linux-attitude.fr/tag/firewall" title="Firewall" rel="tag">Firewall</a>, <a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/systeme" title="Système" rel="tag">Système</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/firewall-en-2-temps-3-mouvements/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using apc (user agent is rejected)
Database Caching 11/28 queries in 0.014 seconds using apc

Served from: linux-attitude.fr @ 2010-09-03 09:42:48 -->