Linux IPCHAINS-HOWTO
 Paul Russell, [email protected]
 Version fran�aise par Arnaud Launay, [email protected]
 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.
 ______________________________________________________________________

 Table des mati�res























































 1. Introduction

    1.1 Qu'est ce que c'est ?
    1.2 Pourquoi ?
    1.3 Comment ?
    1.4 O� ?

 2. Bases du filtrage de paquets

    2.1 Qu'est ce que c'est ?
    2.2 Pourquoi ?
    2.3 Comment ?
       2.3.1 Un noyau avec le filtrage de paquets
       2.3.2 ipchains
       2.3.3 Rendre les r�gles permanentes

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

    3.1 Le guide du camouflage en 3 lignes par Rusty
    3.2 Publicit� gratuite : le z�le de WatchGuard
    3.3 Configurations classiques de type pare-feu
       3.3.1 R�seaux priv�s : caches traditionnels
       3.3.2 R�seaux priv�s : caches transparents
       3.3.3 R�seaux priv�s : camouflage
       3.3.4 R�seaux publics
       3.3.5 Services internes limit�s
    3.4 Pour plus d'informations sur le camouflage

 4. Cha�nes de protection IP

    4.1 Comment les paquets traversent les filtres
       4.1.1 Utiliser ipchains
       4.1.2 Op�rations sur une r�gle simple
       4.1.3 Sp�cifications du filtrage
          4.1.3.1 Sp�cifier les adresses IP source et destination
          4.1.3.2 Sp�cifier l'inversion
          4.1.3.3 Sp�cifier le protocole
             4.1.3.3.1 Sp�cifier les ports UDP et TCP
             4.1.3.3.2 Sp�cifier les types et codes ICMP
          4.1.3.4 Sp�cifier une interface
          4.1.3.5 Sp�cifier uniquement des paquets TCP SYN
          4.1.3.6 Utiliser les fragments
       4.1.4 Effets de bord du filtrage
          4.1.4.1 Sp�cifier une destination
          4.1.4.2 Enregistrement des paquets
          4.1.4.3 Manipuler le type de service
          4.1.4.4 Marquage d'un paquet
          4.1.4.5 Op�rations sur une cha�ne enti�re
          4.1.4.6 Cr�er une nouvelle cha�ne
          4.1.4.7 Supprimer une cha�ne
          4.1.4.8 Vider une cha�ne
          4.1.4.9 Afficher une cha�ne
          4.1.4.10 Remise � z�ro des compteurs
          4.1.4.11 Choisir une police
       4.1.5 Op�rations sur le camouflage
       4.1.6 V�rifier un paquet
       4.1.7 Voir ce qui arrive avec des r�gles multiples pr�cis�es en une seule fois
    4.2 Exemples utiles
       4.2.1 Utiliser ipchains-save
       4.2.2 Utiliser ipchains-restore

 5. Divers

    5.1 Comment organiser vos r�gles pare-feu
    5.2 Ce qu'il ne faut pas filtrer
       5.2.1 Les paquets ICMP
       5.2.2 Connexions TCP au DNS (serveur de nom)
       5.2.3 Cauchemars du FTP
    5.3 Filtrer le ping de la mort (Ping of Death)
    5.4 Filtrer teardrop et bonk
    5.5 Filtrer les bombes � fragments
    5.6 Changer les r�gles pare-feu
    5.7 Comment mettre en place la protection contre l'IP spoof ?
    5.8 Projets avanc�s
       5.8.1 SPF : Stateful Packet Filtering
       5.8.2 Modification des donn�es ftp par Michael Hasenstein
    5.9 Extensions futures

 6. Probl�mes classiques

    6.1 ipchains -L est gel� !
    6.2 Le camouflage/redirection ne fonctionne pas !
    6.3 -j REDIR ne marche pas !
    6.4 Les interfaces joker ne fonctionnent pas !
    6.5 TOS ne fonctionne pas !
    6.6 ipautofw et ipportfw ne fonctionnent pas !
    6.7 XosView ne marche pas !
    6.8 Erreur de segmentation avec -j REDIRECT !
    6.9 Je ne peux pas modifier les temps d'attente du camouflage !
    6.10 Je veux firewaller IPX !

 7. Un exemple s�rieux

    7.1 L'arrangement
    7.2 Buts
    7.3 Avant le filtrage des paquets
    7.4 Filtrage de paquets pour les paquets traversants
       7.4.1 Configurer les sauts de la cha�ne de transmission
       7.4.2 D�finir la cha�ne icmp-acc
       7.4.3 Bon (interne) vers ZDM (serveurs)
       7.4.4 Mauvais (ext�rieur) vers ZDM (serveurs)
       7.4.5 Bon (int�rieur) vers Mauvais (ext�rieur).
       7.4.6 ZDM vers Bon (int�rieur)
       7.4.7 ZDM vers Mauvais (ext�rieur)
       7.4.8 Mauvais (ext�rieur) vers Bon (int�rieur)
       7.4.9 Filtrage de paquets pour la machine Linux elle-m�me
          7.4.9.1 Interface Mauvais (ext�rieur)
          7.4.9.2 Interface ZDM
          7.4.9.3 Interface Bon (int�rieur)
    7.5 Finalement

 8. Annexe : diff�rences entre ipchains et ipfwadm

    8.1 Guide de r�f�rence rapide
    8.2 Exemples de commandes ipfwadm traduites

 9. Annexe : utiliser le script ipfwadm-wrapper

 10. Annexe : remerciements



 ______________________________________________________________________

 11..  IInnttrroodduuccttiioonn

 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'''.


 11..11..  QQuu''eesstt ccee qquuee cc''eesstt ??

 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.


 11..22..  PPoouurrqquuooii ??

 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).


 11..33..  CCoommmmeenntt ??

 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.


 11..44..  OO�� ??

 La page officielle est la Page des cha�nes de filtrage IP de Linux
 <http://www.rustcorp.com/linux/ipchains>.


 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'.


 22..  BBaasseess dduu ffiillttrraaggee ddee ppaaqquueettss

 22..11..  QQuu''eesstt ccee qquuee cc''eesstt ??

 Tout le trafic circulant dans un r�seau est envoy� sous la forme de
 ppaaqquueettss. 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'eenntt��ttee. Le reste du paquet, contenant les
 donn�es � transmettre, est couramment appel� le ccoorrppss.


 Quelques protocoles, comme le TTCCPP, 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'_e_n_t_�_t_e des paquets
 lorsque ceux-ci passent, et d�cide du destin du paquet entier. Il peut
 d�cider de le rreeffuusseerr (le supprimer comme s'il n'avait jamais �t�
 re�u), de l'aacccceepptteerr (le laisser circuler) ou de le rreejjeetteerr (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.


 22..22..  PPoouurrqquuooii ??

 Contr�le. S�curit�. Vigilance.



    CCoonnttrr��llee ::
       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).


    SS��ccuurriitt�� ::
       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.

    VViiggiillaannccee ::
       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�.


 22..33..  CCoommmmeenntt ??

 22..33..11..  UUnn nnooyyaauu aavveecc llee ffiillttrraaggee ddee ppaaqquueettss

 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 _n_o_y_a_u_x
 _d_e _s_�_r_i_e _2_._0 sont :


 ______________________________________________________________________
         CONFIG_EXPERIMENTAL=y
         CONFIG_FIREWALL=y
         CONFIG_IP_FIREWALL=y
         CONFIG_IP_FIREWALL_CHAINS=y
 ______________________________________________________________________



 Pour les s�ries de _n_o_y_a_u_x _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.


 22..33..22..  iippcchhaaiinnss

 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
 <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.


 22..33..33..  RReennddrree lleess rr��gglleess ppeerrmmaanneenntteess

 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).


 33..  JJee ssuuiiss ttrroouubbll�� !! RRoouuttaaggee,, ccaammoouuffllaaggee,, rreeddiirreeccttiioonn ddee ppoorrttss,,
 iippaauuttooffww......

 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.



 33..11..  LLee gguuiiddee dduu ccaammoouuffllaaggee eenn 33 lliiggnneess ppaarr RRuussttyy

 Ces lignes pr�sument que votre interface eexxtteerrnnee 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





 33..22..  PPuubblliicciitt�� ggrraattuuiittee :: llee zz��llee ddee WWaattcchhGGuuaarrdd

 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 <http://www.watchguard.com>



 33..33..  CCoonnffiigguurraattiioonnss ccllaassssiiqquueess ddee ttyyppee ppaarree--ffeeuu

 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.


 33..33..11..  RR��sseeaauuxx pprriivv��ss :: ccaacchheess ttrraaddiittiioonnnneellss

 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.


 33..33..22..  RR��sseeaauuxx pprriivv��ss :: ccaacchheess ttrraannssppaarreennttss

 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.


 33..33..33..  RR��sseeaauuxx pprriivv��ss :: ccaammoouuffllaaggee

 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.


 33..33..44..  RR��sseeaauuxx ppuubblliiccss

 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.


 33..33..55..  SSeerrvviicceess iinntteerrnneess lliimmiitt��ss

 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.


 33..44..  PPoouurr pplluuss dd''iinnffoorrmmaattiioonnss ssuurr llee ccaammoouuffllaaggee

 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
 <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
 <http://www.metalab.unc.edu/LDP>.


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


 44..  CChhaa��nneess ddee pprrootteeccttiioonn IIPP

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


 44..11..  CCoommmmeenntt lleess ppaaqquueettss ttrraavveerrsseenntt lleess ffiillttrreess

 Le noyau commence avec trois listes de r�gles : ces listes sont
 appell�es cchhaa��nneess ddee pprrootteeccttiioonn ou juste cchhaa��nneess. Ces trois cha�nes
 sont appell�es iinnppuutt (entr�e), oouuttppuutt (sortie) et ffoorrwwaarrdd
 (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� rroouuttaaggee). 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 rr��gglleess. 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 ppoolliiccee 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 :


    SSoommmmee ((cchheecckkssuumm)) ::
       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�.


    VVaalliiddiitt�� ((ssaanniittyy)) ::
       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).


    CChhaa��nnee dd''eennttrr��ee ((iinnppuutt cchhaaiinn)) ::
       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.


    DDeemmaassqquueerraaddee ::
       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.


    DD��cciissiioonn rroouuttaaggee ((RRoouuttiinngg ddeecciissiioonn)) ::
       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).


    PPrroocceessssuuss llooccaall ((LLooccaall pprroocceessss)) ::
       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).


    IInntteerrffaaccee lloo ::
       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.


    llooccaall ::
       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.


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


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


 44..11..11..  UUttiilliisseerr iippcchhaaiinnss

 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.


 44..11..22..  OOpp��rraattiioonnss ssuurr uunnee rr��ggllee ssiimmppllee

 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 com�
 mande -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.


 44..11..33..  SSpp��cciiffiiccaattiioonnss dduu ffiillttrraaggee

 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.


 44..11..33..11..  SSpp��cciiffiieerr lleess aaddrreesssseess IIPP ssoouurrccee eett ddeessttiinnaattiioonn

 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".


 44..11..33..22..  SSpp��cciiffiieerr ll''iinnvveerrssiioonn

 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.


 44..11..33..33..  SSpp��cciiffiieerr llee pprroottooccoollee

 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".


 44..11..33..33..11..  SSpp��cciiffiieerr lleess ppoorrttss UUDDPP eett TTCCPP

 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




 44..11..33..33..22..  SSpp��cciiffiieerr lleess ttyyppeess eett ccooddeess IICCMMPP

 ICMP permet aussi un argument optionnel, mais comme l'ICMP ne dispose
 pas de ports (ICMP a un ttyyppee et un ccooddee), 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).


 44..11..33..44..  SSpp��cciiffiieerr uunnee iinntteerrffaaccee

 L'option "-i" sp�cifie le nom d'une iinntteerrffaaccee � 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).


 44..11..33..55..  SSpp��cciiffiieerr uunniiqquueemmeenntt ddeess ppaaqquueettss TTCCPP SSYYNN

 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 SSYYNN (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.


 44..11..33..66..  UUttiilliisseerr lleess ffrraaggmmeennttss

 Parfois, un paquet est trop large pour rentrer dans le c�ble en une
 seule fois. Lorsque ceci arrive, le paquet est divis� en ffrraaggmmeennttss, 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 _r_i_e_n.
 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 _p_a_s
 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
      #





 44..11..44..  EEffffeettss ddee bboorrdd dduu ffiillttrraaggee

 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.


 44..11..44..11..  SSpp��cciiffiieerr uunnee ddeessttiinnaattiioonn

 Une ddeessttiinnaattiioonn 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.


 44..11..44..22..  EEnnrreeggiissttrreemmeenntt ddeess ppaaqquueettss

 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'.


 44..11..44..33..  MMaanniippuulleerr llee ttyyppee ddee sseerrvviiccee

 Il y a quatre bits utilis�s par eux-m�mes dans l'ent�te IP, appel�s
 les bits de TTyyppee ooff SSeerrvviiccee (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 rou�
      teur 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 accept�
      ables 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 config�
      urer 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 tou�
      jours gagner m�me sans changer le TOS, c'est juste que le
      changement du TOS aide � gagner les b�n�fices sur les pro�
      grammes non coop�ratifs (mais tous les programmes Linux
      standards sont coop�ratifs).



 44..11..44..44..  MMaarrqquuaaggee dd''uunn ppaaqquueett

 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.


 44..11..44..55..  OOpp��rraattiioonnss ssuurr uunnee cchhaa��nnee eennttii��rree

 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.


 44..11..44..66..  CCrr��eerr uunnee nnoouuvveellllee cchhaa��nnee

 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.


 44..11..44..77..  SSuupppprriimmeerr uunnee cchhaa��nnee

 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.


 44..11..44..88..  VViiddeerr uunnee cchhaa��nnee

 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 _t_o_u_t_e_s les cha�nes seront
 vid�es.




 44..11..44..99..  AAffffiicchheerr uunnee cchhaa��nnee

 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  ports
         10   840 ACCEPT icmp ----- 0xFF 0x00 lo            anywhere  anywhere     any





 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.


 44..11..44..1100..  RReemmiissee �� zz��rroo ddeess ccoommpptteeuurrss

 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  ports
         10   840 ACCEPT icmp ----- 0xFF 0x00 lo            anywhere  anywhere     any
      # 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" _e_n_s_e_m_b_l_e, 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
      #





 44..11..44..1111..  CChhooiissiirr uunnee ppoolliiccee

 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 ppoolliiccee 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.


 44..11..55..  OOpp��rraattiioonnss ssuurr llee ccaammoouuffllaaggee

 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 !''.


 44..11..66..  VV��rriiffiieerr uunn ppaaqquueett

 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
      #





 44..11..77..  VVooiirr ccee qquuii aarrrriivvee aavveecc ddeess rr��gglleess mmuullttiipplleess pprr��cciiss��eess eenn uunnee
 sseeuullee ffooiiss

 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
      #





 44..22..  EExxeemmpplleess uuttiilleess

 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 ACCEPT
      # 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.


 44..22..11..  UUttiilliisseerr iippcchhaaiinnss--ssaavvee

 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'.
 #





 44..22..22..  UUttiilliisseerr iippcchhaaiinnss--rreessttoorree

 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'.
      #





 55..  DDiivveerrss

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


 55..11..  CCoommmmeenntt oorrggaanniisseerr vvooss rr��gglleess ppaarree--ffeeuu

 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






 55..22..  CCee qquu''iill nnee ffaauutt ppaass ffiillttrreerr

 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.


 55..22..11..  LLeess ppaaqquueettss IICCMMPP

 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.





 55..22..22..  CCoonnnneexxiioonnss TTCCPP aauu DDNNSS ((sseerrvveeuurr ddee nnoomm))

 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.


 55..22..33..  CCaauucchheemmaarrss dduu FFTTPP

 L'autre probl�me classique du filtrage de paquets est celui pos� par
 le FTP.  Le FTP a deux mmooddeess ; le mode traditionnel est appel� mmooddee
 aaccttiiff et le plus r�cent est appel� mmooddee ppaassssiiff. 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).


 55..33..  FFiillttrreerr llee ppiinngg ddee llaa mmoorrtt ((PPiinngg ooff DDeeaatthh))

 Les machines Linux sont maintenant immunis�es du fameux PPiinngg ooff DDeeaatthh,
 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.


 55..44..  FFiillttrreerr tteeaarrddrroopp eett bboonnkk

 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.


 55..55..  FFiillttrreerr lleess bboommbbeess �� ffrraaggmmeennttss

 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).


 55..66..  CChhaannggeerr lleess rr��gglleess ppaarree--ffeeuu

 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.


 55..77..  CCoommmmeenntt mmeettttrree eenn ppllaaccee llaa pprrootteeccttiioonn ccoonnttrree ll''IIPP ssppooooff ??

 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
      #





 55..88..  PPrroojjeettss aavvaanncc��ss

 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 ssttaatteeffuull iinnssppeeccttiioonn (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.


 55..88..11..  SSPPFF :: SSttaatteeffuull PPaacckkeett FFiilltteerriinngg

 ftp://ftp.interlinx.bc.ca/pub/spf <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.





 55..88..22..  MMooddiiffiiccaattiioonn ddeess ddoonnnn��eess ffttpp ppaarr MMiicchhaaeell HHaasseennsstteeiinn

 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
 <http://www.csn.tu-chemnitz.de/~mha/patch.ftp-data-2.gz>


 55..99..  EExxtteennssiioonnss ffuuttuurreess

 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 _a_u_s_s_i _d_u_r, et devrait
 autoriser une croissance pour un pare-feu beaucoup plus flexible).


 66..  PPrroobbll��mmeess ccllaassssiiqquueess

 66..11..  iippcchhaaiinnss --LL eesstt ggeell�� !!

 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.


 66..22..  LLee ccaammoouuffllaaggee//rreeddiirreeccttiioonn nnee ffoonnccttiioonnnnee ppaass !!

 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.


 66..33..  --jj RREEDDIIRR nnee mmaarrcchhee ppaass !!

 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.



 66..44..  LLeess iinntteerrffaacceess jjookkeerr nnee ffoonnccttiioonnnneenntt ppaass !!

 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.


 66..55..  TTOOSS nnee ffoonnccttiioonnnnee ppaass !!

 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.


 66..66..  iippaauuttooffww eett iippppoorrttffww nnee ffoonnccttiioonnnneenntt ppaass !!

 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.


 66..77..  XXoossVViieeww nnee mmaarrcchhee ppaass !!

 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 !).


 66..88..  EErrrreeuurr ddee sseeggmmeennttaattiioonn aavveecc --jj RREEDDIIRREECCTT !!

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



 66..99..  JJee nnee ppeeuuxx ppaass mmooddiiffiieerr lleess tteemmppss dd''aatttteennttee dduu ccaammoouuffllaaggee !!

 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.


 66..1100..  JJee vveeuuxx ffiirreewwaalllleerr IIPPXX !!

 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.


 77..  UUnn eexxeemmppllee ss��rriieeuuxx

 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.


 77..11..  LL''aarrrraannggeemmeenntt


 �  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)





 77..22..  BBuuttss

 Sur la machine filtrant les paquets :

    PPIINNGG ttoouutt rr��sseeaauu
       Tr�s utile si la machine est hors-service.

    TTRRAACCEERROOUUTTEE ttoouutt rr��sseeaauu
       Une fois de plus, utile pour les diagnostics.

    AAcccc��ss aauu DDNNSS
       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 :

    AAuuttoorriissee WWWWWW,, ffttpp,, ttrraacceerroouuttee eett sssshh vveerrss ll''eexxtt��rriieeuurr
       Ce sont des services standards � autoriser : on autorise parfois
       les machines internes � tout faire, mais ici nous serons plus
       restrictifs.

    AAuuttoorriissee llee SSMMTTPP vveerrss llee sseerrvveeuurr mmaaiill
       Bien entendu, nous voulons qu'il leur soit possible d'envoyer du
       courrier vers l'ext�rieur.

    AAuuttoorriissee llee PPOOPP33 vveerrss llee sseerrvveeuurr mmaaiill
       C'est ainsi qu'ils lisent leur courrier.

    AAuuttoorriissee lleess rreeqquu��tteess DDNNSS vveerrss llee sseerrvveeuurr ddee nnoomm
       Ils doivent pouvoir rechercher des noms externes pour le web, le
       ftp, traceroute ou ssh.

    AAuuttoorriissee rrssyynncc vveerrss llee sseerrvveeuurr wweebb
       C'est ainsi qu'ils synchronisent le serveur web externe avec
       l'interne.

    AAuuttoorriissee lleess rreeqquu��tteess WWWWWW vveerrss llee sseerrvveeuurr wweebb
       Bien entendu, nous voulons qu'ils puissent se connecteur au
       serveur web externe.

    AAuuttoorriissee llee ppiinngg vveerrss llee ffiillttrree ddee ppaaqquueettss
       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�).


 77..33..  AAvvaanntt llee ffiillttrraaggee ddeess ppaaqquueettss


 �  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
      #





 77..44..  FFiillttrraaggee ddee ppaaqquueettss ppoouurr lleess ppaaqquueettss ttrraavveerrssaannttss

 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





 77..44..11..  CCoonnffiigguurreerr lleess ssaauuttss ddee llaa cchhaa��nnee ddee ttrraannssmmiissssiioonn

 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





 77..44..22..  DD��ffiinniirr llaa cchhaa��nnee iiccmmpp--aacccc

 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





 77..44..33..  BBoonn ((iinntteerrnnee)) vveerrss ZZDDMM ((sseerrvveeuurrss))

 Restrictions internes :

 �  Autorise WWW, ftp, traceroute, ssh vers l'ext�rieur

 �  AAuuttoorriissee llee SSMMTTPP vveerrss llee sseerrvveeuurr mmaaiill

 �  AAuuttoorriissee llee PPOOPP33 vveerrss llee sseerrvveeuurr mmaaiill

 �  AAuuttoorriissee lleess rreeqquu��tteess DDNNSS vveerrss llee sseerrvveeuurr ddee nnoomm

 �  AAuuttoorriissee llee rrssyynncc vveerrss llee sseerrvveeuurr wweebb

 �  AAuuttoorriissee llee WWWWWW vveerrss llee sseerrvveeuurr wweebb

 �  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





 77..44..44..  MMaauuvvaaiiss ((eexxtt��rriieeuurr)) vveerrss ZZDDMM ((sseerrvveeuurrss))


 �  Restrictions de la ZDM :

 �  Serveur mail :

 �  SSMMTTPP vveerrss ll''eexxtt��rriieeuurr

 �  AAcccceeppttee llee SSMMTTPP vveennaanntt de l'int�rieur et eexxtt��rriieeuurr

 �  Accepte le POP3 de l'int�rieur

 �  Serveur de noms :

 �  EEnnvvooii ddee rreeqquu��tteess DDNNSS vveerrss ll''eexxtt��rriieeuurr

 �  AAcccceeppttee llee DDNNSS vveennaanntt de l'int�rieur, eexxtt��rriieeuurr et du filtre de
    paquets

 �  Serveur web :

 �  AAcccceeppttee lleess rreeqquu��tteess HHTTTTPP vveennaanntt ddee l'int�rieur et de ll''eexxtt��rriieeuurr

 �  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





 77..44..55..  BBoonn ((iinntt��rriieeuurr)) vveerrss MMaauuvvaaiiss ((eexxtt��rriieeuurr))..


 �  Restrictions internes :

 �  AAuuttoorriissee llee WWWWWW,, ffttpp,, ttrraacceerroouuttee,, sssshh vveerrss ll''eexxtt��rriieeuurr


 �  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





 77..44..66..  ZZDDMM vveerrss BBoonn ((iinntt��rriieeuurr))



 �  Restrictions internes :

 �  Autorise WWW, ftp, traceroute, ssh vers l'ext�rieur

 �  AAuuttoorriissee SSMMTTPP vveerrss llee sseerrvveeuurr mmaaiill

 �  AAuuttoorriissee PPOOPP33 vveerrss llee sseerrvveeuurr mmaaiill

 �  AAuuttoorriissee DDNNSS vveerrss llee sseerrvveeuurr ddee nnoommss

 �  AAuuttoorriissee rrssyynncc vveerrss llee sseerrvveeuurr wweebb

 �  AAuuttoorriissee WWWWWW vveerrss llee sseerrvveeuurr wweebb

 �  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





 77..44..77..  ZZDDMM vveerrss MMaauuvvaaiiss ((eexxtt��rriieeuurr))



 �  Restrictions de la ZDM :

 �  Serveur mail

 �  SSMMTTPP vveerrss ll''eexxtt��rriieeuurr

 �  AAcccceeppttee SSMMTTPP vveennaanntt ddee l'int�rieur et de ll''eexxtt��rriieeuurr

 �  Accepte POP3 venant de l'int�rieur


 �  Serveur de noms

 �  EEnnvvooii ddee rreeqquu��tteess DDNNSS vveerrss ll''eexxtt��rriieeuurr

 �  AAcccceeppttee llee DDNNSS ddee l'int�rieur, ll''eexxtt��rriieeuurr et du filtre de paquets


 �  Serveur web

 �  AAcccceeppttee HHTTTTPP vveennaanntt ddee l'int�rieur et de ll''eexxtt��rriieeuurr

 �  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





 77..44..88..  MMaauuvvaaiiss ((eexxtt��rriieeuurr)) vveerrss BBoonn ((iinntt��rriieeuurr))



 �  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


 77..44..99..  FFiillttrraaggee ddee ppaaqquueettss ppoouurr llaa mmaacchhiinnee LLiinnuuxx eellllee--mm��mmee



 �  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





 77..44..99..11..  IInntteerrffaaccee MMaauuvvaaiiss ((eexxtt��rriieeuurr))



 �  Machine de filtrage des paquets :

 �  PPIINNGG ttoouuss lleess rr��sseeaauuxx

 �  TTRRAACCEERROOUUTTEE ttoouuss lleess rr��sseeaauuxx

 �  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





 77..44..99..22..  IInntteerrffaaccee ZZDDMM



 �  Restrictions du filtre de paquets :

 �  PPIINNGG ttoouuss lleess rr��sseeaauuxx

 �  TTRRAACCEERROOUUTTEE ttoouuss lleess rr��sseeaauuxx

 �  AAcccc��ss DDNNSS


 �  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





 77..44..99..33..  IInntteerrffaaccee BBoonn ((iinntt��rriieeuurr))



 �  Restrictions du filtre de paquets

 �  PPIINNGG ttoouuss lleess rr��sseeaauuxx

 �  TTRRAACCEERROOUUTTEE ttoouuss lleess rr��sseeaauuxx

 �  AAcccc��ss DDNNSS


 �  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

 �  AAuuttoorriissee ppiinngg vveerrss llee ffiillttrree ddee ppaaqquueettss


 �  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




 77..55..  FFiinnaalleemmeenntt


 �  Supprime les r�gles de bloquage :


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





 88..  AAnnnneexxee :: ddiiffff��rreenncceess eennttrree iippcchhaaiinnss eett iippffwwaaddmm

 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.


 88..11..  GGuuiiddee ddee rr��ff��rreennccee rraappiiddee

 [ 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�.
 ---------------------------------------------------------------------------




 88..22..  EExxeemmpplleess ddee ccoommmmaannddeess iippffwwaaddmm ttrraadduuiitteess

 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).


 99..  AAnnnneexxee :: uuttiilliisseerr llee ssccrriipptt iippffwwaaddmm--wwrraappppeerr

 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, _v_e_u_i_l_l_e_z me rapporter le
 probl�me : envoyez un courrier � [email protected] 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.
 1100..  AAnnnneexxee :: rreemmeerrcciieemmeennttss

 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.