TCP / WRAPPER


Le démon inetd ne fait que lancer les autres démons puis reprend son activité d'attente de requêtes.
Le problème est le contrôle des accès aux services tels que ftp, telnet, finger... L'outil TCP/WRAPPER a été mis en place afin de restreindre et de tracer les accès de certains services en fournissant l'origine de la requête (adresse de la machine) sans pour autant changer les sources des démons et de réduire ainsi l'accés à des services qui permettraient les tentatives de piratage.


Le principe est simple : au lieu de lancer directement le démon souhaité (par exemple in.telnetd), il est activé un programme (tcpd) qui se charge de lancer le serveur voulu si le client est autorisé à se connecter.

Le fichier /etc/inetd.conf doit contenir l'entrée tcpd de la façon suivante :

ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/wu.ftpd
telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd

Ainsi, inetd lancera tcpd à la place du vrai serveur.

tcpd se base sur deux fichiers /etc/hosts.allow et /etc/hosts.deny qui autorise ou interdit l'accès à certains démons. Les entrées dans ces fichiers ont la forme suivante :

liste_démons : hôtes_clients [:commande[:commande:...]]

Ainsi si nous voulons filtrer les finger, on marquera l'entrée dans le /etc/hosts.deny :

in.fingerd : ALL EXCEPT LOCAL : twist echo "Finger de %u@%h" >> /var/adm/finger.log;
ou
in.fingerd : ALL EXCEPT LOCAL : spawn(/usr/sbin/safe_finger -l %u@%h | /bin/mail/root)&

twist et spawn sont des options du TCP/WRAPPER.

La première remplace le processus courant par une instance d'une commande shell, l'entrée, la sortie standard et la sortie erreur standard sont liées au processus du client. Cette commande doit être placée en bout de liste des commandes.

La deuxième crée un processus fils, et exécute une commande dans celui-ci. Les sorties et l'entrée sont redirigée vers /dev/null, cela annule tout envoi de message vers le client.

Il existe bien d'autres commandes :

Les configurations des fichiers /etc/hosts.deny et /etc/hosts.allow se vérifie avec l'utilitaire :

tcpdchk [-a][-d][-i inet_conf][-v].

Il est ainsi possible de simuler un accès sur un démon par une machine et de voir les effets de la configuration. La commande tcpdmatch [-d][-i inetd_conf] démon[@serveur][user@]client affiche le résultat de la tentative en respectant les restrictions des fichiers /etc/hosts.deny et /etc/hosts.allow.


Exemple :

/etc/hosts.deny :

in.tftpd : ALL
in.telnetd : ALL EXCEPT 134.157.55., LOCAL : twist = echo "Telnet de %u@%h - %c le `date` " >> /var/adm/telnet.log
in.fingerd : ALL : twist = echo "Finger de %u@%h - %c le `date` " >> /var/adm/finger.log
in.rlogind : ALL EXCEPT .artemis.jussieu.fr

/etc/hosts.allow :

in.telnetd : .astech.fr, 194.206.124.2, 194.208.175. EXCEPT diable.astech.fr
in.fingerd : LOCAL


TCP/WRAPPER est une bonne alternative si l'on ne posséde pas de firewall tel que TIS (appartenant au domaine public, voir Linux JOURNAL numéro 25) qui s'installe sur une passerelle. La mise en place de tcpd est simple et suffit pour décourager les petits intrus, pour les "professionnels", cela reste une autre histoire.

L'inconvénient de TCP/WRAPPER est qu'il ne gére pas les accès RPC, et qu'il faut l'installer sur toute machine serveur appartenant à un réseau.


Bibliographie :

Wietse Venema : TCP WRAPPER - Network monitoring, access control, and boody traps


Pour toute information erronée ou demande de compléments, n'hésite pas à me contacter à l'adresse suivante :

Olivier Duval - od@alegria.fr