23.2. Le ``super-serveur'' inetd

Contribution de Chern Lee.

23.2.1. Généralités

On fait souvent 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 une instance d'inetd réduit la charge système globale par rapport à 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.

23.2.2. Configuration

inetd est initialisé par l'intermédiaire du système /etc/rc.conf. L'option inetd_enable est positionnée à la valeur NO par défaut, mais est activée par sysinstall avec le profil de sécurité modéré. Placer

inetd_enable="YES"
ou
inetd_enable="NO"
dans /etc/rc.conf peut activer ou désactiver le démarrage d'inetd à la mise en route du système.

De plus, différentes options de ligne de commande peuvent être passées à inetd par l'intermédiaire de l'option inetd_flags.

23.2.3. Options en ligne de commande

Synopsis d'inetd:

inetd [-d] [-l] [-w] [-W] [-c maximum] [-C taux] [-a adresse | nom de machine] [-p fichier] [-R taux] [fichier de configuration]

-d

Active le débogage.

-l

Active le journal des connexions réussies.

-w

Active le ``TCP Wrapping'' pour les services externes (actif par défaut).

-W

Active le ``TCP Wrapping'' pour les services internes qui font partie d'inetd (actif par défaut).

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

-a

Indique l'adresse IP sur laquelle le trafic sera attendu. Alternativement, un nom de machine peut être utilisé, dans ce cas l'adresse IPv4 ou IPv6 correspondant à la machine sera utilisée. Généralement, un nom de machine est précisé quand inetd est exécuté à l'intérieur d'un environnement jail(8), dans quel cas le nom de machine correspond à l'environnement jail(8).

Quand un nom de machine est utilisé et que l'on doit être à l'écoute sur une adresse IPv4 et IPv6, une entrée avec le protocole adapté pour chaque type d'adresse est nécessaire pour chaque service dans /etc/inetd.conf. Par exemple, un service de type TCP nécessitera deux entrées, une utilisant tcp4 pour le protocole et une autre utilisant tcp6.

-p

Spécifie un fichier différent dans lequel stocker l'indentifiant du processus.

Ces options peuvent être passées à inetd en utilisant l'option inetd_flags de /etc/rc.conf. Par défaut, inetd_flags est positionné à -wW, ce qui active le ``TCP wrapping'' pour les services internes et externes d'inetd. Pour un utilisateur de base ces paramètres ne doivent généralement pas être modifiés ou même ajoutés au fichier /etc/rc.conf.

Note : Un service externe est un ``daemon'' indépendant d'inetd, qui est invoqué quand une connexion lui étant destinée est reçue. D'autre part, un service interne est un service qu'inetd peut offrir directement.

23.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 envoyant un signal ``HangUP'' au processus inetd comme suit:

Exemple 23-1. Envoyer un signal ``HangUP'' à inetd

# kill -HUP `cat /var/run/inetd.pid`

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 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]]
utilisateur[:groupe][/classe-session]
programme-serveur
arguments-du-programme-serveur

Un exemple d'entrée pour le ``daemon'' ftpd utilisant l'IPv4:

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

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.

En plus de nb-max-enfants, une autre option limitant le nombre maximal de connexions à partir d'un emplacement vers un ``daemon'' particulier peut être activée. L'option nb-max-connexions-par-ip-par-minute est l'option en question. Ici, une valeur de dix limiterait à dix le nombre de tentatives de connexions par minute pour une adresse IP particulière. C'est utile pour empêcher l'abus intentionnel ou par inadvertance des ressources et les attaques par déni de service (``Denial of Service--DOS'').

Dans ce champ, wait ou nowait est obligatoire. nb-max-enfants et nb-max-connexions-par-ip-par-minute sont optionnelles.

Un ``daemon'' utilisant un flux de type multi-threadé sans limites nb-max-enfants ou nb-max-connexions-par-ip-par-minute sera tout simplement affecté de l'option nowait.

Le même ``daemon'' avec une limite maximale de dix ``daemon'' serait: nowait/10.

De plus, 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, comme le montre ce qui suit:

finger stream  tcp     nowait/3/10 nobody /usr/libexec/fingerd fingerd -s
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.

23.2.5. Sécurité

En fonction du profil de sécurité choisi à l'installation, plusieurs ``daemon''s peuvent être activés par défaut. S'il n'y a pas de raison particulière à l'utilisation d'un ``daemon'', désactivez-le! Ajoutez un caractère ``#'' devant le ``daemon'' en question dans le fichier /etc/inetd.conf, et envoyez ensuite un signal hangup à inetd. Certains ``daemon''s comme fingerd, devraient être évités parce qu'ils donnent trop d'informations aux personnes malveillantes.

Certains ``daemon''s n'ont aucune conscience des problèmes de sécurité, ou n'ont pas de délai limite 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 et nb-max-enfants sur certains ``daemon''s.

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.

23.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 (ident, identd), et est configurable à un certain degré.

Consultez la page de manuel de inetd(8) pour plus d'informations.

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 <questions@FreeBSD.org>.
Pour les questions sur cette documentation, contactez <doc@FreeBSD.org>.

Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:13