30.2. Le “super-serveur” inetd
Précédent | Chapitre 30. Serveurs réseau | Suivant

## 30.2. Le “super-serveur” inetd

Contribution de Chern Lee.
Mise à jour pour FreeBSD 6.1-RELEASE par le projet de documentation de FreeBSD.

### 30.2.1. Généralités

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`.

### 30.2.2. Configuration

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`.

### 30.2.3. Options en ligne de commande

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).

-c maximum

  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`.

-C taux

  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`.

-R taux

  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.

-s maximum

  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`.

### 30.2.4. `inetd.conf`

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:

Exemple 30.1. Recharger le fichier de configuration d'inetd

    # /etc/rc.d/inetd reload

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

nom-du-service

  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`.

type-de-socket

  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.

protocole

  Un des suivants:

  Protocole | Explication
  --- | ---
  tcp, tcp4 | TCP IPv4
  udp, udp4 | UDP IPv4
  tcp6 | TCP IPv6
  udp6 | UDP IPv6
  tcp46 | TCP IPv4 et v6
  udp46 | UDP IPv4 et v6

{wait|nowait}[/nb-max-enfants[/nb-max-connexions-par-ip-par-minute[/nb-max-enfants-par-ip]]]

  `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`.

utilisateur

  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`.

programme-serveur

  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.

arguments-programme-serveur

  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`.

### 30.2.5. Sécurité

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.

### 30.2.6. Divers

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 | Niveau supérieur | Suivant
Chapitre 30. Serveurs réseau | Sommaire | 30.3. Système de fichiers réseau (NFS)

Ce document, ainsi que d'autres peut être téléchargé sur ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

Pour toutes questions à propos de FreeBSD, lisez la documentation avant de contacter <questions@FreeBSD.org>.
Pour les questions sur cette documentation, contactez <doc@FreeBSD.org>.