Mejorando eggdrop

Mejorando tu eggdrop

Configuración de una botnet
Una de las características más maravillosas de eggdrop es la vinculación de bots, permitiendo crear una propia botnet. Una botnet (red de bots) consiste en dos o más bots conectados entre sí, hasta cientos de bots pueden estar conectados entre sí. Si estás usando un eggdrop para el mantenimiento de canales, la característica más importante de los bots enlazados es la compartición de ficheros de usuario. Con esta opción, los bots pueden guardar sus listas de usuario, listas de bans e listas de ignore sincronizadas unos con otros. Una botnet además tiene muchas más posibilidades, tales como permitir bots dar op a otros de manera segura, y hacer que todos los bots entren a un canal con un comando.

Enlazar bots puede parecer un proceso difícil las primeras veces, pero es realmente simple si conoces cómo. La primera cosa que se necesita hacer es elegir un hub bot. Elhub es el bot principal el cual une a todos los demás en la red de bots, a los cuales se les llamará hojas (del original inglés leaf). Incluso si estás usando sólo dos bots, lo mejor es que se use uno como hub, y el otro sea una hoja. El bot hub debe ser el más fiable bot en la botnet, el más rápido, el estable, y en la shell más segura – así que recuerda esto cuando decidas cual es el bot que será hub.
Una vez decidido el hub, es tiempo de configurar los enlaces. Una botnet típica de unos pocos bots tendrá una estructura como la que se muestra abajo:
Eggdrop
|–Camelback
`–Mallard
El árbol de botnet que se muestra arriba es un árbol de 3 bots enlazados. Eggdrop es el bot hub, mientras que Camelback y Mallard son bots hojas. Con el fin de crear unabotnet como ésta, es necesario que cada bot añada a cada bot en el fichero de usuarios, establecer unos ciertos parámetros para cada uno de esos robots. En los pasos a continuación, se usarán los apodos de bots de arriba – solo es necesario sustituir los nicks por los propios.
Si no se quiere configurar que los bots compartan el fichero de usuarios, solo hay que ignorar el paso número 4 marcado con una
(s)
.

  1. Primer paso, configurar el fichero de configuración – asegúrate de que todos los canales de los que quieres sincronizar información acerca de flags de usuario, bans, etc, están con el flag +shared en cada bot, y que los módulos share y transfer están cargados en cada bot también (loadmodule transfer y loadmodule share).
  2. En Eggdrop (el bot hub), necesitas añadir a los bots hoja al fichero de usuarios. Para añadir a Camelback y Mallard, teclea .+bot Camellback y .+bot Mallard
  3. Configura unos flags ordinarios para los bots, generalmenet los bots deben tener: global f (friend) y o (op). Para hacer esto, .chattr Camellback +fo y .chattr Mallard +fo.
  4. (s) Dar a los bots el flag s, teclea .botattr Camelback +s y .botattr Mallard +s. Esto comparte agresivamente que se propaguen los ficheros de usuarios por la botnet.
  5. (s) Dar a los bots el flag s para cada canal que quieres sincronizar su información, por ejemplo, si los tres bots están en el canal #colores y #rayos, teclea .bot attr Camelback |+s #colores y .botattr Camelback |+s #rayos, y exactamente lo mismo con Mallard. Alternativamente, puedes usar el flag g tecleando .botattr Camelback +g, en vez de configurar g en vez de s para cada canal. El flag g simplemente hace que el bot comparta la información de todos los canales.
  6. Repite los pasos 2 y 5 tantas veces como sea necesario para añadir a todos los bots que formarán la botnet en el hub.
  7. Ahora es el momento de configurar el hub en los bots hoja. En la party line de Camelback (olvidando al  bot Eggdrop por el momento), primero necesitamos conocer el acceso por telnet de nuestro bot Eggdrop, el cual consiste en un puerto de escucha (en el fichero de configuración, la línea definida como listen <número> <all o bots> y el host del servidor del bot Eggdrop. Hay que tener claro que ese puerto y host deben ser accesibles de fuera de la red local, así que es necesario configurar nuestro módem o router para permitir tal acceso. Si es una shell profesional esto no hará falta. Si el host de nuestro bot es net.eggdrop.es y el puerto es 3333, en Camelback tecleamos: .+bot Eggdrop net.eggdrop.es:3333. De esta manera, Camelback sabrá a donde tiene que conectarse cuando se inicie.
  8. Configura unos flags ordinarios para Eggdrop, tal como hemos hecho en Eggdrop para las hojas. Ejemplo: .chattr Eggdrop +fo.
  9. (s) Demos a Eggdrop el flag p tecleando .botattr Eggdrop +p. El flag p hace que el pasivamente comparta su fichero de usuarios con el hub bot (por ejemplo, el bot descarga un fichero de usuarios desde Eggdrop)
  10. (s) Demos a Eggdrop el flag s para cada canal en el que se quiera sincronizar información de usuarios, por ejemplo, si los tres bots están en el canal #colores y #rayos, teclea .bot attr Camelback |+s #colores y .botattr Camelback |+s #rayos, y exactamente lo mismo con Mallard. Alternativamente, puedes usar el flagg tecleando .botattr Camelback +g, en vez de configurar g en vez de s para cada canal. El flag g simplemente hace que el bot comparta la información de todos los canales.
  11. Demos a Eggdrop el flag h tecleando .botattr Eggdrop +h. El flag h hace que el bot intente conectar al hub automáticamente.
  12. Dentro de un minuto, Camelback deberá intentar unirse a Eggdrop y (si está activada la opción de compartir) descargar el fichero de usuarios.
  13. Repetir los pasos 7 y 11 en todos los demás bots hoja.

Los pasos anteriores consiguen enlazar los bots
hoja
con el bot
hub
central, y (si se configuraron los flags) compartirán el fichero de usuarios. Hay que tener en cuenta que debe estar configurado y habilitado el puerto de telnet en el fichero de configurar, o todos los intentos de conexión de los bots hacia el
hub
serán fallidos

Si el bot
hub
se cae por cualquier motivo, los demás bots intentarán reconectar automáticamente cuando éste vuelva. Algunos usuarios quizá quieran establecer un
hub
suplente, el cual será utilizado por el resto de bots como el
hub
mientras el original no vuelve, usando el flag de bot
b
. Si quieres probar esto, así como aprender más sobre la configuración de botnet, aquí hay una guia al respecto que se incluye en docs/ en la distribución de Eggdrop.

Usando scripts Tcl

Usar scripts Tcl es la manera más fácil de añadir características nuevas a tu Eggdrop. Existen cientos de scripts tcl en la red que añaden toda clase de capacidades interesantes, tales como opciones de auto saludo al entrar, protección de canales, comandos públicos adicionales, trivial y otros juegos… y la lista sigue.

Scripts Tcl son normalmente comprimidos con gzip y tienen la extensión .gz. Se pueden extraer desde windows usando 7-zip o en la shell usando el comando ‘gunzip’, por ejemplo
gunzip nombrescript.tcl.gz
. Muchos scripts requieren configuración antes de usarlos, así que es una buena idea abrir el script y leer la documentación adjunta, así como la configuración antes de añadirlo al bot. Un script tcl no configurado podría lograr que el bot se cerrase o no funcionase como antes. También hay que tener en cuenta en la fecha que se crearon para confirmar la compatibilidad de la versión de Tcl en la que se creó y la que nuestro bot está usando. Hay que tener en cuenta que algunos scripts tcl están hechos en formato Unix, y que no se mostrarán correctamente si los editamos con notepad por ejemplo en windows, sin embargo con wordpad, o cualquier editor avanzado sí funcionarán correctamente. Esta es una de las razones por la que los ficheros dan errores al ser editados en un formato incorrecto.   Para añadir un script Tcl, hay que copiarlo al directorio de scripts del Eggdrop, normalmente eggdrop/scripts/. Y además es necesario añadir una línea a nuestro fichero de    configuración para que lo lea, Preferiblemente al final del fichero de configuración, debe haber ya un par de líneas como estas:

source scripts/alltools.tcl
source scripts/action.fix.tcl

Si nuestro nuevo script tcl que queremos añadir se llama
fun.tcl
, podríamos añadirlo tecleando lo siguiente:
source scripts/fun.tcl
Una vez que se puso el script en el directorio scripts/ y añadida la línea al final del fichero de configuración, en
party line
tecleamos
.rehash
. Esto cargará de nuevo el fichero de configuración y aplicará los cambios, con lo que el fichero está listo para ser usado (quizá algunos scripts necesiten un restart en vez de rehash).

Una buena página de scripts tcl es
http://www.egghelp.org/tcl.htm
para algunos de los mejores scripts Tcl. También en
http://www.egghelp.org/links.htm
puedes encontrar otros enlaces externos con más scripts.

Escribir scripts tcl es fácil, además, es un lenguaje de programación muy interesante capaz de crear aplicaciones independientes que no necesitan de un eggdrop para funcionar. La única web en castellano (y en proyecto) de tcl es
http://www.tcltk.es
y dentro del directorio docs/ existe un archivo llamado tcl-commands.doc que contiene todos los comandos necesarios para tcl en eggdrop.

Usando parches
Parches hacen modificaciones directamente en el código de Eggdrop. Primariamente se hacen para corregir bugs en Eggdrop, pero también son usados para añadir nuevas características o cambiar la forma de trabajo de alguna característica cuando no es posible hacerlo via script Tcl. Se pueden encontrar parches para Eggdrop en la sección de
parches
.

Los ficheros de parches son generalmente distribuidos con la extensión
.patch
o
.diff
. Sólo se puede aplicar un parche a un código de Eggdrop no compilado (no a una instalación existente ya instalada creada con
make
). Para aplicar el prache, es necesario copiar al directorio donde se ha extraído el código del Eggdrop (ejemplo eggdrop1.6.19/) y descomprimirlo si es necesario. Una vez hecho se debe abrir el programa de parche — si el parche que quieres aplicar se llama eggdrop.1.6.19+fix.patch, teclea lo siguiente:


patch -p1 < eggdrop1.6.19+thefix.patch

Esto aplicará los cambios necesarios en el código fuente del Eggdrop. Esto suele mostrar un montón de texto durante el proceso, pero tan pronto como como se complete el proceso sin mensajes de error, el código estará correctamente parcheado. Si recibes algún mensaje de error, podrías probar el comando con la opción
-p0
, por ejemplo:
patch -p0 < eggdrop1.6.19+thefix.patch
). Puedes obtener más información
aquí
.

Una vez parcheado, necesitarás compilar otra vez el nuevo código modificado usando
make
e instalarlo con
make install
, así como podría configurar una actualización o ya una versión existente.

Se puede actualizar el Eggdrop a base de instalar parches, pero hay que recordar que sólo se puede modificar el código fuente; actualizando una previa compilación es un
proceso diferente
.

Usando ficheros de idioma
La mayoría de funciones se pueden mostrar en otros idiomas que no sea el inglés. Esto se logra gracias a ficheros de idioma.

Los ficheros de idioma se encuentran en el directorio language/. Actualmente hay tres tipos de ficheros de idioma:

– El
core
, core.spanish.lang, contiene el texto de los mensajes más centrales de las funciones de Eggdrop.

– El
filesys
, filesys.spanish.lang, contiene el texto de los mensajes del módulo system.

– El
wire
, wire.spanish.lang, contiene el lenguaje para el módulo
wire
.

Con el fin de hacer que el robot muestre el texto en el idioma preferido, se requiere tener un archivo de idioma básico. Con eggdrop se incluyen los idiomas inglés, alemán y frances, pero se pueden encontrar más idiomas en la sección de
idiomas
. Tenga en cuenta que los archivos de idioma a menudo varían entre las versiones de bot, por lo que es buena idea obtener siempre el archivo relacionado con la versión de bot para el que fue creado. Normalmente trabajan para las últimas versiones de eggdrop ,pero puede haber funciones que no estén disponibles.

Una vez que tengas tus archivos de idioma, hay que ponerlos en el directorio language/ del bot. Si vas a usar el idioma permanentemente en el bot, debes escribir el comando addlang en el fichero de configuración. Por ejemplo – para cargar los archivos spanish.lang, habría que añadir en al principio del fichero de configuración el comando addlang “spanish”. También se pueden añadir o quitar idiomas desde party line usando el comando .+lang y .-lang, pero los idiomas añadidos con esos comandos sólo serán efectivos hasta que el bot sea cerrado.

Para obtener más información acerca de lo que son archivos de idioma utilizado en tu robot, usa .lstat comando.

Seguridad y protección del bot
Eggdrop tiene un potencial de vulnerabilidades que pueden ser explotadas si no aseguras tu bot propiamente. Abajo se muestran algunos recordatorios para hacer tu Eggdrop más seguro.

Desactivar learn-users
Permitir que los usuarios se puedan añadir a sí mismos en el bot puede ser conveniente, pero desde que éste permite que cualquiera se añadan desconocidos no es muy seguro (sobre todo si el usuario obtiene acceso a party line automáticamente). Y la última cosa que queremos es que alguien ha flodeado al bot añadiendo 1.000 usuarios nuevos. Se debe considerar seriamente sobre desactivar esta learn-users y en vez de eso añadir los usuarios manualmente con el comando .adduser y .+user. Si realmente quieres permitir que los usuarios se añadan a sí mismos, debes cambiar el comando de activación que no sea ‘hello’.

Elegir dueños cuidadosamente
Sé muy cauteloso aplicando
flag
de dueño (+n) a gente en tu bot. Debes considerar no dar este status a otros usuarios, a no ser que estés seguro de que quién es esa persona y que tiene los conocimientos de IRC y bot necesarios como para confiar en él. El status de owner (dueño) permite hacer prácticamente todo con tu bot – lo último que necesitas es que un despechado use tu propio bot para expulsarte de tu propia shell.

No uses auto-op
A no ser que tu Eggdrop esté en un pequeño y privado canal que no tiene muchos visitantes que no conoces, usando auto-op rápidamente incremente el riesgo de un takeover. Esto es así porque desde que el usuario obtiene op, una persona solo necesita coincidir en una máscara de host de un usuario, quizá en algún momento sea fácil emular el host de alguien en el IRC, sobre todo en los que usan ips virtuales (+x). Lo mejor es asegurarse de lo que los ops solo pueden obtener op identificándose con su propia contraseña, típicamente enviada al bot via /msg. Para una mayor seguridad, aunque también menos conveniente, es que el usuario se identifique via DCC al bot y use el comando
.op
(aunque también existe un riesgo aquí de que el usuario pudiera accidentalmente teclear su nick erróneamente y opear a alguien que no tuviera su nick habitual).

Contraseñas seguras
no uses contraseñas que se puedan suponer facilmente – haz una combinación aleatoria de mayúsculas y minúsculas y números, o dos palabras combinadas con un número – cualquier cosa. También asegúrate de enviar un msg abriendo el privado al bot o desde Status window, porque teclear /msg Eggdrop op <password> en un canal podría por cualquier razón aparecer en el canal – “Esto pasa y pasará miles de veces”.

Reenlaza o desactiva los comandos ident y addhost

Estos comandos son útiles cuando nuestro bot no nos reconoce porque nuestro host ha cambiado. Aunque de la misma manera también es una puerta para astucias, es por ello que es una buena idea, al menos, cambiar el nombre de los comandos de
‘ident’ 
y
‘addhost’
a cualquier palabra privada que nosotros o nuestros usuarios de bot conozcan y no divulguen. Incluso para mayor seguridad, se podrían desactivar y los dueños deberían añadir los hosts manualmente.

Usar máscaras específicas
Si usas el host por ejemplo guay@telefonica.rima-tde.net, Eggdrop reconocerá tu máscara como
*!guay@*.telefonica-tde.net
. Si eres el dueño del bot o un maestro, es importante que corrijas esto a una máscara más específica que englobe a la menor gente ajena posible. Si en tu red el nick se registra y solo se puede usar con clave, lo ideal sería añadir la máscara
nick!*@*
.

Activar protect-telnet

Por defecto, cualquier persona puede acceder al bot y suponer el nombre de usuario de algún op. Activando esta opción en el fichero de configuración permitirá restringir el acceso por telnet a hosts particulares. Dando acceso telnet a un usuario con protect-telnet activado, añadirás a él una máscara especial en el formato
-telnet!*@*su.mascara.host
.

Ejemplo – si la máscara de usuario es
*!guay@*.isp.net
, podrías añadir
-telnet!*@*.isp.net
a su lista de hosts usando el comando
.+host handle -telnet!*@*.isp.net
. Esto permite al dominio *.isp.net a intentar autenticarse mediante telnet. La característica protect-telnet también se aplica a los enlaces de bot, así que un
hub
bot podría necesitar el host apropiado en cada
hoja
bo para que se conecten entre sí.

Por defecto Eggdrop da al dueño la máscara
-telnet!*@*
, permitiendo a cualquier host acceder por telnet. Debes estar seguro de que has quitado esa máscara por una más específica.

Permitir solo a usuarios hacer telnet a los bots hoja

El comando listen de tu fichero de configuración normalmente es algo como
listen 54321 all
, el “all” significa que acepta conexiones tanto de usuarios como de bots. En la mayoría de casos esto debe dejarse en “users” y no aceptar conexiones de bots, algo tal que:
listen 54321 all
, así nos aseguraremos de que los intentos son rechazados. Un usuario
.relay
desde otros bots será aún acpetado y tratado como una conexión de usuario.

Una opción incluso más segura es desactivar completamente el comando listen en los bots
hoja
comentando la línea con una almohadilla (
#
) y reiniciando el bot. Sin puertos de escucha significa que el bot no tiene posibles vulnerabilidades basados en ataques de telnet. Por otro lado la única manera de acceder a
party line
es estableciendo una conexión DCC con el bot desde IRC. En la mayoría de los casos, desactivar e puerto de escucha no suele ser necesario y usra protect-telnet como se ha descrito es adecuado.

Desactivar los comandos tcl, set, y binds
Probablemente cuando sepas para qué son estos comandos quisieras tenerlos activados. Por el momento, con estos canales y acceso al bot se tiene acceso a la cuenta shell donde éste esté corriendo. Obviamente si no sabemos qué puede ocurrir, es una mala idea tenerlos activados. Los comandos
.binds
pueden ser usados maliciosamente en algunos casos, si no los usas desactívalos.

Activar must-be-owner
Esta opción permite solamente a dueños permanentes (los que aprecen en ‘set owner’ dentro del fichero de configuración) usar el comando .tcl y .set (asumiendo que están activados). Esto mejora la protección del comando .chanset y otros como .dump.

Usar private-user
Si tienes una red de bots compartiendo ficheros de usuarios, es necesario considerar el uso de private-user. Esto puede significativamente incrementar la seguridad de tu botnet, pero todos los cambios de usuarios (tales como añadir usuarios, ident/addhost, password y nuevos flags, cambios, etc) necesitarán ser hechos desde el
hub
bot.

Usar una buena protección de flood
Mucha gente piensa que eggdrops son a prueba de bala, pero en la realidad es ésta en versiones antiguas de eggdrop, por defecto, son realmente vulnerables a tipos básicos de flood. Actualmente su fichero de configuración provee de los recursos necesarios para que un eggdrop nunca se caiga del IRC por
excess flood
, sin embargo hay que tener especial cuidado a la hora de configurar esa parte. Es mejor perder una hora de tiempo documentándose sobre la configuración que experimentando la manera de evitar que nuestro bot no se muera por ataques. También es buena idea pensar en un script tcl de protección flood, los más consolidados son
All protection, xchannel.tcl, o sentinel.tcl
que vienen de versiones 1.3.x. Desde el 2007 se ha consolidado como una base de protección de canales eGuard, por
Eggdrop España
.

Mantén un ojo en los mensajes

Cuando estás en línea, debes abrir una conexión DCC Chat con tu bot y poder ver la consola. Asegúrate de que tienes al menos los
flags m, b, s, c, o 
y
x
activados (teclea
.console +mcobxs
) y así podrás ver todo lo que ocurre al bot. Quizá quieras quitar los
flags jk
de la consola.

Admeás quizá quieras que tu bot te envie por email el log del día anterior permitiéndote ver toda la actividad que ha ocurrido. Para hacer esto necesitas añadir una línea a tu crontab (crontab es una característica de las consolas linux, equivale a un programador de tareas en windows) para hacer que el bot envie el log cada día. Se podría configurar así:

30 5 * * * mail tu@email < /home/eggdrop/logdir/botlog.yesterday
Es una única línea que se debe añadir y sustituir por los datos reales, email, y ruta y nombre del log que se configuró en el fichero de configuración.

Usa los bots de servicios de tu red, no vuelques en el bot toda la responsabilidad
Si tu red preferida tiene bots de servicio para canales o nicks y tú tienes acceso a ellos, úsalos. Los ataques DoS serán menos dañinos y el bot estaremos menos preocupados porque el bot esté haciendo demasiadas cosas. En cualuqier caso, no es necesario que el bot tenga acceso de fundador al canal, siendo op lo puede hacer prácticamente todo y además otros usuarios maliciosos, o incluso scripts tcl con acceso al bot no podrían afinar su picaresca o que simplemente desconfiguren el canal o el bot.

Leave a Reply