Inetd, Le SuperServeur

De Diablotins.org.

(Redirigé depuis Inetd)


Services à la carte
Image:brush.png
Vous disposez d'une machine qui assure divers services sur le réseau, mais peu sollicités ou irrégulièrement.


Aussi, pour économiser des ressources, vous voudriez que ces services ne démarrent qu'à la demande d'un client et s'arrêtent lorsque ces derniers se sont déconnectés.
C'est le rôle d'inetd(8).
Ce dernier surveille certaines plages de ports IP puis démarre et arrête les services associés selon l'activité sur ces ports.



Sommaire

Activer le super serveur

Ajoutez simplement l'entrée

inetd_enable="YES"

dans /etc/rc.conf pour lancer le «super serveur».
Évitez de redémarrer la machine en entrant:

/etc/rc.d/inetd start

Le serveur requiert deux fichiers principaux, /etc/inetd.conf pour sa configuration et /etc/services(5) qui associe un port IP à un service réseau.

Autoriser/Interdire un service

Déterminez quel est le nom du service à autoriser en parcourant le fichier /etc/inetd.conf et commentez ou non l'entrée du service.

La structure de ce fichier est la suivante:

Service type protocole comportement utilisateur commande arguments
Type:
stream (TCP*)
dgram (UDP*),
raw (ICMP)
rdm (messages)
Protocole :
TCP/TCP6/TCP46;
UDP/UDP6/UDP46;
RPC/TCP; RPC/UPD
Comportement de inetd par rapport au service:
wait/nowait: Attendre ou pas que le service soit démarré avant d'écouter le traffic.
max-child/max-connections-per-ip-per-minute/max-child-per-ip : limites de connexions.
Utilisateur
 :Groupe
/classe.

Un classique:

ftp    stream  tcp     nowait  root    /usr/libexec/ftpd       ftpd -l
ftp    stream  tcp6    nowait  root    /usr/libexec/ftpd       ftpd -l

/etc/services

La plupart des services ne sont pas notés par leur adresse de port IP, mais par un identifiant.
La liste des associations port IP/service se trouve dans le fichier /etc/services(5).
Vous y retrouverez la plupart des services sur IP connus.

Exemple

Inetd lance un processus et redirige ses entrées et sorties standards. Ce processus peut très bien être un script shell, un script perl ou autre. À partir de là, voici un petit exemple de serveur avec un script shell:

# ee /opt/bofh.sh

#!/bin/sh
echo "=== Un exemple de serveur BOFH"
echo "=== Feel the Power!"
echo "Your excuse is: Too many interrupts"

Le script doit être exécutable:

# chmod +x /opt/bofh.sh

Associez le au service «mdqs» (port 666/tcp) dans inetd.conf. Le script sera appelé par l'utilisateur «nobody»:

# ee /etc/inetd.conf
mdqs    stream  tcp     nowait  nobody  /opt/bofh.sh bofh.sh

Relancez inetd(8), soit en lui envoyant un signal SIGHUP, soit en entrant:

/etc/rc.d/inetd restart

Essayez:

$ telnet -4 localhost 666
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
=== Un exemple de serveur BOFH
=== Feel the Power!
Your excuse is: Too many interrupts
Connection closed by foreign host.

Étonnant, non ?

En savoir plus

Projets :