<html><head><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>3. 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éalisation d'une passerelle d'authentification avec Samba "><link rel="up" href="index.html" title=" Guide pratique de la réalisation d'une passerelle d'authentification avec Samba "><link rel="prev" href="ar01s02.html" title="2. Besoins"><link rel="next" href="ar01s04.html" title="4. 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. Configuration de la machine Linux</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="ar01s02.html">Précédent</a> </td><th align="center" width="60%"> </th><td align="right" width="20%"> <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. Configuration de la machine Linux</h2></div></div></div><p>Ce guide pratique suppose que vous avez un noyau de la sé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 être utilisé avec une machine disposant d'un noyau 2.2 après avoir adapté les scripts à <span><strong class="command">ipchains</strong></span>. </p><p>Bien sû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é 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. Configuration basique du système</h3></div></div></div><p>Généralement, toute configuration de base à partir des distributions Linux connues conviendra pour l'exemple de passerelle. Vé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. Hiérarchie des répertoires supplémentaires</h3></div></div></div><p>Une hiérarchie de répertoires supplémentaires sera nécessaire pour accomplir l'exemple de ce guide pratique : <div class="itemizedlist"><ul type="disc"><li><p><code class="filename">/var/run/smbgate/</code> : Ceci est fait pour conserver trace des utilisateurs et des adresses <span class="acronym">IP</span> ;</p></li><li><p><code class="filename">/etc/smbgate/users/</code> : C'est ici que je place les scripts spécifiques aux utilisateurs ; </p></li><li><p><code class="filename">/home/samba/netlogon/</code> : Répertoire du partage netlogon ;</p></li><li><p><code class="filename">/home/samba/samba/</code> : Répertoire du partage de trace.</p></li></ul></div> </p><p>Ces répertoires sont nécessaires pour certains des scripts et dé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. Configuration du pare-feu</h3></div></div></div><p>Il est très improbable que le noyau de votre distribution n'ait pas été compilé avec <span class="application">iptables</span> et que les outils utilisateur ne soient pas non plus installés. Néanmoins, si vous ne les avez pas, référez-vous à <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écupé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 œ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ès intéressante. Néanmoins, si vous n'avez pas de temps pour cela, le code suivant est très basique mais il peut convenir à vos besoins : </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" > /proc/sys/net/ipv4/ip_forward echo "1" > /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ègles pour donner à votre passerelle un comportement standard, mais toute la magie sera réalisée par des scripts appelés par le démon <span class="application">samba</span>. </p><p>S'il-vous-plait, rappelez-vous que ce code n'apporte pas la moindre sécurité ! 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 à votre système.</p><p>Vous êtes prévenus !</p></div><div class="sect2" lang="fr"><div class="titlepage"><div><div><h3 class="title"><a name="N10250"></a>3.4. Configuration de <span class="application">Samba</span></h3></div></div></div><p>Vérifiez que <span class="application">Samba</span> est installé. Si votre distribution ne vient pas avec <span class="application">Samba</span> préparé, alors référez-vous à <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-ê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ô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. Configuration basique de <span class="application">Samba</span></h4></div></div></div><p>Comme je n'ai pas l'intention de réécrire la documentation de <span class="application">Samba</span>, voici un simple fichier <code class="filename">smb.conf</code> :</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éellement contrôler votre serveur et votre réseau.</p></div><div class="sect3" lang="fr"><div class="titlepage"><div><div><h4 class="title"><a name="N10290"></a>3.4.2. Le script logon</h4></div></div></div><p>Utiliser « <span class="quote">logon script = %a.bat</span> » fait que samba évalue le système d'exploitation invité et appelle le script de connexion approprié. Si vous préférez un script statique, modifiez seulement cette ligne par « <span class="quote">logon script = netlogon.bat</span> ». En fait, vous pouvez tout faire ici, y compris géné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. Partages netlogon et shares</h4></div></div></div><p>Le partage netlogon est l'endroit où les stations Windows vont télécharger le script de connexion (logon). Nous avons besoin de ce partage pour y placer un script de connexion qui dira à 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élécharger et exécuter le script nommé <code class="filename">netlogon.bat</code>. Ce script doit être placé 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éer un fichier nommé <code class="filename">NETLOGON.BAT</code> et placé 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écifié, 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 ! Mais pas suffisant…</p><p>Comme vous pouvez le voir, nous aurons aussi besoin d'un partage de traces que j'ai nommé samba dans cet exemple. Vous pouvez voir dans le fichier <code class="filename">smb.conf</code> la configuration du partage de traces :</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 « root preexec » et « root postexec » indiquent à <span class="application">Samba</span> de lancer les scripts indiqués lorsqu'un utilisateur monte ou démonte le partage. Dans ce cas, nous passons le nom de l'utilisateur comme paramètre au script. Notez le %u à la fin des lignes. Ces scripts vont appeler un script ou un programme pour modifier les règles de filtrage de paquets de notre passerelle. </p><p>Notez que le script <code class="filename">netlogon.sh</code> doit vérifier si la station en question a déjà monté le partage des traces.</p><p>Jetez un œil sur les scripts <code class="filename">netlogon.sh</code> et <code class="filename">netlogoff.sh</code> :</p><pre class="screen">#!/bin/sh # # netlogon.sh # # usage: # netlogon.sh <nom_utilisateur> # if [ -f /var/run/smbgate/$1 ] ; then exit 0 fi echo $2 > /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'être exécuté lors de la connexion de l'utilisateur et de sélectionner les scripts à exécuter suivant le nom de l'utilisateur et le groupe auquel celui-ci appartient. L'adresse IP de l'utilisateur sera enregistré 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éconnectera. L'adresse IP sera passée en argument à un script avec le nom de l'utilisateur qui mettra à jour les rè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ères concordantes.</p><p>Il y a des chances pour que l'utilisateur appartienne à plus d'un des scripts et que ces scripts échouent. Je n'ai pas le temps d'écrire un meilleur code.</p><pre class="screen">#!/bin/sh # # netlogoff.sh # # usage: # netlogoff.sh <username> # 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'être exécuté lors de la déconnexion de l'utilisateur. Il récupérera l'adresse à partir du fichier <code class="filename">/var/run/smbgate/user</code>, adresse qui sera passée en argument pour le script <code class="filename">/etc/smbgate/users/user</code>. Ce dernier mettra à jour le pare-feu dans l'état désiré lorsque l'utilisateur ne sera plus connecté.</p><p>Certaines versions de Windows, telles que Windows 2000, montent le répertoire partagé plus d'une fois lors de la connexion. Ceci peut apporter des problèmes avec les scripts <code class="filename">netlogon.sh</code> et <code class="filename">netlogoff.sh</code> en les exécutant plus d'une fois. Donc, vous pouvez utiliser un script de vérification de déconnexion lancé par le <span><strong class="command">cron</strong></span> au lieu d'un script <code class="filename">netlogoff.sh</code> lancé par <span class="application">Samba</span>. En voici un exemple :</p><pre class="screen">#!/bin/sh # checklogout.sh # # usage: # doit être lancé 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 ] && 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éclaration du partage dans <code class="filename">smb.conf</code> :</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éellement les rè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 à la passerelle un comportement par dé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écédent</a> </td><td align="center" width="20%"> </td><td align="right" width="40%"> <a accesskey="n" href="ar01s04.html">Suivant</a></td></tr><tr><td valign="top" align="left" width="40%">2. Besoins </td><td align="center" width="20%"><a accesskey="h" href="index.html">Sommaire</a></td><td valign="top" align="right" width="40%"> 4. Autre solution</td></tr></table></div></body></html>