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.