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:
Existen multitud de bots disponibles. Entre los más importantes, podemos destacar:
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:
Otras características del Argobot son:
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
.
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:
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>
.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.
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.
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
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.