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.
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.
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 ]
Activa la depuración.
Activa el “logging” de las conexiones efectuadas con écute.
Activa el recubrimiento de TCP para servicios externos (activado por defecto).
Activa el recubrimiento de TCP para los servicios internos, ejecutados directamente por el dæmon inetd (activado por defecto).
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
.
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
.
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.
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.
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.
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:
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
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.
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.
Uno de los siguientes:
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
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.
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.
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.
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.
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.
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
<[email protected]>.
Envíe sus preguntas sobre la documentación a <[email protected]>.