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
.
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:
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
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
<questions@FreeBSD.org>.
Envíe sus preguntas sobre la documentación a
<doc@FreeBSD.org>.