Logo de AulaDigital

Servidor IRC Como 4

Instalación y configuración de un servidor de IRC: El bot de gestión del servidor Página siguiente Página anterior Índice general

4. El bot de gestión del servidor

4.1 Función de un bot de gestión del servidor

La función de un bot o script de gestión del servidor es ampliar las posibilidades del IRC, y a la vez permitir un cierto control sobre los usuarios. El bot se introduce como un usuario más, pero adquiere el poder del operador, lo que le permite administrar de manera eficiente los canales. Entre sus posibilidades están:

  • Envío de mensajes periódicos a ciertos canales.
  • Impedir la entrada de usuarios no deseados.
  • Reconocer a los administradores del servidor y cederles el poder.
  • Aumentar la seguridad general del servidor.
  • Impedir que los usuarios puedan expulsarse entre ellos.

Existen multitud de bots disponibles. Entre los más importantes, podemos destacar:

  • Eggdrop: posiblemente el más conocido, pero también el más complejo de instalar y mantener. Requiere TCL.
  • Uworld.
  • Cservice.
  • Argobot.

4.2 Argobot

El Argobot es un bot relativamente sencillo escrito por el español Jesús Cea Avión ( http://www.argo.es/~jcea), aunque algunas grandes redes hispanas de IRC están adoptándolo. Soporta todas las características antes enunciadas, pero sin profundizar en ellas, de forma que no resulta tan grande y complejo como Eggdrop. Como ventaja añadida, ocupa muy poca memoria y es muy eficiente. Es un bot multicanal capaz de:

  • Proteger los modos de un canal.
  • Dar y quitar los privilegios de operador de forma manual y automática.
  • Enviar mensajes (notices) a los usuarios recién llegados a un canal.
  • Controlar el acceso y configuración de modos y permisos independientemente para cada canal.
  • Acceder a redes que exigen claves.

Otras características del Argobot son:

  • Se distribuye con el código fuente completo (escrito en lenguaje C), y que además puede compilarse bajo UNIX o en plataformas Windows.
  • Utiliza un fichero de configuración.
  • Lleva registros (ficheros log) de toda la actividad que se produce en el servidor.
  • Puede reconfigurarse sin necesidad de detener su actividad, es decir, puede modificarse su configuración y cargar de nuevo el bot sin que los usuarios adviertan ningún cambio ni interrupción del servicio.

4.3 Instalación

El Argobot se puede conseguir en la página web de su creador ( http://www.argo.es/~jcea/irc/argobot.htm). Existen multitud de versiones, algunas desarrolladas específicamente para alguna gran red, y además se pueden conseguir una veintena de parches que corrigen algunos defectos y añaden nuevas características.

Si optamos por obtener el Argobot por Internet, descubriremos que apenas incluye unos pocos ficheros (código fuente C), y como única documentación un fichero README muy breve. Para paliar esta deficiencia, su autor a puesto toda la documentación disponible a través de Internet, en forma de páginas web. Es necesario, por tanto, descargar estas páginas y leerlas detenidamente.

El Argobot se suministra en forma de un fichero .tgz, que una vez descomprimido (en nuestro caso, en el directorio /usr/src/argobot/) da lugar a cuatro ficheros:

  • argobot.c: fichero principal del código fuente.
  • argo_parser.c: código fuente que interpreta el fichero de configuración.
  • argobot.conf: fichero de configuración.
  • argobot.log: mantiene un registro de los comandos enviados al bot.

Es importante comprobar que este último fichero se ha creado realmente. Debido a algunas configuraciones de tar, es posible que no se genere este fichero (porque está vacío), lo que provocará errores al intentar ejecutar el Argobot. En este caso, es necesario crear el fichero manualmente (con la orden touch, por ejemplo), y darle los permisos apropiados.

Nota: si queremos utilizar una de las características más avanzadas del Argobot, como es la propagación de líneas K (sólo tiene sentido en redes de varios servidores), será necesario seguir las instrucciones relativas a los permisos y el fichero ircd.conf.

4.4 Edición del código fuente

Antes de compilar, es conveniente comprobar que el código fuente esta bien adaptado a nuestro sistema. Las modificaciones que debemos hacer dependen de la forma en la que vamos a ejecutar el bot:

  • Si vamos a ejecutar el bot como root (es el método recomendado), nos aseguraremos de que está definido SEGURIDAD (con la sentencia #define SEGURIDAD), y que las macros UID y GID tienen valores apropiados. Si además vamos a hacer un CHROOT (que es una medida adicional de seguridad), definiremos el directorio que debe tomar como raíz con la sentencia #define CHROOT <directorio>.
  • Si vamos a ejecutar el bot como un usuario distinto a root, debemos eliminar el símbolo SEGURIDAD (con la sentencia #undef SEGURIDAD).

Además de estas modificaciones, podemos definir el símbolo VERBOSE para que se impriman en la pantalla todos los mensajes que el servidor envía al Argobot. Otro símbolo interesante es CONTROL_FLOOD, que por defecto está activado, pero que deberemos eliminar si el nodo al que conectamos está preparado para controlar los ataques por flood.

4.5 Compilación

Como ya se ha indicado, el Argobot puede ser compilado bajo múltiples plataformas. En Linux, es suficiente con hacer:

gcc -Wall -g argobot.c -o argobot
chown root argobot
chgrp root argobot

La primera instrucción realiza la compilación, generando el fichero argobot. Con las dos siguientes, establecemos los propietarios de este fichero.

4.6 Configuración

La tarea de configuración se limita al fichero argobot.conf, aunque también es necesario crear una nueva cuenta de usuario para el operador del servidor IRC.

El fichero argobot.conf es un fichero de texto que contiene líneas con comandos. Al hacer la instalación, se genera un fichero de ejemplo, pero lo más conveniente es modificarlo para adaptarlo a nuestras necesidades. Los comandos son:

  • IRCnick <nick>: indica cuál es el nick que debe emplear el bot para identificarse como operador ante el nodo IRC.
  • IRCpasswd <password>: complementa al comando anterior, indicando la clave necesaria para adquirir los privilegios de operador.
  • nick <nick>: especifica el nick bajo el que aparecerá el bot a los usuarios.
  • server <servidor>: sirve para indicar el servidor a que va a conectarse.
  • port <puerto>: indica el puerto al que se va a conectar (generalmente, el 6667).
  • passwd <password>: clave que será enviada al servidor al principio de la conexión, con lo que se podrá acceder a otras redes que necesiten claves.
  • away <mensaje>: mensaje que se muestra a los usuarios al entrar.
  • nick_collide <mensaje>: mensaje enviado a aquellos usuarios que estén utilizando el nick indicado en el comando nick. Inmediatamente después, se les expulsará mediante un kick.
  • umbral_kline <valor>: indica cuántos intentos de conexión se permitirán antes de poner una línea k local. El valor más corriente es cinco. Esto es una medida de protección contra los usuarios que tengan una actitud sospechosa.
  • timeout_klines <valor>: indica cuántos segundos permanecerá activa una línea k local. El valor más aconsejable es en torno a 900 (es decir, 15 minutos).
  • timeout_whowas <valor>: indica cada cuántos segundos hay que comprobar la presencia de clones (usuarios que están presentes bajo varios nicks, lo que suele ser síntoma de actividades peligrosas). Es conveniente un valor en torno a cinco.
  • timer <offset> <periodo> <comando>: se utiliza para enviar comandos periódicos al servidor de IRC, que se repetirán cada cierto número de segundos. El offset indica el retraso del primer envío.
  • set <alias> <máscara> [clave]: define un usuario. El nombre de referencia (interno al Argobot será el alias, y se aplicará a aquel usuario que satisfaga las condiciones de la máscara, que tiene la forma nick!usuario@dominio (se admiten comodines).
  • group <nombre_grupo> <alias> [<alias>...]: define un grupo de usuarios, cuyo nombre será el indicado, y al que pertenecerán los usuarios indicados a continuación.
  • join <canal> [clave]: indica al bot que debe gestionar el canal indicado, entrando con la clave proporcionada, que es opcional. Si utilizamos la clave GOD, se forzará la entrada del bot. NOTA: dado que el carácter '#' se emplea para indicar comentarios, no debe escribirse en el campo canal. Por tanto, si escribimos linux, estamos refiriéndonos al canal #linux.

Puede haber tantos comandos join como sean necesarios. Para cada uno de ellos, se pueden indicar opciones específicas para el canal, mediante los siguientes comandos:

  • autoop <grupo>: cualquier usuario del grupo indicado será automáticamente dotado de los privilegios de operador cuando entre en el canal.
  • privil <grupo>: declara privilegiados a los miembros del grupo indicado, lo que les permitirá enviar comandos al bot.
  • mode_default <modos>: indica el modo por defecto del canal.
  • mode_disallow <modos>: prohibe algunos modos en el canal.
  • log <fichero>: almacena toda la actividad del canal en un fichero. Se incluyen marcas temporales cada diez minutos.
  • notice <texto>: indica un mensaje que será enviado a todos los usuarios que entren en el canal.
  • allow_any_ban: permite a los operadores del canal hacer prácticamente todo, lo que no es muy aconsejable.

Para nuestro sistema, el fichero argobot.conf es el siguiente:

#
# Parámetros globales
#

# Nick utilizado a la hora de identificarse como IRCop, así como
# para el WHOIS
IRCnick ArgoBot

# Password correspondiente al nick anterior
IRCpasswd miclave
# Nick bajo el cual debe aparecer el bot
nick _ArgoBOT
passwd miclave

# Nombre del dominio al que se va a conectar el bot
server maquina.euitio.uniovi.es
port 6667

# Mensaje que aparece en el away del bot
away Bot de control de maquina.euitio.uniovi.es. No respondemos \
de los fallos.

# Mensaje enviado con el KILL a cualquier usuario que esté utilizando el
# nick definido en el comando NICK anterior
nick_collide Escoge otro Nick, por favor

# Las siguientes líneas configuran distintos aspectos de la seguridad
umbral_kline 5  # Máximo número de intentos (desconectado)
timeout_klines 15  # 15 minutos
timeout_whowas 5 # Tiempo entre whowas

#
#
# Grupos de usuarios
#
#

# Define el grupo de usuarios al que pertenecen todos
set todos *!*@*      # Comodines
group todos todos

# Define el grupo de IRCops
set diego *!diego@maquina.euitio.uniovi.es
set alfredo *!alfredo@maquina.euitio.uniovi.es
group IRCops diego alfredo

# Define el grupo de proveedores
group proveedores diego alfredo

# Canal ayuda-esnet
group ayuda-esnet diego alfredo

#
#
# Canales
#
#

join linux GOD
autoop IRCops
mode_default ntm
mode_disallow silpko
notice Canal dedicado a los amantes del Linux. \
Prohibido a Bill Gates.
timer 60 60 privmsg #linux :Mensaje enviado al canal linux de forma \
automática
timer 60 9999 topic #linux :Canal para los autenticos entendidos en \
informática y sistemas operativos.

# Pone un modo para reducir el consumo de ancho de banda
timer 60 600 mode _argobot :+d

4.7 Ejecución

Para ejecutar el bot, basta con escribir (preferiblemente como root):

cd /usr/src/argobot
./argobot

Si iniciamos Argobot de esta manera, imprimirá por la pantalla toda la actividad que registre (como entradas y salidas de usuarios), lo que puede ser conveniente por motivos de depuración, pero resulta innecesario durante una ejecución normal. Por tanto, es muy frecuente ejecutar el Argobot en segundo plano y redireccionando la salida:

nohup argobot &

Esto nos evitará ver todos los mensajes por la pantalla, pero los enviará a un fichero llamado nohup.out situado en el directorio actual. El problema es que este fichero puede crecer muy rápidamente, de manera que en grandes redes se suele enlazar con el dispositivo nulo, para convertirlo en un agujero negro:

ln -s /dev/null nohup.out

Durante la ejecución de una sesión de IRC, los usuarios autorizados pueden enviar mensajes al bot para cambiar su funcionamiento. Para realizar esta tarea, se emplea el comando MSG del IRC:

/MSG _argobot <clave> <comando> <canal> [nick]

Donde comando puede ser:

  • op: da privilegios de operador al usuario indicado.
  • deop: quita los privilegios de operador al usuario indicado.
  • invite: invita a un usuario a un canal.


Página siguiente Página anterior Índice general