Concurrencia
El campo de concurrencia sólamente es aplicable a sockets de tipo
datagrama (dgram); el resto de tipos han de contener una entrada nowait en este campo. Si el servidor que ha de atender la petición es
multihilo (es decir, puede anteder varias peticiones simultáneamente), hemos
de indicarle al sistema de red que libere el socket asociado a una
conexión de forma que inetd pueda seguir aceptando peticiones en dicho
socket; en este caso utilizaremos la opción nowait. Si por el
contrario se trata de un servidor unihilo (acepta peticiones de forma
secuencial, hasta que no finaliza con una no puede escuchar la siguiente)
especificaremos wait.
Especificar correctamente el modelo de concurrencia a seguir en un determinado
servicio es importante para nuestra seguridad, especialmente para prevenir
ataques de negación de servicio (DoS). Si especificamos wait,
inetd no podrá atender una petición hasta que no finalice el servicio
de la actual, por lo que si este servicio es muy costoso la segunda petición
no será servida en un tiempo razonable (o incluso nunca, si inetd se
queda bloqueado por cualquier motivo). Si por el contrario especificamos nowait, el número de conexiones simultáneas quizás llegue a ser lo
suficientemente grande como para degradar las prestaciones del sistema, lo que
por supuesto no es conveniente para nosotros. Para evitar ataques de este
estilo, la mayoría de sistemas Unix actuales permiten especificar (junto a
wait o nowait, separado de él por un punto) el
número máximo de peticiones a un servicio durante un intervalo de tiempo
(generalmente un minuto), de forma que si este número se sobrepasa inetd
asume que alguien está intentando una negación de servicio contra él,
por lo que deja de ofrecer ese servicio durante cierto tiempo (algunos clones
de Unix incluso paran inetd, es conveniente consultar la documentación
en cada caso). Como evidentemente esto también es una negación de
servicio, algo muy común entre administradores es aprovechar las facilidades
de planificación de Unix para enviar cada poco tiempo la señal SIGHUP
al demonio inetd, de forma que este relea su fichero de configuración
y vuelva a funcionar normalmente. Por ejemplo, para conseguir esto podemos
añadir a nuestro fichero crontab una línea como la siguiente:
00,10,20,30,40,50 * * * * pkill -HUP inetd
Con esto conseguimos que inetd se reconfigure cada diez minutos (el
equivalente a pkill en ciertos Unices es killall, pero es
recomendable consultar el manual para asegurarse de lo que esta orden provoca).