Sophie

Sophie

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

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

<html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>3.&nbsp;Configuration de la machine Linux</title><link href="style.css" rel="stylesheet" type="text/css"><meta content="DocBook XSL Stylesheets V1.68.1" name="generator"><link rel="start" href="index.html" title="
      Guide pratique de la r&eacute;alisation d'une passerelle d'authentification avec
      Samba
  "><link rel="up" href="index.html" title="
      Guide pratique de la r&eacute;alisation d'une passerelle d'authentification avec
      Samba
  "><link rel="prev" href="ar01s02.html" title="2.&nbsp;Besoins"><link rel="next" href="ar01s04.html" title="4.&nbsp;Autre solution"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">3.&nbsp;Configuration de la machine Linux</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="ar01s02.html">Pr&eacute;c&eacute;dent</a>&nbsp;</td><th align="center" width="60%">&nbsp;</th><td align="right" width="20%">&nbsp;<a accesskey="n" href="ar01s04.html">Suivant</a></td></tr></table><hr></div><div class="sect1" lang="fr"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="N101BF"></a>3.&nbsp;Configuration de la machine Linux</h2></div></div></div><p>Ce guide pratique suppose que vous avez un noyau de la s&eacute;rie 2.4 car il
utilise <span><strong class="command">iptables</strong></span>. En dehors de ceci, il n'existe aucune autre
raison pour laquelle il ne pourrait pas &ecirc;tre utilis&eacute; avec une machine disposant
d'un noyau 2.2 apr&egrave;s avoir adapt&eacute; les scripts &agrave; <span><strong class="command">ipchains</strong></span>.
</p><p>Bien s&ucirc;r, vous avez besoin d'installer les outils utilisateur
d'<span class="application">iptables</span>, un serveur <span class="acronym">HTTP</span>
<span class="application">apache</span> si vous voulez utiliser un outil
<span class="acronym">CGI</span> pour changer les mots de passe, et
<span class="application">samba</span>. Et vous aurez besoin d'un noyau compil&eacute; avec
les modules <span class="application">iptables</span>.</p><p>Vous pouvez utiliser <span class="acronym">DHCP</span>. Si c'est le cas, il est
assez simple de le configurer. Rappelez-vous de configurer le serveur
<span class="acronym">DHCP</span> pour qu'il donne l'adresse <span class="acronym">IP</span> du
serveur de noms ainsi que l'adresse <span class="acronym">IP</span> de la passerelle. Les
machines Windows feront bon usage de cette information.</p><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="N101F2"></a>3.1.&nbsp;Configuration basique du syst&egrave;me</h3></div></div></div><p>G&eacute;n&eacute;ralement, toute configuration de base &agrave; partir des distributions Linux
connues conviendra pour l'exemple de passerelle. V&eacute;rifiez simplement que
vous disposez de <span class="application">Samba</span> et
d'<span><strong class="command">iptables</strong></span>.</p></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="N101FF"></a>3.2.&nbsp;Hi&eacute;rarchie des r&eacute;pertoires suppl&eacute;mentaires</h3></div></div></div><p>Une hi&eacute;rarchie de r&eacute;pertoires suppl&eacute;mentaires sera n&eacute;cessaire pour
accomplir l'exemple de ce guide pratique&nbsp;:
<div class="itemizedlist"><ul type="disc"><li><p><code class="filename">/var/run/smbgate/</code>&nbsp;:
    Ceci est fait pour conserver trace des utilisateurs et des adresses
    <span class="acronym">IP</span>&nbsp;;</p></li><li><p><code class="filename">/etc/smbgate/users/</code>&nbsp;:
    C'est ici que je place les scripts sp&eacute;cifiques aux utilisateurs&nbsp;;
    </p></li><li><p><code class="filename">/home/samba/netlogon/</code>&nbsp;:
    R&eacute;pertoire du partage netlogon&nbsp;;</p></li><li><p><code class="filename">/home/samba/samba/</code>&nbsp;:
    R&eacute;pertoire du partage de trace.</p></li></ul></div>
</p><p>Ces r&eacute;pertoires sont n&eacute;cessaires pour certains des scripts et d&eacute;mons de
cet exemple.</p></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="N10227"></a>3.3.&nbsp;Configuration du pare-feu</h3></div></div></div><p>Il est tr&egrave;s improbable que le noyau de votre distribution n'ait pas &eacute;t&eacute;
compil&eacute; avec <span class="application">iptables</span> et que les outils utilisateur
ne soient pas non plus install&eacute;s. N&eacute;anmoins, si vous ne les avez pas,
r&eacute;f&eacute;rez-vous &agrave; <a href="http://www.netfilter.org/" target="_top">http://www.netfilter.org/</a> ou <a href="http://www.iptables.org/" target="_top">http://www.iptables.org/</a> pour r&eacute;cup&eacute;rer le logiciel et la documentation.
</p><p>Vous aurez besoin d'une configuration basique du pare-feu pour que la
passerelle fonctionne. Jetez un &#339;il sur le tutoriel
<span class="application">iptables</span> disponible sur <a href="http://www.netfilter.org/documentation/tutorials/blueflux/iptables-tutorial.html" target="_top">netfilter.org</a>. 
Cette lecture est tr&egrave;s int&eacute;ressante. N&eacute;anmoins, si vous n'avez pas de 
temps pour cela, le code suivant est tr&egrave;s basique mais il peut convenir 
&agrave; vos besoins&nbsp;:
</p><pre class="screen">#!/bin/sh
IPTABLES=/usr/sbin/iptables
/sbin/depmod -a
/sbin/insmod ip_tables
/sbin/insmod ip_conntrack
/sbin/insmod ip_conntrack_ftp
/sbin/insmod ip_conntrack_irc
/sbin/insmod iptable_nat
/sbin/insmod ip_nat_ftp
echo "1" &gt; /proc/sys/net/ipv4/ip_forward
echo "1" &gt; /proc/sys/net/ipv4/ip_dynaddr
$IPTABLES -P INPUT ACCEPT
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -F FORWARD
$IPTABLES -t nat -F
</pre><p>Vous remarquerez que ce code ne fait que charger les modules du noyau
en relation avec <span class="acronym">NAT</span> et le pare-feu, et mettre en place la
transmission des paquets. Vous pouvez (et devriez) placer toutes les r&egrave;gles pour
donner &agrave; votre passerelle un comportement standard, mais toute la magie sera
r&eacute;alis&eacute;e par des scripts appel&eacute;s par le d&eacute;mon <span class="application">samba</span>.
</p><p>S'il-vous-plait, rappelez-vous que ce code n'apporte pas la moindre
s&eacute;curit&eacute;&nbsp;! N'utilisez pas cet exemple sur des machines de production. Cet exemple
a seulement pour but d'informer. Vous devez ajouter une configuration de
pare-feu convenant &agrave; votre syst&egrave;me.</p><p>Vous &ecirc;tes pr&eacute;venus&nbsp;!</p></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="N10250"></a>3.4.&nbsp;Configuration de <span class="application">Samba</span></h3></div></div></div><p>V&eacute;rifiez que <span class="application">Samba</span> est install&eacute;. Si votre
distribution ne vient pas avec <span class="application">Samba</span> pr&eacute;par&eacute;, alors
r&eacute;f&eacute;rez-vous &agrave; <a href="http://www.samba.org" target="_top">http://www.samba.org</a> pour obtenir le paquetage et
la documentation sur son installation. Regardez sur leur site web et apprenez.
Le site est rempli de documentations et peut-&ecirc;tre que votre distribution Linux
dispose elle-aussi de documentation sur <span class="application">Samba</span>.</p><p>Nous aurons besoin de configurer <span class="application">Samba</span> 
comme contr&ocirc;leur principal de domaine. Je donnerais un fichier de 
configuration en exemple, mais vous devriez lire la <a href="http://samba.epfl.ch/samba/docs/man/Samba-HOWTO-Collection.html" target="_top">collection
de guides pratiques sur Samba</a> et tout apprendre sur les 
<span class="acronym">PDC</span>.
</p><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a name="N10274"></a>3.4.1.&nbsp;Configuration basique de <span class="application">Samba</span></h4></div></div></div><p>Comme je n'ai pas l'intention de r&eacute;&eacute;crire la documentation de
<span class="application">Samba</span>, voici un simple fichier
<code class="filename">smb.conf</code>&nbsp;:</p><pre class="screen"># Global parameters
[global]
workgroup = DOMAIN
netbios name = LINUX
server string = Linux <span class="acronym">PDC</span>
encrypt passwords = Yes
map to guest = Bad Password
passwd program = /usr/bin/passwd
unix password sync = Yes
max log size = 50
time server = Yes
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
add user script = /usr/sbin/useradd -d /dev/null -g 100 -s /bin/false -M %u
logon script = %a.bat
domain logons = Yes
os level = 64
lm announce = True
preferred master = True
domain master = True
dns proxy = No
printing = lprng
[homes]
comment = Home Directories
path = /home/%u
read only = No
[printers]
comment = All Printers
path = /var/spool/samba
printable = Yes
browseable = No
available = No
[netlogon]
comment = NetLogon ShARE
path = /home/samba/netlogon
guest account =
[samba]
comment = login tracking share
path = /home/samba/samba
browseable = No
root preexec = /usr/local/bin/netlogon.sh %u  %I
root postexec = /usr/local/bin/netlogoff.sh %u
</pre><p>Vous devrez faire avec ou lire la documentation de
<span class="application">Samba</span> si vous voulez r&eacute;ellement contr&ocirc;ler votre
serveur et votre r&eacute;seau.</p></div><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a name="N10290"></a>3.4.2.&nbsp;Le script logon</h4></div></div></div><p>Utiliser &laquo;&nbsp;<span class="quote">logon script = %a.bat</span>&nbsp;&raquo; fait que samba
&eacute;value le syst&egrave;me d'exploitation invit&eacute; et appelle le script de connexion
appropri&eacute;. Si vous pr&eacute;f&eacute;rez un script statique, modifiez seulement cette ligne
par &laquo;&nbsp;<span class="quote">logon script = netlogon.bat</span>&nbsp;&raquo;. En fait, vous pouvez tout faire
ici, y compris g&eacute;n&eacute;rer un script lors de la connexion.</p></div><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a name="N1029B"></a>3.4.3.&nbsp;Partages netlogon et shares</h4></div></div></div><p>Le partage netlogon est l'endroit o&ugrave; les stations Windows vont t&eacute;l&eacute;charger
le script de connexion (logon). Nous avons besoin de ce partage pour y placer
un script de connexion qui dira &agrave; la station de monter un partage que nous
utiliserons pour tracer l'adresse <span class="acronym">IP</span> de l'utilisateur.</p><p>Comme vous le voyez, il doit y avoir une ligne comme ci-dessous dans
votre fichier <code class="filename">smb.conf</code>.</p><pre class="screen">logon script = netlogon.bat</pre><p>Cette ligne indiquera au client Windows de t&eacute;l&eacute;charger et ex&eacute;cuter le
script nomm&eacute; <code class="filename">netlogon.bat</code>. Ce script doit &ecirc;tre plac&eacute; dans
le partage netlogon. Donc, nous aurons aussi besoin d'un script
<code class="filename">netlogon.bat</code> pour vos stations Windows. Vous pouvez
utiliser l'exemple suivant et cr&eacute;er un fichier nomm&eacute;
<code class="filename">NETLOGON.BAT</code> et plac&eacute; dans le partage netlogon, dans ce cas
dans <code class="filename">/home/samba/netlogon/NETLOGON.BAT</code>.</p><pre class="screen">REM NETLOGON.BAT
net use z: \\linux\samba /yes</pre><p>Ce script indiquera aux stations Windows de monter le partage sp&eacute;cifi&eacute;, et
donc nous serons capable de garder la trace de l'utilisateur et de la station
au travers de la sortie du programme <span><strong class="command">smbstatus</strong></span>.</p><p>Assez simple&nbsp;! Mais pas suffisant&hellip;</p><p>Comme vous pouvez le voir, nous aurons aussi besoin d'un partage de traces
que j'ai nomm&eacute; samba dans cet exemple. Vous pouvez voir dans le fichier
<code class="filename">smb.conf</code> la configuration du partage de traces&nbsp;:</p><pre class="screen">[samba]
comment = login tracking share
path = /home/samba/samba
browseable = No
root preexec = /usr/local/bin/netlogon.sh %u  %I
root postexec = /usr/local/bin/netlogoff.sh %u</pre><p>Comme vous pouvez le deviner, ou le savoir si vous avez lu la
documentation de <span class="application">Samba</span>, les lignes 
&laquo;&nbsp;root preexec&nbsp;&raquo; et &laquo;&nbsp;root postexec&nbsp;&raquo; indiquent &agrave; 
<span class="application">Samba</span> de lancer les scripts indiqu&eacute;s 
lorsqu'un utilisateur monte ou d&eacute;monte le partage. Dans ce cas, nous 
passons le nom de l'utilisateur comme param&egrave;tre au script. Notez le 
%u &agrave; la fin des lignes. Ces scripts vont appeler un script ou un
programme pour modifier les r&egrave;gles de filtrage de paquets de notre passerelle.
</p><p>Notez que le script <code class="filename">netlogon.sh</code> doit v&eacute;rifier si la
station en question a d&eacute;j&agrave; mont&eacute; le partage des traces.</p><p>Jetez un &#339;il sur les scripts <code class="filename">netlogon.sh</code> et
<code class="filename">netlogoff.sh</code>&nbsp;:</p><pre class="screen">#!/bin/sh
#
# netlogon.sh
#
# usage:
# netlogon.sh &lt;nom_utilisateur&gt;
#
if [ -f /var/run/smbgate/$1 ] ; then
    exit 0
fi
echo $2 &gt; /var/run/smbgate/$1
IPTABLES='/usr/sbin/iptables'
EXTIF='eth0'
COMMAND='-A'
ADDRESS=`cat /var/run/smbgate/$1`
GROUP=`groups $1 | gawk '// { print $3 }'`
if [ -f /etc/smbgate/users/$1 ] ; then
    /etc/smbgate/users/$1 $COMMAND $ADDRESS $EXTIF
else     
    if [ -f /etc/smbgate/groups/$GROUP ] ; then
        /etc/smbgate/groups/$GROUP $COMMAND $ADDRESS $EXTIF
    else
        /etc/smbgate/users/default.sh $COMMAND $ADDRESS $EXTIF
    fi
fi</pre><p>
Ce script (<code class="filename">netlogon.sh</code>) a pour but d'&ecirc;tre ex&eacute;cut&eacute;
lors de la connexion de l'utilisateur et de s&eacute;lectionner les scripts &agrave;
ex&eacute;cuter suivant le nom de l'utilisateur et le groupe auquel celui-ci
appartient. L'adresse IP de l'utilisateur sera enregistr&eacute; dans un
fichier sous <code class="filename">/var/run/smbgate</code>
pour en conserver la trace. Le fichier prendra le nom de l'utilisateur
et servira de nouveau lorsque celui-ci se d&eacute;connectera. L'adresse IP
sera pass&eacute;e en argument &agrave; un script avec le nom de l'utilisateur qui
mettra &agrave; jour les r&egrave;gles du pare-feu.
</p><p>Notez que ce script commence par chercher un script utilisateur, puis, si
il n'en trouve pas, il cherche un script groupe et, finalement, si il n'en
trouve pas non plus, il utilise le script <code class="filename">default.sh</code>. Vous
pouvez modifier cette logique et ce comportement si vous le souhaitez ou en avez
besoin. Rappelez-vous simplement de modifier les autres de mani&egrave;res
concordantes.</p><p>Il y a des chances pour que l'utilisateur appartienne &agrave; plus d'un des
scripts et que ces scripts &eacute;chouent. Je n'ai pas le temps d'&eacute;crire un
meilleur code.</p><pre class="screen">#!/bin/sh
#
# netlogoff.sh
#
# usage:
# netlogoff.sh &lt;username&gt;
#
IPTABLES='/usr/sbin/iptables'
EXTIF='ppp0'
COMMAND='-D'
TRACKSHARE="samba"
ADDRESS=`cat /var/run/smbgate/$1`
GROUP=`groups $1 | gawk '// { print $3 }'`
NM=`smbstatus -u $1 | grep $TRACKSHARE | wc -l`
if [ $NM -gt 0 ]; then
    exit
fi
if [ -f /etc/smbgate/users/$1 ] ; then
    /etc/smbgate/users/$1 $COMMAND $ADDRESS $EXTIF
else
    if [ -f /etc/smbgate/groups/$GROUP ] ; then
        /etc/smbgate/groups/$GROUP $COMMAND $ADDRESS
$EXTIF
    else
        /etc/smbgate/users/default.sh $COMMAND $ADDRESS
$EXTIF
    fi
fi
rm -f /var/run/smbgate/$1</pre><p>Ce script (<code class="filename">netlogoff.sh</code>) a pour but d'&ecirc;tre ex&eacute;cut&eacute;
lors de la d&eacute;connexion de l'utilisateur. Il r&eacute;cup&eacute;rera l'adresse &agrave; partir du
fichier <code class="filename">/var/run/smbgate/user</code>, adresse qui sera pass&eacute;e en
argument pour le script <code class="filename">/etc/smbgate/users/user</code>. Ce dernier
mettra &agrave; jour le pare-feu dans l'&eacute;tat d&eacute;sir&eacute; lorsque l'utilisateur ne sera plus
connect&eacute;.</p><p>Certaines versions de Windows, telles que Windows 2000, montent le
r&eacute;pertoire partag&eacute; plus d'une fois lors de la connexion. Ceci peut apporter des
probl&egrave;mes avec les scripts <code class="filename">netlogon.sh</code> et
<code class="filename">netlogoff.sh</code> en les ex&eacute;cutant plus d'une fois. Donc, vous
pouvez utiliser un script de v&eacute;rification de d&eacute;connexion lanc&eacute; par le
<span><strong class="command">cron</strong></span> au lieu d'un script <code class="filename">netlogoff.sh</code>
lanc&eacute; par <span class="application">Samba</span>. En voici un exemple&nbsp;:</p><pre class="screen">#!/bin/sh
# checklogout.sh
#
# usage:
# doit &ecirc;tre lanc&eacute; par cron (par exemple toutes les dix minutes)
#

TRACKDIR="/var/run/smbgate"
DIRLENGTH=${#TRACKDIR}
TRACKSHARE="samba"
EXTIF='eth0'
COMMAND='-D'
if [ -d $TRACKDIR ]; then
  for n in $TRACKDIR/*; do
    [ -d $n ] &amp;&amp; continue;
      if [ -f $n ] ; then 
        IPADDRESS=`cat $n`
        USERNAME=${n:$DIRLENGTH+1}
        NMS=`smbstatus -u $USERNAME | grep $TRACKSHARE | \
          grep $IPADDRESS | grep -v grep | wc -l`
        if [ $NMS == 0 ] ; then
          rm -f $n
        GROUP=`groups $USERNAME | gawk '// { print $3 }'`
        if [ -f /etc/smbgate/users/$USERNAME ] ; then
          /etc/smbgate/users/$USERNAME $COMMAND $IPADDRESS $EXTIF
        else
          if [ -f /etc/smbgate/groups/$GROUP ] ; then
            /etc/smbgate/groups/$GROUP $COMMAND $IPADDRESS $EXTIF
          else
            /etc/smbgate/users/default.sh $COMMAND $IPADDRESS $EXTIF
          fi
        fi
      fi
    else
      exit 0
    fi
  done
fi</pre><p>Dans ce cas, vous devez supprimer la clause postexec de la d&eacute;claration du
partage dans <code class="filename">smb.conf</code>&nbsp;:</p><pre class="screen">root postexec = /usr/local/bin/netlogoff.sh %u</pre><p>La suite est un script standard
<code class="filename">/etc/smbgate/users/user</code>. Ce script modifiera r&eacute;ellement les
r&egrave;gles du pare-feu.</p><pre class="screen">#!/bin/sh
#
COMMAND=$1
ADDRESS=$2
EXTIF=$3
IPTABLES='/usr/sbin/iptables'
$IPTABLES $COMMAND POSTROUTING -t nat -s $ADDRESS -o $EXTIF -j MASQUERADE
</pre><p>Nous devons aussi avoir un script default.sh sur /etc/smbgate/users/ pour
donner &agrave; la passerelle un comportement par d&eacute;faut.
</p><pre class="screen">#!/bin/sh
#
# default.sh
COMMAND=$1
ADDRESS=$2
EXTIF=$3
IPTABLES='/usr/sbin/iptables'
#$IPTABLES $COMMAND POSTROUTING -t nat -s $ADDRESS -o $EXTIF -j MASQUERADE
exit 0</pre></div></div></div><div class="navfooter"><hr><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="ar01s02.html">Pr&eacute;c&eacute;dent</a>&nbsp;</td><td align="center" width="20%">&nbsp;</td><td align="right" width="40%">&nbsp;<a accesskey="n" href="ar01s04.html">Suivant</a></td></tr><tr><td valign="top" align="left" width="40%">2.&nbsp;Besoins&nbsp;</td><td align="center" width="20%"><a accesskey="h" href="index.html">Sommaire</a></td><td valign="top" align="right" width="40%">&nbsp;4.&nbsp;Autre solution</td></tr></table></div></body></html>