3. Configuration de la machine Linux

Ce guide pratique suppose que vous avez un noyau de la s�rie 2.4 car il utilise iptables. 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 � ipchains.

Bien s�r, vous avez besoin d'installer les outils utilisateur d'iptables, un serveur httpapache si vous voulez utiliser un outil CGI pour changer les mots de passe, et samba. Et vous aurez besoin d'un noyau compil� avec les modules iptables.

Vous pouvez utiliser DHCP. Si c'est le cas, il est assez simple de le configurer. Rappelez-vous de configurer le serveur dhcp pour qu'il donne l'adresse IP du serveur de noms ainsi que l'adresse IP de la passerelle. Les machines Windows feront bon usage de cette information.

3.1. Configuration basique du syst�me

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 samba et d'iptables.

3.2. Hi�rarchie des r�pertoires suppl�mentaires

Une hi�rarchie de r�pertoires suppl�mentaires sera n�cessaire pour accomplir l'exemple de ce guide pratique�:

  • /var/run/smbgate/�: Ceci est fait pour conserver trace des utilisateurs et des adresses IP,

  • /etc/smbgate/users/�: C'est ici que je place les scripts sp�cifiques aux utilisateurs,

  • /home/samba/netlogon/�: R�pertoire du partage netlogon,

  • /home/samba/samba/�: R�pertoire du partage de trace.

Ces r�pertoires sont n�cessaires pour certains des scripts et d�mons de cet exemple.

3.3. Configuration du pare-feu

Il est tr�s improbable que le noyau de votre distribution n'ait pas �t� compil� avec iptables et que les outils utilisateur ne soient pas non plus install�s. N�anmoins, si vous ne les avez pas, r�f�rez-vous � http://www.netfilter.org/ ou http://www.iptables.org/ pour r�cup�rer le logiciel et la documentation.

Vous aurez besoin d'une configuration basique du pare-feu pour que la passerelle fonctionne. Jetez un �il sur le tutoriel iptables disponible sur netfilter.org. 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�:

#!/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


Vous remarquerez que ce code ne fait que charger les modules du noyau en relation avec NAT 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 samba.

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.

Vous �tes pr�venus�!

3.4. Configuration de samba

V�rifiez que samba est install�. Si votre distribution ne vient pas avec samba pr�par�, alors r�f�rez-vous � http://www.samba.org 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 samba.

Nous aurons besoin de configurer Samba comme contr�leur principal de domaine. Je donnerais un fichier de configuration en exemple, mais vous devriez lire la collection de guides pratiques sur Samba et tout apprendre sur les PDC.

3.4.1. Configuration basique de samba

Comme je n'ai pas l'intention de r��crire la documentation de samba, voici un simple fichier smb.conf�:

# Global parameters
[global]
workgroup = DOMAIN
netbios name = LINUX
server string = Linux PDC
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
logon script = netlogon.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
root postexec = /usr/local/bin/netlogoff.sh %u


Vous devrez faire avec ou lire la documentation de samba si vous voulez r�ellement contr�ler votre serveur et votre r�seau.

3.4.2. Les partages netlogon et shares

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 IP de l'utilisateur.

Comme vous le voyez, il doit y avoir une ligne comme la suivante dans votre smb.conf.

logon script = netlogon.bat


Cette ligne indiquera au client Windows de t�l�charger et ex�cuter le script nomm� netlogon.bat. Ce script doit �tre plac� dans le partage netlogon. Donc, nous aurons aussi besoin d'un script netlogon.bat pour vos stations Windows. Vous pouvez utiliser l'exemple suivant et cr�er un fichier nomm� NETLOGON.BAT et plac� dans le partage netlogon, dans ce cas dans /home/samba/netlogon/NETLOGON.BAT.

REM NETLOGON.BAT
net use z: \\linux\samba /yes


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

Assez simple�! Mais pas suffisant…

Comme vous pouvez le voir, nous aurons aussi besoin d'un partage de trace que j'ai nomm� samba dans cet exemple. Vous pouvez voir dans le fichier smb.conf la configuration du partage de traces�:

[samba]
comment = login tracking share
path = /home/samba/samba
browseable = No
root preexec = /usr/local/bin/netlogon.sh %u
root postexec = /usr/local/bin/netlogoff.sh %u


Comme vous pouvez le deviner, ou le savoir si vous avez lu la documentation de samba, les lignes ��root preexec�� et ��root postexec�� indiquent � samba 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.

Notez que le script netlogon.sh doit v�rifier si la station en question a d�j� mont� le partage des traces.

Jetez un �il sur les scripts netlogon.sh et netlogoff.sh�:

#!/bin/sh
#
# netlogon.sh
#
# usage:
# netlogon.sh <nom_utilisateur>
#
if [ -f /var/run/smbgate/$1 ] ; then
 exit 0
fi
smbstatus | grep $1 | grep samba | gawk '// { print substr($6,2,length($6)-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

Ce script (netlogon.sh) a pour but d'�tre ex�cut� lors de la connexion de l'utilisateur et filtrera la sortie de smbstatus pour extraire l'adresse IP de l'utilisateur qui sera �crite dans un fichier dans /var/run/smbgate. Le fichier prendra le nom de l'utilisateur et sera utilis� plus tard lorsque l'utilisateur se d�connectera. L'adresse extraite sera pass�e en argument � un script avec le nom de l'utilisateur qui mettra enfin � jour le pare-feu.

Notez que ce script commence par essayer un script utilisateur, puis, si il n'en trouve pas, il essaie un script groupe et, finalement, si il n'en trouve pas non plus, il essaie le script default.sh. 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.

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.

#!/bin/sh
#
# netlogoff.sh
#
# usage:
# netlogoff.sh <nom_utilisateur>
#
IPTABLES='/usr/sbin/iptables'
EXTIF='ppp0'
COMMAND='-D'
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
rm -f /var/run/smbgate/$1


Ce script (netlogoff.sh) a pour but d'�tre ex�cut� lors de la d�connexion de l'utilisateur et r�cup�rera l'adresse � partir du fichier /var/run/smbgate/user qui sera pass� en argument pour le script /etc/smbgate/users/user qui mettra � jour le pare-feu dans l'�tat d�sir� lorsque l'utilisateur ne sera plus connect�.

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 netlogon.sh et netlogoff.sh, en les ex�cutant plus d'une fois. Donc, vous pouvez utiliser un script de v�rification de d�connexion lanc� par le cron au lieu d'un script netlogoff.sh lanc� par samba. En voici un exemple�:

#!/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


Dans ce cas, vous devez supprimer la clause postexec de la d�claration du partage dans smb.conf�:

root postexec = /usr/local/bin/netlogoff.sh %u


La suite est un script standard /etc/smbgate/users/user. Ce script modifiera r�ellement les r�gles du pare-feu.

#!/bin/sh
#
COMMAND=$1
ADDRESS=$2
EXTIF=$3
IPTABLES='/usr/sbin/iptables'
$IPTABLES $COMMAND POSTROUTING -t nat -s $ADDRESS -o $EXTIF -j MASQUERADE


Nous devons aussi avoir un script default.sh sur /etc/smbgate/users/ pour donner � la passerelle un comportement par d�faut.

#!/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