Pico y xinetd

Bueno, yo sigo jugando con mi micro-servidor web pico. Ahora buscando un poco de seguridad me he fijado en xinetd. Xinetd es un demonio presente en muchos sistemas tipo Unix que gestiona las conexiones de varios demonios. La ejecución de una única instancia de Xinetd reduce la carga del sistema, en comparación con lo que significaría ejecutar cada uno de los demonios que gestiona, de forma individual. Cuando una petición llega a nuestro equipo, a uno de los puertos controlados por el, ejecuta una instancia del programa encargado de manejar esa conexión. Por ejemplo, en el caso de pico, cuando alguien se conecte al puerto 1978 xinetd ejecutara una instancia de nuestro programa para que se encargue de esa conexión, una vez cerrada la conexión nuestro programa también se cierra.

Además de la ventaja de no tener el programa siempre funcionando, xinetd nos ofrece un montón de ventajas mas, como pueden ser:

  • Limitar el acceso desde determinados hosts.
  • Limitar el numero de conexiones simultaneas.
  • Limitar el acceso según la hora.
  • Prevenir los ataques de denegación de servicio.
  • Crear archivos log
  • etc ...

Para utilizar nuestro programa con xinetd, solo nos hace falta hacer unos ajustes en la configuración. Para eso vamos a crear un fichero de texto en el directorio "/etc/xinetd.d". Algo así:

"/etc/xinetd.d/pico"

service pico
{
    disable         = no
    port            = 1978
    socket_type     = stream
    protocol        = tcp
    wait            = no
    user            = seoane
    server          = /usr/bin/pico
    server_args     = --inetd
    instances       = 15
    nice            = 10 
    type            = unlisted
}

Estamos suponiendo que el usuario que queremos usar es seoane, y que pico esta en el directorio "/usr/bin". Otras cosas interesantes son que hemos limitado el numero de instancias que se pueden ejecutar de forma simultanea, y hemos bajado su prioridad para que no consuma muchos recursos.

Para que esta nueva configuracion tenga efecto tenemos que reiniciar el servicio xinetd. Asi que ejecutamos el siguiente comando:

/etc/init.d/xinetd restart

Una vez reiniciado el demonio, ya podemos acceder a nuestro servidor web como lo hacíamos antes http://127.0.0.1:1978 o http://tuip.com:1978