Servicios de Internet en Linux con Xinetd
Buenas, ¿Cómo vamos? Siguiendo con la dinámica de los últimos artículos en la web, continuamos hablando del mundo UNIX y like-UNIX. Especialmente sobre servicios y comandos de nuestros dicharacheros amigos el Ñu y el Pingüino, esto es, GNU Linux. Hoy nos toca hablar de Xinetd.
¿Qué es Xinetd?
Se trata de un demonio (daemon, en inglés) y super servicio TCP-wrapped (Envoltorio de TCP) que controla el acceso a un subconjunto de servicios de red populares, incluyendo FTP, IMAP y Telnet. También proporciona opciones de configuración específicas del servicio para control de acceso, registro mejorado, vinculación, redirección y control de utilización de recursos. Su nombre viene del acrónimo en inglés “eXtended InterNET Daemon”, esto es, Demonio Extendido de Internet. Es típico de los sistemas UNIX y like-UNIX. También se considera una extensión mucho más segura del servicio de Internet inetd.
¿Cómo funciona?
Cuando un cliente intenta conectar con un servicio de red controlado por xinetd, el super servicio recibe la petición y chequea sus reglas de control de acceso. Si se permite el acceso, el demonio verifica que la conexión está permitida utilizando sus propias de reglas de acceso para ése servicio. Además comprueba que el servicio es capaz de tener más recursos asignados a él y que no está en conflicto con las reglas definidas.
Si estas condiciones se cumplen, esto es, se permite el acceso al servicio, dicho servicio no ha alcanzado su límite de recursos y no se encuentra en incumplimiento de cualquier regla definiida, xinetd inicia una instancia del servicio solicitado. Una vez establecida la conexión entre el cliente y el servicio el demonio deja de participar.
Configuración y funcionamiento
El fichero principal de configuración del demonio es /etc/xinetd.conf y el directorio que contiene los ficheros específicos de los servicios es /etc/xinetd.d/
El archivo /etc/xinetd.conf contiene información general sobre el demonio. Cada vez que modificamos algo de su configuración debemos reiniciarlo.
¿Qué nos podemos encontrar en el fichero?
Defaults
{
instances = 60
log_type = SYSLOG authpriv
log_on_success = HOST PID
log_on_failure = HOST
cps = 25 30
}
Includedir /etc/xinetd.d
Expliquemos un poco en que consiste.
- instances — Se específica el número máximo de instancias simultaneas que el demonio puede procesar.
- log_type — Se configura el demonio para utilizar el log authpriv. Dicha información se refleja en la ubicación /var/log/secure. Se puede añadir la ubicación y el fichero /var/log/xinetdlog.
- log_on_success — Configura el log para visualizar el número de intentos de conexión. Por defecto se visualiza la información de la IP remota que pide el acceso y el número de proceso ID.
- log_on_failure — Configure el demonio para almacenar el número de intentos fallidos o bien el número de conexiones denegadas.
- cps — Se configura para que no tenga más de 25 conexiones por segundo, si se pasa del número, el servicio se retirará por un tiempo de 30 segundos.
- Includedir /etc/xinetd.d. Se especifica la ubicación de los ficheros de servicios administrador por el demonio.
Respecto al directorio /etc/xinetd.d
En el directorio encontramos los ficheros de configuración para cada servicio manejado por el demonio. Para que todo funcione correctamente dicho directorio debe ser sólo de lectura. Cualquier cambio al respecto al igual que con el fichero de configuración mencionado anteriormente, se debe reiniciar el demonio.
La información contenida en los ficheros debe de cumplir con una seria de convenciones. Por ejemplo, en el caso del servicio telnet, sería como sigue:
Service telnet
{
Flags = REUSE
Socket_type = stream
Waiit = no
User = root
Server = /usr/kerberos/sbin/telnetd
Log_on_failure += USERID
Disable = yes
}
Paso a explicar cada uno de los parámetros.
- Service — Especifica el nombre del servicio, por normal general se encontrará listado dentro de /etc/services
- Flags — Diferentes atributos para la conexión, si dejamos “REUSE” utilizará las instrucciones habituales del servicio.
- Socket_type — Indicamos el socket de red
- Wait — Especificamos si el servicio es “single-threaded (yes)” o bien “multi-threaded (no)”
- User — Indicamos el user ID que ejecutará el proceso.
- Server — Especificamos la ruta del fichero binario
- Log_on_failure — Se especifican los parámetros para generar el log
- Disable — Indicamos si el servicio está activo (no) o inactivo (yes)
Caso práctico con xinetd
Vale, hasta ahora todo muy teórico, vamos a ver un caso práctico. En la web he hablado de muchas plataformas de monitorización, entre las más destacada está Nagios. Para su funcionamiento utiliza en el sistema operativo en que lo instalemos el demonio xinetd. Dicha plataforma se sirve del plugin NRPE, que está configurado como servicio dentro del demonio xinetd.
Sé que el artículo de hoy es bastante técnico y no es para el gran público, pero creo que hay muchos comandos y servicios de nuestros sistemas GNU Linux que son desconocidos o difíciles de entender, sirvase este artículo y otros en la web como mapas en el camino.