On fait parfois référence à inetd(8) comme étant le “super-serveur Internet” parce qu'il gère les connexions pour plusieurs services. Quand une connexion est reçue par inetd, ce dernier détermine à quel programme la connexion est destinée, invoque le processus en question et lui délègue la “socket” (le programme est invoqué avec la “socket” service comme entrée standard, sortie et descripteurs d'erreur). Exécuter inetd pour les serveurs qui ne sont pas utilisés intensément peut réduire la charge système globale quand on compare avec l'exécution de chaque “daemon” individuellement en mode autonome.
inetd est utilisé pour invoquer d'autres “daemon”s, mais plusieurs protocoles triviaux sont gérés directement, comme chargen, auth, et daytime.
Cette section abordera la configuration de base d'inetd à travers ses options en ligne de commande et son fichier de configuration /etc/inetd.conf.
inetd est initialisé par l'intermédiaire du système rc(8). L'option inetd_enable est positionnée à la valeur NO par défaut, mais peut être activée par sysinstall lors de l'installation en fonction de la configuration choisie par l'utilisateur. Placer
inetd_enable="YES"
ou
inetd_enable="NO"
dans /etc/rc.conf activera ou désactivera le lancement d'inetd à la mise en route du système. La commande:
# /etc/rc.d/inetd rcvar
peut être lancée pour afficher le paramétrage en vigueur.
De plus, différentes options de ligne de commande peuvent être passées à inetd par l'intermédiaire de l'option inetd_flags.
Comme la plupart des “daemons”, inetd possède de nombreuses options que l'on peut passer à son lancement afin de modifier son comportement. La liste complète des options se présente sous la forme:
inetd [-d] [-l] [-w] [-W] [-c maximum]
[-C taux] [-a adresse | nom de machine] [-p fichier] [-R taux] [fichier de
configuration]
Les options peuvent être passées à inetd en utilisant le paramètre inetd_flags dans /etc/rc.conf. Par défaut, inetd_flags contient -wW -C 60, qui active le “TCP wrapping” pour les services inetd, et empêche l'invocation d'un service plus de 60 fois par minute à partir d'une unique adresse IP.
Les novices seront heureux d'apprendre que ce paramétrage n'a en général pas besoin d'être modifié, cependant nous présentons ci-dessous les options de limitation du taux d'invocation étant donné que cela peut être utile si vous recevez une quantité excessive de connexions. Une liste complète d'options peut être trouvée dans la page de manuel de inetd(8).
Spécifie le nombre maximal par défaut d'invocations simultanées pour chaque
service; il n'y a pas de limite par défaut. Cette option peut être surchargée
pour chaque service à l'aide du paramètre nb-max-enfants
.
Précise le nombre maximal de fois qu'un service peut être invoqué à partir
d'une unique adresse IP et cela sur une minute. Ce paramètre peut être configuré
différemment pour chaque service avec le paramètre nb-max-connexions-par-ip-par-minute
.
Précise le nombre maximal de fois qu'un service peut être invoqué par minute; la valeur par défaut est 256. Un taux de 0 autorise un nombre illimité d'invocations.
Précise le nombre maximal de fois qu'un service peut être invoqué
simultanément à partir d'une adresse IP unique; il n'y a pas de limite par défaut.
Cette option peut-être surchargée pour chaque service individuellement avec
le paramètre max-child-per-ip
.
La configuration d'inetd se fait par l'intermédiaire du fichier /etc/inetd.conf.
Quand le fichier /etc/inetd.conf est modifié, inetd peut être forcé de relire son fichier de configuration en utilisant la commande:
Chaque ligne du fichier de configuration ne mentionne qu'un seul “daemon”. Les commentaires dans le fichier sont précédés par un “#”. Le format de chaque entrée du fichier /etc/inetd.conf est le suivant:
nom-du-service type-de-socket protocole {wait|nowait}[/nb-max-enfants[/nb-connexions-max-par-minute]] {wait|nowait}[/nb-max-enfants[/nb-connexions-max-par-minute[/nb-max-enfants-par-ip]]] utilisateur[:groupe][/classe-session] programme-serveur arguments-du-programme-serveur
Un exemple d'entrée pour le “daemon” ftpd(8) utilisant l'IPv4 ressemblerait:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
C'est le nom de service du “daemon” en question. Il doit correspondre à un des services listés dans le fichier /etc/services. Cela détermine quel port inetd doit écouter. Si un nouveau service est créé, il doit être ajouté en premier lieu dans /etc/services.
Soit stream, soit dgram, soit raw, ou seqpacket. stream doit être utilisé pour les “daemon”s TCP, alors que dgram est utilisé pour les “daemon”s utilisant le protocole UDP.
Un des suivants:
wait|nowait
indique si le “daemon”
invoqué par inetd est capable ou non de gérer sa
propre “socket”. Les “socket”s de type dgram
doivent utiliser l'option wait
, alors que les “daemons à socket stream”,
qui sont généralement multi-threadés, devraient utiliser nowait
. L'option wait
a
généralement pour conséquence de fournir plusieurs “socket”s à un
“daemon”, tandis que l'option nowait
invoquera un “daemon” enfant pour chaque nouvelle
“socket”.
Le nombre maximal de “daemon”s qu'inetd
peut invoquer peut être fixé en utilisant l'option nb-max-enfants
. Si une limite de dix instances pour un
“daemon” est nécessaire, /10 devra être
placé après nowait
. Spécifier /0 autorise un nombre illimité d'enfant.
En plus de nb-max-enfants
, deux autres options
limitant le nombre maximal de connexions à partir d'un emplacement vers un
“daemon” particulier peuvent être activéees. L'option nb-max-connexions-par-ip-par-minute
limite le nombre de
connexions par minutes à partir d'une adresse IP donnée, par exemple, une
valeur de dix limiterait à dix le nombre de tentatives de connexions par
minute pour une adresse IP particulière. L'option max-child-per-ip
limite le nombre d'enfants qui peuvent être
lancés pour une adresse IP unique à un instant donné. Ces options sont utiles
pour empêcher l'abus excessif intentionnel ou par inadvertance des ressources
d'une machine et les attaques par déni de service (“Denial of
Service—DOS”).
Dans ce champ, wait
ou nowait
est obligatoire. nb-max-enfants
, nb-max-connexions-par-ip-par-minute
et max-child-per-ip
sont optionnelles.
Un “daemon” utilisant un flux de type multi-threadé sans limites
nb-max-enfants
, nb-max-connexions-par-ip-par-minute
ou max-child-per-ip
sera tout simplement affecté de l'option
nowait.
Le même “daemon” avec une limite maximale de dix “daemon” serait: nowait/10.
La même configuration avec une limite de vingt connexions par adresse IP par minute et une limite maximale de dix “daemon”s enfant serait: nowait/10/20.
Ces options sont utilisées comme valeurs par défaut par le “daemon” fingerd(8), comme le montre ce qui suit:
finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s
Et enfin, un exemple de champ avec un maximum de 100 enfants en tout, avec un maximum de 5 adresses IP distinctes serait: nowait/100/0/5.
C'est l'utilisateur sous lequel le “daemon” en question est exécuté. En général les “daemon”s tournent sous l'utilisateur root. Pour des questions de sécurité, il est courant de rencontrer des serveurs tournant sous l'utilisateur daemon, ou sous l'utilisateur avec le moins de privilèges: nobody.
Le chemin complet du “daemon” qui doit être exécuté quand une
requête est reçue. Si le “daemon” est un service fourni en
interne par inetd, alors l'option internal
devrait être utilisée.
Cette option va de pair avec programme-serveur
en
précisant les arguments, en commençant avec argv[0],
passés au “daemon” lors de son invocation. Si mydaemon -d est la ligne de commande, mydaemon -d sera la valeur de l'option arguments-programme-serveur
. Ici également, si le
“daemon” est un service interne, utilisez internal
.
En fonction des choix effectués à l'installation, plusieurs services peuvent être activés par défaut. S'il n'y a pas de raison particulière à l'utilisation d'un “daemon”, envisagez de le désactiver. Ajoutez un caractère “#” devant le “daemon” en question dans le fichier /etc/inetd.conf, et ensuite rechargez la configuration d'inetd. Certains “daemon”s comme fingerd, devraient être évités parce qu'ils peuvent fournir des informations utiles aux personnes malveillantes.
Certains “daemon”s n'ont aucune conscience des problèmes de sécurité,
et ont un long délai limite, ou pas du tout, d'expiration pour les tentatives de
connexions. Cela permet à une personne malveillante d'envoyer régulièrement et
de manière espacée des demandes de connexions à un “daemon”
particulier, avec pour conséquence de saturer les ressources disponibles. Cela peut
être une bonne idée de placer des limitations nb-max-connexions-par-ip-par-minute
, max-child
ou nb-max-enfants
sur
certains “daemon”s si vous trouvez que vous avez trop de
connexions.
Par défaut, le “TCP wrapping” est activé. Consultez la page de manuel hosts_access(5) pour plus d'information sur le placement de restrictions TCP pour divers “daemon”s invoqués par inetd.
daytime, time, echo, discard, chargen, et auth sont des services fournis en interne par inetd.
Le service auth fournit les services réseau d'identification, et est configurable à un certain degré, alors que les autres services ne peuvent être que stoppés ou en fonctionnement.
Consultez la page de manuel de inetd(8) pour plus d'informations.
Précédent | Sommaire | Suivant |
Serveurs réseau | Niveau supérieur | Système de fichiers réseau (NFS) |
Ce document, ainsi que d'autres peut être téléchargé sur ftp.FreeBSD.org/pub/FreeBSD/doc/.
Pour toutes questions à propos de FreeBSD, lisez la documentation avant de contacter <[email protected]>.
Pour les questions sur cette documentation, contactez <[email protected]>.