Inetd, Le SuperServeur
Un article de Diablotins.org.
|
Services Ă la carte
Vous disposez d'une machine qui assure divers services sur le réseau, mais peu sollicités ou irrégulierement.
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» 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”.
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, 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
- Le port «security/xinetd» est un remplaçant de inetd.
