shorewall_code/docs/shorewall_setup_guide_fr.xml

2645 lines
112 KiB
XML
Raw Normal View History

<?xml version="1.0" encoding="ISO-8859-15"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<article id="IPIP" lang="fr">
<!--$Id$-->
<articleinfo>
<title>Guide de configuration Shorewall</title>
<authorgroup>
<author>
<firstname>Tom</firstname>
<surname>Eastep</surname>
</author>
<author>
<firstname>Fabien</firstname>
<surname>Demassieux</surname>
</author>
<author>
<firstname>Guy</firstname>
<surname>Marcenac</surname>
</author>
</authorgroup>
<pubdate>2005-12-18</pubdate>
<copyright>
<year>2001-2005</year>
<holder>Thomas M. Eastep</holder>
<holder>Fabien Demassieux</holder>
<holder>Guy Marcenac</holder>
</copyright>
<legalnotice>
<para>Permission est accord<72>e de copier, distribuer et/ou modifier ce
document selon les termes de la Licence de Documentation Libre GNU (GNU
Free Documentation License), version 1.2 ou toute version ult<6C>rieure
publi<6C>e par la Free Software Foundation ; sans section Invariables, sans
premi<6D>re de Couverture, et sans texte de quatri<72>me de couverture. Une
copie de la pr<70>sente Licence est incluse dans la section intitul<75>e. Une
traduction fran<61>aise de la licence se trouve dans la section
<quote><ulink
url="http://www.idealx.org/dossier/oss/gfdl.fr.html">Licence de
Documentation Libre GNU</ulink></quote>. Ce paragraphe est une
traduction fran<61>aise pour aider <20> votre compr<70>hension. Seul le texte
original en anglais pr<70>sent<6E> ci-dessous fixe les conditions
d'utilisation de cette documentation.</para>
<para>Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version
1.2 or any later version published by the Free Software Foundation; with
no Invariant Sections, with no Front-Cover, and with no Back-Cover
Texts. A copy of the license is included in the section entitled
<quote><ulink url="GnuCopyright.htm">GNU Free Documentation
License</ulink></quote>.</para>
</legalnotice>
</articleinfo>
<note>
<para><emphasis role="underline">Notes du traducteur :</emphasis> Le
traduction initiale a <20>t<EFBFBD> r<>alis<69>e par <ulink
url="mailto:fd03x@wanadoo.fr">Fabien Demassieux</ulink>. J'ai assur<75> la
r<>vision pour l'adapter <20> la version 3 de Shorewall. Si vous trouvez des
erreurs ou des am<61>liorations <20> y apporter vous pouvez me contacter <ulink
url="mailto:guy@posteurs.com">Guy Marcenac</ulink>.</para>
</note>
<caution>
<para><emphasis role="bold">Cet article s'applique <20> Shorewall 3.0 et <20>
ses versions ult<6C>rieures. Si vous utilisez une version plus ancienne de
Shorewall, r<>f<EFBFBD>rez-vous <20> la documentation s'appliquant <20> votre
version.</emphasis></para>
</caution>
<section id="Introduction">
<title>Introduction</title>
<para>Ce guide est destin<69> aux utilisateurs qui configurent Shorewall dans
un environnement o<> un ensemble d'adresses IP publiques doit <20>tre pris en
compte ainsi qu'<27> ceux qui souhaitent en savoir plus <20> propos de Shorewall
que ce que contiennent le guides pour une utilisation avec une <ulink
url="shorewall_quickstart_guide.htm">adresse IP unique</ulink>. Le champs
d'application <20>tant tr<74>s large, ce guide vous donnera des indications
g<>n<EFBFBD>rales <20> suivre et vous indiquera d'autres ressources si
n<>cessaire.</para>
<caution>
<para>Shorewall a besoin que le paquetage
<command><command>iproute</command></command>/<command><command>iproute2</command></command>
soit install<6C> (avec la distribution <trademark>RedHat</trademark>, le
paquetage s'appelle <command><command>iproute</command></command>). Vous
pouvez contr<74>ler que le paquetage est install<6C> en v<>rifiant la pr<70>sence
du programme <command><command>ip</command></command> sur votre
firewall. En tant que <systemitem class="username">root</systemitem>,
vous pouvez utiliser la commande <command>which</command> pour
cela:</para>
<programlisting>[root@gateway root]# <command>which ip</command>
/sbin/ip
[root@gateway root]#</programlisting>
<para>Je vous recommande de commencer par une lecture compl<70>te du guide
afin de vous familiariser avec les concepts mis en oeuvre, puis de
recommencer la lecture et seulement alors d'appliquer vos modifications
de configuration.</para>
<para>Les points o<> des modifications s'imposent sont indiqu<71>s par
<inlinegraphic fileref="images/BD21298_.gif" format="GIF" />.</para>
</caution>
<caution>
<para>Si vous <20>ditez vos fichiers de configuration sur un syst<73>me
<trademark>Windows</trademark>, vous devez les enregistrer comme des
fichiers <trademark>Unix</trademark> si votre <20>diteur supporte cette
option sinon vous devez les convertir avec <command>dos2unix</command>
avant d'essayer de les utiliser. De la m<>me mani<6E>re, si vous copiez un
fichier de configuration depuis votre disque dur
<trademark>Windows</trademark> vers une disquette, vous devez lancer
<command>dos2unix</command> sur la copie avant de l'utiliser avec
Shorewall.</para>
<simplelist>
<member><ulink url="http://www.simtel.net/pub/pd/51438.html">Version
Windows de dos2unix</ulink></member>
<member><ulink
url="http://www.megaloman.com/~hany/software/hd2u/">Version Linux de
dos2unix</ulink></member>
</simplelist>
</caution>
</section>
<section id="Concepts">
<title>Les Concepts de Shorewall</title>
<para><inlinegraphic fileref="images/BD21298_.gif" /></para>
<para>Les fichiers de configuration pour Shorewall sont situ<74>s dans le
r<>pertoire /etc/shorewall -- pour de simples param<61>trages, vous n'aurez <20>
faire qu'avec quelques-uns d'entre eux comme d<>crit dans ce guide. Des
squelettes de fichiers sont cr<63><72>s durant <ulink url="Install.htm">la
proc<6F>dure d'installation de Shorewall</ulink>.</para>
<warning>
<para><emphasis role="bold">Note aux utilisateurs de
Debian</emphasis></para>
<para>Si vous vous servez du .deb pour installer, vous vous rendrez
compte que votre r<>pertoire <filename
class="directory">/etc/shorewall</filename> est vide. Ceci est voulu.
Les squelettes des fichiers de configuration se trouvent sur votre
syst<73>me dans le r<>pertoire <filename
class="directory">/usr/share/doc/shorewall/default-config</filename>.
Copiez simplement les fichiers dont vous avez besoin depuis ce
r<>pertoire dans <filename class="directory">/etc/shorewall</filename>,
puis modifiez ces copies.</para>
<para>Remarquez que vous devez copier<filename>
/usr/share/doc/shorewall/default-config/shorewall.conf</filename> et
<filename>/usr/share/doc/shorewall/default-config/modules</filename>
dans <filename
class="directory"><filename>/etc/shorewall</filename></filename> m<>me si
vous ne modifiez pas ces fichiers.</para>
</warning>
<para>Au fur et <20> mesure de la pr<70>sentation de chaque fichier, je vous
sugg<67>re de jeter un oeil <20> ceux physiquement pr<70>sents sur votre syst<73>me --
chacun des fichiers contient des instructions de configuration d<>taill<6C>es
et des entr<74>es par d<>faut.</para>
<para>Shorewall voit le r<>seau o<> il fonctionne, comme <20>tant compos<6F> d'un
ensemble de zones. Dans ce guide nous utiliserons les zones
suivantes:</para>
<variablelist>
<varlistentry>
<term>fw</term>
<listitem>
<para>Le firewall lui-m<>me.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>net</term>
<listitem>
<para>L'internet public.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>loc</term>
<listitem>
<para>Un r<>seau local priv<69> utilisant des adresses IP
priv<69>es.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>dmz</term>
<listitem>
<para>Une zone d<>militaris<69>e (<acronym>DMZ</acronym>) contenant les
serveurs publiquement accessibles.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Les Zones sont d<>finies dans le fichier <filename><ulink
url="Documentation.htm#Zones"><filename>/etc/shorewall/zones</filename></ulink></filename>.</para>
<important>
<para>Le fichier <filename>/etc/shorewall/zones</filename> fourni avec
la distribution est vide. Vous pouvez cr<63>er l'ensemble de zones standard
d<>crites au-dessus en copiant puis en collant ce qui suit dans le
fichier:</para>
<programlisting>#ZONE TYPE OPTIONS
fw firewall
net ipv4
loc ipv4
dmz ipv4</programlisting>
</important>
<para>Remarquez que Shorewall reconna<6E>t aussi le syst<73>me firewall comme sa
propre zone - l'exemple ci-dessus suit la convention qui veut que la zone
firewall soit nomm<6D>e <emphasis role="bold">fw</emphasis>. Le nom de la
zone firewall (<emphasis role="bold">fw</emphasis> dans l'exemple plus
haut) est stock<63> dans la variable d'environnement <emphasis>$FW</emphasis>
lorsque le fichier <filename>/etc/shorewall/zones</filename> est trait<69>. A
l'exception du nom attribu<62> <20> la zone firewall, Shorewall n'attache aucune
signification aux noms de zone. Le zones sont enti<74>rement ce que VOUS en
faites. Ceci signifie que vous ne devriez pas attendre de Shorewall qu'il
fasse quoi que ce soit de sp<73>cial <quote>car il s'agit de la zone
internet</quote> ou <quote>car ceci est la
<acronym>DMZ</acronym></quote>.</para>
<para><inlinegraphic fileref="images/BD21298_.gif" /></para>
<para><EFBFBD>ditez le fichier <filename>/etc/shorewall/zones</filename> et
faites-y les changements n<>cessaires.</para>
<para>Les r<>gles qui concernent le trafic <20> autoriser ou <20> refuser sous
exprim<69>es en termes de Zones.</para>
<itemizedlist>
<listitem>
<para>Vous exprimez les politiques par d<>faut entre une zone et une
autre zone dans le fichier <filename><ulink
url="Documentation.htm#Policy">/etc/shorewall/policy</ulink></filename>.</para>
</listitem>
<listitem>
<para>Vous d<>finissez les exceptions <20> ces politiques par d<>faut dans
le fichier <filename><ulink
url="Documentation.htm#Rules">/etc/shorewall/rules</ulink></filename>.</para>
</listitem>
</itemizedlist>
<para>Shorewall est construit sur les m<>canismes de <ulink
url="http://www.netfilter.org">Netfilter</ulink>, service de filtrage du
noyau (kernel). Netfilter fournit une <ulink
url="http://www.cs.princeton.edu/~jns/security/iptables/iptables_conntrack.html">fonction
de suivi de connexion</ulink> qui permet une analyse d'<27>tat des paquets
(stateful inspection). Cette propri<72>t<EFBFBD> permet aux r<>gles du firewall
d'<27>tre d<>finies en termes de connexions plut<75>t qu'en termes de paquets.
Avec Shorewall, vous:</para>
<orderedlist>
<listitem>
<para>Identifiez la zone source (client).</para>
</listitem>
<listitem>
<para>Identifiez la zone destination (serveur).</para>
</listitem>
<listitem>
<para>Si la politique depuis la zone du client vers la zone du serveur
est ce que vous souhaitez pour cette paire client/serveur, vous n'avez
rien de plus <20> faire.</para>
</listitem>
<listitem>
<para>Si la politique n'est pas ce que vous souhaitez, alors vous
devez ajouter une r<>gle. Cette r<>gle est exprim<69>e en termes de zone
client et de zone serveur.</para>
</listitem>
</orderedlist>
<para><emphasis role="bold">Autoriser les connexions d'un certain type
depuis la zone A vers le firewall et depuis firewall vers la zone B
<emphasis role="bold">NE SIGNIFIE PAS que ces connections sont autoris<69>s
de la zone A <20> la zone B</emphasis></emphasis> (autrement dit, les
connexions impliquant la zone firewall ne sont pas transitives).</para>
<para>Pour chaque connexion demandant <20> entrer dans le firewall, la
requ<71>te est en premier lieu v<>rifi<66>e par rapport au fichier
<filename>/etc/shorewall/rules</filename>. Si aucune r<>gle dans ce fichier
ne correspond <20> la demande de connexion alors la premi<6D>re politique dans
le fichier <filename>/etc/shorewall/policy</filename> qui y correspond
sera appliqu<71>e. S'il y a une <ulink
url="shorewall_extension_scripts.htm">action commune</ulink> d<>finie pour
cette politique dans <filename>/etc/shorewall/actions</filename> ou dans
<filename>/usr/share/shorewall/actions.std</filename> cette action commune
sera ex<65>cut<75>e avant que l'action sp<73>cifi<66>e dans
<filename>/etc/shorewall/rules</filename> ne soit appliqu<71>e.</para>
<para>Avant Shorewall 2.2.0, le fichier
<filename>/etc/shorewall/policy</filename> avait les politiques
suivantes:</para>
<programlisting>#SOURCE ZONE DESTINATION ZONE POLICY LOG LIMIT:BURST
# LEVEL
fw net ACCEPT
net all DROP info
all all REJECT info</programlisting>
<important>
<para>Le fichier de politiques distribu<62> actuellement est vide. Vous
pouvez y copier et coller les entr<74>es pr<70>sent<6E>es ci-dessus comme point
de d<>part, puis l'adapter <20> vos propres politiques.</para>
</important>
<para>Les politiques pr<70>c<EFBFBD>dentes vont:</para>
<orderedlist>
<listitem>
<para>Autoriser (ACCEPT) toutes les connexions de votre r<>seau local
vers internet</para>
</listitem>
<listitem>
<para>Ignorer (DROP) toutes les tentatives de connexions d'internet
vers le firewall ou vers votre r<>seau local et enregistrer dans vos
journaux (log) un message au niveau info (<ulink
url="shorewall_logging.html">vous trouverez ici la description des
niveaux de journalisation</ulink>).</para>
</listitem>
<listitem>
<para>Rejeter (REJECT) toutes les autres demandes de connexion et
g<>n<EFBFBD>rer un message de niveau info dans votre journal. Quant la requ<71>te
est rejet<65>e et que le protocole est TCP, le firewall retourne un
paquet RST. Pour tous les autres protocoles, quand une requ<71>te est
rejet<65>e, le firewall renvoie un paquet ICMP port-unreachable.</para>
</listitem>
</orderedlist>
<para><inlinegraphic fileref="images/BD21298_.gif" /></para>
<para>Maintenant, <20>ditez votre <filename>/etc/shorewall/policy
</filename>et apportez-y tous les changements que vous souhaitez.</para>
</section>
<section id="Interfaces">
<title>Interfaces R<>seau</title>
<para>Dans la suite du guide, nous nous r<>f<EFBFBD>rerons au sch<63>ma ci-dessous.
Bien qu'il puisse ne pas correspondre <20> votre propre r<>seau, il peut <20>tre
utilis<69> pour illustrer les aspects importants de la configuration de
Shorewall.</para>
<para>Sur ce sch<63>ma:</para>
<itemizedlist>
<listitem>
<para>La zone <acronym>DMZ</acronym> est compos<6F>e des syst<73>mes DMZ 1
et DMZ 2. On utilise une <acronym>DMZ</acronym> pour isoler ses
serveurs accessibles depuis internet de ses syst<73>mes locaux. Ainsi si
un des serveurs de la <acronym>DMZ</acronym> est compromis, vous avez
encore un firewall entre le syst<73>me compromis et vos syst<73>mes
locaux.</para>
</listitem>
<listitem>
<para>La zone <quote>local</quote> est compos<6F>e des syst<73>mes Local 1,
Local 2 et Local 3.</para>
</listitem>
<listitem>
<para>Tous les syst<73>mes <20> l'ext<78>rieur du firewall, y compris ceux de
votre FAI, sont dans la zone internet.</para>
</listitem>
</itemizedlist>
<graphic align="center" fileref="images/dmz3.png" />
<para>La fa<66>on la plus simple pour d<>finir les zones est d'associer le nom
de la zone (d<>finie pr<70>c<EFBFBD>demment dans
<filename>/etc/shorewall/zones</filename>) <20> une interface r<>seau. Ceci
est fait dans le fichier <ulink
url="Documentation.htm#Interfaces">/etc/shorewall/interfaces</ulink>.</para>
<para>Le firewall illustr<74> ci-dessus <20> trois interfaces r<>seau. Lorsque la
connexion internet passe par un <quote>modem</quote> c<>ble
ou<acronym><acronym> ADSL
</acronym></acronym><emphasis><emphasis>l'Interface
Externe</emphasis></emphasis> sera l'adaptateur <20>thernet qui est connect<63>
<20> ce <quote>Modem</quote> (par exemple <filename
class="devicefile">eth0</filename>). Par contre, si vous vous connectez
avec <acronym>PPPoE</acronym> (Point-to-Point Protocol over Ethernet) ou
avec <acronym><acronym>PPTP</acronym></acronym> (Point-to-Point Tunneling
Protocol), l'interface externe sera une interface ppp (par exemple
<filename class="devicefile"><filename
class="devicefile">ppp0</filename></filename>). Si vous vous connectez
avec un simple modem <acronym><acronym>RTC</acronym></acronym>, votre
interface externe sera aussi <filename class="devicefile"><filename
class="devicefile">ppp0</filename></filename>. Si vous vous connectez en
utilisant l'<acronym><acronym>ISDN</acronym></acronym>, votre interface
externe sera <filename class="devicefile"><filename
class="devicefile">ippp0</filename></filename>.</para>
<para><inlinegraphic fileref="images/BD21298_.gif" /></para>
<para><emphasis role="bold">Si votre interface vers l'ext<78>rieur est
<filename class="devicefile">ppp0</filename> ou <filename
class="devicefile">ippp0</filename> alors vous mettrez CLAMPMSS=yes dans
le fichier
<filename>/etc/shorewall/shorewall.conf</filename></emphasis>.</para>
<para>Votre <emphasis>Interface locale</emphasis> sera un adaptateur
<20>thernet (<filename class="devicefile"><filename
class="devicefile">eth0</filename></filename>, <filename
class="devicefile"><filename class="devicefile">eth1</filename></filename>
or <filename class="devicefile"><filename
class="devicefile">eth2</filename></filename>) et sera connect<63>e <20> un hub
ou <20> un switch. Vos ordinateurs locaux seront connect<63>s <20> ce m<>me hub ou
switch (note : si vous n'avez qu'un seul ordinateur en local, vous pouvez
le connecter directement au firewall par un c<>ble crois<69>).</para>
<para>Votre <emphasis>interface <acronym>DMZ</acronym></emphasis> sera
aussi un adaptateur <20>thernet (<filename class="devicefile"><filename
class="devicefile">eth0</filename></filename>, <filename
class="devicefile"><filename class="devicefile">eth1</filename></filename>
or <filename class="devicefile"><filename
class="devicefile">eth2</filename></filename>) et sera connect<63> <20> un hub
ou un <20> switch. Vos ordinateurs appartenant <20> la DMZ seront connect<63>s <20> ce
m<>me hub ou switch (note : si vous n'avez qu'un seul ordinateur dans la
<acronym>DMZ</acronym>, vous pouvez le connecter directement au firewall
par un c<>ble crois<69>).</para>
<warning>
<para><emphasis role="bold">Ne connectez pas les interfaces interne et
externe sur le m<>me hub ou le m<>me switch, sauf <20> des fins de
test</emphasis>. Vous pouvez tester en utilisant ce type de
configuration si vous sp<73>cifiez l'option <emphasis
role="bold">arp_filter</emphasis> ou l'option <emphasis
role="bold">arp_ignore</emphasis> dans le fichier <filename
class="directory">/etc/shorewall/</filename><filename>interfaces, et
ce</filename> pour toutes les interfaces connect<63>es au hub/switch
commun. <emphasis role="bold">Il est tr<74>s fortement d<>conseill<6C>
d'utiliser une telle configuration avec un firewall en
production</emphasis>.</para>
</warning>
<para>Dans la suite, nous supposerons que:</para>
<itemizedlist>
<listitem>
<para>L'interface externe est <filename class="devicefile"><filename
class="devicefile">eth0</filename></filename>.</para>
</listitem>
<listitem>
<para>L'interface locale est <filename class="devicefile"><filename
class="devicefile">eth1</filename></filename>.</para>
</listitem>
<listitem>
<para>L'interface <acronym>DMZ</acronym> est <filename
class="devicefile"><filename
class="devicefile">eth2</filename></filename>.</para>
</listitem>
</itemizedlist>
<para>La configuration par d<>faut de Shorewall ne d<>finit le contenu
d'aucune zone. Pour d<>finir la configuration pr<70>sent<6E>e plus haut, le
fichier <ulink
url="Documentation.htm#Interfaces">/etc/shorewall/interfaces</ulink> doit
contenir:</para>
<programlisting>#ZONE INTERFACE BROADCAST OPTIONS
net eth0 detect rfc1918
loc eth1 detect
dmz eth2 detect</programlisting>
<para>Remarquez que la zone $FW n'a aucune entr<74>e dans le fichier
<filename>/etc/shorewall/interfaces.</filename></para>
<para><inlinegraphic fileref="images/BD21298_.gif" /></para>
<para><EFBFBD>ditez le fichier <filename>/etc/shorewall/interfaces.</filename>
D<>finissez les interfaces du r<>seau de votre firewall et associez chacune
d'entre elles <20> une zone. Si vous avez une zone qui est connect<63>e par plus
d'une interface, incluez simplement une entr<74>e pour chaque interface et
r<>p<EFBFBD>tez le nom de zone autant de fois que n<>cessaire.</para>
<example>
<title>Interfaces Multiples associ<63>es une Zone</title>
<programlisting>#ZONE INTERFACE BROADCAST OPTIONS
net eth0 detect rfc1918
loc eth1 detect
loc eth2 detect</programlisting>
</example>
<para><inlinegraphic fileref="images/BD21298_.gif" /></para>
<para>Vous pouvez d<>finir des zones plus compliqu<71>es en utilisant le
fichier<filename> <ulink
url="Documentation.htm#Hosts">/etc/shorewall/hosts</ulink></filename> mais
dans la plus part des cas, cela ne sera pas n<>cessaire. Vous trouverez des
exemples dans <ulink
url="Shorewall_and_Aliased_Interfaces.html">Shorewall_and_Aliased_Interfaces.html</ulink>
et <ulink url="Multiple_Zones.html">Multiple_Zones.html</ulink>.</para>
</section>
<section id="Addressing">
<title>Adressage, Sous-r<>seaux et Routage</title>
<para>Normalement, votre <acronym>FAI</acronym> vous attribue un ensemble
d'adresses IP publiques. Vous utiliserez une de ces adresses pour
configurer l'interface externe de votre firewall. Vous d<>ciderez ensuite
comment utiliser le reste de vos adresses. Avant d'aborder ce point, il
nous faut rappeler le contexte.</para>
<para>Si vous <20>tes d<>j<EFBFBD> familier de l'adressage IP et du routage, vous
pouvez directement aller <20> la prochaine section.</para>
<para>La pr<70>sentation qui suit ne fait que d'effleurer les questions de
l'adressage et du routage. Si vous vous voulez en apprendre plus sur
l'adressage <acronym>IP</acronym> et le routage, je vous recommande
<quote>IP Fundamentals: What Everyone Needs to Know about Addressing &amp;
Routing</quote>, Thomas A. Maufer, Prentice-Hall, 1999, ISBN 0-13-975483-0
(<ulink
url="http://www.phptr.com/browse/product.asp?product_id={58D4F6D4-54C5-48BA-8EDD-86EBD7A42AF6}">lien</ulink>).</para>
<section id="Addresses">
<title>Adressage IP</title>
<para>Les adresses IP version 4 (IPv4) sont cod<6F>es sur 32 bits. La
notation w.x.y.z fait r<>f<EFBFBD>rence <20> une adresse dont l'octet de poids fort
a pour valeur <quote>w</quote>, le suivant a pour valeur
<quote>x</quote>, etc. Si nous prenons l'adresse 192.0.2.14 et que nous
l'exprimons en hexad<61>cimal, nous obtenons</para>
<para><programlisting>C0.00.02.0E</programlisting>et si nous la
regardons comme un entier de 32 bits nous avons</para>
<para><programlisting>C000020E</programlisting></para>
</section>
<section id="Subnets">
<title>Sous-r<>seaux</title>
<para>Vous entendrez encore aujourd'hui les termes de <quote>R<EFBFBD>seau de
classe A</quote>, <quote>R<EFBFBD>seau de classe B</quote> et <quote>R<EFBFBD>seau de
classe C</quote>. Au d<>but de l'existence de l'IP, les r<>seaux ne
pouvaient avoir que trois tailles (il y avait aussi les r<>seaux de
classe D mais il <20>taient utilis<69>s diff<66>remment):</para>
<simplelist>
<member>Classe A - masque de sous-r<>seau 255.0.0.0, taille = 2 **
24</member>
<member>Classe B - masque de sous-r<>seau 255.255.0.0, taille = 2 **
16</member>
<member>Classe C - masque de sous-r<>seau 255.255.255.0, taille =
256</member>
</simplelist>
<para>La classe d'un r<>seau <20>tait d<>termin<69>e de fa<66>on unique par la
valeur de l'octet de poids fort de son adresse, ainsi en regardant une
adresse IP on pouvait d<>terminer imm<6D>diatement la valeur du masque
r<>seau. Le masque r<>seau est un nombre qui combin<69> <20> une adresse par un
ET logique, isole l'adresse du r<>seau auquel cette adresse appartient.
Le reste de l'adresse est le <emphasis>num<EFBFBD>ro d'h<>te</emphasis>. Par
exemple, dans l'adresse de classe C 192.0.2.14, la valeur hexad<61>cimale
de l'adresse du r<>seau est C00002 et le num<75>ro d'h<>te est 0E.</para>
<para>Comme internet se d<>veloppait, il devint clair qu'un
partitionnement aussi grossier de l'espace d'adresses de 32 bits allait
<20>tre tr<74>s limitatif (rapidement, les grandes soci<63>t<EFBFBD>s et les universit<69>s
s'<27>taient d<>j<EFBFBD> attribu<62>es leur propre r<>seau de classe A !). Apr<70>s
quelques faux d<>parts, la technique courante du sous-adressage de ces
r<>seaux en plus petits sous-r<>seaux <20>volua. On fait r<>f<EFBFBD>rence <20> cette
technique sous l'appellation de Routage Inter-Domaine Sans Classe ou
<emphasis>Classless InterDomain Routing</emphasis>
(<acronym>CIDR</acronym>). Aujourd'hui, les syst<73>mes avec lesquels vous
travaillez sont probablement compatibles avec la notation CIDR. La
gestion des r<>seaux bas<61>e sur les Classes est du domaine du
pass<73>.</para>
<para>Un <emphasis>sous-r<>seau</emphasis> (<emphasis>subnet</emphasis>
ou <emphasis>subnetwork</emphasis>) est un ensemble contigu d'adresses
IP tel que:</para>
<orderedlist>
<listitem>
<para>Le nombre d'adresses dans le jeu est un multiple de 2.</para>
</listitem>
<listitem>
<para>La premi<6D>re adresse dans le jeu est un multiple de la taille
du jeu.</para>
</listitem>
<listitem>
<para>La premi<6D>re adresse du sous-r<>seau est r<>serv<72>e et on s'y
r<>f<EFBFBD>re comme <20>tant <emphasis>l'adresse du
sous-r<>seau</emphasis>.</para>
</listitem>
<listitem>
<para>La derni<6E>re adresse du sous-r<>seau est r<>serv<72>e comme
<emphasis>adresse de diffusion (broadcast) du
sous-r<>seau</emphasis>.</para>
</listitem>
</orderedlist>
<para>Comme vous pouvez le constater par cette d<>finition, dans chaque
sous-r<>seau de taille n il y a (n - 2) adresses utilisables (adresses
qui peuvent <20>tre attribu<62>es <20> un h<>te). La premi<6D>re et la derni<6E>re
adresse du sous-r<>seau sont utilis<69>es respectivement pour identifier
l'adresse du sous-r<>seau et l'adresse de diffusion du sous-r<>seau. En
cons<6E>quence, de petits sous-r<>seaux sont plus gourmands en adresses IP
que des sous-r<>seaux plus <20>tendus.</para>
<para>Comme n est une puissance de deux, nous pouvons ais<69>ment calculer
le <emphasis>Logarithme <20> base 2 de n </emphasis>(log2). La taille et le
logarithme <20> base 2 pour les tailles de sous-r<>seau les plus communes
sont donn<6E>s par la table suivante:</para>
<table>
<title>Logarithmes base 2</title>
<tgroup cols="3">
<tbody>
<row>
<entry><emphasis role="bold">n</emphasis></entry>
<entry><emphasis role="bold">log2 n</emphasis></entry>
<entry><emphasis role="bold">(32 - log2 n)</emphasis></entry>
</row>
<row>
<entry>8</entry>
<entry>3</entry>
<entry>29</entry>
</row>
<row>
<entry>16</entry>
<entry>4</entry>
<entry>28</entry>
</row>
<row>
<entry>32</entry>
<entry>5</entry>
<entry>27</entry>
</row>
<row>
<entry>64</entry>
<entry>6</entry>
<entry>26</entry>
</row>
<row>
<entry>128</entry>
<entry>7</entry>
<entry>25</entry>
</row>
<row>
<entry>256</entry>
<entry>8</entry>
<entry>24</entry>
</row>
<row>
<entry>512</entry>
<entry>9</entry>
<entry>23</entry>
</row>
<row>
<entry>1024</entry>
<entry>10</entry>
<entry>22</entry>
</row>
<row>
<entry>2048</entry>
<entry>11</entry>
<entry>21</entry>
</row>
<row>
<entry>4096</entry>
<entry>12</entry>
<entry>20</entry>
</row>
<row>
<entry>8192</entry>
<entry>13</entry>
<entry>19</entry>
</row>
<row>
<entry>16384</entry>
<entry>14</entry>
<entry>18</entry>
</row>
<row>
<entry>32768</entry>
<entry>15</entry>
<entry>17</entry>
</row>
<row>
<entry>65536</entry>
<entry>16</entry>
<entry>16</entry>
</row>
</tbody>
</tgroup>
</table>
<para>Vous constaterez que la table ci-dessus contient aussi une colonne
(32 - log2<emphasis role="bold"> n</emphasis>). Ce nombre est le
<emphasis>Masque de Sous-r<>seau <20> Longueur Variable</emphasis> ou
<emphasis>Variable Length Subnet Mask</emphasis>
(<acronym>VLSM</acronym>) pour un sous-r<>seau de taille n. De la table
ci-dessus, nous pouvons d<>duire la suivante, qui est plus facile <20>
utiliser.</para>
<table>
<title>VLSM</title>
<tgroup cols="3">
<tbody>
<row>
<entry><emphasis role="bold">Taille du
sous-r<>seau</emphasis></entry>
<entry><emphasis role="bold">VLSM</emphasis></entry>
<entry><emphasis role="bold">Masque de
sous-r<>seau</emphasis></entry>
</row>
<row>
<entry>8</entry>
<entry>/29</entry>
<entry>255.255.255.248</entry>
</row>
<row>
<entry>16</entry>
<entry>/28</entry>
<entry>255.255.255.240</entry>
</row>
<row>
<entry>32</entry>
<entry>/27</entry>
<entry>255.255.255.224</entry>
</row>
<row>
<entry>64</entry>
<entry>/26</entry>
<entry>255.255.255.192</entry>
</row>
<row>
<entry>128</entry>
<entry>/25</entry>
<entry>255.255.255.128</entry>
</row>
<row>
<entry>256</entry>
<entry>/24</entry>
<entry>255.255.255.0</entry>
</row>
<row>
<entry>512</entry>
<entry>/23</entry>
<entry>255.255.254.0</entry>
</row>
<row>
<entry>1024</entry>
<entry>/22</entry>
<entry>255.255.252.0</entry>
</row>
<row>
<entry>2048</entry>
<entry>/21</entry>
<entry>255.255.248.0</entry>
</row>
<row>
<entry>4096</entry>
<entry>/20</entry>
<entry>255.255.240.0</entry>
</row>
<row>
<entry>8192</entry>
<entry>/19</entry>
<entry>255.255.224.0</entry>
</row>
<row>
<entry>16384</entry>
<entry>/18</entry>
<entry>255.255.192.0</entry>
</row>
<row>
<entry>32768</entry>
<entry>/17</entry>
<entry>255.255.128.0</entry>
</row>
<row>
<entry>65536</entry>
<entry>/16</entry>
<entry>255.255.0.0</entry>
</row>
<row>
<entry>2 ** 24</entry>
<entry>/8</entry>
<entry>255.0.0.0</entry>
</row>
</tbody>
</tgroup>
</table>
<para>Notez que le <acronym>VLSM</acronym> est <20>crit avec un slash
(<quote>/</quote>) -- vous entendrez souvent nommer un r<>seau de taille
64 comme <20>tant un <quote>slash 26</quote> et un de taille 8 comme <20>tant
un <quote>slash 29</quote>.</para>
<para>Le masque de sous-r<>seau est simplement un nombre de 32 bits avec
les premiers bits correspondant au <acronym>VLSM</acronym> positionn<6E>s <20>
<quote>1</quote> et les bits suivants <20> <quote>0</quote>. Par exemple,
pour un sous-r<>seau de taille 64, le masque de sous-r<>seau d<>bute par 26
bits <20> <quote>1</quote>:</para>
<para><programlisting>11111111111111111111111111000000 = FFFFFFC0 = FF.FF.FF.C0 = 255.255.255.192</programlisting>Le
masque de sous-r<>seau a la propri<72>t<EFBFBD> suivante: si vous appliquez un ET
logique entre le masque de sous-r<>seau et une adresse dans le
sous-r<>seau, le r<>sultat est l'adresse du sous-r<>seau. Tout aussi
important, si vous appliquer un ET logique entre le masque de
sous-r<>seau et une adresse en dehors du sous-r<>seau, le r<>sultat n'est
PAS l'adresse du sous-r<>seau. Comme nous le verrons apr<70>s, cette
propri<72>t<EFBFBD> du masque de sous-r<>seau est tr<74>s importante dans le
routage.</para>
<para>Pour un sous-r<>seau dont l'adresse est <emphasis
role="bold">a.b.c.d</emphasis> et dont le <acronym>VLSM</acronym> est
<emphasis role="bold">/v</emphasis>, nous notons le sous-r<>seau
<quote><emphasis role="bold">a.b.c.d/v</emphasis></quote> en utilisant
la <emphasis><emphasis>notation CIDR</emphasis></emphasis>.</para>
<table>
<title>Un exemple de sous-r<>seau :</title>
<tgroup cols="2">
<tbody>
<row>
<entry><emphasis role="bold">Sous-r<>seau:</emphasis></entry>
<entry>10.10.10.0 - 10.10.10.127</entry>
</row>
<row>
<entry><emphasis role="bold">Taille du
sous-r<>seau:</emphasis></entry>
<entry>128</entry>
</row>
<row>
<entry><emphasis role="bold">Adresse du
sous-r<>seau:</emphasis></entry>
<entry>10.10.10.0</entry>
</row>
<row>
<entry><emphasis role="bold">Adresse de
diffusion:</emphasis></entry>
<entry>10.10.10.127</entry>
</row>
<row>
<entry><emphasis role="bold">Notation CIDR:</emphasis></entry>
<entry>10.10.10.0/25</entry>
</row>
</tbody>
</tgroup>
</table>
<para>Il existe deux sous-r<>seaux d<>g<EFBFBD>n<EFBFBD>r<EFBFBD>s qui doivent <20>tre mentionn<6E>s:
le sous-r<>seau avec un seul membre et le sous-r<>seau avec 2 ** 32
membres.</para>
<table>
<title>/32 and /0</title>
<tgroup cols="4">
<tbody>
<row>
<entry><emphasis role="bold">Taille du
sous-r<>seau</emphasis></entry>
<entry><emphasis role="bold">Longueur VLSM</emphasis></entry>
<entry><emphasis role="bold">Masque de
sous-r<>seau</emphasis></entry>
<entry><emphasis role="bold">Notation CIDR</emphasis></entry>
</row>
<row>
<entry>1</entry>
<entry>32</entry>
<entry>255.255.255.255</entry>
<entry>a.b.c.d/32</entry>
</row>
<row>
<entry>32</entry>
<entry>0</entry>
<entry>0.0.0.0</entry>
<entry>0.0.0.0/0</entry>
</row>
</tbody>
</tgroup>
</table>
<para>Ainsi, chaque adresse <emphasis role="bold">a.b.c.d</emphasis>
peut aussi <20>tre <20>crite <emphasis role="bold">a.b.c.d/32</emphasis> et
l'ensemble des adresses possibles est <20>crit <emphasis
role="bold">0.0.0.0/0</emphasis>.</para>
<para>Un utilisateur de Shorewall a propos<6F> cette tr<74>s utile <ulink
url="http://shorewall.net/pub/shorewall/contrib/IPSubNetMask.html">repr<70>sentation
graphique</ulink> de ces informations.</para>
<para>Dans la suite, nous utiliserons la notation <emphasis
role="bold">a.b.c.d/v</emphasis> pour d<>crire la configuration IP d'une
interface r<>seau (l'utilitaire <command>ip</command> utilise aussi cette
syntaxe). Dans cette notation l'interface est configur<75>e avec une
adresse ip <emphasis role="bold">a.b.c.d</emphasis> avec le masque de
sous-r<>seau qui correspond au VLSM /<emphasis
role="bold">v</emphasis>.</para>
<example>
<title>192.0.2.65/29</title>
<para>L'interface est configur<75>e avec l'adresse IP 192.0.2.65 et le
masque de sous-r<>seau 255.255.255.248.</para>
</example>
<para>/sbin/shorewall propose une commande <command>ipcalc</command> qui
calcule automatiquement les informations d'un [sous-]r<>seau.</para>
<example>
<title>Utiliser la commande
<command><command>ipcalc</command></command>.</title>
<programlisting>shorewall ipcalc 10.10.10.0/25
CIDR=10.10.10.0/25
NETMASK=255.255.255.128
NETWORK=10.10.10.0
BROADCAST=10.10.10.127</programlisting>
</example>
<example>
<title>Utiliser la commande
<command><command>ipcalc</command></command>.</title>
<programlisting>shorewall ipcalc 10.10.10.0 255.255.255.128
CIDR=10.10.10.0/25
NETMASK=255.255.255.128
NETWORK=10.10.10.0
BROADCAST=10.10.10.127</programlisting>
</example>
</section>
<section id="Routing">
<title>Routage</title>
<para>L'un des objectifs de la gestion en sous-r<>seaux est qu'elle pose
les bases pour le routage. Ci-dessous se trouve la table de routage de
mon firewall:</para>
<programlisting>[root@gateway root]# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flgs MSS Win irtt Iface
192.168.9.1 0.0.0.0 255.255.255.255 UH 40 0 0 texas
206.124.146.177 0.0.0.0 255.255.255.255 UH 40 0 0 eth1
206.124.146.180 0.0.0.0 255.255.255.255 UH 40 0 0 eth3
192.168.3.0 0.0.0.0 255.255.255.0 U 40 0 0 eth3
192.168.2.0 0.0.0.0 255.255.255.0 U 40 0 0 eth1
192.168.1.0 0.0.0.0 255.255.255.0 U 40 0 0 eth2
206.124.146.0 0.0.0.0 255.255.255.0 U 40 0 0 eth0
192.168.9.0 192.0.2.223 255.255.255.0 UG 40 0 0 texas
127.0.0.0 0.0.0.0 255.0.0.0 U 40 0 0 lo
0.0.0.0 206.124.146.254 0.0.0.0 UG 40 0 0 eth0
[root@gateway root]#</programlisting>
<para>L'interface <emphasis>texas</emphasis> est un tunnel GRE vers un
site pair <20> Dallas, au Texas.</para>
<para>Les trois premi<6D>res routes sont des routes vers des h<>tes
(<emphasis>host routes)</emphasis> puisqu'elles indiquent comment aller
vers un h<>te unique. Dans la sortie de <command>netstat</command>, cela
se voit tr<74>s bien au masque de sous-r<>seau (Genmask) <20> 255.255.255.255,
ou bien au drapeau <20> <quote>H</quote> dans la colonne
<quote>Flags</quote> . Les autres routes sont des routes r<>seau car
elles indiquent au noyau comment router des paquets <20> un sous-r<>seau. La
derni<6E>re route est <emphasis>la route par d<>faut</emphasis>. La
passerelle mentionn<6E>e dans cette route est appel<65>e <emphasis>la
passerelle par d<>faut (default gateway).</emphasis></para>
<para>Quant le noyau essaye d'envoyer un paquet <20> une adresse IP
<emphasis role="bold">A</emphasis>, il commence au d<>but de la table de
routage et:</para>
<itemizedlist>
<listitem>
<para><emphasis role=""><emphasis>Il r<>alise un ET logique entre
A</emphasis></emphasis> et la valeur du masque de sou-r<>seau pour
cette entr<74>e de la table.</para>
</listitem>
<listitem>
<para>Ce r<>sultat est compar<61> avec la valeur de la
<quote>Destination</quote> dans cette entr<74>e de la table.</para>
</listitem>
<listitem>
<para>Si le r<>sultat et la valeur de la <quote>Destination</quote>
sont identiques, alors:</para>
<itemizedlist>
<listitem>
<para>Si la colonne <quote>Gateway</quote> n'est pas nulle, le
paquet est envoy<6F> <20> la passerelle par l'interface nomm<6D>e dans la
colonne <quote>Iface</quote>.</para>
</listitem>
<listitem>
<para>Sinon, le paquet est directement envoy<6F> <20> <emphasis
role="bold">A</emphasis> <20> travers l'interface nomm<6D>e dans la
colonne <quote>iface</quote>.</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>Sinon, les <20>tapes pr<70>c<EFBFBD>dentes sont r<>p<EFBFBD>t<EFBFBD>es sur l'entr<74>e
suivante de la table.</para>
</listitem>
</itemizedlist>
<para>Puisque la route par d<>faut correspond <20> toutes les adresses IP
(<emphasis role="bold">A </emphasis>ET 0.0.0.0 = 0.0.0.0), les paquets
qui ne correspondent <20> aucune des autres entr<74>es de la table de routage
sont envoy<6F>s <20> la passerelle par d<>faut qui est g<>n<EFBFBD>ralement un routeur
de votre <acronym>FAI</acronym>.</para>
<para>Prenons un exemple. Supposons que vous souhaitiez router un paquet
<20> 192.168.1.5. Cette adresse ne correspond <20> aucune route d'h<>te dans la
table mais lorsque nous faisons le ET logique de cette adresse avec
255.255.255.0, le r<>sultat est 192.168.1.0 qui correspond <20> cette entr<74>e
de la table:</para>
<para><programlisting>192.168.1.0 0.0.0.0 255.255.255.0 U 40 0 0 eth2</programlisting></para>
<para>Donc, pour router ce paquet <20> 192.168.1.5, il faudra le
transmettre directement <20> l'interface eth2.</para>
<para>Un point important doit <20>tre soulign<67> -- tous les paquets sont
envoy<6F>s en utilisant la table de routage et les paquets en r<>ponse ne
sont pas un cas particulier. Il semble exister une id<69>e fausse comme
quoi les paquets r<>ponses seraient comme les saumons et contiendraient
une sorte de code g<>n<EFBFBD>tique qui leur permettrait suivre la m<>me route
emprunt<6E>e par les paquets de requ<71>te (request) <20> l'aller. Ce n'est pas
le cas. Les r<>ponses peuvent prendre un chemin totalement diff<66>rent de
celui pris par les paquets de la requ<71>te client <20> l'aller -- Ces routes
sont totalement ind<6E>pendantes.</para>
</section>
<section>
<title id="ARP">Protocole de R<>solution d'Adresse (ARP)</title>
<para>Quant on envoie des paquets sur <20>thernet, les adresses IP ne sont
pas utilis<69>es. L'adressage <20>thernet est bas<61> sur les adresses
<acronym>MAC</acronym> (<emphasis>Media Access Control)</emphasis>.
Chaque carte <20>thernet <20> sa propre adresse <acronym>MAC</acronym> unique
qui est grav<61>e dans une <acronym>PROM</acronym> lors de sa fabrication.
Vous pouvez obtenir l'adresse <acronym>MAC</acronym> d'une carte
<20>thernet gr<67>ce <20> l'utilitaire
<quote><command>ip</command></quote>:</para>
<programlisting>[root@gateway root]# <command>ip addr show eth0</command>
2: eth0: &lt;BROADCAST,MULTICAST,UP&gt; mtu 1500 qdisc htb qlen 100
link/ether 02:00:08:e3:fa:55 brd ff:ff:ff:ff:ff:ff
inet 206.124.146.176/24 brd 206.124.146.255 scope global eth0
inet 206.124.146.178/24 brd 206.124.146.255 scope global secondary eth0
inet 206.124.146.179/24 brd 206.124.146.255 scope global secondary eth0
[root@gateway root]#
</programlisting>
<para>Comme vous pouvez le constater, l'adresse <acronym>MAC</acronym>
est cod<6F>e sur 6 octets (48 bits). L'adresse <acronym>MAC</acronym> est
g<>n<EFBFBD>ralement imprim<69>e sur la carte elle-m<>me.</para>
<para>Comme IP utilise les adresses IP et <20>thernet les adresses MAC, il
faut un m<>canisme pour transcrire une adresse IP en adresse MAC. C'est
ce dont est charg<72> le protocole de r<>solution d'adresse
(<emphasis>Address Resolution Protocol
</emphasis><acronym>ARP</acronym>). Voici <acronym>ARP</acronym> en
action:</para>
<programlisting>[root@gateway root]# <command>tcpdump -nei eth2 arp</command>
tcpdump: listening on eth2
09:56:49.766757 2:0:8:e3:4c:48 0:6:25:aa:8a:f0 arp 42:
arp who-has 192.168.1.19 tell 192.168.1.254
09:56:49.769372 0:6:25:aa:8a:f0 2:0:8:e3:4c:48 arp 60:
arp reply 192.168.1.19 is-at 0:6:25:aa:8a:f0
2 packets received by filter
0 packets dropped by kernel
[root@gateway root]#</programlisting>
<para>Dans cet <20>change , 192.168.1.254 (MAC 2:0:8:e3:4c:48) veut
conna<6E>tre l'adresse MAC du p<>riph<70>rique qui a l'adresse IP 192.168.1.19.
Le syst<73>me ayant cette adresse IP r<>pond que l'adresse MAC du
p<>riph<70>rique avec l'adresse IP 192.168.1.19 est 0:6:25:aa:8a:f0.</para>
<para>Afin de ne pas avoir <20> <20>changer des information
<acronym>ARP</acronym> chaque fois qu'un paquet doit <20>tre envoy<6F>, le
syst<73>me maintient un cache des correspondances IP&lt;-&gt; MAC. Vous
pouvez voir le contenu du cache <acronym>ARP</acronym> sur votre syst<73>me
(y compris sur les syst<73>mes <trademark>Windows</trademark>) en utilisant
la commande <command>arp</command></para>
<programlisting>[root@gateway root]# <command>arp -na</command>
? (206.124.146.177) at 00:A0:C9:15:39:78 [ether] on eth1
? (192.168.1.3) at 00:A0:CC:63:66:89 [ether] on eth2
? (192.168.1.5) at 00:A0:CC:DB:31:C4 [ether] on eth2
? (206.124.146.254) at 00:03:6C:8A:18:38 [ether] on eth0
? (192.168.1.19) at 00:06:25:AA:8A:F0 [ether] on eth2</programlisting>
<para>Les points d'interrogation au d<>but des lignes sont le r<>sultat de
l'utilisation de l'option <quote>n</quote> qui emp<6D>che le programme
<command>arp</command> de r<>soudre le noms <acronym>DNS</acronym> pour
les adresses IP (la commande <command>arp</command> <trademark>de
Windows</trademark> n'accepte pas cette option) . Si je n'avais pas
utilis<69> pas cette option, les points d'interrogation seraient remplac<61>s
par les noms pleinement qualifi<66>s (FQDN) correspondant <20> chaque adresse
IP. Remarquez que la derni<6E>re information dans le cache correspond <20>
celle que nous avons vue en utilisant <command>tcpdump</command> <20>
l'instant.</para>
</section>
<section id="RFC1918">
<title>RFC 1918</title>
<para>Les adresses IP sont allou<6F>es par l'<acronym>IANA</acronym>
(<ulink url="http://www.iana.org/">Internet Assigned Number
Authority</ulink>) qui d<>l<EFBFBD>gue les allocations sur une base g<>ographique
aux Registres Internet R<>gionaux (<acronym>RIR</acronym>). Par exemple,
les allocations pour les Etats-Unis et l'Afrique sub-Saharienne sont
d<>l<EFBFBD>gu<67>es <20> l'<acronym>ARIN</acronym> (<ulink
url="http://www.arin.net/">American Registry for Internet
Numbers</ulink>). Ces RIRs peuvent <20> leur tour d<>l<EFBFBD>guer <20> des bureaux
nationaux. La plupart d'entre nous ne traite pas avec ces autorit<69>s mais
obtient plut<75>t ses adresse IP de son <acronym>FAI</acronym>.</para>
<para>Dans la r<>alit<69>, on ne peut en g<>n<EFBFBD>ral pas se permettre d'avoir
autant d'adresses IP publiques que l'on a de p<>riph<70>riques en
n<>cessitant une. C'est cette raison qui nous am<61>ne <20> utiliser des
adresses IP priv<69>es. La RFC 1918 r<>serve plusieurs plages d'adresses <20>
cette fin :</para>
<programlisting>10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255</programlisting>
<para>Les adresses r<>serv<72>es par la RFC 1918 sont parfois appel<65>es
non-routables car les routeurs d'infrastructure internet ne feront pas
suivre (forward) les paquets qui ont une adresse de destination de la
RFC 1918. Cela est compr<70>hensible puisque chacun peut choisir n'importe
laquelle ces adresses pour son usage priv<69>. Mais le terme de
non-routable est quelque peu malencontreux car il peut amener <20> conclure
de mani<6E>re erron<6F>e que le trafic destin<69> <20> une de ces adresses ne peut
<20>tre envoy<6F> <20> travers un routeur. Ceci est faux et les routeurs priv<69>s,
dont votre firewall Shorewall, peuvent parfaitement faire suivre du
trafic avec des adresses conformes <20> la RFC 1918.</para>
<para>Quant on choisit des adresses dans ces plages, il faut bien avoir
<20> l'esprit les choses suivantes:</para>
<itemizedlist>
<listitem>
<para>Comme l'espace des adresses IPv4 s'<27>puise, de plus en plus
d'organisation (y compris les FAI) commencent <20> utiliser les
adresses RFC 1918 dans leurs infrastructures.</para>
</listitem>
<listitem>
<para>Vous ne devez pas utiliser d'adresse IP qui soit utilis<69>e par
votre <acronym>FAI</acronym> ou une autre organisation avec laquelle
vous souhaitez <20>tablir une liaison <acronym>VPN</acronym></para>
</listitem>
</itemizedlist>
<para>C'est pourquoi c'est une bonne id<69>e de v<>rifier apr<70>s de votre FAI
s'il n'utilise pas (ou ne pr<70>voie pas d'utiliser) des adresses priv<69>es
avant de d<>cider quelles adresses que vous allez utiliser.</para>
<note>
<para><emphasis role="bold">Dans ce document, les adresses IP externes
<quote>r<EFBFBD>elles</quote> sont dans la plage 192.0.2.x. Les adresses du
r<>seau 192.0.2.0/24 sont r<>serv<72>es par RFC 3330 pour l'utilisation
d'adresses IP publiques dans les exemples imprim<69>s ainsi que dans les
r<>seaux de test. Ces adresses ne doivent pas <20>tre confondues avec les
adresses 192.168.0.0/16, qui comme d<>crit ci-dessus, sont r<>serv<72>es
par la RFC 1918 pour une utilisation priv<69>e.</emphasis></para>
</note>
</section>
</section>
<section id="Options">
<title>Configurer votre R<>seau</title>
<para>Le choix d'une configuration pour votre r<>seau d<>pend d'abord du
nombre d'adresses IP publiques dont vous disposez et du nombre d'adresses
IP dont vous avez besoin. Quel que soit le nombre d'adresses dont vous
disposez, votre <acronym>FAI</acronym> peut vous servir ce jeu d'adresses
de deux mani<6E>res:</para>
<itemizedlist>
<listitem>
<para><emphasis role="bold">Rout<EFBFBD>es</emphasis> - Le trafic vers
chacune de vos adresses publiques sera rout<75> <20> travers une seule
adresse de passerelle. Cela sera g<>n<EFBFBD>ralement fait si votre FAI vous
attribue un sous-r<>seau complet (/29 ou plus). Dans ce cas, vous
affecterez l'adresse de cette passerelle comme <20>tant l'adresse de
l'interface externe de votre firewall/routeur.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Non rout<75>es</emphasis> - Votre FAI enverra
le trafic <20> chacune de vos adresses directement.</para>
</listitem>
</itemizedlist>
<para>Dans les paragraphes qui suivent, nous <20>tudierons chacun de ces cas
s<>par<61>ment.</para>
<para>Avant de commencer, il y a une chose que vous devez v<>rifier:</para>
<para><inlinegraphic fileref="images/BD21298_.gif" /></para>
<para>Si vous utilisez un paquetage Debian, v<>rifiez votre fichier
<filename>shorewall.conf</filename> afin de vous assurer que les
param<61>tres suivants sont convenablement fix<69>s. Si ce n'est pas le cas,
appliquez les changements n<>cessaires:</para>
<itemizedlist>
<listitem>
<para>IP_FORWARDING=On</para>
</listitem>
</itemizedlist>
<section id="Routed">
<title>Rout<EFBFBD></title>
<para>Supposons que votre fournisseur d'acc<63>s vous ait assign<67> le
sous-r<>seau 192.0.2.64/28 rout<75> par 192.0.2.65. Vous avez les adresses
IP 192.0.2.64 - 192.0.2.79 et l'adresse externe de votre firewall est
192.0.2.65. Votre FAI vous a aussi dit que vous devez utiliser le masque
de sous-r<>seau 255.255.255.0 (ainsi, votre /28 est un sous-ensemble du
/24, plus grand). Avec autant d'adresses IP, vous pouvez scinder votre
r<>seau /28 en deux sous-r<>seaux /29 et configurer votre r<>seau comme
l'indique le diagramme suivant.</para>
<graphic align="center" fileref="images/dmz4.png" />
<para>Dans l'exemple, la zone d<>militaris<69> <acronym>DMZ</acronym> est
dans le sous-r<>seau 192.0.2.64/29 et le r<>seau local est dans
192.0.2.72/29. La passerelle par d<>faut pour les h<>tes dans la
<acronym>DMZ</acronym> doit <20>tre configur<75>e <20> 192.0.2.66 et la
passerelle par d<>faut pour ceux du r<>seau local doit <20>tre configur<75>e <20>
192.0.2.73.</para>
<para>Notez que cette solution est plut<75>t gourmande en adresses
publiques puisqu'elle utilise 192.0.2.64 et 192.0.2.72 pour les adresses
de sous-r<>seau, 192.0.2.71 et 192.0.2.79 pour les adresses de diffusion
(broadcast) du r<>seau, et 192.0.2.66 et 168.0.2.73 pour les adresses
internes sur le firewall/routeur. Elle montre n<>ammoins comment la
gestion en sous-r<>seaux peut fonctionner. Et si nous avions un r<>seau
/24 plut<75>t qu'un /28, l'utilisation de 6 adresses IP parmi les 256
disponibles serait largement justifi<66>e par la simplicit<69> du
param<61>trage.</para>
<para>Le lecteur attentif aura peut-<2D>tre remarqu<71> que l'interface
externe du firewall/Routeur est en fait incluse dans le sous-r<>seau
<acronym>DMZ</acronym> (192.0.2.64/29). On peut se demander ce qui se
passe quand l'h<>te DMZ 1 (192.0.2.67) essaye de communiquer avec
192.0.2.65. La table de routage sur l'h<>te DMZ 1 doit ressembler <20>
cela:</para>
<programlisting format="linespecific">Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.0.2.64 0.0.0.0 255.255.255.248 U 40 0 0 eth0
0.0.0.0 192.0.2.66 0.0.0.0 UG 40 0 0 eth0</programlisting>
<para>Donc, lorsque l'h<>te DMZ 1 voudra communiquer avec 192.0.2.65, il
enverra une requ<71>te <acronym>ARP</acronym> "qui-a 192.0.2.65" alors
qu'aucune interface sur le segment <20>thernet DMZ n'a cette adresse IP.
Assez bizarrement, le firewall r<>pondra <20> la requ<71>te avec
<emphasis><emphasis role="underlined"><emphasis
role="underline">l'adresse MAC de sa propre interface
DMZ</emphasis></emphasis> </emphasis>! DMZ 1 peut alors envoyer des
trames <20>thernet adress<73>es <20> cette adresse <acronym>MAC</acronym> et les
trames seront re<72>ues correctement par le firewall/routeur.</para>
<para>L'avertissement fait plus haut qui d<>conseille tr<74>s fortement la
connexion de plusieurs interfaces du firewall/routeur <20> un m<>me hub ou
switch est une cons<6E>quence directe de ce comportement plut<75>t inattendu
d'<acronym>ARP</acronym> de la part du noyau Linux. Quant une requ<71>te
ARP destin<69>e <20> une des adresses du firewall/routeur est envoy<6F>e par un
autre syst<73>me connect<63> au m<>me hub ou switch, toutes les interfaces du
firewall qui y sont connect<63>es peuvent r<>pondre ! C'est alors la course
<20> savoir quelle r<>ponse <quote>c'est-ici</quote> atteindra la premi<6D>re
l'<27>metteur de la requ<71>te.</para>
</section>
<section id="NonRouted">
<title>Non rout<75></title>
<para>Si vous <20>tes dans la situation pr<70>c<EFBFBD>dente mais que votre trafic
n'est pas rout<75> par votre <acronym>FAI</acronym>, vous pouvez configurer
votre r<>seau exactement comme d<>crit plus haut, au prix d'une l<>g<EFBFBD>re
contorsion suppl<70>mentaire: sp<73>cifiez simplement l'option
<quote><command>proxyarp</command></quote> sur les trois interfaces du
firewall dans le fichier
<filename>/etc/shorewall/interfaces</filename>.</para>
<para>La plupart d'entre nous n'ont pas le luxe d'avoir suffisamment
d'adresses publiques IP pour configurer leur r<>seau comme indiqu<71> dans
l'exemple pr<70>c<EFBFBD>dent (m<>me si la configuration est rout<75>e).</para>
<para><emphasis role="bold">Dans le reste de cette section, supposons
que notre FAI nous ait assign<67> la plage d'adresses IP 192.0.2.176-180,
qu'il nous ait dit d'utiliser le masque de sous-r<>seau 255.255.255.0 et
que la passerelle par d<>faut soit 192.0.2.254.</emphasis></para>
<para>De toute <20>vidence, ce jeu d'adresses ne comprend pas de
sous-r<>seau et n'a pas suffisamment d'adresses pour toutes les
interfaces de notre r<>seau. Nous pouvons utiliser quatre techniques
diff<66>rentes pour contourner ce probl<62>me.</para>
<itemizedlist>
<listitem>
<para>La traduction d'adresses source (<emphasis>Source Network
Address Translation</emphasis> <emphasis
role="bold">SNAT</emphasis>).</para>
</listitem>
<listitem>
<para>La traduction d'adresses destination <emphasis>(Destination
Network Address Translation</emphasis> <emphasis
role="bold">DNAT</emphasis>) nomm<6D>e aussi transfert ou suivi de port
<emphasis>(Port Forwarding</emphasis>).</para>
</listitem>
<listitem>
<para><emphasis role="bold"><emphasis>Le </emphasis>Proxy
ARP</emphasis>.</para>
</listitem>
<listitem>
<para>La traduction d'adresses r<>seau <emphasis>(Network Address
Translation</emphasis> <acronym>NAT</acronym>) <20> laquelle on fait
aussi r<>f<EFBFBD>rence sous l'appellation de un-<2D>-un NAT (one-to-one
NAT).</para>
</listitem>
</itemizedlist>
<para>Souvent, une combinaison de ces techniques est utilis<69>e. Chacune
d'entre elles sera d<>taill<6C>e dans la section suivante.</para>
<section id="SNAT">
<title>SNAT</title>
<para>Avec la <acronym>SNAT</acronym>, un segment interne du r<>seau
local est configur<75> en utilisant des adresses de la RFC 1918. Quant un
h<>te <emphasis role="bold">A</emphasis> sur ce segment interne initie
une connexion vers un h<>te <emphasis role="bold">B</emphasis> sur
internet, le firewall/routeur r<><72>crit les ent<6E>tes IP de la requ<71>te
pour utiliser une de vos adresses publiques IP en tant qu'adresse
source. Quant <emphasis role="bold">B</emphasis> r<>pond et que la
r<>ponse est re<72>ue par le firewall, le firewall change l'adresse
destination par celle de la RFC 1918 de <emphasis
role="bold">A</emphasis> et transf<73>re la r<>ponse <20> <emphasis
role="bold">A.</emphasis></para>
<para>Supposons que vous d<>cidiez d'utiliser la SNAT sur votre zone
locale. Supposons <20>galement que vous utilisiez l'adresse publique
192.0.2.176 <20> la fois comme adresse externe du firewall et comme
adresse source des requ<71>tes internet envoy<6F>es depuis cette
zone.</para>
<graphic align="center" fileref="images/dmz5.png" />
<para>On a assign<67> <20> la zone locale le sous-r<>seau 192.168.201.0/29
(masque de sous-r<>seau 255.255.255.248).</para>
<simplelist>
<member><inlinegraphic fileref="images/BD21298_.gif" /></member>
<member>Dans ce cas, les syst<73>mes de la zone locale seraient
configur<75>s avec 192.168.201.1 comme passerelle par d<>faut (adresse
IP de l'interface local du firewall).</member>
<member><inlinegraphic fileref="images/BD21298_.gif" /></member>
<member>La SNAT est configur<75>e dans Shorewall avec le fichier
<filename><ulink
url="Documentation.htm#Masq">/etc/shorewall/masq</ulink></filename>.</member>
</simplelist>
<programlisting>#INTERFACE SUBNET ADDRESS
eth0 192.168.201.0/29 192.0.2.176</programlisting>
<para>Cet exemple utilise la technique normale qui assigne la m<>me
adresse publique IP pour l'interface externe du firewall et pour la
SNAT. Si vous souhaitez utiliser une adresse IP diff<66>rente, vous
pouvez soit utiliser les outils de configuration r<>seau de votre
distribution Linux pour ajouter cette adresse IP, soit mettre la
variable ADD_SNAT_ALIASES=Yes dans
<filename>/etc/shorewall/shorewall.conf</filename> et Shorewall
ajoutera l'adresse pour vous.</para>
</section>
<section id="dnat">
<title>DNAT</title>
<para>Quand la SNAT est utilis<69>e, il est impossible pour les h<>tes sur
internet d'initialiser une connexion avec un des syst<73>mes internes
puisque ces syst<73>mes n'ont pas d'adresses publiques IP. La DNAT
fournit une m<>thode pour autoriser des connexions s<>lectionn<6E>es depuis
internet.</para>
<para><inlinegraphic fileref="images/BD21298_.gif" /></para>
<para>Supposons que votre fille souhaite h<>berger un serveur Web sur
son syst<73>me "Local 3". Vous pourriez autoriser les connexions
d'internet <20> son serveur en ajoutant l'entr<74>e suivante dans le fichier
<filename><ulink
url="Documentation.htm#Rules">/etc/shorewall/rules</ulink></filename>:</para>
<programlisting>#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL
# PORT(S) PORT(S) DEST
DNAT net loc:192.168.201.4 tcp www</programlisting>
<para>Si une des amies de votre fille avec une adresse <emphasis
role="bold">A</emphasis> veut acc<63>der au serveur de votre fille, elle
peut se connecter <20> http://192.0.2.176 (l'adresse IP externe de votre
firewall). Le firewall r<><72>crira l'adresse IP de destination <20>
192.168.201.4 (le syst<73>me de votre fille) et lui fera suivre la
requ<71>te. Quand le serveur de votre fille r<>pondra, le firewall
remettra l'adresse source <20> 192.0.2.176 et retournera la r<>ponse <20>
<emphasis role="bold">A</emphasis>.</para>
<para>Cet exemple utilise l'adresse externe IP du firewall pour la
<acronym>DNAT</acronym>. Vous pouvez utiliser une autre de vos
adresses IP publiques. Pour cela, mettez-la dans la colonne ORIGINAL
DEST de la r<>gle ci-dessus. Par contre, Shorewall n'ajoutera pas <20>
votre place cette adresse <20> l'interface externe du firewall.</para>
<important>
<para>Quand vous testez des r<>gles <acronym>DNAT</acronym> comme
celles pr<70>sent<6E>e plus haut, vous devez le faire depuis un client A
L'EXT<58>RIEUR DE VOTRE FIREWALL (depuis la zone <quote>net</quote>).
Vous ne pouvez pas tester ces r<>gles de l'int<6E>rieur !</para>
<para>Pour quelques astuces sur la r<>solution de probl<62>mes avec la
DNAT, <ulink url="FAQ.htm#faq1a">voyez les FAQ 1a et
1b</ulink>.</para>
</important>
</section>
<section id="ProxyARP">
<title>Proxy ARP</title>
<para>Le principe du proxy <acronym>ARP</acronym> est:</para>
<itemizedlist>
<listitem>
<para>On attribue <20> un h<>te <emphasis role="bold">H</emphasis>
derri<72>re notre firewall une de nos adresses publiques <emphasis
role="bold">A</emphasis> et on lui donne le m<>me masque de
sous-r<>seau <emphasis role="bold">M</emphasis> que celui de
l'interface externe du firewall.</para>
</listitem>
<listitem>
<para>Le firewall r<>pond aux requ<71>tes ARP
<quote>qui-a-l'adresse</quote> <emphasis
role="bold">A</emphasis><emphasis> </emphasis><EFBFBD>mises par les h<>tes
<20> l'ext<78>rieur du firewall.</para>
</listitem>
<listitem>
<para>Lorsque c'est l'h<>te <emphasis role="bold">H</emphasis> qui
<20>met une requ<71>te <quote>qui-a-l'adresse</quote><emphasis>
</emphasis><emphasis><emphasis>pour un h<>te
</emphasis></emphasis>situ<EFBFBD> <20> l'ext<78>rieur du firewall et
appartenant au sous-r<>seau d<>fini par <emphasis
role="bold">A</emphasis> et <emphasis role="bold">M</emphasis>,
c'est le firewall qui r<>pondra <20> <emphasis
role="bold">H</emphasis> avec l'adresse MAC de l'interface du
firewall <20> laquelle est raccord<72> <emphasis
role="bold">H</emphasis>.</para>
</listitem>
</itemizedlist>
<para>Pour une description plus compl<70>te du fonctionnement du Proxy
ARP, vous pouvez vous r<>f<EFBFBD>rer <20> la <ulink
url="ProxyARP.htm">Documentation du Proxy Shorewall</ulink>.</para>
<para>Supposons que nous d<>cidions d'utiliser le Proxy ARP sur la DMZ
de notre exemple de r<>seau.</para>
<graphic align="center" fileref="images/dmz6.png" />
<para>Ici, nous avons assign<67> les adresses IP 192.0.2.177 au syst<73>me
DMZ 1 et 192.0.2.178 au syst<73>me DMZ 2. Remarquez que nous avons
assign<67> une adresse RFC 1918 et un masque de sous-r<>seau arbitraires <20>
l'interface DMZ de notre firewall. Cette adresse et ce masque ne sont
pas pertinents - v<>rifiez juste que celle-ci n'est en conflit avec
aucun autre sous-r<>seau d<>j<EFBFBD> d<>fini.</para>
<para><inlinegraphic fileref="images/BD21298_.gif" /></para>
<para>La configuration du Proxy ARP est faite dans le fichier <ulink
url="ProxyARP.htm"><filename>/etc/shorewall/proxyarp</filename></ulink>.</para>
<programlisting>#ADDRESS INTERFACE EXTERNAL HAVE ROUTE PERSISTANT
192.0.2.177 eth2 eth0 No
192.0.2.178 eth2 eth0 No</programlisting>
<para>La variable HAVE ROUTE <20>tant <20> No, Shorewall ajoutera les routes
d'h<>te pour 192.0.2.177 et 192.0.2.178 par <filename
class="devicefile">eth2</filename>. Les interfaces <20>thernet des
machines DMZ 1 et DMZ 2 devront <20>tre configur<75>es avec les adresses IP
donn<6E>es plus haut, mais elles devront avoir la m<>me passerelle par
d<>faut que le firewall lui-m<>me (192.0.2.254 dans notre exemple).
Autrement dit, elles doivent <20>tre configur<75>es exactement comme si
elles <20>taient parall<6C>les au firewall plut<75>t que derri<72>re lui.</para>
<caution>
<para><emphasis role="bold">Ne pas ajouter le(s) adresse(s) trait<69>es
par le proxy ARP (192.0.2.177 et 192.0.2.178 dans l'exemple
ci-dessus) <20> l'interface externe du firewall (eth0 dans cet
exemple).</emphasis></para>
</caution>
<para>Un mot de mise en garde. En g<>n<EFBFBD>ral, les <acronym>FAI</acronym>
configurent leurs routeurs avec un timeout de cache
<acronym>ARP</acronym> assez <20>lev<65>. Si vous d<>placez un syst<73>me
parall<6C>le <20> votre firewall derri<72>re le Proxy ARP du firewall, cela
peut mettre des HEURES avant que ce syst<73>me ne puisse communiquer avec
internet. Il y a deux choses que vous pouvez essayer de faire:</para>
<orderedlist>
<listitem>
<para>(Salutations <20> Bradey Honsinger) Une lecture de
<quote>TCP/IP Illustrated, Vol 1</quote> de Richard Stevens r<>v<EFBFBD>le
qu'un paquet ARP <quote>gratuit</quote> (gratuitous) peut amener
le routeur de votre FAI <20> rafra<72>chir son cache (section 4.7). Un
paquet ARP <quote>gratuit</quote> est simplement une requ<71>te d'un
h<>te demandant l'adresse MAC associ<63>e <20> sa propre adresse
IP.</para>
<para>En plus de garantir que cette adresse IP n'est pas
dupliqu<71>e, <quote>si l'h<>te qui envoie la commande ARP
<quote>gratuit</quote> vient juste de changer son adresse
mat<61>rielle ..., ce paquet force tous les autres h<>tes...qui ont
une entr<74>e dans leur cache ARP pour l'ancienne adresse mat<61>rielle
<20> mettre leurs caches <20> jour</quote></para>
<para>Ce qui est exactement, bien s<>r, ce que vous souhaitez faire
lorsque vous basculez un h<>te qui <20>tait directement expos<6F> sur
internet vers l'arri<72>re de votre firewall Shorewall en utilisant
le proxy ARP (ou en faisant du NAT un-<2D>-un pour la m<>me raison).
Heureusement, les versions r<>centes du paquetage
<command>iputils</command> de <trademark>Redhat</trademark>
comprennent <command>arping</command>, dont l'option "-U" fait
cela:</para>
<para><programlisting><command>arping -U -I &lt;net if&gt; &lt;newly proxied IP&gt;</command><command>
arping -U -I eth0 66.58.99.83</command> # for example</programlisting>Stevens
continue en mentionnant que certains syst<73>mes ne r<>pondent pas
correctement <20> la commande ARP <quote>gratuit</quote>, mais une
recherche sur google pour <quote>arping -U</quote> semble
d<>montrer que cela fonctionne dans la plupart des cas.</para>
</listitem>
<listitem>
<para>Vous pouvez appeler votre <acronym>FAI</acronym> et lui
demander de purger l'entr<74>e obsol<6F>te de son cache
<acronym>ARP</acronym>, mais la plupart ne voudront ou ne pourront
le faire.</para>
</listitem>
</orderedlist>
<para>Vous pouvez v<>rifier si le cache ARP de votre FAI est obsol<6F>te
en utilisant <command>ping</command> et <command>tcpdump</command>.
Supposez que vous pensez que la passerelle routeur a une entr<74>e ARP
obsol<6F>te pour 192.0.2.177. Sur le firewall, lancez
<command>tcpdump</command> de cette fa<66>on:</para>
<para><programlisting><command>tcpdump -nei eth0 icmp</command></programlisting></para>
<para>Maintenant depuis 192.0.2.177, <command>ping</command>ez la
passerelle de votre FAI (que nous supposons <20>tre 192.0.2.254):</para>
<para><programlisting><command>ping 192.0.2.254</command></programlisting></para>
<para>Nous pouvons maintenant observer le r<>sultat de
<command>tcpdump</command>:</para>
<para><programlisting>13:35:12.159321 <emphasis role="bold">0:4:e2:20:20:33</emphasis> 0:0:77:95:dd:19 ip 98:
192.0.2.177 &gt; 192.0.2.254: icmp: echo request (DF)
13:35:12.207615 0:0:77:95:dd:19 <emphasis role="bold">0:c0:a8:50:b2:57</emphasis> ip 98:
192.0.2.254 &gt; 192.0.2.177 : icmp: echo reply</programlisting>Remarquez
que l'adresse source <acronym>MAC</acronym> dans la requ<71>te echo est
diff<66>rente de l'adresse <acronym>MAC</acronym> de destination dans la
r<>ponse echo ! Dans ce cas, 0:4:e2:20:20:33 <20>tait l'adresse
<acronym>MAC</acronym> de l'interface r<>seau <filename
class="devicefile">eth0</filename> du firewall tandis que
0:c0:a8:50:b2:57 <20>tait l'adresse <acronym>MAC</acronym> de la carte
r<>seau de DMZ 1. En d'autre termes, le cache <acronym>ARP</acronym> de
la passerelle associe encore 192.0.2.177 avec la carte r<>seau de DMZ 1
plut<75>t qu'avec l'interface <filename class="devicefile"><filename
class="devicefile">eth0</filename></filename> du firewall.</para>
</section>
<section>
<title id="NAT">NAT un-<2D>-un</title>
<para>Avec le NAT un-<2D>-un (one-to-one NAT), vous attribuez des
adresses RFC 1918 <20> vos syst<73>mes puis vous <20>tablissez une
correspondance un pour un de ces adresses avec les adresses IP
publiques. Pour les occurrences des connexions sortantes, la
traduction d'adresses sources (<acronym>SNAT</acronym>) sera alors
effectu<74>e. Pour les occurrences des connexions entrantes, c'est la
traduction d'adresses destination (<acronym>DNAT</acronym>) qui sera
r<>alis<69>e.</para>
<para>Voyons avec l'exemple pr<70>c<EFBFBD>dent du serveur web de votre fille
tournant sur le syst<73>me Local 3.</para>
<graphic align="center" fileref="images/dmz6.png" />
<para>Souvenons-nous que dans cette configuration, le r<>seau local
utilise la <acronym>SNAT</acronym> et qu'il partage l'IP externe du
firewall (192.0.2.176) pour les connexions sortantes. On obtient ce
r<>sultat gr<67>ce <20> l'entr<74>e suivante dans le fichier
<filename><filename>/etc/shorewall/masq</filename></filename>:</para>
<programlisting>#INTERFACE SUBNET ADDRESS
eth0 192.168.201.0/29 192.0.2.176</programlisting>
<para><inlinegraphic fileref="images/BD21298_.gif" /></para>
<para>Supposons maintenant que vous ayez d<>cid<69> d'allouer <20> votre
fille sa propre adresse IP (192.0.2.179) pour l'ensemble des
connexions entrantes et sortantes. Vous pouvez faire cela en ajoutant
cette entr<74>e dans le fichier<filename><ulink url="NAT.htm">
/etc/shorewall/nat</ulink></filename>.</para>
<programlisting>#EXTERNAL INTERFACE INTERNAL ALL INTERFACES LOCAL
192.0.2.179 eth0 192.168.201.4 No No</programlisting>
<para>Avec cette entr<74>e active, votre fille a sa propre adresse IP et
les deux autres syst<73>mes locaux partagent l'adresse IP du
firewall.</para>
<para><inlinegraphic fileref="images/BD21298_.gif" /></para>
<para>Une fois que la relation entre 192.0.2.179 et192.168.201.4 est
<20>tablie avec l'entr<74>e ci-dessus dans le fichier
<filename>nat</filename>, l'utilisation d'une r<>gle d'une r<>gle DNAT
pour le serveur Web de votre fille n'est plus appropri<72>e -- vous
devriez plut<75>t utiliser une simple r<>gle ACCEPT:</para>
<programlisting>#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL
# PORT(S) PORT(S) DEST
ACCEPT net loc:192.168.201.4 tcp www</programlisting>
<para>Un mot de mise en garde. En g<>n<EFBFBD>ral, les <acronym>FAI</acronym>
configurent leurs routeurs avec un timeout de cache
<acronym>ARP</acronym> assez <20>lev<65>. Si vous d<>placez un syst<73>me
parall<6C>le <20> votre firewall derri<72>re le Proxy ARP du firewall, cela
peut mettre des HEURES avant que ce syst<73>me ne puisse communiquer avec
internet. Il y a deux choses que vous pouvez essayer de faire:</para>
<orderedlist>
<listitem>
<para>(Salutations <20> Bradey Honsinger) Une lecture de
<quote>TCP/IP Illustrated, Vol 1</quote> de Richard Stevens r<>v<EFBFBD>le
qu'un paquet ARP <quote>gratuit</quote> (gratuitous) peut amener
le routeur de votre FAI <20> rafra<72>chir son cache (section 4.7). Un
paquet ARP <quote>gratuit</quote> est simplement une requ<71>te d'un
h<>te demandant l'adresse MAC associ<63>e <20> sa propre adresse
IP.</para>
<para>En plus de garantir que cette adresse IP n'est pas
dupliqu<71>e, <quote>si l'h<>te qui envoie la commande ARP
<quote>gratuit</quote> vient juste de changer son adresse
mat<61>rielle ..., ce paquet force tous les autres h<>tes...qui ont
une entr<74>e dans leur cache ARP pour l'ancienne adresse mat<61>rielle
<20> mettre leurs caches <20> jour</quote></para>
<para>Ce qui est exactement, bien s<>r, ce que vous souhaitez faire
lorsque vous basculez un h<>te qui <20>tait directement expos<6F> sur
internet vers l'arri<72>re de votre firewall Shorewall en utilisant
le proxy ARP (ou en faisant du NAT un-<2D>-un pour la m<>me raison).
Heureusement, les versions r<>centes du paquetage
<command>iputils</command> de <trademark>Redhat</trademark>
comprennent <command>arping</command>, dont l'option "-U" fait
cela:</para>
<para><programlisting><command>arping -U -I &lt;net if&gt; &lt;newly proxied IP&gt;</command><command>
arping -U -I eth0 66.58.99.83</command> # for example</programlisting>Stevens
continue en mentionnant que certains syst<73>mes ne r<>pondent pas
correctement <20> la commande ARP <quote>gratuit</quote>, mais une
recherche sur google pour <quote>arping -U</quote> semble
d<>montrer que cela fonctionne dans la plupart des cas.</para>
</listitem>
<listitem>
<para>Vous pouvez appeler votre <acronym>FAI</acronym> et lui
demander de purger l'entr<74>e obsol<6F>te de son cache
<acronym>ARP</acronym>, mais la plupart ne voudront ou ne pourront
le faire.</para>
</listitem>
</orderedlist>
<para>Vous pouvez v<>rifier si le cache ARP de votre FAI est obsol<6F>te
en utilisant <command>ping</command> et <command>tcpdump</command>.
Supposez que vous pensez que la passerelle routeur a une entr<74>e ARP
obsol<6F>te pour 192.0.2.177. Sur le firewall, lancez
<command>tcpdump</command> de cette fa<66>on:</para>
<para><programlisting><command>tcpdump -nei eth0 icmp</command></programlisting></para>
<para>Maintenant depuis 192.0.2.177, <command>ping</command>ez la
passerelle de votre FAI (que nous supposons <20>tre 192.0.2.254):</para>
<para><programlisting><command>ping 192.0.2.254</command></programlisting></para>
<para>Nous pouvons maintenant observer le r<>sultat de
<command>tcpdump</command>:</para>
<para><programlisting>13:35:12.159321 <emphasis role="bold">0:4:e2:20:20:33</emphasis> 0:0:77:95:dd:19 ip 98:
192.0.2.177 &gt; 192.0.2.254: icmp: echo request (DF)
13:35:12.207615 0:0:77:95:dd:19 <emphasis role="bold">0:c0:a8:50:b2:57</emphasis> ip 98:
192.0.2.254 &gt; 192.0.2.177 : icmp: echo reply</programlisting>Remarquez
que l'adresse source <acronym>MAC</acronym> dans la requ<71>te echo est
diff<66>rente de l'adresse <acronym>MAC</acronym> de destination dans la
r<>ponse echo ! Dans ce cas, 0:4:e2:20:20:33 <20>tait l'adresse
<acronym>MAC</acronym> de l'interface r<>seau <filename
class="devicefile">eth0</filename> du firewall tandis que
0:c0:a8:50:b2:57 <20>tait l'adresse <acronym>MAC</acronym> de la carte
r<>seau de DMZ 1. En d'autre termes, le cache <acronym>ARP</acronym> de
la passerelle associe encore 192.0.2.177 avec la carte r<>seau de DMZ 1
plut<75>t qu'avec l'interface <filename class="devicefile"><filename
class="devicefile">eth0</filename></filename> du firewall.</para>
</section>
</section>
<section id="Rules">
<title>R<EFBFBD>gles</title>
<para><note>
<para>Shorewall dispose d'un m<>canisme de <ulink
url="Macros.html">macros</ulink> comprenant des macros pour de
nombreuses applications standard. Dans cette section nous
n'utiliserons pas de macro. mais nous d<>finirons les r<>gles
directement.</para>
</note><inlinegraphic fileref="images/BD21298_.gif" /></para>
<para>Avec les politiques d<>finies plus t<>t dans ce document, vos
syst<73>mes locaux (Local 1-3) peuvent acc<63>der <20> n'importe quel serveur sur
internet alors que la <acronym>DMZ</acronym> ne peut acc<63>der <20> aucun
autre h<>te, dont le firewall. A l'exception des r<>gles
<acronym>NAT</acronym> qui entra<72>nent la traduction d'adresses et
permettent aux requ<71>tes de connexion traduites de passer <20> travers le
firewall, la fa<66>on d'autoriser des requ<71>tes <20> travers votre firewall est
d'utiliser des r<>gles ACCEPT.</para>
<note>
<para>Puisque les colonnes SOURCE PORT et ORIG. DEST. ne sont pas
utilis<69>es dans cette section, elle ne seront pas affich<63>es.</para>
</note>
<para>Vous souhaiter certainement autoriser le <command>ping</command>
entre vos zones:</para>
<programlisting>#ACTION SOURCE DEST PROTO DEST
# PORT(S)
ACCEPT net dmz icmp echo-request
ACCEPT net loc icmp echo-request
ACCEPT dmz loc icmp echo-request
ACCEPT loc dmz icmp echo-request</programlisting>
<para>Supposons que vous avez des serveurs mail et pop3 actifs sur le
syst<73>me DMZ 2, et un serveur Web sur le syst<73>me DMZ 1. Les r<>gles dont
vous avez besoin sont:</para>
<programlisting>#ACTION SOURCE DEST PROTO DEST COMMENTS
# PORT(S)
ACCEPT net dmz:192.0.2.178 tcp smtp #Mail from
#Internet
ACCEPT net dmz:192.0.2.178 tcp pop3 #Pop3 from
#Internet
ACCEPT loc dmz:192.0.2.178 tcp smtp #Mail from local
#Network
ACCEPT loc dmz:192.0.2.178 tcp pop3 #Pop3 from local
#Network
ACCEPT $FW dmz:192.0.2.178 tcp smtp #Mail from the
#Firewall
ACCEPT dmz:192.0.2.178 net tcp smtp #Mail to the
#Internet
ACCEPT net dmz:192.0.2.177 tcp http #WWW from
#Internet
ACCEPT net dmz:192.0.2.177 tcp https #Secure WWW
#from Internet
ACCEPT loc dmz:192.0.2.177 tcp https #Secure WWW
#from local
#Network</programlisting>
<para>Si vous utilisez un serveur DNS public sur 192.0.2.177, vous devez
ajouter les r<>gles suivantes:</para>
<programlisting>#ACTION SOURCE DEST PROTO DEST COMMENTS
# PORT(S)
ACCEPT net dmz:192.0.2.177 udp domain #UDP DNS from
#Internet
ACCEPT net dmz:192.0.2.177 tcp domain #TCP DNS from
#Internet
ACCEPT loc dmz:192.0.2.177 udp domain #UDP DNS from
#Local Network
ACCEPT loc dmz:192.0.2.177 tcp domain #TCP DNS from
#Local Network
ACCEPT $FW dmz:192.0.2.177 udp domain #UDP DNS from
#the Firewall
ACCEPT $FW dmz:192.0.2.177 tcp domain #TCP DNS from
#the Firewall
ACCEPT dmz:192.0.2.177 net udp domain #UDP DNS to
#the Internet
ACCEPT dmz:192.0.2.177 net tcp domain #TCPP DNS to
#the Internet</programlisting>
<para>Vous souhaiterez probablement communiquer depuis votre r<>seau
local avec votre firewall et les syst<73>mes en <acronym>DMZ</acronym> --
Je recommande <acronym>SSH</acronym> qui, gr<67>ce <20> son utilitaire
<command>scp</command> peut aussi faire de la diffusion et de la mise <20>
jour de logiciels.</para>
<programlisting>#ACTION SOURCE DEST PROTO DEST COMMENTS
# PORT(S)
ACCEPT loc dmz tcp ssh #SSH to the DMZ
ACCEPT net $FW tcp ssh #SSH to the
#Firewall</programlisting>
</section>
<section id="OddsAndEnds">
<title>D'autres petites choses</title>
<para>La discussion pr<70>c<EFBFBD>dente refl<66>te ma pr<70>f<EFBFBD>rence personnelle pour
l'utilisation d'un Proxy ARP associ<63> <20> mes serveurs en DMZ et de
SNAT/NAT pour les syst<73>mes locaux. Je pr<70>f<EFBFBD>re utiliser la NAT seulement
dans le cas ou un syst<73>me qui fait partie d'un sous-r<>seau RFC 1918 <20>
besoin d'avoir sa propre adresse IP publique.</para>
<para><inlinegraphic fileref="images/BD21298_.gif" /></para>
<para>Si vous ne l'avez d<>j<EFBFBD> fait, ce serait une bonne id<69>e de parcourir
le fichier <ulink
url="Documentation.htm#Config"><filename>/etc/shorewall/shorewall.conf</filename></ulink>
juste pour voir si autre chose pourrait vous int<6E>resser. Vous pouvez
aussi regarder les autres fichiers de configuration que vous n'avez pas
touch<63>s pour avoir un aper<65>u des autres possibilit<69>s de
Shorewall.</para>
<para>Dans le cas ou vous auriez perdu le fil, vous trouverez ci-dessous
un jeu final des fichiers de configuration pour le r<>seau de notre
exemple. Seuls les fichiers de la configuration initiale qui ont <20>t<EFBFBD>
modifi<66>s sont pr<70>sent<6E>s.</para>
<para><filename>/etc/shorewall/interfaces</filename> (Les "options" sont
tr<74>s d<>pendantes des sites).</para>
<programlisting>#ZONE INTERFACE BROADCAST OPTIONS
net eth0 detect rfc1918,routefilter
loc eth1 detect
dmz eth2 detect</programlisting>
<para>La configuration d<>crite ici n<>cessite que votre r<>seau soit
d<>marr<72> avant que Shorewall ne puisse se lancer. Ceci laisse un petit
intervalle de temps durant lequel vous n'avez pas la protection d'un
firewall.</para>
<para>Si vous remplacez le <quote>detect</quote> dans les entr<74>es
ci-dessus par la valeurs des adresses de diffusion (broadcoast) r<>elles,
vous pouvez activer Shorewall avant de monter vos interfaces
r<>seau.</para>
<programlisting>#ZONE INTERFACE BROADCAST OPTIONS
net eth0 192.0.2.255 rfc1918
loc eth1 192.168.201.7
dmz eth2 192.168.202.7</programlisting>
<para><filename>/etc/shorewall/masq</filename> - R<>seau Local</para>
<programlisting>#INTERFACE SUBNET ADDRESS
eth0 192.168.201.0/29 192.0.2.176</programlisting>
<para><filename>/etc/shorewall/proxyarp</filename> - DMZ</para>
<programlisting>#ADDRESS EXTERNAL INTERFACE HAVE ROUTE
192.0.2.177 eth2 eth0 No
192.0.2.178 eth2 eth0 No</programlisting>
<para><filename>/etc/shorewall/nat</filename>- Le syst<73>me de ma
fille</para>
<programlisting>#EXTERNAL INTERFACE INTERNAL ALL INTERFACES LOCAL
192.0.2.179 eth0 192.168.201.4 No No</programlisting>
<para><filename>/etc/shorewall/rules</filename><programlisting>#ACTION SOURCE DEST PROTO DEST COMMENTS
# PORT(S)
ACCEPT net dmz icmp echo-request
ACCEPT net loc icmp echo-request
ACCEPT dmz loc icmp echo-request
ACCEPT loc dmz icmp echo-request
ACCEPT net loc:192.168.201.4 tcp www #Daughter's
#Server
ACCEPT net dmz:192.0.2.178 tcp smtp #Mail from
#Internet
ACCEPT net dmz:192.0.2.178 tcp pop3 #Pop3 from
#Internet
ACCEPT loc dmz:192.0.2.178 tcp smtp #Mail from local
#Network
ACCEPT loc dmz:192.0.2.178 tcp pop3 #Pop3 from local
#Network
ACCEPT $FW dmz:192.0.2.178 tcp smtp #Mail from the
#Firewall
ACCEPT dmz:192.0.2.178 net tcp smtp #Mail to the
#Internet
ACCEPT net dmz:192.0.2.177 tcp http #WWW from
#Internet
ACCEPT net dmz:192.0.2.177 tcp https #Secure WWW
#from Internet
ACCEPT loc dmz:192.0.2.177 tcp https #Secure WWW
#from local
#Network
ACCEPT net dmz:192.0.2.177 udp domain #UDP DNS from
#Internet
ACCEPT net dmz:192.0.2.177 tcp domain #TCP DNS from
#Internet
ACCEPT loc dmz:192.0.2.177 udp domain #UDP DNS from
#Local Network
ACCEPT loc dmz:192.0.2.177 tcp domain #TCP DNS from
#Local Network
ACCEPT $FW dmz:192.0.2.177 udp domain #UDP DNS from
#the Firewall
ACCEPT $FW dmz:192.0.2.177 tcp domain #TCP DNS from
#the Firewall
ACCEPT dmz:192.0.2.177 net udp domain #UDP DNS to
#the Internet
ACCEPT dmz:192.0.2.177 net tcp domain #TCPP DNS to
#the Internet
ACCEPT loc dmz tcp ssh #SSH to the DMZ
ACCEPT net $FW tcp ssh #SSH to the
#Firewall</programlisting></para>
</section>
</section>
<section id="DNS">
<title>DNS</title>
<para>Compte tenu des adresses RFC 1918 et des adresses publiques
utilis<69>es dans cette configuration, la seule fa<66>on logique de faire est
d'avoir des serveurs <acronym>DNS</acronym> interne et externe s<>par<61>s.
Vous pouvez combiner les deux dans un unique serveur BIND 9 utilisant les
vues (Views). Si vous n'<27>tes pas int<6E>ress<73> par les vues BIND 9, vous
pouvez allez <20> la section suivante.</para>
<para>Supposons que votre domaine est foobar.net. Vous voulez que les deux
syst<73>mes en <acronym>DMZ</acronym> s'appellent www.foobar.net et
mail.foobar.net, et vous voulez que les trois syst<73>mes locaux s'appellent
winken.foobar.net, blinken.foobar.net et nod.foobar.net. Vous voulez que
le firewall soit connu <20> l'ext<78>rieur sous le nom de firewall.foobar.net,
que son interface vers le r<>seau local soit nomm<6D>e gateway.foobar.net et
que son interface vers la <acronym>DMZ</acronym> soit dmz.foobar.net.
Mettons le serveur DNS sur 192.0.2.177 qui sera aussi connu sous le nom de
ns1.foobar.net.</para>
<para>Le fichier <filename>/etc/named.conf</filename> devrait ressembler <20>
cela:</para>
<programlisting>
options {
directory "/var/named";
listen-on { 127.0.0.1 ; 192.0.2.177; };
transfer-format many-answers;
max-transfer-time-in 60;
allow-transfer {
// Servers allowed to request zone tranfers
&lt;secondary NS IP&gt;; };
};
logging {
channel xfer-log {
file "/var/log/named/bind-xfer.log";
print-category yes;
print-severity yes;
print-time yes;
severity info;
};
category xfer-in { xfer-log; };
category xfer-out { xfer-log; };
category notify { xfer-log; };
};
#
# This is the view presented to our internal systems
#
view "internal" {
#
# These are the clients that see this view
#
match-clients { 192.168.201.0/29;
192.168.202.0/29;
127.0.0.0/8;
192.0.2.176/32;
192.0.2.178/32;
192.0.2.179/32;
192.0.2.180/32; };
#
# If this server can't complete the request, it should use
# outside servers to do so
#
recursion yes;
zone "." in {
type hint;
file "int/root.cache";
};
zone "foobar.net" in {
type master;
notify no;
allow-update { none; };
file "int/db.foobar";
};
zone "0.0.127.in-addr.arpa" in {
type master;
notify no;
allow-update { none; };
file "int/db.127.0.0";
};
zone "201.168.192.in-addr.arpa" in {
type master;
notify no;
allow-update { none; };
file "int/db.192.168.201";
};
zone "202.168.192.in-addr.arpa" in {
type master;
notify no;
allow-update { none; };
file "int/db.192.168.202";
};
zone "176.2.0.192.in-addr.arpa" in {
type master;
notify no;
allow-update { none; };
file "db.192.0.2.176";
};
zone "177.2.0.192.in-addr.arpa" in {
type master;
notify no;
allow-update { none; };
file "db.192.0.2.177";
};
zone "178.2.0.192.in-addr.arpa" in {
type master;
notify no;
allow-update { none; };
file "db.192.0.2.178";
};
zone "179.2.0.192.in-addr.arpa" in {
type master;
notify no;
allow-update { none; };
file "db.206.124.146.179";
};
};
#
# This is the view that we present to the outside world
#
view "external" {
match-clients { any; };
#
# If we can't answer the query, we tell the client so
#
recursion no;
zone "foobar.net" in {
type master;
notify yes;
allow-update {none; };
file "ext/db.foobar";
};
zone "176.2.0.192.in-addr.arpa" in {
type master;
notify yes;
allow-update { none; };
file "db.192.0.2.176";
};
zone "177.2.0.192.in-addr.arpa" in {
type master;
notify yes;
allow-update { none; };
file "db.192.0.2.177";
};
zone "178.2.0.192.in-addr.arpa" in {
type master;
notify yes;
allow-update { none; };
file "db.192.0.2.178";
};
zone "179.2.0.192.in-addr.arpa" in {
type master;
notify yes;
allow-update { none; };
file "db.192.0.2.179";
};
};</programlisting>
<para>Voici les fichiers du r<>pertoire <filename
class="directory">/var/named</filename> (ceux qui ne sont pas pr<70>sent<6E>s
font en g<>n<EFBFBD>ral partie de votre distribution BIND).</para>
<para><filename>db.192.0.2.176</filename> - Zone inverse (reverse) pour
l'interface externe du firewall</para>
<programlisting>; ############################################################
; Start of Authority (Inverse Address Arpa) for 192.0.2.176/32
; Filename: db.192.0.2.176
; ############################################################
@ 604800 IN SOA ns1.foobar.net. netadmin.foobar.net. (
2001102303 ; serial
10800 ; refresh (3 hour)
3600 ; retry (1 hour)
604800 ; expire (7 days)
86400 ) ; minimum (1 day)
;
; ############################################################
; Specify Name Servers for all Reverse Lookups (IN-ADDR.ARPA)
; ############################################################
@ 604800 IN NS ns1.foobar.net.
@ 604800 IN NS &lt;name of secondary ns&gt;.
;
; ############################################################
; Iverse Address Arpa Records (PTR's)
; ############################################################
176.2.0.192.in-addr.arpa. 86400 IN PTR firewall.foobar.net.</programlisting>
<para><filename>db.192.0.2.177</filename> - Zone inverse pour le serveur
www</para>
<programlisting>; ############################################################
; Start of Authority (Inverse Address Arpa) for 192.0.2.177/32
; Filename: db.192.0.2.177
; ############################################################
@ 604800 IN SOA ns1.foobar.net. netadmin.foobar.net. (
2001102303 ; serial
10800 ; refresh (3 hour)
3600 ; retry (1 hour)
604800 ; expire (7 days)
86400 ) ; minimum (1 day)
;
; ############################################################
; Specify Name Servers for all Reverse Lookups (IN-ADDR.ARPA)
; ############################################################
@ 604800 IN NS ns1.foobar.net.
@ 604800 IN NS &lt;name of secondary ns&gt;.
;
; ############################################################
; Iverse Address Arpa Records (PTR's)
; ############################################################
177.2.0.192.in-addr.arpa. 86400 IN PTR www.foobar.net.</programlisting>
<para><filename>db.192.0.2.178</filename> - Zone inverse du serveur
mail</para>
<programlisting>; ############################################################
; Start of Authority (Inverse Address Arpa) for 192.0.2.178/32
; Filename: db.192.0.2.178
; ############################################################
@ 604800 IN SOA ns1.foobar.net. netadmin.foobar.net. (
2001102303 ; serial
10800 ; refresh (3 hour)
3600 ; retry (1 hour)
604800 ; expire (7 days)
86400 ) ; minimum (1 day)
;
; ############################################################
; Specify Name Servers for all Reverse Lookups (IN-ADDR.ARPA)
; ############################################################
@ 604800 IN NS ns1.foobar.net.
@ 604800 IN NS &lt;name of secondary ns&gt;.
;
; ############################################################
; Iverse Address Arpa Records (PTR's)
; ############################################################
178.2.0.192.in-addr.arpa. 86400 IN PTR mail.foobar.net.</programlisting>
<para><filename>db.192.0.2.179</filename> - Zone inverse du serveur web
public de votre fille</para>
<programlisting>; ############################################################
; Start of Authority (Inverse Address Arpa) for 192.0.2.179/32
; Filename: db.192.0.2.179
; ############################################################
@ 604800 IN SOA ns1.foobar.net. netadmin.foobar.net. (
2001102303 ; serial
10800 ; refresh (3 hour)
3600 ; retry (1 hour)
604800 ; expire (7 days)
86400 ) ; minimum (1 day)
;
; ############################################################
; Specify Name Servers for all Reverse Lookups (IN-ADDR.ARPA)
; ############################################################
@ 604800 IN NS ns1.foobar.net.
@ 604800 IN NS &lt;name of secondary ns&gt;.
;
; ############################################################
; Iverse Address Arpa Records (PTR's)
; ############################################################
179.2.0.192.in-addr.arpa. 86400 IN PTR nod.foobar.net.</programlisting>
<para><filename>int/db.127.0.0</filename> - Zone inverse pour
localhost</para>
<programlisting>; ############################################################
; Start of Authority (Inverse Address Arpa) for 127.0.0.0/8
; Filename: db.127.0.0
; ############################################################
@ 604800 IN SOA ns1.foobar.net. netadmin.foobar.net. (
2001092901 ; serial
10800 ; refresh (3 hour)
3600 ; retry (1 hour)
604800 ; expire (7 days)
86400 ) ; minimum (1 day)
; ############################################################
; Specify Name Servers for all Reverse Lookups (IN-ADDR.ARPA)
; ############################################################
@ 604800 IN NS ns1.foobar.net.
; ############################################################
; Iverse Address Arpa Records (PTR's)
; ############################################################
1 86400 IN PTR localhost.foobar.net.</programlisting>
<para><filename>int/db.192.168.201</filename> - Zone inverse pour le
r<>seau local. Cela ne sera visible que depuis les clients internes</para>
<programlisting>; ############################################################
; Start of Authority (Inverse Address Arpa) for 192.168.201.0/29
; Filename: db.192.168.201
; ############################################################
@ 604800 IN SOA ns1.foobar.net netadmin.foobar.net. (
2002032501 ; serial
10800 ; refresh (3 hour)
3600 ; retry (1 hour)
604800 ; expire (7 days)
86400 ) ; minimum (1 day)
; ############################################################
; Specify Name Servers for all Reverse Lookups (IN-ADDR.ARPA)
; ############################################################
@ 604800 IN NS ns1.foobar.net.
; ############################################################
; Iverse Address Arpa Records (PTR's)
; ############################################################
1 86400 IN PTR gateway.foobar.net.
2 86400 IN PTR winken.foobar.net.
3 86400 IN PTR blinken.foobar.net.
4 86400 IN PTR nod.foobar.net.</programlisting>
<para><filename>int/db.192.168.202</filename> - Zone inverse de
l'interface DMZ du firewall</para>
<programlisting>; ############################################################
; Start of Authority (Inverse Address Arpa) for 192.168.202.0/29
; Filename: db.192.168.202
; ############################################################
@ 604800 IN SOA ns1.foobar.net netadmin.foobar.net. (
2002032501 ; serial
10800 ; refresh (3 hour)
3600 ; retry (1 hour)
604800 ; expire (7 days)
86400 ) ; minimum (1 day)
; ############################################################
; Specify Name Servers for all Reverse Lookups (IN-ADDR.ARPA)
; ############################################################
@ 604800 IN NS ns1.foobar.net.
; ############################################################
; Iverse Address Arpa Records (PTR's)
; ############################################################
1 86400 IN PTR dmz.foobar.net.</programlisting>
<para><filename>int/db.foobar </filename>- Forward zone pour les clients
internes.</para>
<programlisting>;##############################################################
; Start of Authority for foobar.net.
; Filename: db.foobar
;##############################################################
@ 604800 IN SOA ns1.foobar.net. netadmin.foobar.net. (
2002071501 ; serial
10800 ; refresh (3 hour)
3600 ; retry (1 hour)
604800 ; expire (7 days)
86400 ); minimum (1 day)
;############################################################
; foobar.net Nameserver Records (NS)
;############################################################
@ 604800 IN NS ns1.foobar.net.
;############################################################
; Foobar.net Office Records (ADDRESS)
;############################################################
localhost 86400 IN A 127.0.0.1
firewall 86400 IN A 192.0.2.176
www 86400 IN A 192.0.2.177
ns1 86400 IN A 192.0.2.177
mail 86400 IN A 192.0.2.178
gateway 86400 IN A 192.168.201.1
winken 86400 IN A 192.168.201.2
blinken 86400 IN A 192.168.201.3
nod 86400 IN A 192.168.201.4
dmz 86400 IN A 192.168.202.1</programlisting>
<para><filename>ext/db.foobar </filename>- Forward zone pour les clients
externes</para>
<programlisting>;##############################################################
; Start of Authority for foobar.net.
; Filename: db.foobar
;##############################################################
@ 86400 IN SOA ns1.foobar.net. netadmin.foobar.net. (
2002052901 ; serial
10800 ; refresh (3 hour)
3600 ; retry (1 hour)
604800 ; expire (7 days)
86400 ); minimum (1 day)
;############################################################
; Foobar.net Nameserver Records (NS)
;############################################################
@ 86400 IN NS ns1.foobar.net.
@ 86400 IN NS &lt;secondary NS&gt;.
;############################################################
; Foobar.net Foobar Wa Office Records (ADDRESS)
;############################################################
localhost 86400 IN A 127.0.0.1
;
; The firewall itself
;
firewall 86400 IN A 192.0.2.176
;
; The DMZ
;
ns1 86400 IN A 192.0.2.177
www 86400 IN A 192.0.2.177
mail 86400 IN A 192.0.2.178
;
; The Local Network
;
nod 86400 IN A 192.0.2.179
;############################################################
; Current Aliases for foobar.net (CNAME)
;############################################################
;############################################################
; foobar.net MX Records (MAIL EXCHANGER)
;############################################################
foobar.net. 86400 IN A 192.0.2.177
86400 IN MX 0 mail.foobar.net.
86400 IN MX 1 &lt;backup MX&gt;.</programlisting>
</section>
<section>
<title>Quelques Points <20> Garder en M<>moire</title>
<itemizedlist>
<listitem>
<para><emphasis role="bold">Vous ne pouvez pas tester votre firewall
depuis l'int<6E>rieur de votre r<>seau</emphasis>. Envoyer des requ<71>tes <20>
l'adresse IP externe de votre firewall ne signifie pas qu'elle seront
associ<63>es <20> votre interface externe ou <20> la zone <quote>net</quote>.
Tout trafic g<>n<EFBFBD>r<EFBFBD> par le r<>seau local sera associ<63> <20> l'interface
locale et sera trait<69> comme du trafic du r<>seau local ver le firewall
(loc-&gt;fw).</para>
</listitem>
<listitem>
<para><emphasis role="bold">Les adresses IP sont des propri<72>t<EFBFBD>s des
syst<73>mes, pas des interfaces</emphasis>. C'est une erreur de croire
que votre firewall est capable de faire suivre
(<emphasis>forward</emphasis>) des paquets simplement parce que vous
pouvez faire un <command>ping</command> sur l'adresse IP de toutes les
interfaces du firewall depuis le r<>seau local. La seule conclusion que
vous puissiez faire dans ce cas est que le lien entre le r<>seau local
et le firewall fonctionne et que vous avez probablement la bonne
adresse de passerelle par d<>faut sur votre syst<73>me.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Toutes les adresses IP configur<75>es sur le
firewall sont dans la zone $FW (fw)</emphasis>. Si 192.168.1.254 est
l'adresse IP de votre interface interne, alors vous pouvez <20>crire
<quote><emphasis role="bold">$FW:192.168.1.254</emphasis></quote> dans
une r<>gle mais vous ne devez pas <20>crire <quote><emphasis
role="bold">loc:192.168.1.254</emphasis></quote>. C'est aussi une
absurdit<69> d'ajouter 192.168.1.254 <20> la zone <emphasis
role="bold">loc</emphasis> en utilisant une entr<74>e dans
<filename>/etc/shorewall/hosts</filename>.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Les paquets de retour (reply) ne suivent
PAS automatiquement le chemin inverse de la requ<71>te
d'origine</emphasis>. Tous les paquets sont rout<75>s en se r<>f<EFBFBD>rant <20> la
table de routage respective de chaque h<>te <20> chaque <20>tape du trajet.
Ce probl<62>me se produit en g<>n<EFBFBD>ral lorsque on installe un firewall
Shorewall en parall<6C>le <20> une passerelle existante et qu'on essaye
d'utiliser des r<>gles <acronym>DNAT</acronym> dans Shorewall sans
changer la passerelle par d<>faut sur les syst<73>mes recevant les
requ<71>tes transf<73>r<EFBFBD>es (forwarded). Les requ<71>tes passent dans le
firewall Shorewall o<> l'adresse de destination IP est r<><72>crite, mais
la r<>ponse revient par l'ancienne passerelle qui, elle, ne modifiera
pas le paquet.</para>
</listitem>
<listitem>
<para><emphasis role="bold">Shorewall lui-m<>me n'a aucune notion du
dedans et du dehors</emphasis>. Ces concepts d<>pendent de la fa<66>on
dont Shorewall est configur<75>.</para>
</listitem>
</itemizedlist>
</section>
<section>
<title>D<EFBFBD>marrer et Arr<72>ter Votre Firewall</title>
<para><inlinegraphic fileref="images/BD21298_.gif" format="GIF" /></para>
<para>La <ulink url="Install.htm">proc<EFBFBD>dure d'installation</ulink>
configure votre syst<73>me pour lancer Shorewall d<>s le boot du syst<73>me, mais
le lancement est d<>sactiv<69>, de fa<66>on <20> ce que votre syst<73>me ne tente pas
de lancer Shorewall avant que la configuration ne soit termin<69>e. Une fois
que vous en avez fini avec la configuration du firewall, vous devez <20>diter
/etc/shorewall/shorewall.conf et y mettre STARTUP_ENABLED=Yes.<important>
<para>Les utilisateurs des paquetages .deb doivent <20>diter <filename
class="directory">/etc/default/</filename><filename>shorewall</filename>
et mettre <varname>startup=1</varname>.</para>
</important></para>
<para>Le firewall est activ<69> en utilisant la commande
<quote><command>shorewall start</command></quote> et arr<72>t<EFBFBD> avec la
commande <quote><command>shorewall stop</command></quote>. Lorsque le
firewall est arr<72>t<EFBFBD>, le routage est autoris<69> sur les h<>tes qui poss<73>dent
une entr<74>e dans <filename class="directory"><ulink
url="Documentation.htm#Routestopped">/etc/shorewall/routestopped</ulink></filename>.
Un firewall qui tourne peut <20>tre relanc<6E> en utilisant la commande
<quote><command>shorewall restart</command></quote>. Si vous voulez
enlever toute trace de Shorewall sur votre configuration de Netfilter,
utilisez <quote><emphasis role="bold">shorewall
clear</emphasis></quote></para>
<para><inlinegraphic fileref="images/BD21298_.gif" format="GIF" /></para>
<para>Modifiez <filename
class="directory">/etc/shorewall/</filename><filename><ulink
url="Documentation.htm#Routestopped">routestopped</ulink></filename> pour
y configurer les h<>tes auxquels vous voulez acc<63>der lorsque le firewall
est arr<72>t<EFBFBD>. <warning>
<para>Si vous <20>tes connect<63> <20> votre firewall depuis internet,
n'essayez pas d'ex<65>cuter une commande <quote><command>shorewall
stop</command></quote> tant que vous n'avez pas ajout<75> une entr<74>e dans
<filename><filename
class="directory">/etc/shorewall/</filename><filename>routestopped</filename></filename>
pour l'adresse IP <20> partir de laquelle vous <20>tes connect<63> . De la m<>me
mani<6E>re, je vous d<>conseille d'utiliser <quote><command>shorewall
restart</command></quote>; il est plus int<6E>ressant de cr<63>er <ulink
url="configuration_file_basics.htm#Configs">une configuration
alternative</ulink> et de la tester en utilisant la commande
<quote><ulink url="starting_and_stopping_shorewall.htm">shorewall
try</ulink></quote></para>
</warning></para>
</section>
</article>