Inet, Le SuperServeur

Un article de Diablotins.org.


Image:brush.png

Sommaire

Synopsis

Vous disposez d'un serveur qui assure divers services sur le réseau, mais peu sollicités.Aussi, pour économiser des ressources, vous voudriez que ces services démarrent à la demande d'un client et s'arrêtent lorsque plus aucun client n'est actif.
C'est le rôle d'«Inet».Ce dernier surveille certaines plages de ports IP puis démarre et arrête les services associés selon l'activité sur ces ports.

Configuration

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» 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

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

Relançez inetd, 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.

Etonnant, non ?

Documentation

En savoir plus

Projets :
Boîte à outils