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 -