4 de agosto de 2011

Instalación y configuración de xinetd

Xinetd es un super servidor ampliado, que proporciona la funcionalidad de inetd y más la opciones de seguridad similares a las de TCP Wrappers. El demonio xinetd controla el acceso a un subconjunto de servicios de una red incluyendo FTP, IMAP o Telnet. También proporciona opciones de configuración específicas al servicio para el control de acceso, registro mejorado, redireccionamiento y control de utilización de recursos.

Cuando un host cliente intenta conectarse a un servicio de red controlado por xinetd, el super servicio recibe la petición y verifica las reglas de control de acceso Wrappers TCP. Si se permite el acceso, xinetd verifica que la conexión sea permitida con las reglas configuradas para ese servicio, luego pasa el control de la conexión al servicio solicitado. Una vez establecida la conexión, xinetd no interfiere entre la comunicación entre el cliente y el servidor. 
 
Para instala xinetd ejecutando las órdenes siguientes:

aceitunero@aceitunero:/$ sudo apt-get install xinetd

Configurar xinetd

Ficheros de configuración que controla xinetd se encuentra en /etc/xinetd.conf, en este fichero sólo se encuentra las opciones globales por defecto y un directiva para incluir los ficheros almacenados en el directorio /etc/xinetd.d.

Cada servicio que se ejecute a través de xinetd verificará los ficheros que se encuentra en este directorio (/etc/xinetd.d) y estas opciones la configuración que son las que tendrá cada máquina, es decir, que si tenemos tres servidores uno servidor Web, otro FTP y otro de servicios de Correo, para cada servidor tenemos que instalar xinedt y configurarlo a las necesidades cada servicio. Y una vez configurado el servicio tenemos que reiniciar xinedt:

aceitunero@aceitunero:~$ sudo /etc/init.d/xinetd restart

Este archivo contiene las opciones de configuración por defecto que se aplican al servidor, pero si quieres no hace falta editarlo, en caso contrario, puede usar este ejemplo:

defaults
{
instances = 60
log_type = SYSLOG authpriv
log_on_success = HOST PID
log_on_failure = HOST
cps = 25 30
}
includedir /etc/xinetd.d

Estas líneas controlan los siguientes aspectos de xinetd:

  • instances: Configura el máximo número de peticiones que xinetd puede manejar simultáneamente.
  • log_type: Configura xinetd para usar el registro authpriv, el cual escribe las entradas de registro al archivo /var/log/secure. Si agregamos una directiva como FILE /var/log/xinetdlog.log , creará un archivo de registro personalizado llamado xinetdlog.log en el directorio /var/log/. Por ejemplo: log_type = FILE /var/log/xinetdlog.log
  • log_on_success: Configura xinetd para registrar si la conexión es exitosa. Por defecto, registra la dirección IP del host remoto y el ID del proceso del servidor.
  • log_on_failure: Configura xinetd para registrar si hay una falla de conexión o si la conexión no es permitida.
  • cps: Configura xinetd para no permitir más de 25 conexiones por segundo a cualquier servicio dado. Si se alcanza este límite, el servicio es retirado por 30 segundos.
  • includedir /etc/xinetd.d/: Incluye las opciones declaradas en los archivos de configuración específicos del servicio localizados en el directorio /etc/xinetd.d/.

El directorio /etc/xinetd.d/

El directorio /etc/xinetd.d/ contiene los archivos de configuración para cada servicio manejado por xinetd y los nombres de los archivos que se relaciona con el servicio. Para que los cambios tengan efecto, el administrador debe reiniciar el servicio xinetd.

La razón principal por la que la configuración para cada servicio es almacenada en un archivo separado es hacer más fácil la administración y que sea menos probable afectar otros servicios.

Para configurar los distintos servicios creamos un archivo con el nombre del servicio dentro del directorio /etc/xinetd.d, pero si queremos también se puede incluir esta configuración dentro del archivo /etc/xinetd y no crea ningún fichero dentro del directorio /etc/xinetd.d.

Para tener una idea de cómo estos archivos están estructurados, este puede ser un ejemplo de como quedaría configurado xinetd para un servicio de telnet y el archivo se guardaría en el directorio /etc/xinetd.d/telnet:

service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
disable = yes
}

Estas líneas controlan varios aspectos del servicio telnet:

  • service: Define el nombre del servicio.
  • flags: Configura cualquier número de atributos para la conexión. REUSE instruye xinetd a reutilizar el socket para una conexión Telnet.
  • socket_type: Configura el socket de red. Stream crea una conexión fiable en los dos sentidos, dgram crea una conexión menos fiable, pero con menos sobre carga, raw crea una conexión de bajo nivel.
  • wait: Define si el servicio es de un sólo hilo (yes) o de múltiples hilos (no).
  • user: Define bajo qué ID de usuario se ejecutará el proceso.
  • server: Define el binario ejecutable a lanzar.
  • log_on_failure: Define los parámetros de registro para log_on_failure además de aquellos ya definidos en xinetd.conf.
  • disable: Define si el servicio está activo o no.

Estos son unos ejemplos de los distintos fichero que podemos crear para los distintos servidores dependiendo de los servicios que podemos tener instalados en la red.

service ftp
{
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/sbin/proftpd
}

service ssh
{
socket_type = stream
protocol = tcp
wait = no
user = root
port = 22
server = /usr/sbin/sshd
server_args = -i
}

service http
{
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/local/apache/bin/httpd
}

service finger
{
socket_type = stream
protocol = tcp
wait = no
user = root
no_access = 0.0.0.0
only_from = 127.0.0.1
banner_fail = /etc/finger_fail
server = /usr/sbin/in.fingerd
server_args = -l
}

Opciones de registro

Las siguientes opciones están disponibles para /etc/xinetd.conf y los archivos de configuración del servicio en el directorio /etc/xinetd.d/. En esta lista tenemos algunas de las opciones de registro más usadas:

  • ATTEMPT: Indica que se intentó realizar una conexión pero que ésta falló (log_on_failure).
  • DURATION: Indica el tiempo que un sistema remoto usa un servicio (log_on_success).
  • EXIT: Indica el estado de salida o la señal de término del servicio (log_on_success).
  • HOST: Indica la dirección IP de la máquina remota (log_on_failure y log_on_success).
  • PID: Indica el ID del proceso del servidor que recibe la petición (log_on_success).
  • USERID: Registra el usuario remoto que está usando el método definido en RFC 1413 para todos los servicios de multi procesos (log_on_failure y log_on_success).

Para una lista completa de las opciones de registro, consulte la página de manual de xinetd.conf.

Opciones de control de acceso

Los usuarios de servicios xinetd pueden seleccionar usar reglas de acceso a hosts wrapped TCP, proporcionar control de acceso a través de los archivos de configuración xinetd. A diferencia de los wrappers TCP, los cambios al control de acceso sólo tengan efecto si el administrador de xinetd reinicia el servicio xinetd y sólo afecta a los servicios controlados por xinetd.

Los wrappers TCP colocan la configuración del acceso por medio de dos archivos, /etc/hosts.allow y /etc/hosts.deny, el control de acceso de xinetd se encuentra en el archivo de configuración de cada servicio dentro del directorio /etc/xinetd.d.

Las opciones de acceso son soportadas por xinetd:

  • only_from: Sólo permite que las máquinas que se especifique para usar el servicio.
  • no_access: Impide que estas máquinas usen el servicio.
  • access_times: Especifica un intervalo de tiempo en el que el servicio puede ser usado. El rango de tiempo debe especificarse en formato de 24 horas, HH:MM-HH:MM.(8:00-14:00)

Las opciones only_from y no_access pueden usar una lista de direcciones IP o nombres de hosts, o especificar una red completa. Por ejemplo, el siguiente archivo /etc/xinetd.d/telnet puede ser usado para bloquear el acceso a Telnet desde un grupo de red y restringir el tiempo permitido para conectarse:

service telnet
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
no_access = 10.0.1.0/24
log_on_success += PID HOST EXIT
access_times = 09:45-16:15
}

Con este ejemplo, cuando un equipo de un cliente de la red 10.0.1.0/24, con la IP 10.0.1.12, intenta acceder al servicio Telnet, recibirá un mensaje indicando lo siguiente:

Connection closed by foreign host.

Además, sus intentos de conexión son registrados en /var/log/secure como sigue:

May 15 17:38:49 boo xinetd[16252]: START: telnet pid=16256 from=10.0.1.2
May 15 17:38:49 boo xinetd[16256]: FAIL: telnet address from=10.0.1.2
May 15 17:38:49 boo xinetd[16252]: EXIT: telnet status=0 pid=16256


Vincular y redirigir opciones

Los ficheros de configuración de servicios para el comando xinetd también soportan la vinculación del servicio a una dirección IP y el desvío de las peticiones entrantes para dicho servicio a otra dirección IP, nombre de la máquina o puerto.

La vinculación es controlada con la opción bind que se encuentra en el archivo de configuración específico del servicio, y une al servicio a una dirección IP del sistema. Una vez configurada, la opción bind sólo permite peticiones para la dirección IP y tenga acceso al servicio.

De esta forma se pueden vincular servicios diferentes a interfaces de red diferentes basados en la necesidad. Esto es útil sobre todo para los sistemas con múltiples adaptadores de red o con múltiples direcciones IP. Los servicios inseguros como Telnet, se pueden configurar de modo que solo escuche a la interfaz conectada a una red privada, y no a la interfaz conectada a Internet.

La opción redirect acepta la dirección IP o el nombre de la máquina seguido del número de puerto. Y hace que el servicio desvíe todas las peticiones a una localización y número de puerto específicos.

Esta característica se usa para establecer otro número de puerto, y desviar la petición a otra dirección IP en la misma máquina, cambiar la petición a otro equipo y puerto diferentes. De esta manera, un usuario que está conectado a un determinado servicio en un sistema puede ser redirigido a otro sistema sin ninguna interrupción.

Estas opciones se pueden usar para limitar la exposición de un servicio determinado a una dirección IP conocida, así como desviar todas las peticiones a ese servicio a otra máquina. Por ejemplo, para configurar las característica de un servicio Telnet:

service telnet
{
socket_type = stream
wait = no
server = /usr/sbin/in.telnetd
log_on_success += DURATION USERID
log_on_failure += USERID
bind = 123.123.123.123
redirect = 10.0.1.13 23
}

Las opciones bind y redirect en este archivo aseguran que el servicio Telnet en la máquina con dos tarjetas de red, está enlazando la dirección IP externa (123.123.123.123), que es la que se encarga de Internet.

Además, todas las peticiones del servicio Telnet enviadas a 123.123.123.123 son redirigidas a través de una segunda tarjeta de red a una dirección IP interna (10.0.1.13) a la que sólo tienen los sistemas internos.


Opciones de administración de recursos

El demonio xinetd puede añadir un nivel básico de protección de un ataque Denial of Service (DoS). Con esta lista de las directivas os puede ayudar en limitar la efectividad de tales ataques:

  • per_source: Define el número máximo de instancias para un servicio por dirección IP. Acepta sólo enteros como argumentos y puede ser usado en xinetd.conf y los archivos de configuración específicos al servicio xinetd.d/.
  • cps: Define el máximo número de conexiones por segundo. Esta directiva toma dos argumentos enteros separados por un espacio en blanco. El primero es el número máximo de conexiones permitidas por segundo. El segundo es el número de segundos que debe esperar antes de reactivar el servicio. Sólo acepta enteros como argumentos y puede ser usado en ambos xinetd.conf y los archivos de configuración específicos al servicio en el directorio xinetd.d/.
  • max_load: Indica el umbral de uso del CPU para un servicio. Acepta un argumento en forma de número de punto flotante.

Hay más opciones de administración de recursos disponibles para xinetd. Para más información.consulte la página del manual de xinetd.conf.

Espero que os haya servido de ayuda a tod@s. Un saludo:


Antonio

4 comentarios:

  1. Su articulo muy gratificante y lleno de ideas, pero no soluciona un problema que tengo con el Telnet, y es que necesito cerrar todos los telnetes que este inactivos por mas de 2 horas, sabe como hacerlo? por favoe envieme una respuesta a sistemas@eurodent.com.co

    ResponderEliminar
    Respuestas
    1. Perdona pero últimamente tengo el Blog un poco abandonado.

      Has mirado información sobre las opción de configuración: deny_time

      Te paso este manual que contiene mucha información de las opciones y parámetros de configuración de xinetd.

      http://informatica.uv.es/iiguia/R/apuntes/laboratorio/Practica-8.pdf

      Como te dije, por falta de tiempo, tengo el Blog un poco abandonado, y además no tengo instalado Linux para hacer pruebas :-(.

      Pero si encuentro algo te lo comunico, y espero que a la fecha de hoy, hayas resuelto el problema y comentes la solución, para que todos aquellos que se encuentren con ese problema, tenga una referencia y ayuda.

      Un saludo

      Antonio



      Eliminar
  2. como hago para que otro usuario que no sea root también tenga acceso a ftp

    ResponderEliminar
    Respuestas
    1. Solo tendrías que cambiar el user, por ejemplo

      service ftp
      {
      socket_type = stream
      protocol = tcp
      wait = no
      user = pepitoperez
      server = /usr/sbin/proftpd
      }

      Un saludo

      Eliminar

No olvides dejar tu comentario y gracias por tu tiempo ;-)