doc/fr_FR.ISO8859-1/articles/dialup-firewall/article.sgml
2007-01-20 13:34:48 +00:00

418 lines
18 KiB
Text

<!--
The FreeBSD Documentation Project
The FreeBSD French Documentation Project
$FreeBSD$
$Id: article.sgml,v 1.4 2007-01-20 13:34:48 blackend Exp $
Original revision: 1.25
-->
<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based Extension//EN" [
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN"> %man;
<!ENTITY % urls PUBLIC "-//FreeBSD//ENTITIES Common Document URL Entities//FR"> %urls;
<!ENTITY % abstract PUBLIC "-//FreeBSD//ENTITIES DocBook Abstract Entities//FR"> %abstract;
<!ENTITY % artheader PUBLIC "-//FreeBSD//ENTITIES DocBook ArtHeader Entities//FR"> %artheader;
<!ENTITY % translators PUBLIC "-//FreeBSD//ENTITIES DocBook Translator Entities//FR"> %translators;
<!ENTITY % man PUBLIC "-//FreeBSD//ENTITIES DocBook Manual Page Entities//EN"> %man;
<!ENTITY rel.current CDATA "3.2">
]>
<article lang="fr">
<articleinfo>
<title>Coupe-feu pour connexion par modem avec FreeBSD</title>
<authorgroup>
<author>
<firstname>Marc</firstname>
<surname>Silver</surname>
<affiliation>
<address><email>marcs@draenor.org</email></address>
</affiliation>
</author>
</authorgroup>
<pubdate>$FreeBSD$</pubdate>
<abstract>
<para>Cet article expose comment mettre en place un coupe-feu
utilisant une connexion PPP par modem avec FreeBSD et IPFW, et
sp&eacute;cifiquement l'utilisation de coupe-feux pour une connexion par
modem avec adresse IP dynamique. Ce document ne couvre pas en
premier lieu la configuration de votre connexion PPP.</para>
&abstract.license;
&abstract.disclaimer;
&trans.a.fonvieille;
</abstract>
</articleinfo>
<sect1 id="preface">
<title>Pr&eacute;face</title>
<para>Coupe-feu pour connexion par modem avec FreeBSD</para>
<para>Ce document couvre le processus requis pour configurer un
coupe-feu avec FreeBSD quand votre fournisseur d'acc&egrave;s vous
assigne une adresse IP dynamique. Alors que de nombreux efforts
ont &eacute;t&eacute; faits afin de rendre ce document aussi instructif et
correct que possible, vous &ecirc;tes encourag&eacute;s &agrave; envoyer vos
commentaires/suggestions &agrave; l'adresse
<email>marcs@draenor.org</email>.</para>
</sect1>
<sect1 id="kernel">
<title>Options du noyau</title>
<para>La premi&egrave;re chose dont vous aurez besoin est de recompiler votre
noyau. Si vous avez besoin de plus d'informations sur comment
recompiler un noyau, alors le meilleur endroit pour commencer est
la <ulink URL="../../books/handbook/kernelconfig.html">section de
configuration du noyau du manuel</ulink>. Vous devez rajouter les
options suivantes dans le fichier de configuration de votre
noyau:</para>
<variablelist>
<varlistentry>
<term><literal>options IPFIREWALL</literal></term>
<listitem>
<para>Int&egrave;gre au noyau le code de filtrage de paquets.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>options IPFIREWALL_VERBOSE</literal></term>
<listitem>
<para>Envoie les paquets trac&eacute;s au syst&egrave;me de traces.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>options
IPFIREWALL_VERBOSE_LIMIT=<replaceable>100</replaceable></literal></term>
<listitem>
<para>Limite le nombre de paquets similaires trac&eacute;s. Cela
&eacute;vite que votre fichier de traces soit submerg&eacute; de nombreuses
entr&eacute;es r&eacute;p&eacute;t&eacute;es. <replaceable>100</replaceable> est une
valeur raisonnable, mais vous pouvez l'ajuster en fonction
de vos besoins.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><literal>options IPDIVERT</literal></term>
<listitem>
<para>Autorise le <emphasis>d&eacute;tournement</emphasis> des
sockets, cela sera explicit&eacute; plus tard.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Il y a d'autres &eacute;l&eacute;ments <emphasis>optionnels</emphasis> que
vous pouvez rajouter dans le noyau pour plus de s&eacute;curit&eacute;. Ils ne
sont pas requis pour avoir un filtrage de paquets qui fonctionne,
mais il se peut que quelques utilisateurs un peu plus parano&iuml;aques
d&eacute;sirent les utiliser.</para>
<variablelist>
<varlistentry>
<term><literal>options TCP_DROP_SYNFIN</literal></term>
<listitem>
<para>Cette option ignore les paquets TCP avec les indicateurs
SYN et FIN activ&eacute;s. Cela emp&ecirc;che certains utilitaires tel
que nmap etc. d'identifier la pile TCP/IP de la machine,
mais cela rompt le support des extensions RFC1644. Cela
<emphasis>n'est pas</emphasis> recommand&eacute; si la machine
h&eacute;berge un serveur web.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Ne pas red&eacute;marrer une fois que vous avez recompil&eacute; le noyau.
Avec un peu de chance, nous n'aurons besoin de red&eacute;marrer qu'une
fois pour achever l'installation du coupe-feu.</para>
</sect1>
<sect1 id="rcconf">
<title>Modifier <filename>/etc/rc.conf</filename> pour charger le
coupe-feu</title>
<para>Nous avons maintenant besoin de quelques modifications de
<filename>/etc/rc.conf</filename> afin de signaler notre
coupe-feu. Ajoutez simplement les lignes suivantes:</para>
<programlisting>firewall_enable="YES"
firewall_script="/etc/firewall/fwrules"
natd_enable="YES"
natd_interface="tun0"
natd_flags="-dynamic"</programlisting>
<para>Pour plus d'informations sur la fonction de ces &eacute;l&eacute;ments
jetez un coup d'oeil &agrave; <filename>/etc/defaults/rc.conf</filename>
et lisez la page de manuel &man.rc.conf.5;.</para>
</sect1>
<sect1>
<title>D&eacute;sactiver la traduction d'adresse r&eacute;seau de PPP</title>
<para>Il se peut que vous utilisiez d&eacute;j&agrave; la traduction d'adresse
r&eacute;seau (NAT) int&eacute;gr&eacute;e &agrave; PPP. Si c'est le cas alors vous aurez &agrave;
la d&eacute;sactiver, &eacute;tant donn&eacute; que nos exemples utilisent &man.natd.8;
pour faire la m&ecirc;me chose.</para>
<para>Si vous avez d&eacute;j&agrave; un ensemble d'options pour d&eacute;marrer
automatiquement PPP, cela doit probablement ressembler &agrave;
ceci:</para>
<programlisting>ppp_enable="YES"
ppp_mode="auto"
ppp_nat="YES"
ppp_profile="<replaceable>profile</replaceable>"</programlisting>
<para>Si c'est le cas, vous devrez sp&eacute;cifiquement d&eacute;sactiver
<literal>ppp_nat</literal> en vous assurant que vous avez bien
la ligne <literal>ppp_nat="NO"</literal> dans
<filename>/etc/rc.conf</filename>. Vous devrez &eacute;galement
retirer les lignes <literal>nat enable yes</literal> ou
<literal>alias enable yes</literal> de
<filename>/etc/ppp/ppp.conf</filename>.</para>
</sect1>
<sect1 id="rules">
<title>Le jeu de r&egrave;gles pour le coupe-feu</title>
<para>Nous avons presque termin&eacute;. Tout ce qu'il reste &agrave; faire est
de d&eacute;finir les r&egrave;gles du coupe-feu et alors nous pourrons
red&eacute;marrer, et notre coupe-feu devrait fonctionner. Je me suis rendu
compte que chacun d&eacute;sirera quelque chose de l&eacute;g&egrave;rement diff&eacute;rent
quand il est question de son ensemble de r&egrave;gles. Ce que j'ai
essay&eacute; de faire est d'&eacute;crire un ensemble de r&egrave;gles qui conviendra
&agrave; la plupart des utilisateurs de modems. Vous pouvez bien
&eacute;videment le modifier selon vos besoins en utilisant les r&egrave;gles
suivantes comme fondation pour votre propre ensemble de r&egrave;gles.
Tout d'abord commen&ccedil;ons avec les bases du filtrage ferm&eacute;. Ce que
vous voulez faire est de refuser tout par d&eacute;faut et ensuite
n'autoriser que les choses dont vous avez vraiment besoin. Les
r&egrave;gles devraient &ecirc;tre ordonn&eacute;es de fa&ccedil;on &agrave; autoriser tout d'abord
puis ensuite refuser. Le principe est que vous ajoutiez les r&egrave;gles
pour vos autorisations, et ensuite tout est refus&eacute;. :)</para>
<para>Maintenant, cr&eacute;ons le r&eacute;pertoire <filename
class="directory">/etc/firewall</filename>. Allez dans ce
r&eacute;pertoire et &eacute;ditez le fichier <filename>fwrules</filename> comme
nous l'avons sp&eacute;cifi&eacute; dans <filename>rc.conf</filename>. S'il
vous pla&icirc;t, notez que vous pouvez changer le nom de ce fichier
pour celui que vous d&eacute;sirez. Ce guide donne juste un exemple de
nom de fichier.</para>
<para>Maintenant, jettons un coup d'oeil &agrave; cet exemple de fichier de
coupe-feu, qui est minutieusement comment&eacute;.</para>
<programlisting># R&egrave;gles du coupe-feu
# Ecrit par Marc Silver (marcs@draenor.org)
# http://draenor.org/ipfw
# Librement distribuable
# D&eacute;finie la commande du coupe-feu (comme dans /etc/rc.firewall)
# pour une r&eacute;f&eacute;rence ais&eacute;e. Facilite la lecture.
fwcmd="/sbin/ipfw"
# Vide les r&egrave;gles actuelles avant rechargement.
$fwcmd -f flush
# D&eacute;tourne tous les paquets &agrave; travers l'interface tunnel
$fwcmd add divert natd all from any to any via tun0
# Autorise toutes les donn&eacute;es de ma carte r&eacute;seau et de l'h&ocirc;te local.
# Soyez s&ucirc;r de changer votre carte r&eacute;seau (la mienne &eacute;tait fxp0) avant
# de red&eacute;marrer. :)
$fwcmd add allow ip from any to any via lo0
$fwcmd add allow ip from any to any via fxp0
# Autorise toute les connexions dont je suis l'initiateur.
$fwcmd add allow tcp from any to any out xmit tun0 setup
# Une fois les connexions &eacute;tablies, les autorise &agrave; rester ouvertes.
$fwcmd add allow tcp from any to any via tun0 established
# Tous le monde sur internet est autoris&eacute; &agrave; se connecter aux services
# suivants sur la machine. Cet exemple autorise sp&eacute;cifiquement les
# connexions &agrave; ssh et apache.
$fwcmd add allow tcp from any to any 80 setup
$fwcmd add allow tcp from any to any 22 setup
# Ceci envoie un RESET &agrave; tous les paquets ident.
$fwcmd add reset log tcp from any to any 113 in recv tun0
# Autorise les requettes DNS sortantes SEULEMENT vers les serveurs
# sp&eacute;cifi&eacute;s.
$fwcmd add allow udp from any to <replaceable>x.x.x.x</replaceable> 53 out xmit tun0
# Autorise leur retour avec les r&eacute;ponses... :)
$fwcmd add allow udp from <replaceable>x.x.x.x</replaceable> 53 to any in recv tun0
# Autorise l'ICMP (pour permettre &agrave; ping et traceroute de fonctionner).
# Vous pouvez peut-&ecirc;tre d&eacute;sirer d&eacute;sactiver ceci, mais je pense que cela
# r&eacute;pond &agrave; mes besoins de les conserver ainsi.
$fwcmd add allow icmp from any to any
# Bloque tout le reste.
$fwcmd add deny log ip from any to any</programlisting>
<para>Vous disposez d&eacute;sormais d'un coupe-feu tout &agrave; fait fonctionnel
qui autorisera les connexions sur les ports 80 et 22 et tracera
tout autre tentative de connexion. Maintenant, vous devriez &ecirc;tre
en mesure de red&eacute;marrer sans risques et votre coupe-feu devrait se
lancer sans probl&egrave;mes. Si vous trouvez une quelconque erreur ou
exp&eacute;rimentez des probl&egrave;mes, ou que vous avez des suggestions pour
am&eacute;liorer ce document, s'il vous pla&icirc;t &eacute;crivez-moi.</para>
</sect1>
<sect1>
<title>Questions</title>
<qandaset>
<qandaentry>
<question>
<para>Pourquoi utilisez-vous &man.natd.8; et &man.ipfw.8;
alors que vous pourriez utiliser les filtres int&eacute;gr&eacute;s &agrave;
&man.ppp.8;?
</para>
</question>
<answer>
<para>Je serais honn&ecirc;te et dirais qu'il n'y a aucune raison
d&eacute;finitive pour que j'utilise <command>ipfw</command> et
<command>natd</command> plut&ocirc;t que les filtres int&eacute;gr&eacute;s &agrave;
<command>ppp</command>. D'apr&egrave;s les discussions que j'ai eu
avec de nombreuses personnes le consensus semble &ecirc;tre
qu'<command>ipfw</command> est certainement plus
puissant et configurable que les filtres
<command>ppp</command>, mais ce qu'il apporte dans la
fonctionnalit&eacute; il le perd en facilit&eacute; d'utilisation. Une
des raisons de mon utilisation est que je pr&eacute;f&egrave;re que le
filtrage de paquets soit fait au niveau du noyau plut&ocirc;t que
par un programme utilisateur.</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>J'obtiens des messages du type <errorname>limit 100
reached on entry 2800</errorname> et apr&egrave;s cela je ne vois
plus jamais de refus dans mes traces. Mon coupe-feu
fonctionne-t-il toujours?
</para>
</question>
<answer>
<para>Cela signifie simplement que le nombre maximal de
traces pour la r&egrave;gle a &eacute;t&eacute; atteint. La r&egrave;gle fonctionne
toujours, mais elle n'enregistrera plus de trace jusqu'au
moment ou vous r&eacute;initialiserez les compteurs de traces.
Vous pouvez r&eacute;initialiser les compteurs de traces avec la
commande <command>ipfw resetlog</command>. Alternativement,
vous pouvez augmenter la limite de trace dans la
configuration de votre noyau avec l'option
<option>IPFIREWALL_VERBOSE_LIMIT</option> comme d&eacute;crit
pr&eacute;c&eacute;demment. Vous pouvez &eacute;galement changer cette limite
(sans recompiler votre noyau ou avoir &agrave; red&eacute;marrer) en
utilisant la valeur &man.sysctl.8;
net.inet.ip.fw.verbose_limit.</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>Si j'utilise des adresses priv&eacute;es en interne, comme
dans la plage 192.168.0.0, pourrais-je ajouter une commande
comme <literal>$fwcmd add deny all from any to
192.168.0.0:255.255.0.0 via tun0</literal> aux r&egrave;gles du
coupe-feu pour pr&eacute;venir les tentatives externes de
connexions vers les machines internes?</para>
</question>
<answer>
<para>Une r&eacute;ponse simple est non. La raison de cela est que
<command>natd</command> effectue la traduction d'adresse
pour <emphasis>tout</emphasis> ce qui sera d&eacute;tourn&eacute; &agrave;
travers le p&eacute;riph&eacute;rique <devicename>tun0</devicename>. En
ce qui concerne les paquets entrant, ces derniers ne
parleront qu'&agrave; l'adresse IP dynamiquement assign&eacute;e et
<emphasis>non pas</emphasis> au r&eacute;seau interne. Notez que
cependant vous pouvez ajouter une r&egrave;gle comme
<literal>$fwcmd add deny all from 192.168.0.4:255.255.0.0 to
any via tun0</literal> qui limiterait un h&ocirc;te de votre r&eacute;seau
interne de sortir via le coupe-feu.</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>Il doit y avoir quelque chose d'erron&eacute;. J'ai suivi vos
instructions &agrave; la lettre et maintenant tout est bloqu&eacute;.</para>
</question>
<answer>
<para>Ce guide suppose que vous utilisez
<emphasis>userland-ppp</emphasis> aussi le jeu de r&egrave;gle
donn&eacute; intervient sur l'interface
<devicename>tun0</devicename>, qui correspond &agrave; la premi&egrave;re
connexion &eacute;tablie avec &man.ppp.8; (a.k.a.
<emphasis>user-ppp</emphasis>). Les connexions
suppl&eacute;mentaires utiliseront <devicename>tun1</devicename>,
<devicename>tun2</devicename> et ainsi de suite.</para>
<para>Vous devriez &eacute;galement noter que &man.pppd.8; utilise
&agrave; la place l'interface <devicename>ppp0</devicename>, donc
si vous &eacute;tablissez une connexion avec &man.pppd.8; vous
devez remplacer <devicename>tun0</devicename> par
<devicename>ppp0</devicename>. Une fa&ccedil;on rapide d'&eacute;diter
les r&egrave;gles du coupe-feu pour refl&eacute;ter ce changement est
pr&eacute;sent&eacute;e ci-dessous. Le jeu de r&egrave;gles original est
sauvegard&eacute; sous <filename>fwrules_tun0</filename>.</para>
<screen> &prompt.user; <userinput>cd /etc/firewall</userinput>
/etc/firewall&prompt.user; <userinput>su</userinput>
<prompt>Password:</prompt>
/etc/firewall&prompt.root; <userinput>mv fwrules fwrules_tun0</userinput>
/etc/firewall&prompt.root; <userinput>cat fwrules_tun0 | sed s/tun0/ppp0/g > fwrules</userinput>
</screen>
<para>Pour savoir si vous utilisez actuellement &man.ppp.8; ou
&man.pppd.8; vous pouvez examiner la sortie
d'&man.ifconfig.8; une fois que la connexion est &eacute;tablie.
E.g., pour une connexion faite par &man.pppd.8; vous verriez
quelque chose comme ceci (on ne montre que les lignes
importantes):</para>
<screen> &prompt.user; <userinput>ifconfig</userinput>
<emphasis>(skipped...)</emphasis>
ppp0: flags=<replaceable>8051&lt;UP,POINTOPOINT,RUNNING,MULTICAST&gt; mtu 1524</replaceable>
inet <replaceable>xxx.xxx.xxx.xxx</replaceable> --&gt; <replaceable>xxx.xxx.xxx.xxx</replaceable> netmask <replaceable>0xff000000</replaceable>
<emphasis>(skipped...)</emphasis>
</screen>
<para>D'autre part, pour une connexion faite avec &man.ppp.8;
(<emphasis>user-ppp</emphasis>) vous devriez voir quelque
chose de similaire &agrave;:</para>
<screen> &prompt.user; <userinput>ifconfig</userinput>
<emphasis>(skipped...)</emphasis>
ppp0: flags=<replaceable>8010&lt;POINTOPOINT,MULTICAST&gt; mtu 1500</replaceable>
<emphasis>(skipped...)</emphasis>
tun0: flags=<replaceable>8051&lt;UP,POINTOPOINT,RUNNING,MULTICAST&gt; mtu 1524</replaceable>
<emphasis>(IPv6 stuff skipped...)</emphasis>
inet <replaceable>xxx.xxx.xxx.xxx</replaceable> --&gt; <replaceable>xxx.xxx.xxx.xxx</replaceable> netmask <replaceable>0xffffff00</replaceable>
Opened by PID <replaceable>xxxxx</replaceable>
<emphasis>(skipped...)</emphasis></screen>
</answer>
</qandaentry>
</qandaset>
</sect1>
</article>