Previous Next Table of Contents

11. Configurer les démons réseau

Comme mentionné précédement, il y a d'autres fichiers dont vous aurez besoin pour terminer votre installation réseau. Ces fichiers concernent des niveaux de configuration plus élévés des logiciels réseau. Chaque fichier important est décrit dans les sous-sections suivantes, mais en même temps vous trouverez qu'il y en a d'autres à configurer au fur et à mesure que vous deviendrez plus familiers avec les outils.

11.1 /etc/rc.d/rc.inet2 (la seconde moitié de rc.net)

Si vous avez suivi ce document pas à pas jusqu'ici vous devez avoir construit un fichier rc configurant vos interfaces réseau et mis en place le routage nécessaire à votre propre configuration réseau. Nous allons maintenant attaquer les couches plus hautes des logiciels réseau.

Vous devriez à ce stade lire le livre d'Olaf Kirch Network Administrators Guide : il devrait être considéré comme le document de référence de cette étape du processus de configuration. Il vous aidera à choisir ce qu'il faut inclure dans ce fichier et surtout ce qu'il ne faut pas inclure. Faites attention que plus on a de services réseau disponibles, plus on a de chances d'avoir des carences de sécurité  n'utilisez que ce dont vous avez besoin.

Vous devez en connaître un peu plus sur certains démons importants (processus système tournant en tâche de fond). Les pages de man vous en diront plus, mais ce sont :

inetd

inetd est un programme qui tourne en tâche de fond et qui gère les requêtes de connexion Internet. Son but est d'éviter de laisser des serveurs tourner quand personne n'y est connecté. Quand il voit une requête pour un service particulier, comme par exemple telnet, ou ftp, il va lire le fichier /etc/services, trouver quel serveur doit traiter la requête, le lancer et lui passer la connexion. Imaginez que c'est le serveur maître de votre serveur Internet. Il possède aussi quelques services qu'il traite lui même. Ce sont les services echo, discard et generate utilisés à des fins de tests réseau. inetd ne gère pas tous les serveurs et services que vous devriez mettre en route, mais il le fait pour la plupart. Normalement des services tels que ceux basés sur udp ou des services qui gèrent eux-mêmes leur propre multiplexage de connexion, comme les serveurs World Wide Web ou muds doivent tourner indépendamment de inetd. En général la documentation les accompagnant vous ira s'il faut utiliser inetd ou non.

syslogd

syslogd est un démon qui gère les messages de trace des autres démons. Il aiguille ces messages suivant les règles établies par le fichier /etc/syslogd.conf. Par exemple pour certains types de messages, vous voudrez les envoyer sur la console et aussi dans un fichier d'archivage, alors que pour d'autres types vous voudrez les archiver uniquement dans un fichier. syslogd vous permet de décider quels sont les messages que vous voulez tracer et où ils doivent aller.

11.2 Un exemple de fichier rc.inet2

Le fichier ci-dessous est un exemple de fichier rc.inet2 que Fred a construit. Il lance un grand nombre de serveurs, vous devrez donc réduire ce nombre pour satisfaire vos besoins. Pour cela effacez ou commentez les paragraphes (entre if et fi) dont vous n'avez pas besoin. Chaque paragraphe teste si le programme existe, envoie un message que vous verrez au démarrage de votre machine puis exécute le programme en tâche de fond avec les arguments voulus. Pour plus d'information sur chacun de ces démons, consultez le Network Administrators Guide ou les pages de man correspondantes.

#! /bin/sh
#
# rc.inet2      Ce script lance le systeme INET complet.
#               Ce script monte aussi tous les disques NFS
#               importants (comme /usr), il faut donc faire
#               attention à ce que les binaires soient présents
#               maintenant...
#
# Version:      @(#)/etc/rc.d/rc.inet2  2.18    05/27/93
#
# Author:       Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
#

# Constantes.
NET="/usr/sbin"
IN_SERV="lpd"
LPSPOOL="/var/spool/lpd"

# A ce point, nous sommes prêts à parler au reste du monde...
echo -e "\nMounting remote file systems ..."
/bin/mount -t nfs -v            # This may be our /usr runtime!!!

echo -e "\nStarting Network daemons ..."
# Lance le démon SYSLOG. Ceci doit être le premier serveur.
# C'est une OBLIGATION, donc laissez-le.
echo -n "INET: "
if [ -f ${NET}/syslogd ]
then
echo -n "syslogd "
${NET}/syslogd
fi

# Lance le SUN RPC Portmapper.
if [ -f ${NET}/rpc.portmap ]
then
echo -n "portmap "
${NET}/rpc.portmap
fi

# Lance le super serveur INET
# C'est une OBLIGATION, donc laissez-le.
if [ -f ${NET}/inetd ]
then
echo -n "inetd "
${NET}/inetd
else
echo "no INETD found.  INET cancelled!"
exit 1
fi

# Lance le serveur de nom NAMED/BIND.
# NOTE: probablement vous n'avez pas besoin de le lancer.
#if [ ! -f ${NET}/named ]
#then
#        echo -n "named "
#        ${NET}/named
#fi

# Lance le serveur ROUTEd.
# NOTE: routed est maintenant obsolète. vous devez utiliser gated
#if [ -f ${NET}/routed ]
#then
#        echo -n "routed "
#        ${NET}/routed -q #-g -s
#fi

# Lance le serveur GATEd.
if [ -f ${NET}/gated ]
then
echo -n "gated "
${NET}/gated
fi

# Lance le serveur RWHO.
if [ -f ${NET}/rwhod ]
then
echo -n "rwhod "
${NET}/rwhod -t -s
fi

# Lance le serveur U-MAIL SMTP.
if [ -f XXX/usr/lib/umail/umail ]
then
echo -n "umail "
/usr/lib/umail/umail -d7 -bd </dev/null >/dev/null 2>&1 &
fi

# Lance les divers serveurs INET.
for server in ${IN_SERV}
do
if [ -f ${NET}/${server} ]
then
                echo -n "${server} "
                ${NET}/${server}
fi
done

# Lance les divers serveurs SUN RPC.
if [ -f ${NET}/rpc.portmap ]
then
if [ -f ${NET}/rpc.ugidd ]
then
                echo -n "ugidd "
                ${NET}/rpc.ugidd -d
fi
if [ -f ${NET}/rpc.mountd ]
then
                echo -n "mountd "
                ${NET}/rpc.mountd
fi
if [ -f ${NET}/rpc.nfsd ]
then
                echo -n "nfsd "
                ${NET}/rpc.nfsd
 fi

# Réveille le(s) démon(s) PC-NFS.
if [ -f ${NET}/rpc.pcnfsd ]
then
                echo -n "pcnfsd "
                ${NET}/rpc.pcnfsd ${LPSPOOL}
fi
if [ -f ${NET}/rpc.bwnfsd ]
then
                echo -n "bwnfsd "
                ${NET}/rpc.bwnfsd ${LPSPOOL}
fi

fi
echo network daemons started.
# Terminé !

11.3 Autres fichiers de configuration réseau nécessaires.

Il y a d'autres fichiers de configuration que vous devez configurer si vous voulez que des personnes se connectent et utilisent votre machine en tant que hôtes. Si vous avez installer linux à partir d'une distribution, vous avez probablement copies de ces fichiers, dès lors vérifiez les pour voir s'ils sont corrects et si ce n'est pas le cas vous utiliserez les exemples suivants.

Un fichier /etc/inetd.conf en exemple.

Votre fichier /etc/rc.d/rc.inet2 a déjà lancé inetd, syslogd et les divers serveurs rpc pour vous. Vous devez maintenant configurer les démons réseau qui seront gérés par inetd. inetd utilise un fichier de configuration appelé /etc/inetd.conf.

Ci-dessous un exemple simple de configuration:

#
# Les services internes.
#
# Auteurs:      Original taken from BSD UNIX 4.3/TAHOE.
#               Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
#
echo    stream tcp nowait root  internal
echo    dgram  udp wait   root  internal
discard stream tcp nowait root  internal
discard dgram  udp wait   root  internal
daytime stream tcp nowait root  internal
daytime dgram  udp wait   root  internal
chargen stream tcp nowait root  internal
chargen dgram  udp wait   root  internal
#
# Services standards.
#
ftp     stream tcp nowait root  /usr/sbin/tcpd in.ftpd ftpd
telnet  stream tcp nowait root  /usr/sbin/tcpd in.telnetd
#
# Shell, login, exec et talk sont des protocolese BSD.
#
shell   stream tcp nowait root  /usr/sbin/tcpd in.rshd
login   stream tcp nowait root  /usr/sbin/tcpd in.rlogind
exec    stream tcp nowait root  /usr/sbin/tcpd in.rexecd
talk    dgram  udp wait   root  /usr/sbin/tcpd in.talkd
ntalk   dgram  udp wait   root  /usr/sbin/tcpd in.talkd
#
# Services d'informations et d'états.
#
finger  stream tcp nowait root  /usr/sbin/tcpd in.fingerd
systat  stream tcp nowait guest /usr/sbin/tcpd /usr/bin/ps -auwwx
netstat stream tcp nowait guest /usr/sbin/tcpd /bin/netstat
#
# Fin de inetd.conf.

La page manuel de inetd décrit la signification de chaque ligne, mais plus simplement chaque entrée décrit quel programme est exécuté quand une connexion est reçue sur la socket listé en première entrée. Ces entrées qui possèdent incoming où le nom du programme et les arguments doivent être sont des services qui sont fournis de manière interne par le programme inetd .

La conversion entre le nom du service dans la première colonne et le numéro effectif de la socket auquel il se réfère est effectuée par le fichier /etc/services.

Un exemple de fichier /etc/services.

Le fichier /etc/services est simplement un tableau de noms de services Internet avec le numéro et le protocole utilisé. Ce tableau est utilisé par certains programmes comme inetd, telnet and tcpdump. Il simplifie un peu la vie en permettant de se référer à un service par son nom plutôt que par un chiffre.

Voici un exemple de fichier /etc/services :

#
# /etc/services - base de données incluant nom du service,
#                 numéro de la socket et protocole.
#
# Auteur:
#     Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
#
tcpmux     1/tcp
echo       7/tcp
echo       7/udp
discard    9/tcp   sink null
discard    9/udp   sink null
systat     11/tcp  users
daytime    13/tcp
daytime    13/udp
netstat    15/tcp
chargen    19/tcp  ttytst source
chargen    19/udp  ttytst source
ftp-data   20/tcp
ftp        21/tcp
telnet     23/tcp
smtp       25/tcp  mail
time       37/tcp  timserver
time       37/udp  timserver
name       42/udp  nameserver
whois      43/tcp  nicname    # usually to sri-nic
domain     53/tcp
domain     53/udp
finger     79/tcp
link       87/tcp  ttylink
hostnames  101/tcp hostname   # usually to sri-nic
sunrpc     111/tcp
sunrpc     111/tcp portmapper # RPC 4.0 portmapper TCP
sunrpc     111/udp
sunrpc     111/udp portmapper # RPC 4.0 portmapper UDP
auth       113/tcp authentication
nntp       119/tcp usenet     # Network News Transfer
ntp        123/tcp            # Network Time Protocol
ntp        123/udp            # Network Time Protocol
snmp       161/udp
snmp-trap  162/udp
exec       512/tcp            # BSD rexecd(8)
biff       512/udp comsat
login      513/tcp            # BSD rlogind(8)
who        513/udp whod       # BSD rwhod(8)
shell      514/tcp cmd        # BSD rshd(8)
syslog     514/udp            # BSD syslogd(8)
printer    515/tcp spooler    # BSD lpd(8)
talk       517/udp            # BSD talkd(8)
ntalk      518/udp            # SunOS talkd(8)
route      520/udp routed     # 521/udp too
timed      525/udp timeserver
mount      635/udp            # NFS Mount Service
pcnfs      640/udp            # PC-NFS DOS Authentication
bwnfs      650/udp            # BW-NFS DOS Authentication
listen     1025/tcp listener  # RFS remote_file_sharing
ingreslock 1524/tcp           # ingres lock server
nfs        2049/udp           # NFS File Service
irc        6667/tcp           # Internet Relay Chat
# End of services.
L'entrée telnet nous dit que le service telnet utilise la socket numéro 23 et le protocole tcp. L'entrée domain nous dit que le service de nom de domaine (DNS) utilise la socket 52 et à la fois les protocoles tcp et udp. Vous devez avoir une entrée adéquate dans /etc/services pour chaque entrée dans /etc/inetd.conf.

Un exemple de fichier /etc/protocols.

Le fichier /etc/protocols est un tableau de noms de protocoles avec son numéro correspondant. Puisque le nombre de protocoles en usage est faible ce fichier est très simple.

#
# /etc/protocols - base de données de protocoles.
#
# Auteur:
#   Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
#
ip   0   IP   # internet protocol
icmp 1   ICMP # internet control message protocol
igmp 2   IGMP # internet group multicast protocol
ggp  3   GGP  # gateway-gateway protocol
tcp  6   TCP  # transmission control protocol
pup  12  PUP  # PARC universal packet protocol
udp  17  UDP  # user datagram protocol
idp  22  IDP
raw  255 RAW
#
# Fin 

11.4 Résolution des noms

La résolution des noms est le processus qui consiste à convertir une adresse en notation pointée (comme tsx-11.mit.edu) en une adresse IP que les couches réseaux peuvent comprendre. Il y a deux façons de faire, une simple et une plus complexe.

/etc/hosts

/etc/hosts contient une liste des adresses IP et les noms des machines correspondants. De cette manière vous pouvez faire référence à une machine soit par son nom, soit par son adresse IP. En utilisant un serveur de noms (voir section `named'), vous automatisez le même mécanisme de traduction nom->adresse IP. (Utiliser named vous permet d'utiliser votre propre serveur de noms sur votre machine Linux). Ce fichier contient au moins une entrée pour 127.0.0.1 avec comme nom localhost. Si vous n'utilisez pas uniquement l'interface loopback, vous aurez besoin d'ajouter une entrée pour votre adresse IP, avec votre nom complet (comme loomer.vpizza.com). Vous pouvez aussi ajouter des entrées pour vos passerelles et adresses réseau.

Par exemple, si loomer.vpizza.com a comme adresse IP 128.253.154.32, le fichier /etc/hosts contiendra :

# /etc/hosts
# Liste des noms de machines et de leurs adresses IP.
127.0.0.1               localhost
128.253.154.32          loomer.vpizza.com loomer
# Fin de hosts

Bien sûr, vous aurez besoin d'éditer ce fichier pour qu'il corresponde à vos besoins. Si vous utilisez seulement le loopback, la seule ligne nécessaire doit être pour 127.0.0.1, avec à la fois localhost et votre nom de machine.

Notez que pour la seconde ligne, il y a deux noms pour 128.253.154.32 : loomer.vpizza.com et juste loomer. Le premier nom est le nom complet de la machine, appelé "Nom de Domaine Complètement Qualifié", et le second est simplement un alias du premier nom.

named - en ai-je besoin ?

`Je T'implore...'

named est le démon serveur de nom pour la plupart des systèmes d'exploitation de style UNIX. Il permet à votre machine de répondre aux requêtes de mise en correspondance de nom, non seulement pour elle-même, mais aussi pour les autres machines sur le réseau. Autrement dit, si une autre machine veut trouver l'adresse de `goober.norelco.com', et que vous avez cette machine dans votre base de données named, alors vous pouvez répondre à cette requête et dire aux autres machines quelle est l'adresse de `goobers'.

Avec certaines vieilles implémentations de TCP/IP sous Linux, vous aurez besoin d'utiliser named pour créer des alias de noms de machine (même pour la vôtre). Le problème est que named est relativement difficile à paramétrer proprement et à maintenir. Pour résoudre ce problème, un programme appelé hostcvt.build a été créé pour traduire le fichier /etc/hosts dans l'ensemble des fichiers qui constituent les fichiers des bases de données de named. De toute façon même avec ce problème résolu, named utilise du CPU et crée du trafic réseau.

La morale est la suivante : vous n'avez pas besoin d'utiliser named sur votre système Linux. Les instructions de la distribution SLS vous indiqueront sûrement de lancer hostcvt.build pour initialiser named. C'est simplement inutile sauf si vous voulez utiliser votre machine Linux comme serveur de noms pour d'autres machines, et dans ce cas vous devrez en apprendre plus sur named de toute façon. Quand il cherche une correspondance pour un nom, votre machine Linux cherche d'abord dans le fichier /etc/hosts, puis demande au serveur de nom sur le réseau.

Les seules raisons que vous puissiez avoir d'utiliser named sont :

En général, vous n'avez PAS besoin d'utiliser named; cela signifie que vous devez commenter les lignes correspondantes dans le fichier rc.inet2, et vous ne devez pas lancer hostcvt.build. Si vous voulez des alias de noms de machines, par exemple, si vous voulez vous référez à loomer.vpizza.com avec loomer, vous pouvez simplement ajouter un alias au fichier /etc/hosts à la place. Il n'y a pas de raison d'utiliser named sauf si vous avez un besoin spécifique de le faire. Si vous avez accès à un serveur de noms, (votre administrateur réseau vous procurera son adresse), la plupart des réseau en ont un, ne vous ennuyez pas avec named.

Si vous utilisez seulement le loopback, vous pouvez lancer named et donner 127.0.0.1 comme adresse du serveur de noms, mais comme ce sera la seule machine à laquelle vous pourrez parler vous ne l'appelerez jamais.

/etc/networks

Le fichier /etc/networks liste les adresses de votre propre réseau et des autres. Il est utilisé par la commande route, et vous permet d'appeler un réseau par son nom si vous le voulez.

Pour chaque route vers un réseau que vous désirez ajouter par la commande route, vous devez avoir l'entrée correspondante dans le fichier /etc/networks sauf si vous donnez l'option -net sur la ligne de commande de route.

Son format est similaire au fichier /etc/hosts. Ci-dessous un exemple:

#
# /etc/networks: liste tous les réseaux pour lesquels vous voulez ajouter
#               une route
#
default         0.0.0.0         # route par défaut - recommandé
loopnet         127.0.0.0       # réseau loopback - recommandé
mynet           128.253.154.0   # Exemple de réseau CHANGER avec le VOTRE
#
# Fin de networks

/etc/host.conf

Le système possède quelques fonctions faisant partie de la librairie appelée resolver. Le fichier /etc/host.conf indique au système comment rechercher les correspondances des noms de machines. Il doit comprendre au moins les deux lignes suivantes :

order hosts,bind
multi on

Ces deux lignes indiquent à la librairie resolver de chercher d'abord dans le fichier /etc/hosts puis de demander au serveur de noms (s'il est présent). La ligne multi indique que vous pouvez avoir plusieurs adresses IP par nom de machine donnée dans /etc/hosts.

Ce fichier provient de l'implémentation de la librairie resolv+ pour Linux. Vous trouverez plus de documentation dans la page de man de resolv+(8) si vous l'avez. Sinon vous pouvez l'obtenir à :

sunsite.doc.ic.ac.uk

/computing/comms/tcpip/nameserver/resolv+/resolv+2.1.1.tar.Z

Cette archive contient la page de man resolv+.8 pour la librairie resolver.

/etc/resolv.conf

Ce fichier configure le système de résolution de noms. Il contient deux types d'entrées : l'adresse de votre serveur de noms (s'il y en a un) et le nom de votre domaine, si vous en possédez un. Si vous faites fonctionner votre propre serveur de noms (named tournant sur votre machine Linux), l'adresse de votre serveur de noms est 127.0.0.1, l'adresse de loopback.

Votre nom de domaine est votre nom de domaine complètement qualifié sans votre nom de machine. Par exemple si votre nom complet est loomer.vpizza.com, alors votre nom de domaine est vpizza.com, sans le nom de machine loomer.

Par exemple, si votre machine est goober.norelco.com, et votre serveur de noms est à l'adresse 128.253.154.5, alors votre fichier /etc/resolv.conf ressemblera à :

domain norelco.com
nameserver 128.253.154.5

Vous pouvez indiquer plus d'un serveur de noms. Chacun d'eux doit avoir une entrée nameserver dans le fichier resolv.conf.

Rappelez-vous que vous n'avez pas besoin de serveur de noms si vous n'utilisez que l'interface loopback.

/etc/HOSTNAME

Il ne vous reste plus qu'à configurer le nom de votre machine. Pour permettre à des applications comme sendmail d'accepter le courrier pour votre machine et à votre machine de s'identifier elle-même auprès des autres machines qui lui sont connectées.

Il y a deux programmes qui sont utilisés pour configurer ce type d'information et qui sont généralement mal utilisés. Ce sont hostname et domainname. Si vous utilisez une version de net-tools antérieure à la version 1.1.38 vous pouvez inclure une ligne dans votre fichier /etc/rc qui ressemble à :

/bin/hostname -S

cela signifie que la commande hostname va lire le fichier /etc/HOSTNAME qui devra contenir le nom de la machine complètement qualifié. hostname séparera ensuite le nom de la machine du nom de domaine et enregistrera les deux pour vous.

Par exemple la machine précédente devrait avoir le fichier /etc/HOSTNAME suivant :

goober.norelco.com

Par contre, si vous utilisez la commande hostname qui vient avec net-tools-1.1.38 ou les versions suivantes, vous devrez ajouter la ligne suivante à la fin de votre fichier /etc/rc.d/rc.inet1 :

/bin/hostname goober.norelco.com

ou si vous avez mis à jour à partir d'une version précédente :

/bin/hostname -F /etc/HOSTNAME

et tout devrait fonctionner comme avant.

La commande /bin/domainname est utilisée pour définir le nom de domaine N.I.S. et non pas le nom de domaine D.N.S. Vous n'avez pas à le mettre en place sauf si vous utilisez NIS, que l'on décrira plus loin.

11.5 Autres fichiers

Il y a bien sûr d'autres fichiers dans le répertoire /etc avec lesquels vous barboterez encore. Vous trouverez plus d'informations dans le livre d'Olaf Network Administration Guide. Il débute où cette HOWTO finit, plus de détails seront proposés dans les versions futures de ce document.

Une fois tous ces fichiers en place, chaque chose à sa place, vous devriez pouvoir relancer votre machine avec votre nouveau noyau et naviguer sur le réseau où bon vous semblera. Quoi qu'il arrive, je vous recommande vivement de conserver une copie de votre ancien noyau et même d'une `disquette de secours' au cas où quelque chose ne tournerait pas rond pour pouvoir revenir en arrière et corriger le problème. Vous pouvez utiliser la disquette d'initialisation de H.J. Lu ou le disk1 de la distribution SLS.


Previous Next Table of Contents