29.14. El “Superservidor” inetd
Anterior | Capítulo 29. Networking avanzado | Siguiente

## 29.14. El “Superservidor” inetd

Escrito por Chern Lee.

### 29.14.1. Resumen

inetd(8) se conoce como el “Super Servidor de Internet” debido a que gestiona las conexiones de varios dæmones. Los dæmones son programas que proporcionan servicios de red. inetd actúa como un servidor de servidor de gestión de otros dæmones. Cuando inetd(8) recibe una conexión se determina qué dæmon debería responder a dicha conexión, se lanza un proceso que ejecuta dicho dæmon y se le entrega el “ socket”. La ejecución de una única instancia de inetd reduce la carga del sistema en comparación con lo que significaría ejecutar cada uno de los dæmones que gestiona de forma individual.

inetd se utiliza principalmente para lanzar procesos que albergan a otros dæmones pero inetd también se utiliza para gestionar determinados protocolos triviales como chargen, auth y daytime.

Esta sección trata la configuración básica de inetd a través de sus opciones de línea de órdenes y utilizando su fichero de configuración, denominado `/etc/inetd.conf`.

### 29.14.2. Configuraciones

inetd se inicializa a través del fichero `/etc/rc.conf` en tiempo de arranque. La opción `inetd_enable` posee el valor `NO` por defecto, pero a menudo la aplicación sysinstall la activa cuando se utiliza la configuración de perfil de seguridad medio. Estableciendo

inetd_enable="YES"

o

inetd_enable="NO"

dentro de `/etc/rc.conf` se puede activar o desactivar la la ejecución de inetd en el arranque del sistema.

Se pueden además aplicar distintas opciones de línea de órdenes mediante la opción `inetd_flags`.

### 29.14.3. Opciones de línea de órdenes

sinopsis de inetd:

`inetd [-d] [-l] [-w] [-W] [-c máximo] [-C tasa] [-a dirección | nombre_de_host] [-p nombre_de_fichero] [-R tasa] [fichero de configuración ]`

-d

  Activa la depuración.

-l

  Activa el “logging” de las conexiones efectuadas con écute.

-w

  Activa el recubrimiento de TCP para servicios externos (activado por defecto).

-W

  Activa el recubrimiento de TCP para los servicios internos, ejecutados directamente por el dæmon inetd (activado por defecto).

-c máximo

  Especifica el máximo número de invocaciones simultáneas de cada servicio; el valor por defecto es ilimitado. Se puede sobreescribir para cada servicio utilizando la opción `max-child`.

-C tasa

  Especifica el máximo número de veces que se puede llamar a un servicio desde un dirección IP determinada por minuto; el valor por defecto es ilimitado. Se puede redefinir para cada servicio utilizando la opción `max-connections-per-ip-per-minute`.

-R tasa

  Especifica el máximo número de veces que se puede invocar un servicio en un minuto; el valor por defecto es 256. Un valor de 0 permite un número ilimitado de llamadas.

-a

  Especifica una dirección IP a la cual se asocia y sobre la cual se queda esperando recibir conexiones. Puede declararse también un nombre de máquina, en cuyo caso se utilizará la dirección (o direcciones si hay más de una) IPv4 o IPv6 que estén tras dicho nombre. Normalmente se usa un nombre de máquina cuando inetd se ejecuta dentro de un jail(8), en cuyo caso el nombre de máquina se corresponde con el entorno jail(8).

  Cuando se desea asociarse tanto a direcciones IPv4 como a direcciones IPv6 y se utiliza un nombre de máquina se necesita una entrada para cada protocolo (IPv4 o IPv6) para cada servicio que se active a través de `/etc/inetd.conf`. Por ejemplo un servicio basado en TCP necesitaría dos entradas, una utilizando `tcp4` para el protocolo IPv4 y otra con `tcp6` para las conexiones a través del procolo de red IPv6.

-p

  Especifica un fichero alternativo en el cual se guarda el ID del proceso.

Estas opciones se pueden declarar dentro de las variables `inetd_flags` del fichero `/etc/rc.conf`. Por defecto `inetd_flags` tiene el valor `-wW`, lo que activa el recubrimiento de TCP para los servicios internos y externos de inetd. Los usuarios inexpertos no suelen introducir estos parámetros y por ello ni siquiera necesitan especificarse dentro de `/etc/rc.conf`.

### Nota:

Un servicio externo es un dæmon que se ejecuta fuera de inetd y que se lanza cuando se recibe un intento de conexión. Un servicio interno es un servicio que inetd puede servir directamente sin necesidad de lanzar nuevos procesos.

### 29.14.4. `inetd.conf`

La configuración de inetd se realiza a través del ficherode configuración `/etc/inetd.conf`.

Cuando se realiza una modificación en el fichero `/etc/inetd.conf` se debe obligar a inetd a releer dicho fichero de configuración, lo cual se realiza enviando una señal “HANGUP” al proceso inetd como se muestra a continuación:

Ejemplo 29.4. Envío de una señal HANGUP a inetd
`#` `kill -HUP `cat /var/run/inetd.pid``

Cada línea del fichero de configuración especifica un dæmon individual. Los comentarios se preceden por el caracter “#”. El formato del fichero de configuración `/etc/inetd.conf` es el siguiente:

service-name socket-type protocol {wait|nowait}[/max-child[/max-connections-per-ip-per-minute]] user[:group][/login-class] server-program server-program-arguments

A continuación se muestra una entrada de ejemplo para el dæmon ftpd para IPv4:

ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l

service-name

  Este es el nombre del servicio que proporciona un determinado dæmon. Se debe corresponder con el nombre del nombre de servicio que se declara en el fichero `/etc/services`. Este fichero determina sobre qué puerto debe ponerse a escuchar inetd. Si se crea un nuevo servicio se debe especificar primero en `/etc/services`.

socket-type

  Puede ser `stream`, `dgram`, `raw` o `seqpacket`. `stream` se debe utilizar obligatoriamente para dæmones orientados a conexión (dæmones TCP) mientras que `dgram` se utiliza en dæmones basados en el protocolo de transporte UDP.

protocol

  Uno de los siguientes:

  Protocolo | Explicación
  --- | ---
  tcp, tcp4 | TCP IPv4
  udp, udp4 | UDP IPv4
  tcp6 | TCP IPv6
  udp6 | UDP IPv6
  tcp46 | TCP IPv4 e IPv6 al mismo tiempo
  udp46 | UDP IPv4 e IPv6 al mismo tiempo

{wait|nowait}[/max-child[/max-connections-per-ip-per-minute]]

  `wait|nowait` indica si el dæmon puede gestionar su propio “socket” o no. Los “ sockets” de tipo `dgram` deben utilizar obigatoriamente la opción `wait` mientras que los dæmones basados en “sockets” de tipo “stream”, los cuales se implementan normalmente mediante hilos, debería utilizar la opción `nowait`. La opción `wait` normalmente entrega varios “ sockets” a un único dæmon, mientras que la opción `nowait` lanza un dæmon “hijo” por cada nuevo “ socket”.

  El número máximo de dæmones “ hijo” que puede lanzar inetd se puede especificar mediante la opción `max-child`. Si se necesita por ejemplo un límite de diez instancias para un dæmon en particular se puede especificar el valor `10` justo después de la opción `nowait`.

  Además de `max-child` se puede activar otra opción para limitar en número máximo de conexiones que se aceptan desde un determinado lugar mediante la opción `max-connections-per-ip-per-minute`. Esta opción hace justo lo que su nombre indica. Un valor de, por ejemplo, diez en esta opción limitaría cualquier máquina remota a un máximo de diez intentos de conexión por minuto. Esto resulta útil para prevenir un consumo incontrolado de recursos y ataques de Denegación de Servicio (“Denial of Service” o DoS) sobre nuestra máquina.

  Cuando se especifica este campo las opciones `wait` o `nowait` son obligatorias `max-child` y `max-connections-per-ip-per-minute` son opcionales.

  Un dæmon de tipo “stream” sin la opción `max-child` y sin la opción `max-connections-per-ip-per-minute` simplemente especificaría la opción `nowait`.

  El mismo dæmon con el límite máximo de diez dæmones “hijos” sería: `nowait/10`.

  La misma configuración con un límite de veinte conexiones por dirección IP por minuto y un máximo total de diez dæmones “hijos” sería: `nowait/10/20`.

  Todas estas opciones son utilizadas por el dæmon fingerd que se muestra a continuación a modo de ejemplo:

  finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s
user

  Este es el nombre de usuario con el que debería ejecutarse un determinado dæmon. Normalmente los dæmones se suelen ejectar con permisos de `root`. Por motivos de seguridad, resulta bastante común encontrarse con algunos servidores que se ejecutan bajo el usuario `daemon` o incluso por el usuario menos privilegiado de todos que es el usuario `nobody`.

server-program

  La ruta completa de la localización del dæmon que se quiere ejecutar cuando se recibe un intento de conexión. Si el dæmon es un servicio proporcionado por el propio inetd se debe utilizar la opcion `internal` en su lugar.

server-program-arguments

  Esto funciona en conjunción con `server-program`, ya que especifica los argumentos, comenzando por `argv[0]`, que se pasan al dæmon cuando se le invoca. Si la línea de órdenes es `mydaemon -d`, `midæmon -d` debería ser el valor de la opción `server-program-arguments`. Si el dæmon es un servicio interno se debe utilizar la utilizar la opción `internal` en lugar de la que estamos comentando.

### 29.14.5. Seguridad

Dependiendo del perfil de seguridad establecido cuando se instaló el sistema FreeBSD varios dæmones de inetd pueden estar desactivados o activados. Si no se necesita un dæmon determinado, no lo active. Especifique un “#” al comienzo de la línea del dæmon que quiere desactivar y envíe una señal hangup a inetd. No se aconseja ejecutar algunos dæmones determinados (un caso típico es fingerd) porque pueden proporcionar información valiosa para un atacante.

Algunos dæmones no presentan ninguna característica de seguridad y poseen grandes o incluso no poseen tiempos de expiración para los intentos de conexión. Esto permite que un atacante sature los recursos de nuestra máquina realizando intentos de conexión a una tasa relativamente baja contra uno de estos ingenuos dæmones. Pueder ser una buena idea protegerse de esto utilizando las opciones `max-connections-per-ip-per-minute` y `max-child` para este tipo de dæmones.

El recubrimiento de TCP está activado por defecto tal y como ya se ha comentado anteriormente. Consulte la página del manual de hosts_access(5) para obtener más información sobre cómo aplicar restricciones relacionadas con TCP a los dæmones invocados por inetd.

### 29.14.6. Varios

daytime, time, echo, discard, chargen y auth son servicios que inetd proporciona de forma interna y propia.

El servicio auth proporciona servicios de identificación a través de la red (ident, identd) y se puede configurar hasta en cierto grado.

Consulte la página del manual de inetd(8) si quiere conocer todos los detalles.

Anterior | Subir | Siguiente
29.13. Traducción de direcciones de red | Inicio | 29.15. Línea IP paralela (PLIP)

Puede descargar éste y muchos otros documentos desde ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

Si tiene dudas sobre FreeBSD consulte la documentación antes de escribir a la lista <questions@FreeBSD.org>.
Envíe sus preguntas sobre la documentación a <doc@FreeBSD.org>.