Linux IPCHAINS-HOWTO

Paul Russell, ipchains@rustcorp.com
Version fran�aise par Arnaud Launay, asl@launay.org

   v1.0.7, 12 mars 1999
     _________________________________________________________________

   _Ce document d�crit l'obtention, l'installation et la configuration du
   logiciel am�lior� de cha�nes pare-feu IP pour Linux, et donne quelques
   id�es sur l'utilisation que vous pouvez en faire._
     _________________________________________________________________

1. Introduction

   Ceci est le Linux IPCHAINS-HOWTO ; voyez la section O� ? pour le site
   principal, qui d�tient la derni�re version. Vous devriez �galement
   lire le Linux NET-3-HOWTO. Les howtos IP-Masquerading, PPP-HOWTO,
   l'Ethernet-HOWTO et le Firewall HOWTO peuvent aussi �tre int�ressants
   � lire (une fois de plus, la FAQ de alt.fan.bigfoot peut l'�tre
   aussi).

   Si le filtrage des paquets vous semble d�pass�, lisez la section
   Pourquoi ?, la section Comment ?, et lisez les titres de la section
   Cha�nes de protection IP.

   Si vous vous adaptez en partant d'ipfwadm, lisez la section
   Introduction, la section Comment ?, et les annexes des sections
   Diff�rences entre ipchains et ipfwadm et Utiliser le script
   `ipfwadm-wrapper'.

1.1 Qu'est ce que c'est ?

   Le Linux ipchains est une r��criture du code de firewalling de l'IPv4
   de Linux (qui avait �t� principalement emprunt� � BSD) et une
   r��criture d'ipfwadm, lui m�me r��criture d'ipfw de BSD, je crois. Il
   est n�cessaire pour administrer le filtrage des paquets IP dans les
   noyaux Linux � partir de la version 2.1.102.

1.2 Pourquoi ?

   L'ancien code de firewalling de Linux ne pouvait g�rer les fragments,
   utilisait des compteurs 32 bits (au moins sur Intel), ne permettait
   pas la sp�cification de protocoles autres que TCP, UDP ou ICMP, ne
   pouvait faire de grands changements atomiquement, ne permettait pas la
   sp�cification de r�gles inverses, avait quelques bizarreries, et
   pouvait �tre une catastrophe � g�rer (le rendant propice aux erreurs
   des utilisateurs).

1.3 Comment ?

   Actuellement le code se trouve dans le noyau principal � partir du
   2.1.102. Pour la s�rie des noyaux 2.0, vous devrez r�cup�rer une
   correction pour le noyau sur une page web. Si votre noyau 2.0 est plus
   r�cent que la correction r�cup�r�e, la correction ancienne devrait
   fonctionner ; cette partie des noyaux 2.0 est relativement stable (la
   correction pour le noyau 2.0.34 fonctionne bien sur le noyau 2.0.35).
   Cependant, le correctif 2.0 est incompatible avec les correctifs pour
   l'ipportfw et l'ipautofw, je recommande donc de ne pas l'appliquer, �
   moins que vous n'ayez r�ellement besoin de l'une des fonctionnalit�s
   offertes par ipchains.

1.4 O� ?

   La page officielle est la Page des cha�nes de filtrage IP de Linux.

   Il y a une liste de diffusion pour les rapports d'erreurs, les
   discussions, le d�veloppement et l'utilisation. Vous pouvez rejoindre
   la liste de diffusion en envoyant un message contenant le mot
   ``subscribe'' � ipchains-request de rustcorp.com. Pour �crire � la
   liste utilisez `ipchains' � la place de `ipchains-request'.

2. Bases du filtrage de paquets

2.1 Qu'est ce que c'est ?

   Tout le trafic circulant dans un r�seau est envoy� sous la forme de
   _paquets_. Par exemple, pour charger ce paquetage (disons qu'il fait
   50k) vous avez d� recevoir plus ou moins 36 paquets de 1460 octets
   chacun (pour prendre des valeurs au hasard).

   Le d�but de chaque paquet pr�cise o� celui-ci va, d'o� il vient, le
   type du paquet, et divers autres d�tails administratifs. Le d�but de
   chaque paquet est appel� l'_ent�te_. Le reste du paquet, contenant les
   donn�es � transmettre, est couramment appel� le _corps_.

   Quelques protocoles, comme le _TCP_, qui est utilis� pour le trafic
   web, mail et les connexions � distance, utilisent le concept de
   `connexion' -- avant que le moindre paquet de donn�es ne soit envoy�,
   divers paquets de configuration (avec des ent�tes sp�ciales) sont
   �chang�s en disant `je veux me connecter', `OK' et `Merci'. Ensuite
   les paquets normaux sont �chang�s.

   Un filtre de paquet est un logiciel qui regarde l'_ent�te_ des paquets
   lorsque ceux-ci passent, et d�cide du destin du paquet entier. Il peut
   d�cider de le _refuser_ (le supprimer comme s'il n'avait jamais �t�
   re�u), de l'_accepter_ (le laisser circuler) ou de le _rejeter_ (effet
   identique au refus, mais il est pr�cis� � la source que le paquet n'a
   pas �t� accept�).

   Sous Linux, le filtrage des paquets est inclus dans le noyau, et il y
   a diverses choses que nous pouvons faire avec les paquets, mais le
   principe g�n�ral (regarder les ent�tes et d�cider du destin du paquet)
   est toujours pr�sent.

2.2 Pourquoi ?

   Contr�le. S�curit�. Vigilance.

   _Contr�le :_
          Lorsque vous utilisez un ordinateur sous Linux pour connecter
          votre r�seau interne � un autre r�seau (disons, l'Internet)
          vous aurez l'opportunit� de permettre certains types de
          trafics, et d'interdire les autres. Par exemple, l'ent�te d'un
          paquet contient l'adresse de destination du paquet, et vous
          pouvez ainsi �viter que des paquets aillent vers un certain
          endroit du r�seau ext�rieur. Comme autre exemple, j'utilise
          Netscape pour acc�der aux archives de Dilbert. Il y a des
          publicit�s provenant de doubleclick.net sur la page, et
          Netscape perd du temps en les chargeant gentiment. Dire au
          filtre des paquets de ne pas autoriser la circulation de
          paquets provenant ou allant vers doubleclick.net r�soud le
          probl�me (il y a cependant de meilleurs moyens pour y
          parvenir).

   _S�curit� :_
          Lorsque votre machine Linux est le seul rempart entre le chaos
          de l'Internet et votre r�seau propre et bien ordonn�, il est
          utile de savoir que vous pouvez restreindre ce qui vient sonner
          � votre porte. Par exemple, vous pouvez autoriser tout ce qui
          sort de votre r�seau, mais vous pouvez vous inqui�ter du fort
          connu 'Ping of Death' pouvant provenir d'intrus ext�rieurs.
          Comme autre exemple, vous pouvez interdire aux personnes
          ext�rieures de se connecter en telnet sur votre machine Linux,
          m�me si tous vos comptes ont des mots de passe ; peut-�tre
          d�sirerez-vous (comme la plupart des gens) �tre un simple
          observateur sur l'Internet, et non un serveur (de bonne volont�
          ou non) -- simplement en ne laissant personne se connecter, le
          filtrage de paquets rejetant tous les paquets entrants utilis�s
          pour cr�er des connexions.

   _Vigilance :_
          Parfois, une machine mal configur�e du r�seau local d�cidera
          d'envoyer des paquets au monde ext�rieur. Il est sympathique de
          pouvoir sp�cifier au filtre de paquets de vous informer si
          quelque chose d'anormal se produit ; vous pourrez
          �ventuellement y faire quelque chose, ou bien laisser libre
          cours � la simple curiosit�.

2.3 Comment ?

  Un noyau avec le filtrage de paquets

   Vous aurez besoin d'un noyau disposant du nouveau code de cha�nes de
   protection IP. Vous pouvez savoir si le noyau que vous utilisez
   actuellement en dispose en cherchant le fichier
   `/proc/net/ip_fwchains'. Si ce fichier existe, alors c'est tout bon.

   Sinon, vous devez cr�er un noyau contenant le code de cha�nes de
   protection IP. Tout d'abord, r�cup�rez les sources du noyau que vous
   d�sirez. Si vous avez un noyau dont le num�ro est sup�rieur ou �gal �
   2.1.102, vous n'aurez pas besoin de le corriger (il se trouve d�j�
   inclus dans le noyau). Autrement, appliquez le correctif que vous
   trouverez sur la page web list�e plus haut, et utilisez la
   configuration d�taill�e ci-dessous. Si vous ne savez pas comment le
   faire, ne paniquez pas -- lisez le Kernel-HOWTO.

   Les options de configuration que vous devez utiliser pour les _noyaux
   de s�rie 2.0_ sont :
     _________________________________________________________________

        CONFIG_EXPERIMENTAL=y
        CONFIG_FIREWALL=y
        CONFIG_IP_FIREWALL=y
        CONFIG_IP_FIREWALL_CHAINS=y
     _________________________________________________________________

   Pour les s�ries de _noyaux 2.1_ ou _2.2_ :
     _________________________________________________________________

        CONFIG_FIREWALL=y
        CONFIG_IP_FIREWALL=y
     _________________________________________________________________

   L'outil ipchains parle au noyau et lui dit quels paquets filtrer. �
   moins que vous ne soyez un programmeur, ou un curieux inv�t�r�, c'est
   ainsi que vous contr�lerez le filtrage des paquets.

  ipchains

   L'outil ipchains ins�re et efface des r�gles dans la section de
   filtrage de paquets du noyau. Ce qui signifie que quoi que vous
   configuriez, tout sera perdu lors d'un red�marrage ; voyez la section
   Rendre les r�gles permanentes pour savoir comment s'assurer que les
   r�gles seront restaur�es au prochain lancement de Linux.

   ipchains remplace ipfwadm, qui �tait utilis� par l'ancien code
   pare-feu. Il y a un ensemble de scripts utiles disponibles sur le site
   ftp d'ipchains :

   ftp://ftp.rustcorp.com/ipchains/ipchains-scripts-1.1.2.tar.gz

   Cette archive contient un script shell appell� ipfwadm-wrapper qui
   vous autorisera � utiliser le filtrage de paquets comme avant. Vous ne
   devriez probablement pas utiliser ce script � moins que vous ne
   souhaitiez un moyen rapide de mettre � jour un syst�me utilisant
   ipfwadm (ce script est plus lent, ne v�rifie pas les arguments, etc.).
   Dans ce cas, vous n'avez pas non plus besoin de ce howto.

   Voyez l'annexe Diff�rences entre ipchains et ipfwadm et l'annexe
   Utiliser le script `ipfwadm-wrapper' pour des d�tails suppl�mentaires
   concernant ipfwadm.

  Rendre les r�gles permanentes

   Votre configuration actuelle de pare-feu est sauv�e dans le noyau, et
   sera ainsi perdue lors d'un red�marrage. Je vous recommande d'utiliser
   les scripts `ipchains-save' et `ipchains-restore' pour rendre vos
   r�gles permanentes. Pour ce faire, configurez vos r�gles, puis
   utilisez (en tant que super-utilisateur) :

# ipchains-save > /etc/ipchains.rules
#

   Cr�ez un script comme le suivant :

#! /bin/sh
# Script to control packet filtering.

# If no rules, do nothing.
[ -f /etc/ipchains.rules ] || exit 0

case "$1" in
    start)
        echo -n "Turning on packet filtering:"
        /sbin/ipchains-restore < /etc/ipchains.rules || exit 1
        echo 1 > /proc/sys/net/ipv4/ip_forward
        echo "."
        ;;
    stop)
        echo -n "Turning off packet filtering:"
        echo 0 > /proc/sys/net/ipv4/ip_forward
        /sbin/ipchains -X
        /sbin/ipchains -F
        /sbin/ipchains -P input ACCEPT
        /sbin/ipchains -P output ACCEPT
        /sbin/ipchains -P forward ACCEPT
        echo "."
        ;;
    *)
        echo "Usage: /etc/init.d/packetfilter {start|stop}"
        exit 1
        ;;
esac

exit 0

   Assurez vous que ceci est lanc� suffisamment t�t dans la proc�dure de
   lancement. Dans mon cas (Debian 2.1), j'ai cr�� un lien symbolique
   appell� `S39packetfilter' dans le r�pertoire `/etc/rcS.d' (il sera
   ainsi lanc� avant S40network).

3. Je suis troubl� ! Routage, camouflage, redirection de ports, ipautofw...

   Ce HOWTO a pour sujet le filtrage de paquets. Ce filtrage permet la
   prise de d�cision concernant le destin d'un paquet : s'il est autoris�
   � passer ou non. Cependant, Linux �tant le joujou pour bidouilleurs
   qu'il est, vous voudriez probablement en savoir un peu plus.

   Un des probl�mes est que le m�me outil ("ipchains") est utilis� pour
   contr�ler � la fois le camouflage et le cache transparent, alors que
   ce sont des notions s�par�es du filtrage de paquets (l'impl�mentation
   actuelle de Linux les brouille tous les trois de fa�on inhabituelle,
   laissant l'impression qu'ils sont tr�s proches).

   Le camouflage et le cachage sont recouverts par des HOWTOs s�par�s, et
   les possibilit�s de redirection automatique et de redirection de ports
   sont contr�l�es par des outils s�par�s, mais puisque de nombreuses
   personnes continuent � me harceler � leur propos, je vais ajouter un
   ensemble de sc�narios classiques en indiquant les moments o� chacun
   doit �tre utilis�. Les m�rites de la s�curit� de chacun de ces
   sc�narios ne seront n�anmoins pas discut�s ici.

3.1 Le guide du camouflage en 3 lignes par Rusty

   Ces lignes pr�sument que votre interface _externe_ est appell�e
   "ppp0". Utilisez ifconfig pour le v�rifier, et ajustez selon votre
   go�t.

# ipchains -P forward DENY
# ipchains -A forward -i ppp0 -j MASQ
# echo 1 > /proc/sys/net/ipv4/ip_forward

3.2 Publicit� gratuite : le z�le de WatchGuard

   Vous pouvez acheter des pare-feu tout faits. Un excellent est le
   FireBox de WatchGuard. C'est excellent parce que je l'appr�cie, parce
   qu'il est s�curis�, bas� sur Linux, et parce qu'ils financent la
   maintenance d'ipchains ainsi que du nouveau code pare-feu (pr�vu pour
   le 2.3). En bref, WatchGuard me paye � manger lorsque je travaille
   pour vous. Donc, je vous prierai de prendre leur travail en compte.

   http://www.watchguard.com

3.3 Configurations classiques de type pare-feu

   Vous �tes petiteboite.com. Vous avez un r�seau interne, et une
   connexion intermittente (PPP) simple � l'Internet
   (firewall.petiteboite.com a pour IP 1.2.3.4). Vous �tes en Ethernet
   sur votre r�seau local, et votre machine personnelle s'appelle
   "mamachine".

   Cette section illustrera les diff�rents arrangements classiques. Lisez
   attentivement, car ils sont tous subtilement diff�rents.

  R�seaux priv�s : caches traditionnels

   Dans ce sc�nario, les paquets venant d'un r�seau priv� ne traversent
   jamais l'Internet, et vice versa. Les adresses IP du r�seau priv�
   doivent �tre assign�es en utilisant les adresses priv�es r�serv�es par
   la RFC 1597 (c�d 10.*.*.*, 172.16.*.* ou 192.168.*.*).

   La seule m�thode pour que les choses soient connect�s � l'Internet est
   en se connectant au pare-feu, qui est la seule machine sur les deux
   r�seaux qui sont connect�s plus loin. Vous lancez un programme (sur le
   pare-feu) appell� un proxy pour ce faire (il y a des proxy (caches)
   pour le FTP, l'acc�s web, telnet, RealAudio, les News Usenet et autres
   services). Voyez le Firewall HOWTO.

   Tous les services auxquels vous voulez que l'Internet puisse avoir
   acc�s doivent �tre sur le pare-feu (mais voyez Services internes
   limit�s plus bas).

   Exemple : autoriser l'acc�s web d'un r�seau priv� vers l'Internet.
    1. On a assign� les adresses 192.168.1.* au r�seau priv�, avec
       mamachine �tant 192.168.1.100, et l'interface Ethernet du pare-feu
       �tant assign�e � 192.168.1.1.
    2. Un cache web (comme "squid") est install� et configur� sur le
       pare-feu, disons tournant sur le port 8080.
    3. Netscape sur le r�seau priv� est configur� pour utiliser le
       pare-feu port 8080 comme cache.
    4. Le DNS n'a pas besoin d'�tre configur� sur le r�seau priv�.
    5. Le DNS doit �tre configur� sur le pare-feu.
    6. Le r�seau priv� n'a pas besoin de disposer de route par d�faut
       (passerelle).

   Netscape sur mamachine lit http://slashdot.org.
    1. Netscape se connecte sur le port 8080 du pare-feu, en utilisant le
       port 1050 de mamachine. Il demande la page web de
       "http://slashdot.org".
    2. Le cache recherche le nom "slashdot.org", et obtient
       207.218.152.131. Il ouvre alors une connexion sur cette adresse IP
       (en utilisant le port 1025 de l'interface externe du pare-feu), et
       demande la page au serveur web (port 80).
    3. En recevant la page web par sa connexion au serveur web, le
       pare-feu copie les donn�es vers la connexion de Netscape.
    4. Netscape affiche la page.

   C'est-�-dire que du point de vue de slashdot.org, la connexion est
   r�alis�e par 1.2.3.4 (interface PPP du pare-feu), port 1025, vers
   207.218.152.131 (slashdot.org) port 80. Du point de vue de mamachine,
   la connexion est faite de 192.168.1.100 (mamachine) port 1050, vers
   192.168.1.1 (interface Ethernet du pare-feu), port 8080.

  R�seaux priv�s : caches transparents

   Dans ce sc�nario, les paquets venant du r�seau priv� ne traversent
   jamais l'Internet, et vice versa. Les adresses IP du r�seau priv�
   doivent �tre assign�es en utilisant les adresses priv�es r�serv�es par
   la RFC 1597 (c�d 10.*.*.*, 172.16.*.* ou 192.168.*.*).

   La seule m�thode pour que les choses soient connect�es � l'Internet
   est en se connectant au pare-feu, qui est la seule machine sur les
   deux r�seaux, qui sont connect�s plus loin. Vous lancez un programme
   (sur le pare-feu) appell� un cache transparent pour ce faire ; le
   noyau envoie les paquets sortants au cache transparent au lieu de les
   envoyer plus loin (c�d qu'il rend b�tard le routage).

   Le cachage transparent signifie que les clients n'ont pas besoin de
   savoir qu'il y a un proxy dans l'histoire.

   Tous les services que l'Internet peut utiliser doivent �tre sur le
   pare-feu (mais voyez Services internes limit�s plus bas).

   Exemple : autoriser l'acc�s web du r�seau priv� vers l'Internet.
    1. On a assign� les adresses 192.168.1.* au r�seau priv�, avec
       mamachine �tant 192.168.1.100, et l'interface Ethernet du pare-feu
       �tant assign�e � 192.168.1.1.
    2. Un proxy web transparent (je pr�sume qu'il existe des correctifs
       pour squid lui permettant d'op�rer de cette fa�on, sinon, essayez
       "transproxy") est install� et configur� sur le pare-feu, disons
       tournant sur le port 8080.
    3. On dit au noyau de rediriger les connexions sur le port 80 du
       proxy, en utilisant ipchains.
    4. Netscape, sur le r�seau priv�, est configur� pour se connecter
       directement.
    5. Le DNS doit �tre configur� sur le r�seau priv� (c�d que vous devez
       faire tourner un serveur DNS de la m�me mani�re que le proxy sur
       le pare-feu).
    6. La route par d�faut (passerelle) doit �tre configur� sur le r�seau
       priv�, pour envoyer les paquets au pare-feu.

   Netscape sur mamachine lit http://slashdot.org.
    1. Netscape recherche le nom "slashdot.org", et obtient
       207.218.152.131. Il ouvre alors une connexion vers cette adresse
       IP, en utilisant le port local 1050, et demande la page au serveur
       web (port 80).
    2. Comme les paquets venant de mamachine (port 1050) et allant sur
       slashdot.org (port 80) passent par le pare-feu, ils sont redirig�s
       sur le proxy transparent en attente sur le port 8080. Le cache
       transparent ouvre alors une connexion (en utilisant le port local
       1025) vers 207.218.152.131 port 80 (vers lequel les paquets de
       d�part allaient).
    3. Alors que le cache re�oit la page web par sa connexion avec le
       serveur web, il copie les donn�es vers la connexion avec Netscape.
    4. Netscape affiche la page.

   C'est � dire que du point de vue de slashdot.org, la connexion est
   r�alis�e par 1.2.3.4 (interface PPP du pare-feu) port 1025 vers
   207.218.152.131 (slashdot.org) port 80. Du point de vue de mamachine,
   la connexion est faite � partir de 192.168.1.100 (mamachine) port
   1050, vers 207.218.152.131(slashdot.org) port 80, mais il parle en
   fait au proxy transparent.

  R�seaux priv�s : camouflage

   Dans ce sc�nario, les paquets venant du r�seau priv� ne traversent
   jamais l'Internet sans traitement sp�cial, et vice versa. Les adresses
   IP du r�seau priv� doivent �tre assign�es en utilisant les adresses
   priv�es r�serv�es par la RFC 1597 (c�d 10.*.*.*, 172.16.*.* ou
   192.168.*.*).

   Au lieu d'utiliser un cache, nous utilisons une sp�cificit� sp�ciale
   du noyau nomm�e "camouflage" (masquerading). Le camouflage r��crit les
   paquets lorsqu'ils passent par le pare-feu, ce qui fait qu'ils
   semblent toujours venir du pare-feu lui-m�me. Il r��crit ensuite les
   r�ponses afin qu'elles semblent venir du destinataire originel.

   Le camouflage dispose de modules s�par�s afin de g�rer les protocoles
   "�tranges", comme FTP, RealAudio, Quake, etc. Pour les protocoles
   vraiment difficiles � g�rer, la sp�cificit� de "redirection
   automatique" (auto forwarding) peut en g�rer quelques-uns en
   configurant automatiquement la redirection de ports pour un ensemble
   donn� de ports : voyez "ipportfw" (noyaux 2.0) ou "ipmasqadm" (noyaux
   2.1 et sup�rieurs).

   Tous les services auxquels vous voulez que l'Internet puisse avoir
   acc�s doivent �tre sur le pare-feu (mais voyez Services internes
   limit�s plus bas).

   Exemple : autoriser l'acc�s web du r�seau priv� sur l'Internet.
    1. On a assign� les adresses 192.168.1.* au r�seau priv�, avec
       mamachine �tant 192.168.1.100, et l'interface Ethernet du pare-feu
       �tant assign�e � 192.168.1.1.
    2. Le pare-feu est configur� pour camoufler tous les paquets venant
       du r�seau priv� et allant sur le port 80 d'un h�te sur Internet.
    3. Netscape est configur� pour se connecter directement.
    4. Le DNS doit �tre configur� correctement sur le r�seau priv�.
    5. Le pare-feu doit �tre la route par d�faut (passerelle) du r�seau
       priv�.

   Netscape sur mamachine lit http://slashdot.org.
    1. Netscape recherche le nom "slashdot.org", et obtient
       207.218.152.131. Il ouvre alors une connexion vers cette adresse
       IP, en utilisant le port local 1050, et demande la page au serveur
       web (port 80).
    2. Comme les paquets venant de mamachine (port 1050) et allant sur
       slashdot.org (port 80) passent par le pare-feu, ils sont r��crits
       pour venir de l'interface PPP du pare-feu, port 65000. Le pare-feu
       a une adresse Internet valide (1.2.3.4), donc les paquets venant
       de slashdot.org sont rout�s correctement.
    3. Lorsque les paquets venant de slashdot.org (port 80) sur
       firewall.petiteboite.com (port 65000) arrivent, ils sont r��crits
       pour aller sur mamachine, port 1050. La v�ritable magie du
       camouflage se trouve ici : il se souvient des paquets sortants
       r��crits afin de pouvoir r��crire les paquets entrants qui en sont
       la r�ponse.
    4. Netscape affiche la page.

   C'est � dire que du point de vue de slashdot.org, la connexion est
   r�alis�e de 1.2.3.4 (interface PPP du pare-feu), port 65000 vers
   207.218.152.131 (slashdot.org) port 80. Du point de vue de mamachine,
   la connexion est faite entre 192.168.1.100 (mamachine) port 1050, et
   207.218.152.131 (slashdot.org) port 80.

  R�seaux publics

   Dans ce sc�nario, votre r�seau personnel fait partie de l'Internet :
   les paquets peuvent passer sans avoir � changer de r�seau. Les
   adresses IP du r�seau interne doivent �tre assign�es en utilisant un
   bloc d'adresses IP, de mani�re � ce que le reste du r�seau sache
   comment vous envoyer des paquets. Ceci implique une connexion
   permanente.

   Dans ce r�le, le filtrage de paquets est utilis� pour restreindre les
   paquets qui peuvent �tre redirig�s entre votre r�seau et le reste de
   l'Internet, c�d pour restreindre le reste de l'Internet � acc�der
   uniquement au serveur web qui se trouve en interne.

   Exemple : autoriser l'acc�s web du r�seau priv� vers l'Internet.
    1. Votre r�seau interne dispose du bloc d'adresses IP que vous avez
       enregistr�, disons 1.2.3.*.
    2. Le pare-feu est configur� pour autoriser tout le trafic.
    3. Netscape est configur� pour se connecter directement.
    4. Le DNS doit �tre configur� correctement sur votre r�seau.
    5. Le pare-feu doit �tre la route par d�faut (passerelle) pour le
       r�seau priv�.

   Netscape sur mamachine lit http://slashdot.org.
    1. Netscape recherche le nom "slashdot.org", et obtient
       207.218.152.131. Il ouvre alors une connexion vers cette adresse
       IP, en utilisant le port local 1050, et demande la page au serveur
       web, port 80.
    2. Les paquets passent par votre pare-feu, comme ils passent par
       d'autres routeurs entre vous et slashdot.org.
    3. Netscape affiche la page.

   C'est � dire qu'il n'y a qu'une seule connexion : � partir de
   1.2.3.100 (mamachine) port 1050, vers 207.218.152.131 (slashdot.org)
   port 80.

  Services internes limit�s

   Il y a quelques trucs que vous pouvez utiliser pour autoriser
   l'Internet � acc�der � vos services internes, plut�t que de faire
   tourner vos services internes sur le pare-feu. Ils fonctionneront soit
   avec un proxy, soit avec une approche type camouflage pour les
   connexions externes.

   L'approche la plus simple est de faire tourner un "redirecteur", qui
   est un cache de pauvre, attendant une connexion sur un port donn�, et
   ouvrant une connexion sur un h�te et un port interne fix�, et copiant
   les donn�es entre les deux connexions. Un exemple de ceci est le
   programme "redir". Du point de vue de l'Internet, la connexion est
   faite sur votre pare-feu. Du point de vue de votre serveur interne, la
   connexion est faite par l'interface interne du pare-feu sur le
   serveur.

   Une autre approche (qui n�cessite un noyau 2.0 corrig� pour ipportfw,
   ou un noyau 2.1 ou sup�rieur) est d'utiliser la redirection des ports
   du noyau. Il effectue le m�me travail que "redir" d'une mani�re
   diff�rente : le noyau r��crit les paquets lorsqu'ils passent, en
   changeant leur adresse de destination et le port pour les faire
   pointer sur un port et un h�te interne. Du point de vue de l'Internet,
   la connexion est faite sur votre pare-feu. Du point de vue de votre
   serveur interne, une connexion directe est r�alis�e entre l'h�te
   Internet et votre serveur.

3.4 Pour plus d'informations sur le camouflage

   David Ranch a �crit un excellent howto tout neuf sur le camouflage,
   qui en grande partie recouvre ce howto. Vous pouvez le trouver sur
   http://www.ecst.csuchico.edu/~dranch/LINUX/index-LINUX.html

   J'esp�re pouvoir bient�t le trouver h�berg� sous les auspices du LDP
   (Linux Documentation Project), sur http://www.metalab.unc.edu/LDP.

   La page officielle du camouflage se trouve sur http://ipmasq.cjb.net.

4. Cha�nes de protection IP

   Cette section d�crit tout ce que vous avez r�ellement besoin de savoir
   pour construire un filtre de paquets adapt� � vos besoins.

4.1 Comment les paquets traversent les filtres

   Le noyau commence avec trois listes de r�gles : ces listes sont
   appell�es _cha�nes de protection_ ou juste _cha�nes_. Ces trois
   cha�nes sont appell�es _input_ (entr�e), _output_ (sortie) et _forward_
   (transmission). Lorsqu'un paquet arrive (disons, par une carte
   Ethernet), le noyau utilise la cha�ne input pour d�cider de son
   destin. S'il survit � ce passage, alors le noyau d�cide o� envoyer le
   paquet par la suite (ceci est appel� _routage_). S'il est destin� �
   une autre machine, il consulte alors la cha�ne de transmission. Enfin,
   juste avant que le paquet ne ressorte, le noyau consulte la cha�ne de
   sortie.

   Une cha�ne est une v�rification de _r�gles_. Chaque r�gle dit `si
   l'ent�te de ce paquet ressemble � ceci, alors voil� quoi faire de ce
   paquet'. Si la r�gle ne v�rifie pas le paquet, alors la r�gle suivante
   dans la cha�ne est consult�e. Enfin, s'il n'y a plus de r�gles �
   consulter, alors le noyau regarde la cha�ne _police_ pour d�cider ce
   qu'il doit faire. Dans un syst�me orient� s�curit�, cette police dit
   g�n�ralement au noyau de rejeter ou de refuser le paquet.

   Pour les fans de l'art ASCII, ceci montre le chemin complet d'un
   paquet arrivant � une machine.

        -----------------------------------------------------------------------
------
        |           ACCEPTER/                               interface lo |
        v           REDIRIGER                 _________                  |
--> S --> V --> ______ --> D --> ~~~~~~~~ -->| Cha�ne  |----> _______ -->
    o     a    |cha�ne|    e    {D�cision}   |transfert|     |Cha�ne |ACCEPTER
    m     l    |entr�e|    m    {Routage }   |_________| --->|sortie |
    m     i    |______|    a     ~~~~~~~~         |      | ->|_______|
    e     d       |        s        |             |      | |     |
    |     i       |        q        |            NON/    | |     |
    |     t       v        u        v           REJET    | |     v
    |     �      NON/      e    Processus                | |    NON/
    |     |     REJET      r      Local                  | |   REJET
    |     v                |        ---------------------- |
    v    NON               \ ------------------------------/
   NON

   Voici une description point par point de chaque partie :

   _Somme (checksum) :_
          C'est un test v�rifiant si le paquet n'a pas �t� corrompu d'une
          mani�re ou d'une autre. S'il l'a �t�, il est refus�.

   _Validit� (sanity) :_
          Il y a en fait un de ces tests sanitaires avant chaque cha�ne
          de protection, mais les cha�nes d'entr�e sont les plus
          importantes. Quelques paquets malform�s peuvent rendre confus
          le code de v�rification des r�gles, et ceux-ci sont refus�s ici
          (un message est envoy� au syslog si ceci arrive).

   _Cha�ne d'entr�e (input chain) :_
          C'est la premi�re cha�ne de protection qui teste le paquet. Si
          le verdict de la cha�ne n'est ni DENY ni REJECT, le paquet
          continue son chemin.

   _Demasquerade :_
          Si le paquet est une r�ponse � un paquet pr�c�demment masqu�,
          il est d�masqu�, et envoy� directement � la cha�ne de sortie.
          Si vous n'utilisez pas le masquage IP, vous pouvez mentalement
          supprimer ceci du diagramme.

   _D�cision routage (Routing decision) :_
          Le champ de destination est examin� par le code de routage,
          pour d�cider si le paquet doit aller vers un processus local
          (voir processus local plus bas) ou transmis � une machine
          distante (voyez les cha�nes de renvoi plus bas).

   _Processus local (Local process) :_
          Un processus tournant sur la machine peut recevoir des paquets
          apr�s l'�tape de d�cision de routage, et peut envoyer des
          paquets (qui passent par l'�tape de d�cision de routage, puis
          traversent la cha�ne de sortie).

   _Interface lo :_
          Si les paquets venant d'un processus local sont destin�s � un
          autre processus local, alors ils passeront par la cha�ne de
          sortie en utilisant l'interface lo, puis reviendront par la
          cha�ne d'entr�e en utilisant la m�me interface. L'interface lo
          est g�n�ralement nomm�e interface loopback.

   _local :_
          Si le paquet n'a pas �t� cr�� par un processus local, alors la
          cha�ne de transmission est v�rifi�e, sinon le paquet se dirige
          vers la cha�ne de sortie.

   _forward chain :_
          Cette cha�ne est travers�e par tout paquet qui tente de passer
          par cette machine vers une autre.

   _output chain :_
          Cette cha�ne est travers�e par tous les paquets juste avant
          qu'ils ne soient envoy�s � l'ext�rieur.

  Utiliser ipchains

   Tout d'abord, v�rifiez que vous avez la version d'ipchains � laquelle
   se r�f�re ce document :

$ ipchains --version
ipchains 1.3.9, 17-Mar-1999

   Notez que je recommande l'utilisation du 1.3.4 (qui ne dispose pas des
   options longues comme `--sport'), ou du 1.3.8 et suivants ; ils sont
   en effet tr�s stables.

   ipchains dispose d'une page de manuel plut�t bien d�taill�e (man
   ipchains), et si vous avez besoin de plus de d�tails en particulier,
   vous pouvez consulter l'interface de programmation (man 4 ipfw), ou le
   fichier net/ipv4/ip_fw.c dans les sources des noyaux 2.1.x, qui est
   (bien �videmment) la r�f�rence.

   Il y a �galement une carte de r�f�rence rapide par Scott Bronson dans
   le paquetage source, aux formats PostScript (TM) a4 et US letter.

   Il y a plusieurs choses diff�rentes que vous pouvez faire avec
   ipchains. Tout d'abord les op�rations servant � g�rer les cha�nes
   enti�res. Vous commencez avec trois cha�nes int�gr�es input, output et
   forward que vous ne pouvez effacer.

    1. Cr�er une nouvelle cha�ne (-N) ;
    2. Supprimer une cha�ne vide (-X) ;
    3. Changer la police d'une cha�ne int�gr�e (-P) ;
    4. Lister les r�gles d'une cha�ne (-L) ;
    5. Supprimer les r�gles d'une cha�ne (-F) ;
    6. Mettre � z�ro les compteurs de paquets et d'octets sur toutes les
       r�gles d'une cha�ne (-Z).

   Il y a plusieurs moyens pour manipuler les r�gles � l'int�rieur d'une
   cha�ne :

    1. Ajouter une nouvelle r�gle � une cha�ne (-A) ;
    2. Ins�rer une nouvelle r�gle � une position quelconque de la cha�ne
       (-I) ;
    3. Remplacer une r�gle � une position quelconque de la cha�ne (-R) ;
    4. Supprimer une r�gle � une position quelconque de la cha�ne (-D) ;
    5. Supprimer la premi�re r�gle v�rifi�e dans la cha�ne (-D).

   Il y a quelques op�rations pour le masquage, qui se trouvent dans
   ipchains dans l'attente d'un bon endroit pour les mettre :

    1. Lister les connexions masqu�es actuelles (-M -L) ;
    2. Configurer les valeurs de timeout (-M -S) (mais voyez
       id="no-timeout" name="Je ne peux pas modifier les temps d'attente
       du camouflage !">).

   La fonction finale (et peut-�tre la plus utile) vous permet de
   v�rifier ce qui arriverait � un paquet donn� s'il avait � traverser
   une cha�ne donn�e.

  Op�rations sur une r�gle simple

   Ceci est le B.A.-Ba d'ipchains ; manipuler des r�gles. Plus
   g�n�ralement, vous utiliserez probablement les commandes d'ajout (-A)
   et de suppression (-D). Les autres (-I pour l'insertion et -R pour le
   remplacement) sont des simples extensions de ces concepts.

   Chaque r�gle sp�ficie un ensemble de conditions que le paquet doit
   suivre, et ce qu'il faut faire s'il les suit (une "destination"). Par
   exemple, vous pouvez vouloir refuser tous les paquets ICMP venant de
   l'adresse IP 127.0.0.1. Donc, dans ce cas nos conditions sont que le
   protocole doit �tre ICMP et que l'adresse source doit �tre 127.0.0.1.
   Notre destination est "DENY" (rejet).

   127.0.0.1 est l'interface "loopback", que vous avez m�me si vous
   n'avez de connexion r�seau r�elle. Vous pouvez utiliser le programme
   "ping" pour g�n�rer de tels paquets (il envoie simplement un paquet
   ICMP de type 8 (requ�te d'�cho) � qui tous les h�tes coop�ratifs
   doivent obligeamment r�pondre avec un paquet ICMP de type 0 (r�ponse �
   un �cho)). Ceci le rend utile pour les tests.

# ping -c 1 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.2 ms

--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.2/0.2/0.2 ms
# ipchains -A input -s 127.0.0.1 -p icmp -j DENY
# ping -c 1 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes

--- 127.0.0.1 ping statistics ---
1 packets transmitted, 0 packets received, 100% packet loss
#

   Vous pouvez voir ici que le premier ping r�ussit (le "-c 1" dit � ping
   de n'envoyer qu'un seul paquet).

   Puis nous ajoutons (-A) � la cha�ne d'entr�e ("input"), une r�gle
   sp�cifiant que tous les paquets provenant de 127.0.0.1 ("-s
   127.0.0.1") avec le protocole ICMP ("-p ICMP") doivent �tre refus�s
   ("-j DENY").

   Ensuite nous testons notre r�gle, en utilisant le second ping. Il y
   aura une pause avant que le programme ne se termine, attendant une
   r�ponse qui ne viendra jamais.

   Nous pouvons supprimer la r�gle avec l'un des deux moyens. Tout
   d'abord, puisque nous savons que c'est la seule r�gle de la cha�ne
   d'entr�e, nous pouvons utiliser une suppression num�rot�e, comme
   dans :

        # ipchains -D input 1
        #

   Pour supprimer la r�gle num�ro 1 de la cha�ne d'entr�e.

   La deuxi�me possibilit� est de copier la commande -A, mais en
   rempla�ant le -A par -D. C'est utile lorsque vous avez une cha�ne
   complexe de r�gles et que vous ne voulez pas avoir � les compter afin
   de savoir que c'est la r�gle 37 que vous voulez supprimer. Dans ce
   cas, nous pouvons utiliser :

        # ipchains -D input -s 127.0.0.1 -p icmp -j DENY
        #

   La syntaxe de -D doit avoir exactement les m�mes options que la
   commande -A (ou -I ou -R). S'il y a des r�gles multiples identiques
   dans la m�me cha�ne, seule la premi�re sera supprim�e.

  Sp�cifications du filtrage

   Nous avons vu l'utilisation de "-p" pour sp�cifier le protocole, et de
   "-s" pour sp�cifier l'adresse souce, mais il y a d'autres options que
   nous pouvons utiliser pour sp�cifier les caract�ristiques des paquets.
   Ce qui suit en est une description exhaustive.

  Sp�cifier les adresses IP source et destination

   Les adresses IP source (-s) et destination (-d) peuvent �tre
   sp�cifi�es de quatre fa�ons diff�rentes. La fa�on la plus classique
   est d'utiliser le nom complet, comme "localhost" ou "www.linuxhq.com".
   La deuxi�me m�thode est de sp�cifier l'adresse IP, comme "127.0.0.1".

   Les deux autres m�thodes permettent la sp�cification d'un groupe
   d'adresses IP, comme "199.95.207.0/24" ou
   "199.95.207.0/255.255.255.0". Toutes deux sp�cifient toutes les
   adresses IP de 192.95.207.0 � 192.95.207.255, incluse ; les chiffres
   suivant le "/" indiquent quelles parties de l'adresse IP sont
   significatives. "/32" ou "/255.255.255.255" sont les d�fauts
   (v�rifient toutes les adresses IP). Pour ne sp�cifier aucune adresse
   IP, "/0" peut �tre utilis�, par exemple :

        # ipchains -A input -s 0/0 -j DENY
        #

   Ceci est rarement utilis�, car l'effet produit par cette ligne de
   commande est le m�me que celui obtenu en ne sp�cifiant pas l'option
   "-s".

  Sp�cifier l'inversion

   De nombreuses options, incluant les options "-s" et "-d" peuvent avoir
   leurs propres arguments pr�c�d�s par "!" (prononc� "non") pour ne
   v�rifier que les adresses n'�tant PAS �quivalentes � celles donn�es.
   Par exemple, "-s ! localhost" v�rifiera tout paquet ne provenant PAS
   de localhost.

  Sp�cifier le protocole

   Le protocole peut �tre sp�cifi� en utilisant l'option "-p". Le
   protocole peut �tre soit un nombre (si vous connaissez les valeurs
   num�riques des protocoles pour IP), soit le nom des cas sp�ciaux
   parmis "TCP", "UDP" ou "ICMP". La casse n'est pas prise en compte,
   donc "tcp" fonctionne aussi bien que "TCP".

   Le nom du protocole peut �tre pr�fix� par un "!", pour l'inverser,
   comme dans "-p ! TCP".

  Sp�cifier les ports UDP et TCP

   Pour les cas sp�ciaux o� un protocole TCP ou UDP est sp�cifi�, il peut
   y avoir un argument suppl�mentaire indiquant le port TCP ou UDP, ou un
   intervalle (inclusif) de ports (mais voyez Utiliser les fragments plus
   bas). Un intervalle est repr�sent� en utilisant le caract�re ":", par
   exemple "6000:6010", qui couvre 11 ports, du 6000 au 6010, de mani�re
   inclusive. Si la borne inf�rieure est omise, alors elle se met par
   d�faut � 0. Si la borne sup�rieure est omise, elle est consid�r�e par
   d�faut comme �tant 65535. Ainsi, pour sp�cifier les connexions TCP
   venant des ports inf�rieurs � 1024, la syntaxe pourrait �tre "-p TCP
   -s 0.0.0.0/0 :1023". Les num�ros de ports peuvent �tre sp�cifi�s par
   leur nom, par exemple "www".

   Notez que la sp�cification du port peut �tre pr�c�d�e par un "!", qui
   l'inverse. Ainsi, pour sp�cifier tous les paquets TCP, SAUF un paquet
   WWW, vous pourriez sp�cifier
-p TCP -d 0.0.0.0/0 ! www

   Il est important de r�aliser que sp�cifier

-p TCP -d ! 192.168.1.1 www

   est tr�s diff�rent de
-p TCP -d 192.168.1.1 ! www

   La premi�re ligne sp�cifie tout paquet TCP dirig� vers le port WWW de
   n'importe quelle machine sauf 192.168.1.1. La seconde sp�cifie toute
   connexion TCP vers tout port de 192.168.1.1 sauf le port WWW.

   Enfin, le cas suivant sp�cifie tout, sauf le port WWW et la machine
   192.168.1.1 :
-p TCP -d ! 192.168.1.1 ! www

  Sp�cifier les types et codes ICMP

   ICMP permet aussi un argument optionnel, mais comme l'ICMP ne dispose
   pas de ports (ICMP a un _type_ et un _code_), ils ont une
   signification diff�rente.

   Vous pouvez les sp�cifier par les noms ICMP (utilisez ipchains -h icmp
   pour lister les noms disponibles) apr�s l'option "-s", ou en tant que
   type et code ICMP num�rique, o� le type suit l'option "-s" et le code
   suit l'option "-d".

   Les noms ICMP sont relativement longs : vous avez uniquement besoin de
   suffisamment de lettres pour rendre chaque nom distinct des autres.

   Voici un petit r�sum� de quelques-uns des paquets ICMP les plus
   communs :

Num�ro  Nom                     Utilis� par

0       echo-reply              ping
3       destination-unreachable Tout trafic TCP/UDP
5       redirect                Routage, si pas de d�mon de routage
8       echo-request            ping
11      time-exceeded           traceroute

   Notez que les noms ICMP ne peuvent �tre pr�c�d�s de "!" pour le
   moment.

   NE PAS, SURTOUT NE PAS bloquer tous les paquets ICMP de type 3 ! (voir
   Paquets ICMP plus bas).

  Sp�cifier une interface

   L'option "-i" sp�cifie le nom d'une _interface_ � v�rifier. Une
   interface est le p�riph�rique physique d'o� vient le paquet, ou bien
   par o� sort ce paquet. Vous pouvez utiliser la commande ifconfig pour
   lister les interfaces qui sont "up" (c�d en fonctionnement).

   L'interface pour les paquets entrants (ie. les paquets traversant la
   cha�ne d'entr�e) est consid�r�e comme �tant l'interface d'o� les
   paquets proviennent. Logiquement, l'interface des paquets sortants
   (les paquets traversant la cha�ne de sortie) est l'interface o� ils
   vont. L'interface pour les paquets traversant la cha�ne de
   retransmission est �galement l'interface par laquelle ils sortiront ;
   une d�cision plut�t arbitraire � mon sens.

   Il est parfaitement autoris� de sp�cifier une interface qui n'existe
   pas au moment de la sp�cification ; la r�gle ne v�rifiera rien jusqu'�
   ce que l'interface soit mise en place. Ceci est extr�mement utile pour
   les connexions ppp intermittentes (habituellement les interfaces du
   type ppp0) et autres.

   En tant que cas sp�cial, un nom d'interface se finissant par un "+"
   v�rifiera toutes les interfaces (qu'elles existent � ce moment ou non)
   qui commencent par cette cha�ne. Par exemple, pour sp�cifier une r�gle
   qui v�rifiera toutes les interfaces PPP, l'option -i ppp+ pourrait
   �tre utilis�e.

   Le nom d'interface peut �tre pr�c�d� par un "!" pour v�rifier un
   paquet qui ne v�rifie PAS l'(les) interface(s) sp�cifi�e(s).

  Sp�cifier uniquement des paquets TCP SYN

   Il est parfois utile d'autoriser des connexions TCP dans une
   direction, mais pas dans l'autre. Par exemple, vous pouvez vouloir
   autoriser les connexions vers un serveur WWW externe, mais pas les
   connexions venant de ce serveur.

   L'approche na�ve serait de bloquer les paquets TCP venant du serveur.
   Malheureusement, les connexions TCP utilisent des paquets circulant
   dans les deux sens pour fonctionner.

   La solution est de bloquer uniquement les paquets utilis�s pour la
   demande d'une connexion. Ces paquets sont nomm�s paquets _SYN_ (ok,
   techniquement ce sont des paquets avec le drapeau SYN mis, et les
   drapeaux FIN et ACK supprim�s, mais nous les appellerons des paquets
   SYN). En interdisant seulement ces paquets, nous pouvons stopper toute
   demande de connexion dans l'oeuf.

   L'option "-y" est utilis�e pour cel� : elle est valide seulement pour
   les r�gles qui sp�cifient TCP comme leur protocole. Par exemple, pour
   sp�cifier une demande de connexion TCP venant de 192.168.1.1 :
-p TCP -s 192.168.1.1 -y

   Une fois de plus, ce drapeau peut �tre invers� en le faisant pr�c�der
   par un "!", qui v�rifie tout paquet autre que ceux d'initialisation de
   connexion.

  Utiliser les fragments

   Parfois, un paquet est trop large pour rentrer dans le c�ble en une
   seule fois. Lorsque ceci arrive, le paquet est divis� en _fragments_,
   et envoy� en plusieurs paquets. Le receveur r�assemble les fragments
   pour reconstruire le paquet en entier.

   Le probl�me avec les fragments se situe dans certaines des
   sp�cifications list�es ci-dessus (en particulier, le port source, le
   port de destination, le type et le code ICMP, ou le drapeau TCP SYN),
   qui demandent au noyau de jeter un regard sur le d�but du paquet, qui
   est contenu seulement dans le premier fragment.

   Si votre machine est la seule connexion vers un r�seau ext�rieur, vous
   pouvez demander � votre noyau Linux de r�assembler tous les fragments
   qui passent par lui, en compilant le noyau avec l'option IP: always
   defragment mise � "Y". Ceci �vite proprement la plupart des probl�mes.

   D'autre part, il est important de comprendre comment les fragments
   sont trait�s par les r�gles de filtrage. Toute r�gle de filtrage qui
   demande des informations dont nous ne disposons pas ne v�rifiera
   _rien_. Ceci signifie que le premier fragment est trait� comme tout
   autre paquet. Le deuxi�me fragment et les suivants ne le seront pas.
   Ainsi, une r�gle -p TCP -s 192.168.1.1 www (sp�cifiant un port source
   de "www" ne v�rifiera jamais un fragment (autre que le premier
   fragment). La r�gle oppos�e -p TCP -s 192.168.1.1 ! www ne
   fonctionnera pas non plus.

   Cependant, vous pouvez sp�cifier une r�gle sp�ciale pour le deuxi�me
   fragment et les suivants, en utilisant l'option "-f". �videmment, il
   est ill�gal de sp�cifier un port TCP ou UDP, un type ou un code ICMP,
   ou un drapeau TCP SYN dans une r�gle de fragment.

   Il est �galement autoris� de sp�cifier une r�gle qui ne s'applique
   _pas_ au deuxi�me fragment et aux suivants, en pla�ant un "!" avant le
   "-f".

   Habituellement, il est consid�r� comme s�r de laisser passer le
   deuxi�me fragment et les suivants, puisque le filtrage s'effectuera
   sur le premier fragment, et pr�viendra donc le r�assemblage sur la
   machine cible. Cependant, des bogues, connus, permettent de crasher
   des machines en envoyant de simples fragments. � vous de voir.

   � noter pour les gourous r�seau : les paquets malform�s (TCP, UDP et
   paquets ICMP trop courts pour que le code pare-feu puisse lire les
   ports ou les types et codes ICMP) sont �galement trait�s comme des
   fragments. Seuls les fragments TCP d�butant en position 8 sont
   supprim�s explicitement par le code pare-feu (un message doit
   appara�tre dans le syslog si cel� arrive).

   Par exemple, la r�gle suivante supprimera tout fragment allant sur
   192.168.1.1 :


# ipchains -A output -f -d 192.168.1.1 -j DENY
#

  Effets de bord du filtrage

   OK, maintenant nous connaissons tous les moyens pour v�rifier un
   paquet en utilisant une r�gle. Si un paquet v�rifie une r�gle, les
   choses suivantes arrivent :

    1. Le compteur d'octets de cette r�gle est augment� de la taille de
       ce paquet (ent�te et autres) ;
    2. Le compteur de paquets de cette r�gle est incr�ment� ;
    3. Si la r�gle le demande, le paquet est enregistr� ;
    4. Si la r�gle le demande, le champ "Type Of Service" du paquet est
       modifi� ;
    5. Si la r�gle le demande, le paquet est marqu� (sauf dans la s�rie
       des noyaux 2.0) ;
    6. La destination de la r�gle est examin�e afin de d�cider ce que
       nous ferons ensuite du paquet.

   Pour la diversit�, je d�taillerai ceux-ci en ordre d'importance.

  Sp�cifier une destination

   Une _destination_ dit au noyau ce qu'il doit faire d'un paquet qui
   v�rifie une r�gle. ipchains utilise "-j" (penser � "jump-to") pour la
   sp�cification de la destination. Le nom de la cible doit comporter
   moins de 8 caract�res, et la casse intervient : "RETOUR" et "retour"
   sont totalement diff�rents.

   Le cas le plus simple est lorsqu'il n'y a pas de destination
   sp�cifi�e. Ce type de r�gle (souvent appell�e r�gle de "comptage") est
   utile pour simplement compter un certain type de paquet. Que cette
   r�gle soit v�rifi�e ou non, le noyau examine simplement la r�gle
   suivante dans la cha�ne. Par exemple, pour compter le nombre de
   paquets venant de 192.168.1.1, nous pouvons faire ceci :

# ipchains -A input -s 192.168.1.1
#

   (En utilisant "ipchains -L -v" nous pouvons voir les compteurs de
   paquets et d'octets associ�s � chaque r�gle).

   Il y a six destinations sp�ciales. Les trois premi�res, ACCEPT, REJECT
   et DENY sont relativement simples. ACCEPT autorise le passage du
   paquet. DENY supprime le paquet comme s'il n'avait jamais �t� re�u.
   REJECT supprime le paquet, mais (si ce n'est pas un paquet ICMP)
   g�n�re une r�ponse ICMP vers la source pour lui dire que la
   destination n'est pas accessible.

   La suivante, MASQ dit au noyau de camoufler le paquet. Pour que ceci
   fonctionne, votre noyau doit �tre compil� avec le camouflage IP
   int�gr�. Pour les d�tails sur ceci, voyez le Masquerading-HOWTO et
   l'annexe Diff�rences entre ipchains et ipfwadm. Cette destination est
   valide uniquement pour les paquets qui traversent la cha�ne forward.

   L'autre destination majeure sp�ciale est REDIRECT qui demande au noyau
   d'envoyer un paquet vers un port local au lieu de l� o� il �tait
   destin�. Ceci peut �tre sp�cifi� uniquement pour les r�gles sp�cifiant
   TCP ou UDP en tant que protocole. Optionnellement, un port (nom ou
   num�ro) peut �tre sp�cifi� apr�s "-j REDIRECT" qui redirigera la
   paquet vers ce port particulier, m�me si celui-ci �tait dirig� vers un
   autre port. Cette destination est valide uniquement pour les paquets
   traversant la cha�ne input.

   La derni�re destination sp�ciale est la RETURN qui est identique � une
   terminaison imm�diate de la cha�ne (voir Choisir une police plus bas).

   Toute autre destination indique une cha�ne d�finie par l'utilisateur
   (d�crite dans Op�rations sur une cha�ne enti�re plus bas). Le paquet
   traversera tout d'abord les r�gles de cette cha�ne. Si cette cha�ne ne
   d�cide pas du destin du paquet, lorsque la travers�e de cette cha�ne
   sera achev�e, la travers�e reprendra sur la r�gle suivante de la
   cha�ne courante.

   Il est temps de faire encore un peu d'art ASCII. Consid�rons deux
   (�tranges) cha�nes : input (la cha�ne int�gr�e) et Test (une cha�ne
   d�finie par l'utilisateur).

              `input'                          `Test'
        -----------------------------    -----------------------------
        | R�gle1: -p ICMP -j REJECT |    | R�gle1: -s 192.168.1.1    |
        |---------------------------|    |---------------------------|
        | R�gle2: -p TCP -j Test    |    | R�gle2: -d 192.168.1.1    |
        |---------------------------|    -----------------------------
        | R�gle3: -p UDP -j DENY    |
        -----------------------------

   Consid�rons un paquet TCP venant de 192.168.1.1, allant vers 1.2.3.4.
   Il p�n�tre dans la cha�ne input, et est test� par la R�gle1 - pas de
   correspondance. La R�gle2 correspond, et sa destination est Test, donc
   la r�gle suivante � examiner est le d�but de Test. La R�gle1 de Test
   correspond, mais ne sp�cifie pas de destination, donc la r�gle
   suivante est examin�e (R�gle2). Elle ne correspond pas, nous avons
   donc atteint la fin de la cha�ne. Nous retournons alors � la cha�ne
   input, dont nous avons juste examin� la R�gle2, et nous examinons
   alors la R�gle3, qui ne correspond pas non plus.

   Le chemin suivi par le paquet est donc le suivant :
                                v    __________________________
         `entr�e'               |   /    `Test'                v
        ------------------------|--/    -----------------------|----
        | R�gle1                | /|    | R�gle1               |   |
        |-----------------------|/-|    |----------------------|---|
        | R�gle2                /  |    | R�gle2               |   |
        |--------------------------|    -----------------------v----
        | R�gle3                /--+---------------------------/
        ------------------------|---
                                v

   Voyez la section Comment organiser vos r�gles pare-feu pour les moyens
   d'utiliser efficacement les cha�nes d�finies par l'utilisateur.

  Enregistrement des paquets

   C'est un effet de bord que la v�rification d'une r�gle peut avoir ;
   vous pouvez enregistrer les paquets v�rifi�s en utilisant l'option
   "-l". Vous n'aurez g�n�ralement pas besoin de ceci pour les paquets
   habituels, mais ce peut �tre une option tr�s utile si vous d�sirez
   �tre tenu au courant des �v�nements exceptionnels.

   Le noyau enregistre cette information de la mani�re suivante :

Packet log: input DENY eth0 PROTO=17 192.168.2.1:53 192.168.1.1:1025
  L=34 S=0x00 I=18 F=0x0000 T=254

   Ce message d'information est pr�vu pour �tre concis, et contient des
   informations techniques qui ne sont utiles qu'aux gourous r�seau, mais
   qui peuvent n�anmoins �tre int�ressantes pour le commun des mortels.
   Il se d�compose de la fa�on suivante :

    1. `input' est la cha�ne qui contenait la r�gle correspondant au
       paquet, et qui a caus� l'apparition du message.
    2. `DENY' est ce que la r�gle a dit au paquet de faire. Si ceci est
       un `-' alors la r�gle n'a pas du tout affect� le paquet (une r�gle
       de comptage).
    3. `eth0' est le nom de l'interface. Puisque ceci �tait la cha�ne
       d'entr�e, cel� signifie que le paquet vient de `eth0'.
    4. `PROTO=17' signifie que le paquet �tait de protocole 17. Une liste
       des num�ros de protocoles est donn�e dans `/etc/protocols'. Les
       plus communs sont 1 (ICMP), 6 (TCP) et 17 (UDP).
    5. `192.168.2.1' signifie que l'adresse IP source du paquet �tait
       192.168.2.1.
    6. `:53' signifie que le port source �tait le port 53. En regardant
       dans `/etc/services' on voit que ceci est le port `domain' (c�d
       que c'est probablement une r�ponse DNS). Pour UDP et TCP, ce
       num�ro est le port source. Pour ICMP, c'est le type ICMP. Pour les
       autres, ce sera 65535.
    7. `192.168.1.1' est l'adresse IP de destination.
    8. `:1025' signifie que le port de destination �tait 1025. Pour UDP
       et TCP, ce num�ro est le port de destination. Pour ICMP, il s'agit
       du code ICMP. Pour les autres, ce sera 65535.
    9. `L=34' signifie que le paquet avait une longueur totale de 34
       octets.
   10. `S=0x00' est le champ "Type Of Service" (divisez par 4 pour
       obtenir le Type of Service utilis� par ipchains).
   11. `I=18' est l'identificateur de l'IP.
   12. `F=0x0000' est l'offset du fragment 16 bits, avec les options. Une
       valeur d�butant par `0x4' ou `0x5' signifie que le bit "Don't
       Fragment" (ne pas fragmenter) est mis. `0x2' ou `0x3' signifie que
       le bit "More Fragments" (des fragments suivent) est mis ; attendez
       vous � recevoir plus de fragments apr�s. Le reste du nombre est le
       d�calage de ce fragment, divis� par 8.
   13. `T=254' est la dur�e de vie du paquet. On soustrait 1 � cette
       valeur � chaque saut (hop), et on d�bute g�n�ralement � 15 ou 255.
   14. `(#5)' il peut y avoir un num�ro entre parenth�ses sur les noyaux
       les plus r�cents (peut-�tre apr�s le 2.2.9). Il s'agit du num�ro
       de la r�gle qui a caus� l'enregistrement du paquet.

   Sur les syst�mes Linux standards, la sortie du noyau est captur�e par
   klogd (d�mon d'information du noyau) qui le repasse � syslogd (d�mon
   d'information du syst�me). Le fichier `/etc/syslog.conf' contr�le le
   comportement de syslogd, en sp�cifiant une destination pour chaque
   "partie" (dans notre cas, la partie est le "noyau") et un "niveau"
   (pour ipchains, le niveau utilis� est "info").

   Par exemple, mon /etc/syslog.conf (Debian) contient deux lignes qui
   v�rifient `kern.info' :

kern.*                          -/var/log/kern.log
*.=info;*.=notice;*.=warn;\
        auth,authpriv.none;\
        cron,daemon.none;\
        mail,news.none          -/var/log/messages

   Ceci signifie que les messages sont dupliqu�s dans `/var/log/kern.log'
   et `/var/log/messages'. Pour plus de d�tails, voyez `man syslog.conf'.

  Manipuler le type de service

   Il y a quatre bits utilis�s par eux-m�mes dans l'ent�te IP, appel�s
   les bits de _Type of Service_ (TOS). Ceux-ci ont pour effet de
   modifier la mani�re dont les paquets sont trait�s : les quatres bits
   sont "Minimum Delay", "Maximum Throughput", "Maximum Reliability" et
   "Minimum Cost". Un seul de ces bits est autoris� � �tre plac�. Rob van
   Nieuwkerk, l'auteur du code de gestion du TOS, les d�crit comme suit :

     Tout sp�cialement, le "Minimum Delay" est important pour moi. Je le
     mets pour les paquets "interactifs" dans mon routeur principal
     (Linux). Je suis derri�re une connexion modem 33,6k. Linux rend les
     paquets prioritaires en 3 queues. De cette fa�on, j'obtiens des
     performances interactives acceptables tout en faisant de gros
     transferts de fichiers en m�me temps. (Cel� pourrait m�me �tre
     encore mieux s'il n'y avait pas de grosse queue dans le pilote
     s�rie, mais le temps de latence est maintenu en dessous des 1,5
     secondes pour l'instant).

   Note : bien entendu, vous n'avez aucun contr�le sur les paquets
   arrivants ; vous pouvez seulement contr�ler la priorit� des paquets
   qui quittent votre machine. Pour n�gocier les priorit�s de chaque
   c�t�, un protocole comme RSVP (dont je ne connais rien) doit �tre
   utilis�.

   L'utilisation la plus commune est de placer les connexions telnet et
   contr�le du ftp en "Minimum Delay" et les donn�es FTP en "Maximum
   Throughput". Ceci peut �tre fait de la mani�re suivante :

ipchains -A output -p tcp -d 0.0.0.0/0 telnet -t 0x01 0x10
ipchains -A output -p tcp -d 0.0.0.0/0 ftp -t 0x01 0x10
ipchains -A output -p tcp -s 0.0.0.0/0 ftp-data -t 0x01 0x08

   L'option "-t" prend deux param�tres suppl�mentaires, tous les deux en
   hexad�cimal. Ceci permet un contr�le complexe des bits du TOS : le
   premier masque est AND� avec le TOS actuel du paquet, et ensuite le
   deuxi�me masque est XOR� avec lui. Si cel� est trop confus, utilisez
   simplement le tableau suivant :

Nom du TOS              Valeur          Utilisations typiques

Minimum Delay           0x01 0x10       ftp, telnet
Maximum Throughput      0x01 0x08       ftp-data
Maximum Reliability     0x01 0x04       snmp
Minimum Cost            0x01 0x02       nntp

   Andi Kleen revient sur ce point pour ce qui suit (mod�r�ment �dit�
   pour la post�rit�) :

     Peut-�tre serait-il utile d'ajouter une r�f�rence au param�te
     txqueuelen de ifconfig dans la discussion sur les bits TOS. La
     longueur par d�faut de la queue d'un p�riph�rique est r�gl�e pour
     les cartes ethernet, sur les modems elle est trop longue et rend le
     fonctionnement de la planification 3 bandes (qui place la queue en
     fonction du TOS) sous-optimal. C'est donc une bonne id�e de le
     configurer avec une valeur comprise entre 4 et 10 sur un modem ou
     un lien RNIS b simple : sur les p�riph�riques rapide une queue plus
     longue est n�cessaire. C'est un probl�me des 2.0 et 2.1, mais dans
     le 2.1 c'est une option de ifconfig (dans les nettools r�cents),
     alors que dans le 2.0 il n�cessite une modification des sources des
     pilotes du p�riph�rique pour le changer.

   Ainsi, pour voir les b�n�fices maximum des changements de TOS pour les
   liaisons modem PPP, ajoutez un `ifconfig $1 txqueuelen' dans votre
   script /etc/ppp/ip-up. Le nombre � utiliser d�pend de la vitesse du
   modem et de la taille du tampon du modem ; voici � nouveau les id�es
   d'Andi :

     La meilleure valeur pour une configuration donn�e n�cessite de
     l'exp�rimentation. Si les queues sont trop courtes sur le routeur,
     alors les paquets sauteront. Bien s�r, on peut toujours gagner m�me
     sans changer le TOS, c'est juste que le changement du TOS aide �
     gagner les b�n�fices sur les programmes non coop�ratifs (mais tous
     les programmes Linux standards sont coop�ratifs).

  Marquage d'un paquet

   Ceci permet des interactions complexes et puissantes avec la nouvelle
   impl�mentation de Quality of Service d'Alexey Kuznetsov, ainsi que de
   la redirection bas�e sur le marquage dans la derni�re s�rie de noyaux
   2.1. Des d�tails suppl�mentaires vont arriver puisque nous l'avons
   dans la main. Cette option est toutefois ignor�e dans la s�rie des
   noyaux 2.0.

  Op�rations sur une cha�ne enti�re

   Une des options les plus utiles d'ipchains est la possibilit� de
   regrouper des r�gles dans des cha�nes. Vous pouvez appeller les
   cha�nes de la mani�re qui vous pla�t, tant que les noms ne sont pas
   ceux des cha�nes int�gr�es (input, output et forward) ou des
   destinations ((MASQ, REDIRECT, ACCEPT, DENY, REJECT ou RETURN). Je
   sugg�re d'�viter compl�tement les noms en majuscules, car je pourrais
   les utiliser pour des extensions futures. Le nom de la cha�ne ne doit
   pas d�passer 8 caract�res.

  Cr�er une nouvelle cha�ne

   Cr�ons une nouvelle cha�ne. �tant un type imaginatif, je l'appellerai
   test.

# ipchains -N test
#

   C'est aussi simple. Maintenant vous pouvez y rajouter des r�gles,
   comme d�taill� ci-dessus.

  Supprimer une cha�ne

   La suppression d'une cha�ne est tout aussi simple.

# ipchains -X test
#

   Pourquoi "-X" ? Eh bien, toutes les bonnes lettres �taient d�j�
   prises.

   Il y a quelques restrictions � la suppression des cha�nes : elles
   doivent �tre vides (voir Vider une cha�ne plus bas) et elles ne
   doivent pas �tre la destination d'une quelconque r�gle. Vous ne pouvez
   pas supprimer les cha�nes int�gr�es.

  Vider une cha�ne

   Il y a un moyen simple de vider toutes les r�gles d'une cha�ne, en
   utilisant la commande "-F".

# ipchains -F forward
#

   Si vous ne sp�cifiez pas de cha�ne, alors _toutes_ les cha�nes seront
   vid�es.

  Afficher une cha�ne

   Vous pouvez afficher toutes les r�gles d'une cha�ne en utilisant la
   commande "-L".

# ipchains -L input
Chain input (refcnt = 1): (policy ACCEPT)
target     prot opt    source                destination           ports
ACCEPT     icmp -----  anywhere              anywhere              any
# ipchains -L test
Chain test (refcnt = 0):
target     prot opt    source                destination           ports
DENY       icmp -----  localnet/24           anywhere              any
#

   La "refcnt" list�e pour test est le nombre de r�gles qui ont test
   comme destination. Ceci doit �tre �gal � z�ro (et la cha�ne doit �tre
   vide) avant que cette cha�ne ne puisse �tre supprim�e.

   Si le nom de la cha�ne est omis, toutes les cha�nes sont list�es, m�me
   les cha�nes vides.

   Il y a trois options qui peuvent accompagner "-L". L'option "-n"
   (num�rique) est tr�s utile et emp�che ipchains d'essayer de v�rifier
   les adresses IP, ce qui (si vous utilisez DNS comme la plupart des
   gens) causera de longs d�lais si votre DNS n'est pas configur�
   proprement, ou si vous filtrez les requ�tes DNS. Ceci affichera
   �galement les ports par leur num�ro plut�t que par leur nom.

   L'option "-v" vous montrera tous les d�tails des r�gles, comme les
   compteurs de paquets et d'octets, les masques de TOS, l'interface, et
   les marques de paquets. Autrement, ces valeurs seront omises. Par
   exemple :

# ipchains -v -L input
Chain input (refcnt = 1): (policy ACCEPT)
 pkts bytes target prot opt   tosa tosx ifname  mark  source    destination  po
rts
   10   840 ACCEPT icmp ----- 0xFF 0x00 lo            anywhere  anywhere     an
y

   Notez que les compteurs de paquets et d'octets sont affich�s en
   utilisant les suffixes "K", "M" ou "G" pour 1000, 1.000.000 et
   1.000.000.000, respectivement. En utilisant �galement l'option "-x"
   (d�veloppe les nombres), ipchains affichera les nombres en entier,
   quelque soit leur taille.

  Remise � z�ro des compteurs

   Il est parfois utile de pouvoir remettre � z�ro les compteurs. Ceci
   peut �tre fait par l'option "-Z" (compteurs � Z�ro). Par exemple :

# ipchains -v -L input
Chain input (refcnt = 1): (policy ACCEPT)
 pkts bytes target prot opt   tosa tosx ifname  mark  source    destination  po
rts
   10   840 ACCEPT icmp ----- 0xFF 0x00 lo            anywhere  anywhere     an
y
# ipchains -Z input
# ipchains -v -L input
Chain input (refcnt = 1): (policy ACCEPT)
 pkts bytes target prot opt   tosa tosx ifname  mark  source      destination
 ports
    0     0 ACCEPT icmp ----- 0xFF 0x00 lo            anywhere    anywhere
 any
#

   Le probl�me de cette approche est que parfois vous voudrez conna�tre
   les valeurs du compteur tout de suite apr�s la remise � z�ro. Dans
   l'exemple ci-dessus, quelques paquets peuvent passer entre les
   commandes "-L" et "-Z". Pour cette raison, vous pouvez utiliser le
   "-L" et le "-Z" _ensemble_, pour remettre � z�ro les compteurs tout en
   les lisant. Malheureusement, si vous fa�tes ceci, vous ne pouvez
   op�rer sur une seule cha�ne : vous devrez lister et remettre � z�ro
   toutes les cha�nes en une seule fois.

# ipchains -L -v -Z
Chain input (policy ACCEPT):
 pkts bytes target prot opt   tosa tosx ifname  mark  source      destination
 ports
   10   840 ACCEPT icmp ----- 0xFF 0x00 lo            anywhere    anywhere
 any

Chain forward (refcnt = 1): (policy ACCEPT)
Chain output (refcnt = 1): (policy ACCEPT)
Chain test (refcnt = 0):
    0     0 DENY   icmp ----- 0xFF 0x00  ppp0         localnet/24 anywhere
 any
# ipchains -L -v
Chain input (policy ACCEPT):
 pkts bytes target prot opt   tosa tosx ifname  mark  source      destination
 ports
   10   840 ACCEPT icmp ----- 0xFF 0x00 lo            anywhere    anywhere
 any

Chain forward (refcnt = 1): (policy ACCEPT)
Chain output (refcnt = 1): (policy ACCEPT)
Chain test (refcnt = 0):
    0     0 DENY   icmp ----- 0xFF 0x00 ppp0          localnet/24 anywhere
any
#

  Choisir une police

   Nous avons dissert� sur ce qui se passe lorsqu'un paquet atteint la
   fin de la cha�ne int�gr�e, lorsque nous avons discut� sur la mani�re
   dont un paquet parcourait les cha�nes dans Sp�cifier une destination
   plus haut. Dans ce cas, la _police_ de la cha�ne d�termine le destin
   du paquet. Seules les cha�nes int�gr�es (input, output et forward) ont
   des polices, car si un paquet atteint la fin d'une cha�ne d�finie par
   l'utilisateur, le paquet revient sur la cha�ne pr�c�dente.

   La police peut �tre une des quatre premi�res destinations sp�ciales :
   ACCEPT, DENY, REJECT ou MASQ. MASQ est la seule destination valide
   pour la cha�ne "forward".

   Il est �galement important de noter qu'une destination RETURN dans une
   r�gle de l'une des cha�nes int�gr�es est utile pour expliciter la
   destination de la cha�ne lorsqu'un paquet correspond � la r�gle.

  Op�rations sur le camouflage

   Il y a plusieurs param�tres que vous pouvez modifier pour le
   camouflage IP. Ils sont int�gr�s avec ipchains car il n'est pas
   �vident d'�crire un outil s�par� pour eux (bien que ceci devrait
   changer).

   La commande du camouflage IP est "-M", et peut �tre combin�e avec "-L"
   pour lister les connexions actuellement camoufl�es, ou avec "-S" pour
   configurer les param�tres du camouflage.

   La commande "-L" peut �tre accompagn�e par "-n" (montre des nombres �
   la place des noms de machines et de ports) ou "-v" (affiche les deltas
   dans les s�quences de nombres pour la connexion camoufl�e, au cas o�
   vous vous demanderiez).

   La commande "-S" doit �tre suivie par trois valeurs de fin d'attente,
   toutes en secondes : pour les sessions TCP, pour les sessions TCP
   pr�c�d�es d'un paquet FIN, et pour les paquets UDP. Si vous ne voulez
   pas changer l'une de ces valeurs, donnez-lui simplement une valeur de
   "0".

   Les valeurs par d�faut sont list�es dans
   "/usr/src/linux/include/net/ip_masq.h", actuellement 15 minutes, 2
   minutes et 5 minutes, respectivement.

   La valeur chang�e le plus souvent est la premi�re, pour le FTP (voir
   Cauchemars du FTP plus bas).

   Notez que les probl�mes avec la mise en place de temps de fin
   d'attente sont list�s dans Je n'arrive pas � configurer mes temps
   d'attente !.

  V�rifier un paquet

   Parfois, vous voulez savoir ce qui arrive lorsqu'un certain paquet
   entre dans votre machine, par exemple pour d�boguer votre cha�ne
   pare-feu. ipchains dispose de la commande "-C" pour autoriser cel�, en
   utilisant exactement les m�mes routines que celles que le noyau
   utilise pour v�rifier les vrais paquets.

   Vous sp�cifiez sur quelle cha�ne le paquet doit �tre test� en mettant
   son nom apr�s l'argument "-C". M�me si le noyau commence toujours par
   traverser les cha�nes input, output ou forward, vous �tes autoris� �
   commencer en traversant n'importe quelle cha�ne pour tester.

   Les d�tails du "paquet" sont sp�cifi�s en utilisant la m�me syntaxe
   que celle utilis�e pour sp�cifier les r�gles pare-feu. En particulier,
   un protocole ("-p"), une adresse source ("-s"), une adresse de
   destination ("-d") et une interface ("-i") sont n�cessaires. Si le
   protocole est TCP ou UDP, alors une source unique et une destination
   unique doivent �tre sp�cifi�es, et un type et un code ICMP doivent
   �tre sp�cifi�s pour le protocole ICMP (� moins que l'option "-f" soit
   sp�cifi�e pour indiquer une r�gle de fragment, auquel cas ces options
   sont ill�gales).

   Si le protocole est TCP (et que l'option "-f" n'est pas sp�cifi�e),
   l'option "-y' doit �tre explicit�e, afin d'indiquer que le paquet test
   doit �tre configur� avec le bit SYN.

   Voici un exemple de test d'un paquet TCP SYN venant de 192.168.1.1,
   port 60000, et allant sur 192.168.1.2, port www, arrivant de
   l'interface eth0 et entrant dans la cha�ne "input" (il s'agit d'une
   initialisation classique d'une connexion WWW) :

# ipchains -C input -p tcp -y -i eth0 -s 192.168.1.1 60000 -d 192.168.1.2 www
packet accepted
#

  Voir ce qui arrive avec des r�gles multiples pr�cis�es en une seule fois

   Parfois, une simple ligne de commande peut affecter de multiples
   r�gles. Ceci se fait par deux m�thodes. Premi�rement, si vous
   sp�cifiez un nom de machine qui correspond (en utilisant DNS) � de
   multiples adresses IP, ipchains agira comme si vous aviez tap� de
   multiples commandes avec chaque combinaison d'adresses.

   Ainsi, si le nom de machine "www.foo.com" correspond � trois adresses
   IP, et si le nom de machine "www.bar.com" correspond � deux adresses
   IP, alors la commande "ipchains -A input -j reject -s www.bar.com -d
   www.foo.com" ajoutera six r�gles � la cha�ne input.

   L'autre m�thode pour avoir ipchains r�alisant de multiples actions est
   d'utiliser l'option bidirectionnelle ("-b"). Cette option fait agir
   ipchains comme si vous aviez tap� la commande deux fois, la deuxi�me
   fois avec les arguments "-s" et "-d" invers�s. Ainsi, pour �viter la
   transmission soit de, soit vers 192.168.1.1, vous pourriez utiliser la
   commande :

# ipchains -b -A forward -j reject -s 192.168.1.1
#

   Personnellement, je n'aime pas beaucoup l'option "-b" ; si vous
   pr�f�rez la convivialit�, voyez Utiliser ipchains-save plus bas.

   L'option -b peut �tre utilis�e avec les commandes ins�rer ("-I"),
   supprimer ("-D") (mais pas avec la variation qui prend un num�ro de
   r�gle), ajouter ("-A") et v�rifier ("-C").

   Une autre option utile est "-v" (bruyant) qui imprime exactement ce
   que ipchains fait avec vos commandes. Ceci est utile si vous traitez
   avec des commandes qui peuvent affecter de multiples r�gles. Par
   exemple, nous devons ici v�rifier le comportement de fragments entre
   192.168.1.1 et 192.168.1.2.

# ipchains -v -b -C input -p tcp -f -s 192.168.1.1 -d 192.168.1.2 -i lo
  tcp opt   ---f- tos 0xFF 0x00  via lo    192.168.1.1  -> 192.168.1.2    * ->
  *
packet accepted
  tcp opt   ---f- tos 0xFF 0x00  via lo    192.168.1.2  -> 192.168.1.1    * ->
  *
packet accepted
#

4.2 Exemples utiles

   J'ai une connexion intermittente en PPP (-i ppp0). Je r�cup�re les
   news (-p TCP -s news.virtual.net.au nntp) et le courrier (-p TCP -s
   mail.virtual.net.au pop-3) � chaque fois que je me connecte. J'utilise
   la m�thode ftp de Debian pour mettre ma machine � jour r�guli�rement
   (-p TCP -y -s ftp.debian.org.au ftp-data). Je visionne le web au
   travers du proxy de mon FAI (Fournisseur d'Acc�s Internet) lorsque je
   suis en ligne (-p TCP -d proxy.virtual.net.au 8080), mais je d�teste
   les publicit�s de doubleclick.net des Archives de Dilbert (-p TCP -y
   -d 199.95.207.0/24 et -p TCP -y -d 199.95.208.0/24).

   J'autorise les gens � essayer le ftp sur ma machine lorsque je suis en
   ligne (-p TCP -d $LOCALIP ftp), mais je n'autorise personne de
   l'ext�rieur � pr�tendre avoir une adresse IP sur mon r�seau interne
   (-s 192.168.1.0/24). Ceci est commun�ment appel� IP spoofing, et il y
   a un meilleur moyen de se prot�ger dans les noyaux 2.1.x et suivants :
   voir Comment mettre en place la protection contre l'IP spoof ?.

   Cette configuration est relativement simple, car il n'y a pour
   l'instant aucune autre machine sur mon r�seau interne.

   Je ne veux pas que des processus locaux (ie. Netscape, lynx, etc.) se
   connectent � doubleclick.net :

# ipchains -A output -d 199.95.207.0/24 -j REJECT
# ipchains -A output -d 199.95.208.0/24 -j REJECT
#

   Maintenant je d�sire changer les priorit�s des divers paquets sortants
   (il n'y a pas vraiment d'int�r�t � le faire pour les paquets
   entrants). Puisqu'il y a un certain nombre de ces r�gles, il y a
   int�r�t � les mettre ensemble dans une seule cha�ne, nomm�e ppp-out.

# ipchains -N ppp-out
# ipchains -A output -i ppp0 -j ppp-out
#

   D�lai minimal pour le trafic web et telnet :

# ipchains -A ppp-out -p TCP -d proxy.virtual.net.au 8080 -t 0x01 0x10
# ipchains -A ppp-out -p TCP -d 0.0.0.0 telnet -t 0x01 0x10
#

   Co�t faible pour les donn�es ftp, nntp et pop-3 :

# ipchains -A ppp-out -p TCP -d 0.0.0.0/0 ftp-data -t 0x01 0x02
# ipchains -A ppp-out -p TCP -d 0.0.0.0/0 nntp -t 0x01 0x02
# ipchains -A ppp-out -p TCP -d 0.0.0.0/0 pop-3 -t 0x01 0x02
#

   Il y a quelques restrictions sur les paquets venant de l'interface
   ppp0 ; cr�ons une cha�ne nomm�e "ppp-in" :

# ipchains -N ppp-in
# ipchains -A input -i ppp0 -j ppp-in
#

   Maintenant, aucun des paquets venant de ppp0 ne doit pr�tendre avoir
   une adresse source de la forme 192.168.1.*, donc nous les enregistrons
   et les interdisons :

# ipchains -A ppp-in -s 192.168.1.0/24 -l -j DENY
#

   J'autorise l'entr�e des paquets UDP pour le DNS (je fais tourner un
   serveur de nom cache qui renvoie toutes les demandes sur 203.29.16.1,
   donc je m'attend � des r�ponses DNS venant uniquement de l�), l'entr�e
   du ftp, et le retour des donn�es ftp (ftp-data) uniquement (ce qui
   doit �tre uniquement entre un port strictement sup�rieur � 1023, et
   pas sur les ports X11 autour de 6000).

# ipchains -A ppp-in -p UDP -s 203.29.16.1 -d $LOCALIP dns -j ACCEPT
# ipchains -A ppp-in -p TCP -s 0.0.0.0/0 ftp-data -d $LOCALIP 1024:5999 -j ACCE
PT
# ipchains -A ppp-in -p TCP -s 0.0.0.0/0 ftp-data -d $LOCALIP 6010: -j ACCEPT
# ipchains -A ppp-in -p TCP -d $LOCALIP ftp -j ACCEPT
#

   Enfin, les paquets local vers local sont OK :

# ipchains -A input -i lo -j ACCEPT
#

   Maintenant, ma police par d�faut sur la cha�ne input est DENY, ce qui
   fait que tout le reste dispara�t :

# ipchains -P input DENY
#

   NOTE : Je ne configurerais pas mes cha�nes dans cet ordre, car des
   paquets pourraient passer durant la configuration. Le moyen le plus
   s�r est g�n�ralement de configurer la police � DENY tout d'abord, et
   ensuite d'ins�rer les r�gles. Bien s�r, si vos r�gles ont besoin
   d'effectuer des demandes DNS pour r�soudre des noms de machines, vous
   pourriez avoir des probl�mes.

  Utiliser ipchains-save

   Configurer des cha�nes pare-feu de la mani�re exacte dont vous le
   voulez, et se rappeller ensuite des commandes que vous avez utilis�
   pour le faire la fois suivante est insupportable.

   Donc, ipchains-save est un script qui lit votre configuration actuelle
   des cha�nes et la sauve dans un fichier. Pour le moment, je
   conserverais le suspens en ce qui concerne l'utilit� de
   ipchains-restore.

   ipchains-save peut sauver une cha�ne seule, ou toutes les cha�nes (si
   aucun nom de cha�ne n'a �t� sp�cifi�). La seule option actuellement
   autoris�e est le "-v" qui affiche les r�gles (vers stderr)
   lorsqu'elles sont sauv�es. La police de la cha�ne est aussi sauv�e
   pour les cha�nes input, output et forward.

# ipchains-save > my_firewall
Saving `input'.
Saving `output'.
Saving `forward'.
Saving `ppp-in'.
Saving `ppp-out'.
#

  Utiliser ipchains-restore

   ipchains-restore remet les cha�nes que vous avez sauv� avec
   ipchains-save. Il peut prendre deux options : "-v" qui d�crit chaque
   r�gle lorsqu'elle est ajout�e, et "-f" qui force le nettoyage des
   cha�nes d�finies par l'utilisateur si elles existent, comme d�crit
   plus bas.

   Si une cha�ne d�finie par l'utilisateur est trouv�e � l'entr�e,
   ipchains-restore v�rifie que cette cha�ne existe d�j�. Si elle existe,
   alors vous serez interrog� pour savoir si la cha�ne doit �tre nettoy�e
   (suppression de toutes les r�gles) ou si la restauration de la cha�ne
   doit �tre saut�e. Si vous sp�cifiez "-f" sur la ligne de commande,
   vous ne serez pas interrog� ; la cha�ne sera nettoy�e.

   Par exemple :

# ipchains-restore < my_firewall
Restoring `input'.
Restoring `output'.
Restoring `forward'.
Restoring `ppp-in'.
Chain `ppp-in' already exists. Skip or flush? [S/f]? s
Skipping `ppp-in'.
Restoring `ppp-out'.
Chain `ppp-out' already exists. Skip or flush? [S/f]? f
Flushing `ppp-out'.
#

5. Divers

   Cette section contient toutes les informations et les questions
   fr�quemment pos�es que je ne pouvais faire entrer dans la structure
   ci-dessus.

5.1 Comment organiser vos r�gles pare-feu

   Cette question n�cessite un peu de r�flexion. Vous pouvez tenter de
   les organiser pour optimiser la vitesse (minimiser le nombre de
   v�rifications de r�gles pour la plupart des paquets) ou pour augmenter
   la maniabilit�.

   Si vous avez une connexion intermittente, disons une connexion PPP,
   vous pouvez configurer la premi�re r�gle de la cha�ne d'entr�e pour
   �tre `-i ppp0 -j DENY' au lancement, puis avoir quelque chose comme
   ceci dans votre script ip-up :

# Re-cr�e la cha�ne "ppp-in"
ipchains-restore -f < ppp-in.firewall

# Remplace la r�gle DENY par un saut vers la cha�ne se chargeant du ppp
ipchains -R input 1 -i ppp0 -j ppp-in

   Votre script ip-down pourrait ressembler � �a :

ipchains -R input 1 -i ppp0 -j DENY

5.2 Ce qu'il ne faut pas filtrer

   Il y a un certain nombre de choses auxquelles vous devez faire
   attention avant de commencer � filtrer quelque chose que vous n'auriez
   pas voulu filtrer.

  Les paquets ICMP

   Les paquets ICMP sont utilis�s (entre autres choses) pour indiquer des
   probl�mes aux autres protocoles (comme TCP et UDP). Les paquets
   "destination-unreachable" (destination non accessible) en particulier.
   Le bloquage de ces paquets signifie que vous n'obtiendrez jamais les
   erreurs "Host unreachable" ou "No route to host" ; toute connexion
   attendra une r�ponse qui ne viendra jamais. C'est irritant, mais
   rarement fatal.

   Un probl�me plus inqui�tant est le r�le des paquets ICMP dans la
   d�couverte MTU. Toutes les bonnes impl�mentations de TCP (y compris
   celle de Linux) utilisent la recherche MTU pour tenter de trouver quel
   est le plus grand paquet qui peut atteindre une destination sans �tre
   fragment� (la fragmentation diminue les performances, principalement
   lorsque des fragments occasionnels sont perdus). La recherche MTU
   fonctionne en envoyant des paquets avec le bit "Don't Fragment" mis,
   et en envoyant ensuite des paquets plus petits s'il re�oit un paquet
   ICMP indiquant "Fragmentation needed but DF set"
   (`fragmentation-needed'). C'est un paquet de type
   "destination-unreachable", et s'il n'est jamais re�u, l'h�te local ne
   r�duira pas le MTU, et les performances seront abyssales ou
   inexistantes.

   Notez qu'il est commun de bloquer tous les messages ICMP de
   redirection (type 5) ; ils peuvent �tre utilis�s pour manipuler le
   routage (bien que les piles IP bien con�ues disposent de gardes-fou),
   et sont donc souvent consid�r�s comme quelques peu risqu�s.

  Connexions TCP au DNS (serveur de nom)

   Si vous tentez de bloquer toutes les connexions TCP sortantes,
   rappellez vous que le DNS n'utilise pas toujours UDP ; si la r�ponse
   du serveur d�passe les 512 octets, le client utilise une connexion TCP
   (allant toujours sur le port num�ro 53) pour obtenir les donn�es.

   Ceci peut �tre un pi�ge car le DNS fonctionnera "en gros" si vous
   interdisez de tels transferts TCP ; vous pouvez exp�rimenter des
   d�lais longs et �tranges, et d'autres probl�mes li�s au DNS si vous le
   faites.

   Si les demandes de votre DNS sont toujours dirig�es vers les m�mes
   sources externes (soit directement en utilisant la ligne nameserver
   dans /etc/resolv.conf ou en utilisant un serveur de noms cache en mode
   de redirection), alors vous n'aurez besoin d'autoriser que les
   connexions du port domain sur ce serveur de nom � partir du port local
   domain (si vous utilisez un serveur de nom cache) ou d'un port �lev�
   (> 1023) si vous utilisez /etc/resolv.conf.

  Cauchemars du FTP

   L'autre probl�me classique du filtrage de paquets est celui pos� par
   le FTP. Le FTP a deux _modes_ ; le mode traditionnel est appel� _mode
   actif_ et le plus r�cent est appel� _mode passif_. Les navigateurs web
   utilisent souvent le mode passif par d�faut, mais les programmes de
   ftp en ligne de commmande utilisent en g�n�ral par d�faut le mode
   actif.

   En mode actif, lorsque l'h�te distant d�sire envoyer un fichier (ou
   m�me les r�sultats d'une commande ls ou dir), il essaye d'ouvrir une
   connexion TCP sur la machine locale. Cel� signifie que vous ne pouvez
   filtrez ces connexions TCP sans supprimer le FTP actif.

   Si vous avez comme option l'utilisation du mode passif, alors tout va
   bien ; le mode passif fait passer les connexions de donn�es du client
   au serveur, m�me pour les donn�es arrivantes. Autrement, il est
   recommend� de n'autoriser que les connexions TCP vers les ports
   sup�rieurs � 1024 et de les interdire entre 6000 et 6010 (6000 est
   utilis� par X-Windows).

5.3 Filtrer le ping de la mort (Ping of Death)

   Les machines Linux sont maintenant immunis�es du fameux _Ping of
   Death_, qui implique l'envoi de paquets ICMP ill�galement grands qui
   font d�border les buffers de la pile TCP du r�cepteur et causent de
   gros d�g�ts.

   Si vous voulez prot�ger des machines qui peuvent �tre vuln�rables, vos
   pouvez simplement bloquer les fragments ICMP. Les paquets ICMP normaux
   ne sont pas assez gros pour n�cessiter la fragmentation, et vous ne
   casserez rien � part les gros pings. J'ai entendu parler (non
   confirm�) de rapports comme quoi quelques syst�mes ont seulement
   besoin du dernier fragment d'un paquet ICMP d�form� pour les
   corrompre, donc bloquer seulement le premier fragment n'est pas
   recommand�.

   M�me si tous les programmes exploitant cette erreur que j'ai vu
   utilisent l'ICMP, il n'y a pas de raisons qu'un fragment TCP ou UDP
   (ou d'un protocole inconnu) ne puisse �tre utilis� pour cette attaque,
   donc le bloquage des fragments ICMP est seulement une solution
   temporaire.

5.4 Filtrer teardrop et bonk

   Teardrop et Bonk sont deux attaques (principalement contre les
   machines sous Microsoft Windows NT) qui reposent sur des fragments
   superpos�s. Avoir votre routeur Linux d�fragmenter, ou interdisant
   tous les fragments vers vos machines vuln�rables sont d'autres
   options.

5.5 Filtrer les bombes � fragments

   Quelques piles TCP moins fiables sont connues pour avoir des probl�mes
   � g�rer de larges ensembles de fragments de paquets lorsqu'elles ne
   re�oivent pas tous les fragments. Linux n'a pas ce probl�me. Vous
   pouvez filtrer les fragments (ce qui peut casser les utilisations
   l�gitimes) ou compiler votre noyau avec l'option "IP: always
   defragment" mise sur "Y" (seulement si votre machine Linux est la
   seule route possible pour ces paquets).

5.6 Changer les r�gles pare-feu

   Il y a quelques probl�mes de temps qui sont impliqu�s dans la
   modification des r�gles pare-feu. Si vous n'y faites pas attention,
   vous pouvez laisser entrer des paquets lorsque vous avez fait la
   moiti� de vos changements. Une approche simpliste serait de faire la
   suite :

# ipchains -I input 1 -j DENY
# ipchains -I output 1 -j DENY
# ipchains -I forward 1 -j DENY

... Mise en place des changements ...

# ipchains -D input 1
# ipchains -D output 1
# ipchains -D forward 1
#

   Ceci supprime tous les paquets pour la dur�e des changements.

   Si vos changements sont restreints � une cha�ne simple, vous pouvez
   cr�er une nouvelle cha�ne avec les nouvelles r�gles, et ensuite
   remplacer ("-R") la r�gle qui pointait sur la vieille cha�ne par une
   qui pointe sur la nouvelle cha�ne ; ensuite, vous pouvez supprimer la
   vieille cha�ne. Le remplacement se fera � vitesse atomique.

5.7 Comment mettre en place la protection contre l'IP spoof ?

   L'IP spoofing est une technique dans laquelle un h�te envoie des
   paquets qui pr�tendent venir d'un autre h�te. Puisque le filtrage des
   paquets prend ses d�cisions sur la base de cette adresse source, l'IP
   spoofing est utilis� pour abuser les filtres de paquets. Elle est
   �galement utilis�e pour cacher l'identit� d'un attaquant utilisant les
   techniques SYN, Teardrop, Ping of Death et autres d�riv�s (ne vous
   inqui�tez si vous ne savez pas ce que c'est).

   Le meilleur moyen de se prot�ger de l'IP spoofing est la v�rification
   de l'adresse source, et il est r�alis� par le code de routage, et non
   par le pare-feu et autres.
   Cherchez un fichier nomm� /proc/sys/net/ipv4/conf/all/rp_filter. S'il
   existe, alors l'activation de la v�rification de l'adresse source �
   chaque lancement est la bonne solution pour vous. Pour se faire,
   ins�rez les lignes suivantes quelque part dans vos scripts
   d'initialisation, avant l'initialisation des interfaces r�seau :

# This is the best method: turn on Source Address Verification and get
# spoof protection on all current and future interfaces.
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
  echo -n "Setting up IP spoofing protection..."
  for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
      echo 1 > $f
  done
  echo "done."
else
  echo PROBLEMS SETTING UP IP SPOOFING PROTECTION.  BE WORRIED.
  echo "CONTROL-D will exit from this shell and continue system startup."
  echo
  # Start a single user shell on the console
  /sbin/sulogin $CONSOLE
fi

   Si vous ne pouvez faire ceci, vous pouvez ins�rer manuellement les
   r�gles pour prot�ger chaque interface. Ceci n�cessite la connaissance
   de chaque interface. La s�rie des noyaux 2.1 et sup�rieurs rejette
   automatiquement les paquets qui pr�tendent venir des adresses 127.*
   (r�serv�es pour l'interface de loopback, lo).

   Par exemple, disons que vous avez trois interfaces, eth0, eth1 et
   ppp0. Nous pouvons utiliser ifconfig pour nous donner les adresses et
   les masques de r�seau de chaque interface. Disons que eth0 est
   rattach�e � un r�seau 192.168.1.0 avec le masque de sous-r�seau
   255.255.255.0, eth1 est raccord�e � un r�seau 10.0.0.0 avec le masque
   de sous-r�seau 255.0.0.0, et ppp0 connect�e � l'Internet (o� toutes
   les adresses sauf les adresses IP priv�es r�serv�es sont autoris�es),
   nous ins�rerions les r�gles suivantes :

# ipchains -A input -i eth0 -s ! 192.168.1.0/255.255.255.0 -j DENY
# ipchains -A input -i ! eth0 -s 192.168.1.0/255.255.255.0 -j DENY
# ipchains -A input -i eth1 -s ! 10.0.0.0/255.0.0.0 -j DENY
# ipchains -A input -i ! eth1 -s 10.0.0.0/255.0.0.0 -j DENY
#

   Cette approche n'est pas aussi bonne que l'approche par v�rification
   de l'adresse source, parce que si votre r�seau change, vous devrez
   changer vos r�gles pare-feu pour �tre � jour.

   Si vous utilisez un noyau de s�rie 2.0, vous pouvez �galement vouloir
   prot�ger l'interface loopback, en utilisant une r�gle telle que :

# ipchains -A input -i ! lo -s 127.0.0.0/255.0.0.0 -j DENY
#

5.8 Projets avanc�s

   Il y a une biblioth�que dans l'espace utilisateur que j'ai �crit et
   qui est inclue avec la distribution source, nomm�e "libfw". Elle
   utilise la capacit� de IP Chains 1.3 et suivants pour copier un paquet
   vers l'espace utilisateur (via l'option du noyau IP_FIREWALL_NETLINK).

   La valeur "mark" peut �tre utilis�e pour sp�cifier les param�tres de
   Qualit� de Service pour les paquets, ou pour sp�cifier comment les
   paquets doivent �tre renvoy�s. Je ne l'ai cependant jamais utilis�e,
   mais si vous voulez �crire sur ce sujet, contactez moi.

   Des choses comme le _stateful inspection_ (je pr�f�re le terme
   "pare-feu dynamique") peuvent �tre impl�ment�es dans l'espace
   utilisateur en utilisant cette biblioth�que. D'autres id�es g�niales
   peuvent �tre le contr�le des paquets sur une base "par utilisateur" en
   faisant une demande sur un d�mon r�sidant dans l'espace utilisateur.
   Ceci devrait �tre relativement simple.

  SPF : Stateful Packet Filtering

   ftp://ftp.interlinx.bc.ca/pub/spf est le site du projet SPF de Brian
   Murrell, qui permet le suivi de connexion dans l'espace utilisateur.
   Ceci ajoute une dose significative de s�curit� pour les sites � faible
   bande passante.

   Il y a peu de documentation pour le moment, mais voici un message que
   Brian a envoy� � la liste de diffusion en r�pondant � quelques
   questions :


> Je pr�sume qu'il fait exactement ce que je veux~: installer une r�gle de
> "retour" temporaire pour laisser entrer des paquets en r�ponse � une
> requ�te ext�rieure.

Yup, c'est exactement ce � quoi il sert. Plus il comprendra de protocoles,
plus il obtiendra de r�gles de retour exactes. Pour l'instant il supporte
(de m�moire, excusez les erreurs ou les omissions) le FTP (� la fois actif et
passif, int�rieur et ext�rieur), un peu de RealAudio, de traceroute, d'ICMP et
d'un ICQ basique (transmission des serveurs ICQ, connexions TCP directes, mais
h�las la seconde connexion directe TCP pour des trucs comme le transfert de
fichiers, etc., ne sont pas encore pr�sentes)

> S'agit-il d'un rempla�ant pour ipchains ou d'un ajout~?

C'est un ajout. Pensez � ipchains comme �tant le moteur pour autoriser et
emp�cher les paquets de traverser une machine Linux. SPF est le pilote, g�rant
et surveillant constamment le traffic et disant � ipchains comment changer ses
polices pour refl�ter les changements dans les sch�mas du traffic.

  Modification des donn�es ftp par Michael Hasenstein

   Michael Hasenstein de SuSE a cod� un correctif pour le noyau qui
   ajoute le suivi des connexions ftp � ipchains. Celui-ci peut �tre
   trouv� sur http://www.csn.tu-chemnitz.de/~mha/patch.ftp-data-2.gz

5.9 Extensions futures

   Les codes de pare-feu et de NAT sont en cours de remise � jour pour le
   2.3. Les plans et les discussions sont disponibles sur l'archive de
   netdev, et sur la liste ipchains-dev. Ces extensions doivent nettoyer
   de nombreux probl�mes d'utilisation (r�ellement, la mise en place du
   pare-feu et le camouflage ne devrait pas �tre _aussi dur_, et devrait
   autoriser une croissance pour un pare-feu beaucoup plus flexible).

6. Probl�mes classiques

6.1 ipchains -L est gel� !

   Vous bloquez probablement les demandes DNS ; il finira probablement
   par stopper. Essayez d'utiliser l'option "-n" (num�rique) d'ipchains,
   qui supprimera la recherche des noms.

6.2 Le camouflage/redirection ne fonctionne pas !

   V�rifiez si la redirection de paquets est activ�e (dans les noyaux
   r�cent, elle est d�sactiv�e par d�faut ce qui signifie que les paquets
   ne tentent jamais de traverser la cha�ne "forward"). Vous pouvez
   changer ce d�faut (en tant que super-utilisateur) en tapant

# echo 1 > /proc/sys/net/ipv4/ip_forward
#

   Si ceci marche pour vous, vous pouvez le mettre quelque part dans vos
   scripts de lancement, de mani�re � ce que la redirection soit activ�e
   � chaque fois ; vous devrez toutefois configurer votre pare-feu avant
   le lancement de cette commande, autrement il peut y avoir passage de
   paquets.

6.3 -j REDIR ne marche pas !

   Vous devez autoriser la retransmission des paquets (voir plus haut)
   pour que celle-ci fonctionne ; sinon le code de routage supprime le
   paquet. Ainsi, si vous utilisez juste la redirection sans avoir de
   transmission, vous devez y faire attention.

   Notez que REDIR (dans la cha�ne d'entr�e) n'affecte pas les connexions
   d'un processus local.

6.4 Les interfaces joker ne fonctionnent pas !

   Il y avait une erreur dans les versions 2.1.102 et 2.1.103 du noyau
   (et dans quelques anciens correctifs que j'avais sorti) qui faisait
   planter les commandes ipchains utilisant une interface joker (comme -i
   ppp+).

   Cette erreur a �t� corrig�e dans les noyaux r�cents, et dans le
   correctif 2.0.34 du site web. Vous pouvez aussi le corriger � la main
   dans les sources du noyau en changeant la ligne 63 de
   include/linux/ip_fw.h :

#define IP_FW_F_MASK    0x002F  /* All possible flag bits mask   */

   Ceci doit en fait �tre "0x003F". Corrigez et recompilez le noyau.

6.5 TOS ne fonctionne pas !

   C'est de ma faute : la configuration du champ Type of Service ne
   change pas le Type of Service dans les noyaux 2.1.102 � 2.1.111. Ce
   probl�me a �t� corrig� dans le 2.1.112.

6.6 ipautofw et ipportfw ne fonctionnent pas !

   Pour les 2.0.x, c'est vrai ; je n'ai pas le temps de cr�er et de
   maintenir un correctif de taille gigantesque pour ipchains et
   ipautofw/ipportfw.

   Pour les 2.1.x, r�cup�rez ipmasqadm de Juan Ciarlante sur
<url url="http://juanjox.linuxhq.com/"
        name="http://juanjox.linuxhq.com/">

   et utilisez-le exactement de la mani�re dont vous auriez utilis�
   ipautofw ou ipportfw, � part qu'� la place de ipportfw vous devez
   taper ipmasqadm portfw, et � la place de ipautofw vous devez taper
   ipmasqadm autofw.

6.7 XosView ne marche pas !

   Mettez � jour � la version 1.6.0 ou sup�rieure, qui ne n�cessite pas
   de r�gle pare-feu pour les noyaux 2.1.x. Il semblerait �tre � nouveau
   cass� dans le 1.6.1 ; veuillez voir l'auteur (ce n'est pas de ma
   faute !).

6.8 Erreur de segmentation avec -j REDIRECT !

   C'�tait une erreur dans ipchains version 1.3.3. Veuillez mettre �
   jour.

6.9 Je ne peux pas modifier les temps d'attente du camouflage !

   C'est vrai (pour les noyaux 2.1.x) jusqu'au et incluant le 2.1.112.
   Ceci est pour le moment vigoureusement traqu�, et au moment o� vous
   lirez ce document il se pourrait que ce soit r�solu. Ma page web
   contiendra un correctif lorsqu'il sera disponible.

6.10 Je veux firewaller IPX !

   Ainsi qu'un certain nombre d'autres personnes, il semble. Mon code
   couvre seulement IP, malheureusement. Du bon c�t�, tout est l� pour
   pouvoir firewaller IPX ! Vous devrez juste �crire le code ; je vous
   aiderai joyeusement l� o� ce sera possible.

7. Un exemple s�rieux

   Cet exemple est extrait du tutorial donn� par Michael Neuling et
   moi-m�me en mars 1999 lors du LinuxWorld ; ce n'est pas le seul moyen
   de r�gler le probl�me donn�, mais c'est probablement le plus simple.
   J'esp�re que vous le jugerez informatif.

7.1 L'arrangement

     * Un r�seau interne camoufl� (sous divers syst�mes d'exploitation),
       que nous appellerons "BON" ;
     * des serveurs expos�s dans un r�seau s�par� (nomm� "ZDM" pour Zone
       D�militaris�e) ;
     * une connexion PPP � l'Internet (nomm� "MAUVAIS").

   R�seau externe (MAUVAIS)
           |
           |
       ppp0|
    ---------------
    | 192.84.219.1|             R�seau des serveurs (ZDM)
    |             |eth0
    |             |----------------------------------------------
    |             |192.84.219.250 |             |              |
    |             |               |             |              |
    |192.168.1.250|               |             |              |
    ---------------          --------       -------        -------
           | eth1            | SMTP |       | DNS |        | WWW |
           |                 --------       -------        -------
           |              192.84.219.128  192.84.219.129  192.84.218.130
           |
   R�seau Interne (BON)

7.2 Buts

   Sur la machine filtrant les paquets :

   _PING tout r�seau_
          Tr�s utile si la machine est hors-service.

   _TRACEROUTE tout r�seau_
          Une fois de plus, utile pour les diagnostics.

   _Acc�s au DNS_
          Pour rendre ping et DNS plus utile.

   � l'int�rieur de la Zone D�militaris�e :

   Serveur mail
     * SMTP vers l'ext�rieur
     * Accepte le SMTP de l'int�rieur et de l'ext�rieur
     * Accepte le POP3 de l'int�rieur

   Serveur de nom
     * Envoi de requ�tes DNS vers l'ext�rieur
     * Accepte les requ�tes DNS de l'int�rieur, l'ext�rieur, et du filtre
       de paquets

   Serveur web
     * Accepte les requ�tes HTTP de l'int�rieur et de l'ext�rieur
     * Acc�s rsync de l'int�rieur

   En interne :

   _Autorise WWW, ftp, traceroute et ssh vers l'ext�rieur_
          Ce sont des services standards � autoriser : on autorise
          parfois les machines internes � tout faire, mais ici nous
          serons plus restrictifs.

   _Autorise le SMTP vers le serveur mail_
          Bien entendu, nous voulons qu'il leur soit possible d'envoyer
          du courrier vers l'ext�rieur.

   _Autorise le POP3 vers le serveur mail_
          C'est ainsi qu'ils lisent leur courrier.

   _Autorise les requ�tes DNS vers le serveur de nom_
          Ils doivent pouvoir rechercher des noms externes pour le web,
          le ftp, traceroute ou ssh.

   _Autorise rsync vers le serveur web_
          C'est ainsi qu'ils synchronisent le serveur web externe avec
          l'interne.

   _Autorise les requ�tes WWW vers le serveur web_
          Bien entendu, nous voulons qu'ils puissent se connecteur au
          serveur web externe.

   _Autorise le ping vers le filtre de paquets_
          Il est courtois de l'autoriser ; ils peuvent ainsi tester si le
          pare-feu est coup� (ainsi nous ne serons pas tenus responsables
          si un site ext�rieur est coup�).

7.3 Avant le filtrage des paquets

     * Protection anti-spoofing
       Puisque nous n'avons pas de routage asym�trique, nous pouvons
       simplement mettre en marche l'anti-spoofing pour toutes les
       interfaces.

# for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $f; done
#

     * Mettre en place des r�gles de filtrage en interdiction (DENY)
       totale :
       Nous autorisons tout de m�me le traffic local, mais nous
       interdisons tout le reste.

# ipchains -A input -i ! lo -j DENY
# ipchains -A output -i ! lo -j DENY
# ipchains -A forward -j DENY
#

     * Configurer les interfaces
       Ceci est g�n�ralement r�alis� par les scripts de lancement. Fa�tes
       bien attention � ce que les r�gles ci-dessus soient ins�r�es avant
       que les interfaces ne soient configur�es, afin de pr�venir le
       passage de paquets avant l'insertion des r�gles.
     * Insertion des modules de camouflage par protocole
       Nous devons ins�rer le module de camouflage du FTP, ainsi le ftp
       passif et actif fonctionnera `uniquement' du r�seau interne.

# insmod ip_masq_ftp
#

7.4 Filtrage de paquets pour les paquets traversants

   Avec le camouflage, il vaut mieux filtrer la cha�ne de retransmission.

   Cassez la cha�ne de retransmission en plusieurs cha�nes utilisateurs
   d�pendant des interfaces sources/destination ; ceci ram�ne le probl�me
   � des probl�mes plus g�rables.

ipchains -N bon-zdm
ipchains -N mauvais-zdm
ipchains -N bon-mauvais
ipchains -N zdm-bon
ipchains -N zdm-mauvais
ipchains -N mauvais-bon

   ACCEPTer les codes standards d'erreur ICMP est un fait classique, nous
   lui cr�ons donc une cha�ne.

ipchains -N icmp-acc

  Configurer les sauts de la cha�ne de transmission

   Malheureusement, nous connaissons seulement (dans la cha�ne de
   transmission) quelle est l'interface externe. Ainsi, pour se
   repr�senter de quelle interface vient le paquet, nous utilisons
   l'adresse source (l'anti-spoofing �vite les probl�mes li�s aux
   adresses).

   Notez que nous enregistrons tout ce qui ne v�rifie aucune de ces
   r�gles (cependant, ceci ne devrait jamais arriver).

ipchains -A forward -s 192.168.1.0/24 -i eth0 -j bon-zdm
ipchains -A forward -s 192.168.1.0/24 -i ppp0 -j bon-mauvais
ipchains -A forward -s 192.84.219.0/24 -i ppp0 -j zdm-mauvais
ipchains -A forward -s 192.84.219.0/24 -i eth1 -j zdm-bon
ipchains -A forward -i eth0 -j mauvais-zdm
ipchains -A forward -i eth1 -j mauvais-bon
ipchains -A forward -j DENY -l

  D�finir la cha�ne icmp-acc

   Les paquets correspondant � l'une des erreurs ICMP sont accept�s,
   sinon le contr�le les rendra � la cha�ne appellante.

ipchains -A icmp-acc -p icmp --icmp-type destination-unreachable -j ACCEPT
ipchains -A icmp-acc -p icmp --icmp-type source-quench -j ACCEPT
ipchains -A icmp-acc -p icmp --icmp-type time-exceeded -j ACCEPT
ipchains -A icmp-acc -p icmp --icmp-type parameter-problem -j ACCEPT

  Bon (interne) vers ZDM (serveurs)

   Restrictions internes :
     * Autorise WWW, ftp, traceroute, ssh vers l'ext�rieur
     * _Autorise le SMTP vers le serveur mail_
     * _Autorise le POP3 vers le serveur mail_
     * _Autorise les requ�tes DNS vers le serveur de nom_
     * _Autorise le rsync vers le serveur web_
     * _Autorise le WWW vers le serveur web_
     * Autorise le ping vers le filtre de paquets

   On pourrait utiliser le camouflage du r�seau interne vers la ZDM, mais
   ici nous ne le ferons pas. Puisque personne du r�seau interne ne
   devrait tenter de choses d�moniaques, nous enregistrons les paquets
   qui sont interdits.

ipchains -A bon-zdm -p tcp -d 192.84.219.128 smtp -j ACCEPT
ipchains -A bon-zdm -p tcp -d 192.84.219.128 pop-3 -j ACCEPT
ipchains -A bon-zdm -p udp -d 192.84.219.129 domain -j ACCEPT
ipchains -A bon-zdm -p tcp -d 192.84.219.129 domain -j ACCEPT
ipchains -A bon-zdm -p tcp -d 192.84.218.130 www -j ACCEPT
ipchains -A bon-zdm -p tcp -d 192.84.218.130 rsync -j ACCEPT
ipchains -A bon-zdm -p icmp -j icmp-acc
ipchains -A bon-zdm -j DENY -l

  Mauvais (ext�rieur) vers ZDM (serveurs)

     * Restrictions de la ZDM :
          + Serveur mail :
               o _SMTP vers l'ext�rieur_
               o _Accepte le SMTP venant_ de l'int�rieur et _ext�rieur_
               o Accepte le POP3 de l'int�rieur
          + Serveur de noms :
               o _Envoi de requ�tes DNS vers l'ext�rieur_
               o _Accepte le DNS venant_ de l'int�rieur, _ext�rieur_ et
                 du filtre de paquets
          + Serveur web :
               o _Accepte les requ�tes HTTP venant de_ l'int�rieur et de
                 _l'ext�rieur_
               o Acc�s rsync de l'int�rieur
     * Les trucs � autoriser du r�seau ext�rieur vers la ZDM
          + N'enregistre pas les violations, elles peuvent arriver.

ipchains -A mauvais-zdm -p tcp -d 192.84.219.128 smtp -j ACCEPT
ipchains -A mauvais-zdm -p udp -d 192.84.219.129 domain -j ACCEPT
ipchains -A mauvais-zdm -p tcp -d 192.84.219.129 domain -j ACCEPT
ipchains -A mauvais-zdm -p tcp -d 192.84.218.130 www -j ACCEPT
ipchains -A mauvais-zdm -p icmp -j icmp-acc
ipchains -A mauvais-zdm -j DENY

  Bon (int�rieur) vers Mauvais (ext�rieur).

     * Restrictions internes :
          + _Autorise le WWW, ftp, traceroute, ssh vers l'ext�rieur_
          + Autorise SMTP vers le serveur mail
          + Autorise POP-3 vers le serveur mail
          + Autorise DNS vers le serveur de nom
          + Autorise rsync vers le serveur web
          + Autorise WWW vers le serveur web
          + Autorise ping vers le filtre de paquets
     * Un grand nombre de gens autorisent tout venant de l'int�rieur vers
       les r�seaux ext�rieurs, puis ajoutent des restrictions. Nous
       sommes fascistes.
          + Enregistre les violations.
          + Le ftp passif est g�r� par le module de camouflage.

ipchains -A bon-mauvais -p tcp --dport www -j MASQ
ipchains -A bon-mauvais -p tcp --dport ssh -j MASQ
ipchains -A bon-mauvais -p udp --dport 33434:33500 -j MASQ
ipchains -A bon-mauvais -p tcp --dport ftp --j MASQ
ipchains -A bon-mauvais -p icmp --icmp-type ping -j MASQ
ipchains -A bon-mauvais -j REJECT -l

  ZDM vers Bon (int�rieur)

     * Restrictions internes :
          + Autorise WWW, ftp, traceroute, ssh vers l'ext�rieur
          + _Autorise SMTP vers le serveur mail_
          + _Autorise POP3 vers le serveur mail_
          + _Autorise DNS vers le serveur de noms_
          + _Autorise rsync vers le serveur web_
          + _Autorise WWW vers le serveur web_
          + Autorise ping vers le filtre de paquets
     * Si nous camouflions le r�seau int�rieur de la ZDM, nous
       refuserions simplement les paquets venant d'un autre moyen. Tel
       quel, il autorise uniquement les paquets qui peuvent provenir
       d'une connexion pr�-�tablie.

ipchains -A zdm-bon -p tcp ! -y -s 192.84.219.128 smtp -j ACCEPT
ipchains -A zdm-bon -p udp -s 192.84.219.129 domain -j ACCEPT
ipchains -A zdm-bon -p tcp ! -y -s 192.84.219.129 domain -j ACCEPT
ipchains -A zdm-bon -p tcp ! -y -s 192.84.218.130 www -j ACCEPT
ipchains -A zdm-bon -p tcp ! -y -s 192.84.218.130 rsync -j ACCEPT
ipchains -A zdm-bon -p icmp -j icmp-acc
ipchains -A zdm-mauvais -j DENY -l

  ZDM vers Mauvais (ext�rieur)

     * Restrictions de la ZDM :
          + Serveur mail
               o _SMTP vers l'ext�rieur_
               o _Accepte SMTP venant de_ l'int�rieur et de _l'ext�rieur_
               o Accepte POP3 venant de l'int�rieur
          + Serveur de noms
               o _Envoi de requ�tes DNS vers l'ext�rieur_
               o _Accepte le DNS de_ l'int�rieur, _l'ext�rieur_ et du
                 filtre de paquets
          + Serveur web
               o _Accepte HTTP venant de_ l'int�rieur et de _l'ext�rieur_
               o Acc�s rsync de l'int�rieur
     *

ipchains -A zdm-mauvais -p tcp -s 192.84.219.128 smtp -j ACCEPT
ipchains -A zdm-mauvais -p udp -s 192.84.219.129 domain -j ACCEPT
ipchains -A zdm-mauvais -p tcp -s 192.84.219.129 domain -j ACCEPT
ipchains -A zdm-mauvais -p tcp ! -y -s 192.84.218.130 www -j ACCEPT
ipchains -A zdm-mauvais -p icmp -j icmp-acc
ipchains -A zdm-mauvais -j DENY -l

  Mauvais (ext�rieur) vers Bon (int�rieur)

     * Nous n'autorisons rien (de non camoufl�) � passer du r�seau
       ext�rieur vers le r�seau int�rieur.

ipchains -A mauvais-bon -j REJECT

  Filtrage de paquets pour la machine Linux elle-m�me

     * Si nous d�sirons utiliser le filtrage de paquets sur les paquets
       arrivant sur la machine elle-m�me, nous devons filtrer la cha�ne
       d'entr�e. Nous cr�ons une cha�ne pour chaque interface de
       destination :

ipchains -N mauvais-if
ipchains -N zdm-if
ipchains -N bon-if

     * Cr�ons les sauts vers elles :

ipchains -A input -d 192.84.219.1 -j mauvais-if
ipchains -A input -d 192.84.219.250 -j zdm-if
ipchains -A input -d 192.168.1.250 -j bon-if

  Interface Mauvais (ext�rieur)

     * Machine de filtrage des paquets :
          + _PING tous les r�seaux_
          + _TRACEROUTE tous les r�seaux_
          + Acc�s DNS
     * L'interface ext�rieure re�oit aussi des r�ponses aux paquets
       camoufl�s, les erreurs ICMP leur correspondant et les r�ponses
       PING.

ipchains -A mauvais-if -i ! ppp0 -j DENY -l
ipchains -A mauvais-if -p TCP --dport 61000:65096 -j ACCEPT
ipchains -A mauvais-if -p UDP --dport 61000:65096 -j ACCEPT
ipchains -A mauvais-if -p ICMP --icmp-type pong -j ACCEPT
ipchains -A mauvais-if -j icmp-acc
ipchains -A mauvais-if -j DENY

  Interface ZDM

     * Restrictions du filtre de paquets :
          + _PING tous les r�seaux_
          + _TRACEROUTE tous les r�seaux_
          + _Acc�s DNS_
     * L'interface ZDM re�oit les r�ponses DNS, ping et les erreurs ICMP

ipchains -A zdm-if -i ! eth0 -j DENY
ipchains -A zdm-if -p TCP ! -y -s 192.84.219.129 53 -j ACCEPT
ipchains -A zdm-if -p UDP -s 192.84.219.129 53 -j ACCEPT
ipchains -A zdm-if -p ICMP --icmp-type pong -j ACCEPT
ipchains -A zdm-if -j icmp-acc
ipchains -A zdm-if -j DENY -l

  Interface Bon (int�rieur)

     * Restrictions du filtre de paquets
          + _PING tous les r�seaux_
          + _TRACEROUTE tous les r�seaux_
          + _Acc�s DNS_
     * Restrictions int�rieures :
          + Autorise WWW, ftp, traceroute, ssh vers l'ext�rieur
          + Autorise SMTP vers le serveur mail
          + Autorise POP3 vers le serveur mail
          + Autorise DNS vers le serveur de noms
          + Autorise rsync vers le serveur web
          + Autorise WWW vers le serveur web
          + _Autorise ping vers le filtre de paquets_
     * L'interface int�rieure re�oit les pings, les r�ponses ping et les
       erreurs ICMP.

ipchains -A bon-if -i ! eth1 -j DENY
ipchains -A bon-if -p ICMP --icmp-type ping -j ACCEPT
ipchains -A bon-if -p ICMP --icmp-type pong -j ACCEPT
ipchains -A bon-if -j icmp-acc
ipchains -A bon-if -j DENY -l

7.5 Finalement

     * Supprime les r�gles de bloquage :

ipchains -D input 1
ipchains -D forward 1
ipchains -D output 1

8. Annexe : diff�rences entre ipchains et ipfwadm

   Quelques-uns de ces changements sont le r�sultat de changements du
   noyau, et quelques autres sont un r�sultat des diff�rences entre
   ipchains et ipfwadm.

    1. De nombreux arguments ont �t� modifi�s : les majuscules indiquent
       dor�navant une commande, et les minuscules indiquent une option.
    2. Les cha�nes arbitraires sont support�es, ainsi m�me les cha�nes
       int�gr�es ont des noms complets plut�t que des options (c�d,
       "input" � la place de "-I").
    3. L'option "-k" a saut� : utilisez "! -y".
    4. L'option "-b" ins�re/ajoute/supprime actuellement deux r�gles,
       plut�t qu'une r�gle "bidirectionnelle" simple.
    5. L'option "-b" peut �tre pass�e � "-C" pour effectuer deux
       v�rifications (une dans chaque direction).
    6. L'option "-x" de "-l" a �t� remplac�e par "-v".
    7. Les ports sources et destinations multiples ne sont plus
       support�s. Heureusement, la possibilit� d'employer un intervalle
       de port aura le m�me effet.
    8. Les interfaces peuvent seulement �tre sp�cifi�es par leur nom (pas
       par leurs adresses). L'ancienne s�mantique a �t� silencieusement
       chang�e dans la s�rie des noyaux 2.1, de toute mani�re.
    9. Les fragments sont examin�s, mais pas automatiquement autoris�s.
   10. On s'est d�barrass� des cha�nes de comptage explicites.
   11. On peut �crire des r�gles qui porteront uniquement sur certains
       protocoles IP.
   12. L'ancien comportement de v�rification de SYN et ACK (qui �tait
       auparavant ignor� pour les paquets non TCP) a chang� ; l'option
       SYN n'est plus valide pour les r�gles non sp�cifiques au TCP.
   13. Les compteurs sont maintenant de 64 bits sur les machines 32 bits,
       et non plus 32 bits.
   14. L'inversion des options est dor�navant support�e.
   15. Les codes ICMP sont maintenant support�s.
   16. Les interfaces joker sont maintenant support�es.
   17. Les manipulations de TOS sont maintenant v�rifi�es : l'ancien code
       du noyau les stoppait silencieusement pour vous en manipulant
       (ill�galement) le bit TOS "Must Be Zero" ; ipchains retourne
       maintenant une erreur si vous essayez, de m�me que pour d'autres
       cas ill�gaux.

8.1 Guide de r�f�rence rapide

   [ Dans l'ensemble, les arguments des commandes sont en MAJUSCULES, et
   les options des arguments sont en minuscules ]

   Une chose � noter, le camouflage est sp�cifi� par "-j MASQ" ; ceci est
   compl�tement diff�rent de "-j ACCEPT", et n'est pas trait� comme un
   effet de bord, au contraire d'ipfwadm.

===========================================================================
| ipfwadm      | ipchains              | Notes
---------------------------------------------------------------------------
| -A [both]    | -N acct               | Cr�e une cha�ne "acct"
|              |& -I 1 input -j acct   | ayant des paquets entrants et
|              |& -I 1 output -j acct  | sortants qui la traversent.
|              |& acct                 |
---------------------------------------------------------------------------
| -A in        | input                 | Une r�gle sans destination
---------------------------------------------------------------------------
| -A out       | output                | Une r�gle sans destination
---------------------------------------------------------------------------
| -F           | forward               | Utilise �a comme [cha�ne].
---------------------------------------------------------------------------
| -I           | input                 | Utilise �a comme [cha�ne].
---------------------------------------------------------------------------
| -O           | output                | Utilise �a comme [cha�ne].
---------------------------------------------------------------------------
| -M -l        | -M -L                 |
---------------------------------------------------------------------------
| -M -s        | -M -S                 |
---------------------------------------------------------------------------
| -a policy    | -A [chain] -j POLICY  | (voir -r et -m).
---------------------------------------------------------------------------
| -d policy    | -D [chain] -j POLICY  | (voir -r et -m).
---------------------------------------------------------------------------
| -i policy    | -I 1 [chain] -j POLICY| (voir -r et -m).
---------------------------------------------------------------------------
| -l           | -L                    |
---------------------------------------------------------------------------
| -z           | -Z                    |
---------------------------------------------------------------------------
| -f           | -F                    |
---------------------------------------------------------------------------
| -p           | -P                    |
---------------------------------------------------------------------------
| -c           | -C                    |
---------------------------------------------------------------------------
| -P           | -p                    |
---------------------------------------------------------------------------
| -S           | -s                    | Prend seulement un port ou un
|              |                       | intervalle, pas de multiples.
---------------------------------------------------------------------------
| -D           | -d                    | Prend seulement un port ou un
|              |                       | intervalle, pas de multiples.
---------------------------------------------------------------------------
| -V           | <none>                | Utilise -i [nom].
---------------------------------------------------------------------------
| -W           | -i                    |
---------------------------------------------------------------------------
| -b           | -b                    | Dor�navant cr�e deux r�gles.
---------------------------------------------------------------------------
| -e           | -v                    |
---------------------------------------------------------------------------
| -k           | ! -y                  | Ne fonctionne pas � moins que
|              |                       | -p tcp ne soit �galement sp�cifi�.
---------------------------------------------------------------------------
| -m           | -j MASQ               |
---------------------------------------------------------------------------
| -n           | -n                    |
---------------------------------------------------------------------------
| -o           | -l                    |
---------------------------------------------------------------------------
| -r [redirpt] | -j REDIRECT [redirpt] |
---------------------------------------------------------------------------
| -t           | -t                    |
---------------------------------------------------------------------------
| -v           | -v                    |
---------------------------------------------------------------------------
| -x           | -x                    |
---------------------------------------------------------------------------
| -y           | -y                    | Ne fonctionne pas � moins que
|              |                       | -p tcp ne soit �galement sp�cifi�.
---------------------------------------------------------------------------

8.2 Exemples de commandes ipfwadm traduites

   Ancienne commande : ipfwadm -F -p deny

   Nouvelle commande : ipchains -P forward DENY

   Ancienne commande : ipfwadm -F -a m -S 192.168.0.0/24 -D 0.0.0.0/0

   Nouvelle commande : ipchains -A forward -j MASQ -s 192.168.0.0/24 -d
   0.0.0.0/0

   Ancienne commande : ipfwadm -I -a accept -V 10.1.2.1 -S 10.0.0.0/8 -D
   0.0.0.0/0

   Nouvelle commande : ipchains -A input -j ACCEPT -i eth0 -s 10.0.0.0/8
   -d 0.0.0.0/0

   (Notez qu'il n'y a pas d'�quivalent pour la sp�cification des
   interfaces par leur adresse : utilisez le nom de l'interface. Sur
   cette machine, 10.1.2.1 correspond � eth0).

9. Annexe : utiliser le script ipfwadm-wrapper

   Le script shell ipfwadm-wrapper doit �tre un remplacement d'ipfwadm
   pour la compatibilit� descendante avec ipfwadm 2.3a.

   La seule option qu'il ne peut vraiment pas supporter est l'option
   "-V". Lorsqu'elle est utilis�e, un avertissement est affich�. Si
   l'option "-W" est �galement utilis�e, l'option "-V" est ignor�e.
   Autrement, le script essaye de trouver le nom de l'interface associ�e
   � cette adresse, en utilisant ifconfig. Si �a ne marche pas (comme
   pour une interface d�sactiv�e), alors il sortira avec un message
   d'erreur.

   Cet avertissement peut �tre supprim� soit en changeant le "-V" pour un
   "-W", ou en dirigeant la sortie standard du script vers /dev/null.

   Si vous trouvez des erreurs dans ce script, ou une modification entre
   les effets du vrai ipfwadm et de ce script, _veuillez_ me rapporter le
   probl�me : envoyez un courrier � ipchains@rustcorp.com avec le sujet
   "BUG-REPORT". Veuillez lister la version d'ipfwadm (ipfwadm -h), votre
   version d'ipchains (ipchains --version), la version du script
   d'emballage (ipfwadm-wrapper --version). Envoyez moi �galement la
   sortie de ipchains-save. Merci d'avance.

   Le m�lange d'ipchains avec le script ipfwadm-wrapper se fait � votre
   propre p�ril.

10. Annexe : remerciements

   Un grand merci � Michael Neuling, qui a �crit la pr�-version du code
   d'IP chains en travaillant pour moi. Des excuses publiques pour avoir
   rejet� son id�e de cache des r�sultats, qu'Alan Cox a propos� plus
   tard et que j'ai finalement commenc� � impl�menter, ayant vu l'erreur
   de mon c�t�.

   Merci � Alan Cox pour son support technique par email 24h/24, et pour
   ses encouragements.

   Merci � tous les auteurs du code d'ipfw et d'ipfwadm, sp�cialement Jos
   Vos. Rester aux chevilles des g�ants et tout �a... Ceci s'applique
   �galement � Linux Torvalds et � tous les bricoleurs du noyau et de
   l'espace utilisateur.

   Merci aux beta testeurs, chasseurs d'erreurs diligents, surtout Jordan
   Mendelson, Shaw Carruthers, Kevin Moule, Dr. Liviu Daia, Helmut Adams,
   Franck Sicard, Kevin Littlejohn, Matt Kemner, John D. Hardin, Alexey
   Kuznetsov, Leos Bitto, Jim Kunzman, Gerard Gerritsen, Serge Sivkov,
   Andrew Burgess, Steve Schmidtke, Richard Offer, Bernhard Weisshuhn,
   Larry Auton, Ambrose Li, Pavel Krauz, Steve Chadsey, Francesco
   Potorti` et Alain Knaff.