Sophie

Sophie

distrib > * > 2010.0 > * > by-pkgid > a412ceb851151854794ced2a242192bb > files > 3805

howto-html-fr-20080722-1mdv2010.0.noarch.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Classifier des paquets avec des filtres</title><link href="style.css" rel="stylesheet" type="text/css" /><meta content="DocBook XSL Stylesheets V1.73.2" name="generator" /><link rel="start" href="index.html" title="HOWTO du routage avancé et du contrôle de trafic sous Linux" /><link rel="up" href="ch09.html" title="Chapitre 9. Gestionnaires de mise en file d'attente pour l'administration de la bande passante" /><link rel="prev" href="ch09s05.html" title="Gestionnaires de file d'attente basés sur les classes" /><link rel="next" href="ch09s07.html" title="Le périphérique de file d'attente intermédiaire (The Intermediate queueing device (IMQ))" /></head><body><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Classifier des paquets avec des filtres</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="ch09s05.html">Précédent</a> </td><th align="center" width="60%">Chapitre 9. Gestionnaires de mise en file d'attente pour l'administration de la 
  bande passante</th><td align="right" width="20%"> <a accesskey="n" href="ch09s07.html">Suivant</a></td></tr></table><hr /></div><div class="sect1" lang="fr"><div class="titlepage"><div><div><h2 class="title"><a id="lartc.qdisc.filters" />Classifier des paquets avec des filtres</h2></div></div></div><p>Pour déterminer quelle classe traitera un paquet, la « <span class="quote">chaîne de
classificateurs</span> » est appelée chaque fois qu'un choix a besoin d'être 
fait.
Cette chaîne est constituée de tous les filtres attachés aux gestionnaires de
mise en file d'attente basés sur des classes qui doivent prendre une
décision.
</p><p>On reprend l'arbre qui n'est pas un arbre :
</p><pre class="screen">                   racine 1:
                      |
                    _1:1_
                   /  |  \
                  /   |   \
                 /    |    \
               10:   11:   12:
              /   \       /   \
           10:1  10:2   12:1  12:2
</pre><p>Quand un paquet est mis en file d'attente, l'instruction appropriée de 
la chaîne de filtre est consultée à chaque branche.
Une configuration typique devrait avoir un filtre en 
<code class="literal">1:1</code> qui dirige le paquet vers 
<code class="literal">12:</code> et un filtre en <code class="literal">12:</code> qui 
l'envoie vers <code class="literal">12:2</code>.
</p><p>Vous pourriez également avoir ce dernier filtre en 
<code class="literal">1:1</code>, mais vous pouvez gagner en efficacité en ayant des
tests plus spécifiques plus bas dans la chaîne.
</p><p>A ce propos, vous ne pouvez pas filtrer un paquet « <span class="quote">vers le 
haut</span> ».
Donc, avec <acronym class="acronym">HTB</acronym>, vous devrez attacher tous les filtres à la 
racine !
</p><p>Encore une fois, les paquets ne sont mis en file d'attente que vers le
bas ! Quand ils sont retirés de la file d'attente, ils montent de
nouveau, vers l'interface. Ils ne tombent <span class="emphasis"><em>PAS</em></span> vers 
l'extrémité de l'arbre en direction de l'adaptateur réseau !
</p><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a id="N11200" />Quelques exemples simples de filtrage</h3></div></div></div><p>Comme expliqué dans le chapitre 
<em class="citetitle"><a class="xref" href="ch12.html" title="Chapitre 12. Filtres avancés pour la (re-)classification des paquets">Filtres avancés pour la classification des paquets</a></em>, vous pouvez
vraiment analyser n'importe quoi en utilisant une syntaxe très compliquée.
Pour commencer, nous allons montrer comment réaliser les choses évidentes, ce
qui heureusement est plutôt facile.
</p><p>Disons que nous avons un gestionnaire de mise en file d'attente 
<acronym class="acronym">PRIO</acronym> appelé <code class="literal">10:</code> qui contient trois
classes, et que nous voulons assigner à la bande de plus haute priorité tout
le trafic allant et venant du port 22.
Les filtres seraient les suivants :
</p><pre class="screen"># tc filter add dev eth0 protocol ip parent 10: prio 1 u32 match \ 
  ip dport 22 0xffff flowid 10:1
# tc filter add dev eth0 protocol ip parent 10: prio 1 u32 match \
  ip sport 80 0xffff flowid 10:1
# tc filter add dev eth0 protocol ip parent 10: prio 2 flowid 10:2
</pre><p>Qu'est-ce que cela signifie ? Cela dit : attacher à 
<code class="literal">eth0</code>, au noeud <code class="literal">10:</code> un filtre 
<code class="option">u32</code> de priorité 1 qui analyse le port de destination ip 22
et qui l'envoie vers la bande <code class="literal">10:1</code>.
La même chose est répétée avec le port source 80.
La dernière commande indique que si aucune correspondance n'est trouvée,
alors le trafic devra aller vers la bande <code class="literal">10:2</code>, la plus
grande priorité suivante.
</p><p>Vous devez ajouter <code class="literal">eth0</code> ou n'importe laquelle de vos 
interfaces, car chaque interface possède un espace de nommage de ses descripteurs
qui lui est propre.
</p><p>Pour sélectionner une adresse IP, utilisez ceci :
</p><pre class="screen"># tc filter add dev eth0 parent 10:0 protocol ip prio 1 u32 \ 
  match ip dst 4.3.2.1/32 flowid 10:1
# tc filter add dev eth0 parent 10:0 protocol ip prio 1 u32 \
  match ip src 1.2.3.4/32 flowid 10:1
# tc filter add dev eth0 protocol ip parent 10: prio 2      \
  flowid 10:2
</pre><p>Ceci dirige le trafic allant vers <code class="literal">4.3.2.1</code> et venant
de <code class="literal">1.2.3.4</code> vers la file d'attente de plus haute priorité,
tandis que le reste ira vers la prochaine plus haute priorité.
</p><p>Vous pouvez rassembler ces deux vérifications pour récupérer le trafic
venant de <code class="literal">1.2.3.4</code> avec le port source 80 :
</p><pre class="screen"># tc filter add dev eth0 parent 10:0 protocol ip prio 1 u32 match ip src 4.3.2.1/32
  match ip sport 80 0xffff flowid 10:1
</pre></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a id="lartc.filtering.simple" />Toutes les commandes de filtres dont vous aurez 
  normalement besoin</h3></div></div></div><p>La plupart des commandes présentées ici commencent avec le préambule
suivant :
</p><pre class="screen"># tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 ..
</pre><p>Ils sont appelés filtres <code class="option">u32</code> et analysent 
<span class="emphasis"><em>N'IMPORTE QUELLE</em></span> partie d'un paquet.
</p><div class="variablelist"><dl><dt><span class="term">Sur l'adresse source/destination</span></dt><dd><p>Masque pour la source <code class="literal">match ip src 1.2.3.0/24</code> et
    masque pour la destination <code class="literal">match ip dst 4.3.2.0/24</code>.
    Pour analyser un hôte simple, employez /32 ou omettez le masque.
    </p></dd><dt><span class="term">Sur le port source/destination, tous les protocoles IP</span></dt><dd><p>Source: <code class="literal">match ip sport 80 0xffff</code> et
    destination : <code class="literal">match ip dport ?? 0xffff</code>
    </p></dd><dt><span class="term">Sur le protocole ip (tcp, udp, icmp, gre, ipsec)</span></dt><dd><p>Utilisez les nombres définis dans 
    <code class="filename">/etc/protocols</code>, par exemple 1 pour icmp :
    <code class="literal">match ip protocol 1 0xff</code>. 
    </p></dd><dt><span class="term">Sur <acronym class="acronym">fwmark</acronym></span></dt><dd><p>Vous pouvez marquer les paquets avec ipchains ou iptables et
    voir cette marque préservée lors du routage à travers les interfaces.
    Ceci est vraiment utile pour mettre uniquement en forme le trafic sur 
    <code class="literal">eth1</code> et venant de <code class="literal">eth0</code>, par exemple.
    La syntaxe est la suivante :
    </p><pre class="screen"># tc filter add dev eth1 protocol ip parent 1:0 prio 1 handle 6 fw flowid 1:1
</pre><p>Notez que ce n'est pas une correspondance 
    <code class="literal">u32</code> !
    </p><p>Vous pouvez positionner une marque comme ceci :
    </p><pre class="screen"># iptables -A PREROUTING -t mangle -i eth0 -j MARK --set-mark 6
</pre><p>Le nombre 6 est arbitraire.
    </p><p>Si vous ne voulez pas assimiler la syntaxe complète de 
    <span class="command"><strong>tc filter</strong></span>, utilisez juste <span class="command"><strong>iptables</strong></span>
    et apprenez seulement la sélection basée sur <acronym class="acronym">fwmark</acronym>.
    </p></dd><dt><span class="term">Sur le champ <acronym class="acronym">TOS</acronym></span></dt><dd><p>Pour sélectionner le trafic interactif, délai minimum :
    </p><pre class="screen"># tc filter add dev ppp0 parent 1:0 protocol ip prio 10 u32 \
      match ip tos 0x10 0xff \
     flowid 1:4
</pre><p>Utilisez <code class="literal">0x08</code> <code class="literal">0xff</code> pour le
    trafic de masse.
    </p></dd></dl></div><p>Pour plus de commandes de filtrage, voir le chapitre
<em class="citetitle"><a class="xref" href="ch12.html" title="Chapitre 12. Filtres avancés pour la (re-)classification des paquets">Filtres avancés pour la classification des paquets</a></em>.
</p></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="ch09s05.html">Précédent</a> </td><td align="center" width="20%"><a accesskey="u" href="ch09.html">Niveau supérieur</a></td><td align="right" width="40%"> <a accesskey="n" href="ch09s07.html">Suivant</a></td></tr><tr><td valign="top" align="left" width="40%">Gestionnaires de file d'attente basés sur les classes </td><td align="center" width="20%"><a accesskey="h" href="index.html">Sommaire</a></td><td valign="top" align="right" width="40%"> Le périphérique de file d'attente intermédiaire (The Intermediate queueing device (IMQ))</td></tr></table></div></body></html>