XINETD



1 Pour quoi faire ?

xinetd est le remplaçant de TCP Wrappers (inetd). Il est installé maintenant par défaut sur RedHat et Mandrake. 
Je vous conseille ici vivement de lire la documentation sur TCP_WRAPERS car le principe est le même, avec des fonctionnalités en plus. 
Il gère la connexion de certains protocoles (telnet, pop, ftp,....) et permet d'autoriser ou d'interdire les connexions sur votre machine en fonction de votre adresse IP, du nom d'hôte du client ou de son domaine, de l'heure, du taux de charge, du nombre de connexions simultanées, du nombre de connexions entrantes par seconde, ce qui permet de limiter les tentatives de Deny of Service. 

Si vous ne devez pas utiliser les services gérés par xinetd, il est préférable de ne pas le démarrer.
xinetd est un élément à mettre en oeuvre pour sécuriser une machine sous linux, il ne peut toutefois pas remplacer complètement un vrai FireWall. Il n'est pas non plus en mesure de gérer tous les protocoles.    

2 Le principe

Lorsque vous souhaitez vous connecter sur une machine distante en telnet, par exemple, le xinetd intercepte votre demande de connexion et vérifie dans le fichier xinetd.conf, puis dans /etc/xinetd.d/telnet si le service telnet par exemple est utilisable. 
Si la réponse est positive, votre demande de connexion sera autorisée, sinon vous serez rejeté. Dans tous les cas de figure et cela est l'autre fonction de xinetd, il  transmettra à syslogd (deamon de log) votre tentative de connexion.

3 L'installation

Lorsque vous installez une nouvelle machine (sous RedHat ou Mandrake) xinetd est installé par défaut. 
Si inetd est installé je ne vous conseille pas de le remplacer par xinetd.
Les deux peuvent tourner en parallèle, mais vous allez au problème à conserver cette situation. 
xinetd peut avoir été installé avec l'option de compilation --with-libwrap, cette option permettant de conserver les fichiers HOSTS.ALLOW et HOSTS.DENY propre à TCP_WRAPERS. Cette option permettant de continuer à utiliser certains programmes qui ne connaissent que tcp_wrapers.  Le problème de cela étant que vous avez en plus des fichiers de xinetd à vérifier les fichiers hosts.allow et hosts.deny. Cela n’est pas fait pour simplifier l’affaire. Toutefois Redhat installe cela par défaut
Sachez toutefois que si xientd est compilé avec cette option les fichiers hosts.allow et hosts.deny sont lus les premiers.

Si xinetd n'est pas installé et que vous le vouliez absolument, le paquet à installer est :.   xinetd.....rpm.
 

4 Le fichier xinetd.conf

        Ce fichier se trouve dans le répertoire /etc. Il vous permet d’indiquer la configuration par défaut qui s'applique à tous les services et l’emplacement des fichiers de configuration propre à chaque service qui utilisent xinetd.
Donnez dans ce fichier la politique par défaut que vous allez appliquer à toutes les applications qui utilisent xinetd.

La syntaxe est la suivante :

defaults
{
disable = yes 
               tout est désactivé par défaut
instances = 20              Nombre de requêtes simultanées que xinetd peut gérer.
no_access = 0.0.0.0/0    par défaut aucun réseau ne peut se connecter. On peut à la place utiliser no_access.
log_type = SYSLOG authpriv  Envoyé à syslog comme authpriv.info.
log_on_failure = HOST RECORD    Enregistre lorsque la connexion échoue HOST enregistre le nom, RECORD tout ce qui peut être enregistré sur le client.
log_on_success = HOST USERID DURATION PID   Enregistre en cas de succès de la connexion, HOST le nom, USERID l'utilisateur, DURATION la durée de connexion, PID le pid du serveur. 
per_source = 4      on n'autorise que 4 connexions en provenances de la même machine.

}
includedir /etc/xinetd.d    
Indique le répertoire ou se trouvent les fichiers de configuration par service.

On peut disactiver service par service. On enlève alors la première ligne et on ajoute plusieurs lignes "disable" pour les différents services. Cela donne 
disable = telnet ftp
disable = cvs
le défaut de cela est qu'il faut penser à tous les mettre, l'avantage est par contre d'avoir tous les services dans un seul fichier. 

5 Les fichiers de configuration par service

Ils se trouvent dans le répertoire /etc/xinetd.d par défaut. Pour chaque service, il doit y avoir un fichier portant le nom du service, en allant dans ce répertoire vous allez vite  trouver. Prenons l'exemple de telnet. On doit avoir un fichier telnet dans le répertoire avec dedans :
service telnet
{
    disable = no
   On suppose ici que vous souhaitez l'activer
    flags    = REUSE
    instances    = UNLIMITED  Pas de limitation sur le nombre de requêtes possibles, à éviter
    only_from    = 172.16.0.0/16  n'autorise la connexion que depuis les adresses 172.16.0.0 avec un masque de 255.255.0.0
    only_from    = .ac-creteil.fr      idem mais depuis des machines du domaine ac-creteil.fr
    only_from    = 10.0.0.{10,11,12}  idem mais seulement depuis 10.0.0.11, 10.0.0.12, 10.0.0.13.
    socket_type    = stream   type de service de transport de données (il existe stream pour tcp, dgram pour udp, raw pour IP)
    wait    = no      état d'attente, si l'état est wait xinetd doit attendre que le serveur ait restitué la socket avant de se remettre à l'écoute. On utilise wait plutôt avec les types dgram et raw. l'autre possibilité est nowait qui permet d'allouer dynamiquement des sockets à utiliser avec le type stream.
    user    = root   Nom de l'utilisateur sous lequel le daemon tourne
    server    = /usr/sbin/in.telnetd  Chemin d'accès au programme in.ftpd lancé par inetd (il est possible ici d'ajouter les options de démarrage du programme.
}

On a la possibilité d'ajouter d'autres options, par exemple : 
access_time    = 09:00-17:30    On autorise l'accès à ce service de 9 heures à 17 heures 30.
nice    =    10    Indique la priorité du processus.
bind    = a.b.c.d    bind permet de lier un service à une adresse IP, il a de l'intérêt si vous disposez de deux adresses IP sur la machine. Il est alors associé avec id = telnet_intra.
redirect    =    a.b.c.d permet de rediriger la requête vers une autre machine. Une sorte de proxy pour ce service. Cela peut toutefois être dangereux.

Pensez enfin à relire le fichier de conf, lorsque vous faites des modifications avec la commande killall -HUP xinetd.
   

5 Pour en savoir plus

http://www.linuxmag-france.org/lm22/xinetd.html l'incontournable.
http://www.xinetd.org 


TP 1 :  Objectif : Protéger votre machine afin d'interdire les accès telnet et ftp depuis les autres machines de la salle de formation sauf la machine de votre voisin (A réaliser par groupe de deux personnes). 
Bloquer pour tout le monde les services inutiles. 
Utiliser les utilitaires que vous connaissez afin de vérifier cela.
Vérifier dans les logs les résultats obtenus. 


© Philippe Chadefaux - 10/1/2002 -