Xinetd

Posted by

I) Introduction :

Xinetd est le remplaçant de Inetd. Inetd est ce qu’on appele un serveur de démons. Il permet de lancer un service lorsqu’une connexion sur le port correspondant se fait jour. Imaginons que vous ne receviez que 3 connexions quotidiennes sur votre serveur POP3. Il serait peut être plus rentable de ne lancer le serveur que lorsque c’est nécessaire. Cela évite de gaspiller du temps CPU et de la mémoire.

Cependant on découvre régulièrement des failles de sécurité dans Inetd. De plus, la sécurité n’a pas été prise en compte lors de la conception d’Inetd. Bien qu’il soit possible d’améliorer la situation en interposant les TCP Wrappers entre Inetd et le service ciblé afin de spécifier un interval d’adresses IP qui auront accès au service au moyen des fichiers /etc/hosts.allow et hosts.deny mais ça reste insuffisant. Vous ne pouvez pas par exemple spécifier une plage horaire durant laquelle l’accès au service sera authorisé.

II) Configuration de base de Xinetd :

La configuration peut se faire dans un unique fichier, /etc/xinetd.conf, soit en séparant le fichier de configuration pour chaque service. En plaçant dans xinetd.conf la directive includedir /etc/xinetd.d, on pourra créer un fichier par service en nommant le fichier par le service cible. Exemple de fichier : /etc/xinetd.d/ftp :

 service ftp
 {
 socket_type   = stream
 protocol      = tcp
 port          = 21
 wait          = no
 user          = root
 server        = /usr/sbin/proftpd
 nice          = 0
 disable       = no
 instances     = UNLIMITED
 }

Nous voyons que dans une configuration basique, Xinetd possède les mêmes arguments que Inetd. La syntaxe étant légèrement différente.
Elle est toujours du type :

service 
 {
    
 }

Voici la signification des arguments de base :

socket stream : Datagrammes TCP
dgram : Datagrammes UDP
protocol tcp/udp. Si rien n’est spéifié le fichiers /etc/services est utilisé.
port Le port sur lequel tourne l’application.
Si rien n’est spécifié, le fichiers /etc/services est utilisé
wait no : Le processus est capable de traiter plusieurs connexions en simultané (multi-thread).
yes dans le cas contraire.
user Uitilisateur sous lequel le processus tourne.
server Nom du binaire exécuter.
nice Priorité du processus.
disable yes : service inactif, no pour activer le service.
Si l’attribut n’est pas présent, il est considéré comme actif.
instances UNLIMITED / numéro : Nombre de serveur pouvant ére lancés en simultané
bind = [IP] Interface ééouter pour le service.
redirect = [IP] [PORT] équivalent du port forwarding réalisé avec IPTables.
type RPC / INTERNAL (service internet, ex : daytime, echo) / UNLISTED
(non présent dans /etc/rpc ou /etc/services).
flags NORETRY : ne relance pas le service en cas d’échec, SENSOR, blacklist le service.

III) Limiter les accès :

only_from Liste les machines authorisées à utiliser le service.
On peut utiliser des nom de machine, des IP, des réseaux (/etc/networks)
et des plages d’adresses IP : 192.168.1.0/24 ou 192.168.1
no_access L’inverse du paramètre only_from. En cas de conflit, le plus précis l’emporte.
access_time Plage horaire durant laquelle le serveur sera accessible.
Syntaxe : HH:MM-HH:MM ex : 8:00-18:00
deny_time = [FOREVER / NEVER / nombre] Période durant laquelle une IP ne pourra plus se connecter à un service géré par Xinetd

IV) Journaliser l’activité :

log_type = [SYSLOG / FILE] Méthode utilisée pour journaliser, Syslog ou un fichier.
Dans le cadre d’un fichier, les paraméres sont :
nom_de_fichier taille_limite taille_max.
log_on_success += [ PID HOST USERID EXIT DURATION ] Type d’informations qui seront journalisées si la connexion réussie.
log_on_failure += [ HOST USERID ATTEMPT RECORD ] Type d’informations qui seront journalisées si la connexion échoue.

V) Gérer la charge du serveur :

cps = RATIO TEMPS RATION = nombre de connexions authorisée par seconde
TEMPS = nombre de secondes durant lesquelles ce service
sera déactivé si ce ratio est atteint.
max_load Charge moyenne du service sur une minute
Le service est déactivé si ce maximum est atteint
rlimit_as [ nK ou nM] Espace mémoire que le service peut utiliser.
rlimit_data et limit_stack ont le même paramètre pour les données et la pile.
rlimit_cpu [UNLIMITED / nombre] Nombre de secondes CPU que le service peut utiliser avant d’ére désactivé.

VI) Conclusion :

Xinetd est inclu en standard dans la plupart des distributions dorénavant, notament Red Hat et Mandrake. Debian préférant encore sont ancêtre Inetd par défaut, bien que Xinetd soit disponible. Certains Unix commencent à le mettre en oeuvre par défaut également. D’un avis personnel, je vous recommande de l’utiliser à la place d’Inetd. Sa facilité et ses possibilités de configuration vous permettrons aisément de sécuriser votre serveur, tout en augmentant la qualité de service. Pour davantage de détails sur la configuration de Xinetd, tapez man xinetd.conf.

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *