Get Firefox

Firefox 3.5

stopsoftwarepatents.eu petition banner Manifiesto por la liberación de la cultura 
No a la traza privada
Últimos cambios
Últimos Cambios
Vote for Public Maps - Reject INSPIRE! Geocaching
Mi estado actual en Jabber/XMPP: - jabberES - jabber.org

Argobot

Última Actualización: 17 de Julio de 1.998 - Jueves

ArgoBot es un pequeño programa escrito en C cuyo primer y principal objetivo era la distribución de líneas K respondiendo a las líneas G y Kills de Theilax.

La versión actual es la 2.82. Los lectores no famirializados con él deberían leer las explicaciones siguientes con mucha atención:

Instalación y configuración de un servidor de IRC

Documentación en castellano. Incluye documentación sobre ARGOBOT.


Planteamiento inicial y Versión 1

Su funcionamiento es el siguiente:

  1. El bot se instala en aquellos servidores que lo crean de interés. Consume muy poca memoria y recursos del sistema.
  2. Es necesario abrir una cuenta IRCOP nueva en el servidor de IRC. Dado que lo normal será que el bot se ejecute en la misma máquina que el servidor, puede restringirse el dominio a irc.servidor.es, o lo que sea apropiado.
  3. Se edita el fichero argobot.c para adecuarlo a las características de cada sistema: nombre del bot, claves de acceso, mensajes de Away, etc.
  4. Se compila argobot.c con el gcc.
  5. Se ejecuta con ./argobot.

Los pasos que da el bot son:

  1. Conectarse al servidor con un nick aleatorio de ocho caracteres, para reducir el riesgo de nick collide.
  2. Pasa a modo IRCOP.
  3. Envía un kill a cualquier posible usuario que estuviese entrando con el nick "oficial" del bot. Yo he llamado "argobot" al mío. Sugiero que el resto de los servidores empleen una nomenclatura semejante para facilitar su identificación.
  4. Entra en el canal #opers. No es necesario en absoluto, pero he preferido hacerlo así para tener un punto de encuentro de todos ellos y saber quienes lo están corriendo. En el futuro se puede buscar otra fórmula más apropiada.
  5. Copia el fichero "ircd.conf.real" (que es el "ircd.conf" de toda la vida) en "ircd.conf". El posible fichero viejo "ircd.conf" se salvaguarda en "ircd.conf.old".
  6. Manda un /rehash al servidor.
  7. Pone una frase "away" con algunos datos de interés y forma de contacto.

Estos son los pasos preparatorios. Seguidamente el programa se limita a poner la oreja y prestar atención a lo que le llega:

  1. Si se le hace un kill, vuelve a entrar otra vez.
  2. Si ocurre cualquier error, debería volver a entrar (esperemos...)
  3. Si se le kickea vuelve a entrar otra vez, si puede. El bot de Argo puede siempre, por el tema de /oper # GOD :)).
  4. Cuando ve que theilax.arrakis.es hace un kill a alguien, ordena un /whowas de ese nick y cuenta cuántos intentos de acceso se han producido en los últimos minutos. Si supera un umbral programable, y todavía no le hemos puesto una k-line, le pone una k-line temporal por un tiempo programable (por defecto, una hora). En la línea K se indica la hora de desactivación de la misma, con fines de depuración y para tranquilizar a los usuarios. Esa línea se graba en el "ircd.conf" y se manda un nuevo /rehash al servidor.
  5. Cada hora (con la configuración actual) se restaura la configuració de "ircd.conf.real" y se hace otro /rehash. Con ello se dan de baja las líneas K que se hayan instalado a partir de los notices de theilax.

Para evitar saturar al servidor con extensos /whowas he limitado la actualización de los datos a 30 segundos entre reintentos... El único problema que puede ocasionar esto es que si hay un nick que intenta entrar con mucha frecuencia y otro con mucha menos (pero que también supere el umbral prefijado), es mucho más probable que pille el más frecuente como víctima... lo ideal, si no lo tiene ya en una línea K. Si ya la tiene, el bot se da cuenta de ello sólo tras el /whowas, y lo ignora otros 30 segundos.

Aunque dudo que ello sea un problema, es causado porque NO TODOS los servidores implementan el bot. Si lo hiciesen eliminarían juntos al nick que entra con más frecuencia y, en los 30 segundos siguientes, los únicos accesos serían los del nick "lento", por lo que lo pillarían sin problemas.

Por todo lo dicho creo que el bot es bastante interesante y debería instalarse en el mayor número de servidores posible, aunque sólo sea para ahorrar ancho de banda y paciencia a los IRCops que tienen los modos "WS" activados permanentemente (como es mi caso y el de algunos otros). Los que más se beneficiarían de ello son los servidores que soportan muchos accesos fallidos de bots, como son arrakis, jet y encomix.

El bot no responde a comandos ni a los ping para evitar que se abuse del flooding. En el futuro ya se verá qué hacemos...

Si alguien quiere saber la pinta de las líneas k generadas, que haga un /stats k irc.argo.es.

Versión 1 del Argobot

Verificación de fichero:

MD5: 47adc9f44efc33f73362ef2c7ee8edf2
SHA-1: 266116c88a1c6d4f8df7934d30f852ba0df38738


Versión 2

La versión 2 del Argobot (actualmente 2.82) incorpora las siguientes mejoras respecto a la versión anterior:


Manual de usuario del Argobot (Versión 2)

En caso de compromiso de clave o si se detecta un funcionamiento erróneo del Argobot, se ruega se avise lo antes posible a jcea@argo.es, incluyendo información lo más detallada y completa posible sobre el caso.

Sugerencias son bienvenidas.


Manual de instalación

Una instalación típica consta de los siguientes ficheros:

Adicionalmente, si se va a utilizar la propagación de líneas K será necesario copiar el fichero ircd.conf en otro llamado ircd.conf.real, por las razones explicadas para la versión 1.

El programa puede residir en cualquier directorio y bajo cualquier UID, pero si se propagan líneas K deberá estar en el mismo directorio que el ircd.conf y tener privilegios de escritura sobre él.

Gracias a Juan José Sánchez Mesa por la siguiente información para NT:

En principio, es posible compilar con cualquier compilador que soporte Win32 y generar ejecutable en modo consola. Se recomienda MS-Visual C++ 4.2/5.0 o Borland C++ Builder.

Para compilar se debe crear un proyecto para generar una aplicación de consola en Win32. Incluir los ficheros fuente argobot.c y argo_parser.c. Además debe incluirse la librería Winsock de 32bits (wsock32.lib). Y compilando normal, se debe obtener el ejecutable correcto.

Recomendaciones:

  • Esta aplicación se puede instalar como un servicio, usando el programa SRVANY que viene con el Kit de Recursos de Windows NT, para así poder ejecutarse aún cuando se cambie de usuario.
  • Ejecutarlo como Administrador y cambiar los derechos de los ficheros a sólo el Administrador.

A partir de la versión 2.40, el Argobot hace un Chroot, un SetUID y un SetGID, si así se le indica:

A partir de la versión 2.50, se pueden definir los símbolos CONTROL_FOOD y VERBOSE:

Para compilar el programa basta teclear las siguientes líneas.

Solaris:
gcc -Wall -g argobot.c -lsocket -lnsl -o argobot
chown root argobot
chgrp root argobot

Linux / FreeBSD / NetBSD:
gcc -Wall -g argobot.c -o argobot
chown root argobot
chgrp root argobot

System V: (cortesía de Pedro Beneitez - beneitez@coventry.ac.uk)
cc -g argobot.c -o argobot
chown root argobot
chgrp root argobot

Otros sistemas operativos:
(en construcción)

Otras consideraciones:

No es necesario tomar también el fichero argo_parser.c porque se incluye automáticamente.

El siguiente paso consiste en la creación de una cuenta de IRCop en el nodo IRC al que se vaya a conectar. Las razones de ello se vieron con anterioridad.

Por fin, el último paso consiste editar el fichero de configuración para ajustarlo a nuestras necesidades.

Detalles a considerar:

Versión 2 del Argobot (2.82)

Verificación de fichero:

MD5: 633564077d37fffe2c1acf6c5878f493
SHA-1: 9d115f2ecaa0e32365fec3868833c608e539a712


Sintaxis y semántica del fichero de configuración

Listado de comandos:

IRCnick <nick>
Informa al bot de qué nick debe utilizar a la hora de identificarse como IRCop ante el nodo IRC, así como para el whois.

IRCpasswd <clave>
Clave IRCop correspondiente al nick anterior.

nick <nick>
Nick bajo el cual debe aparecer el bot.

server <servidor>
Nombre de dominio al que se va a conectar el bot.

port <puerto>
Puerto al que debe conectarse.

away <texto>
Mensaje que debe aparecer en el away del bot. Generalmente será un mensaje informando al usuario que se trata de un bot automático y una dirección de e-mail de contacto. El mensaje puede hacerse todo lo largo que se necesite empleando una barra invertida ('\') al final de cada línea.

nick_collide <texto>
Mensaje enviado con el kill a cualquier usuario que esté utilizando el nick definido con el comando nick. Puede hacerse todo lo largo que sea preciso poniendo una barra invertida ('\') al final de cada línea.

umbral_kline <valor>
Indica cuántos intentos de conexión, matados por Theilax, se permiten antes de poner una línea K local. Si el valor es cero, esta funcionalidad no se utiliza, y el resto de comandos relacionados simplemente se ignoran. Valor típico: 5

timeout_klines <valor>
Número de segundos, como máximo (ver la justificación en la Versión 1) que duran las líneas K locales. Valor típico: 900 (15 minutos)

timeout_whowas <valor>
Parámetro que define cada cuántos segundos hay que comprobar la presencia de clonos. Valor típico: 5.

timer <offset> <período> <comando>
Ejecuta el comando especificado, cada período segundos, empezando offset segundos después de cargar la configuración. El comando puede ser todo lo largo que sea necesario empleando una barra invertida ('\') al final de cada línea. El comando se envía literalmente al servidor, por lo que se requiere una cierta familiaridad con el protocolo IRC.

timer 60 600 privmsg #lazo_azul :¡Solidarízate!
Envia al canal #lazo_azul el texto ¡Solidarízate! cada diez minutos. Al arrancar el programa se concede un minuto de gracia para permitir que entre en todos los canales especificados y se configure plenamente.

set <alias> <máscara> [clave]
Este comando da de alta a un usuario, cuyo nombre de referencia interno será alias (no tiene por qué coincidir con su nick). Máscara tiene el formato nick!user@dominio, siguiendo la sintaxis normal. Se admiten comodines SI Y SÓLO SI sustituyen a un campo completo. Por ejemplo:

jcea!*@*
Cualquier usuario que use ese nick

*!*@corinto.argo.es
Cualquier usuario en esa máquina

Si la máscara no va a ser utilizada en ningún comando posterior, se puede emplear para almacenar información de recordatorio arbitraria, siempre que se ajuste a la sintaxis indicada. Por ejemplo:

set jesus jcea!jcea@argo.es
nos recuerda que el usuario jesus suele usar el nick jcea y su dirección de correo electrónico es jcea@argo.es.

Clave es un parámetro opcional que declara una clave que el usuario podrá usar en los comandos que envíe al bot.

group <grupo> <alias...>
Define un grupo cuyo nombre interno será el declarado en el primer parámetro. El segundo parámetro y siguientes indica los usuarios asignados a ese grupo, usuarios declarados previamente con el comando set.

join <canal> [clave]
Indica al bot que debe gestionar el canal indicado. La clave es opcional, y puede emplearse GOD si tenemos el servidor parcheado y quiere forzarse su entrada en los canales por encima de bans, invite o claves (recomendado).

ATENCIÓN: Dado que el símbolo # se utiliza para señalar el principio de un comentario, no debe emplearse cuando se especifica el canal. Es decir:

join opers GOD
Entra en el canal #opers

A partir de la versión 2.29, el Argobot puede gestionar canales locales, usando el símbolo estándar:

join &Argo GOD
Controla el canal local &Argo

A partir de la versión 2.70, el Argobot puede gestionar canales sin modos (IRCu2.10.04 o superior), usando el símbolo estándar:

join +Argo GOD
Mantiene abierto el canal sin modos +Argo

autoop <grupo>
Cualquier miembro del grupo especificado será "opeado" cuando entre en el canal. Se recomienda no usar esta opción, dados sus riesgos de seguridad.

privil <grupo>
Declara a los miembros del grupo especificado como privilegiados. Ello significa que pueden enviar comandos al bot. La máscara será ignorada (salvo que se emplee también autoop), y se utilizarán las claves para el control de acceso.

mode_default <modos>
Fija los modos por defecto y obligados de un canal. La sintaxis es semejante a la del comando mode del IRC:

mode_default nt
Pone los modos "nt" en el canal. Si alguien los quita, los pone de nuevo. Ésta es la opción recomendada.

mode_default ntsk 123
Obliga a que el canal tenga modos "nt", y sea siempre secreto y con clave 123.

mode_disallow <modos>
Indica qué modos no son admitidos en el canal.

mode_disallow silmpk
Opción recomendada,a prueba de takeover.

mode_disallow ob
No se permiten ni pasos de op ni bans, salvo los que ponga el propio bot.

log <fichero>
Hace logs del canal, almacenándolos en el fichero indicado. Si el fichero ya existe, la salida se concatena. Se almacenan referencias temporales cada diez minutos.

notice <texto>
Este comando está disponible desde la versión 2.40. Permite configurar un texto que será enviado a cualquier usuario que entre en el canal, como "notice". Puede especificarse un texto largo añadiendo una barra invertida ('\') al final de cada línea.

allow_any_ban
Disponible desde la versión 2.50. Este comando especifica que en ese canal no se imponen restricciones en cuanto al tipo de ban que se puede hacer. Es decir, cualquier usuario que tenga OP puede hacer un ban a "*!*@*" y el Argobot ni se inmutaría. Se recomienda no utilizar esta opción salvo que sea preciso por las características o idiosincrasias del canal.

En caso de conflicto con la protección de modos (es decir, que haya una "b" en "mode_disallow"), la protección de modos gana: no se permitirán BANs en el canal.

passwd <clave>
Disponible a partir de la versión 2.70. Permite especificar una clave que será enviada al servidor al principio de la conexión. Con ello se puede acceder a redes que emplean claves, y utilizar el registro de nicks de ESNET.

Descripción léxica y sintáctica en pseudoBNF:

fichero := [comando...] EOF
comando := ( "IRCnick" palabra | "IRCpasswd" palabra "nick" palabra
           | "server" palabra | "port" numero | "away" texto
           | "nick_collide" texto | "umbral_kline" valor
           | "timeout_klines" valor | "timeout_whowas" valor
           | "timer" valor valor texto
           | "notice" texto
           | "allow_any_ban"
           | "set" palabra palabra"!"palabra"@"palabra [palabra]
           | "group" palabra palabra... | "join" palabra [palabra]
           | "autoop" palabra | "privil" palabra
           | "mode_default" palabra [palabra...]
           | "mode_disallow" palabra
           | "log" palabra
           | "passwd" palabra
           | "") ["#"texto] (EOL | EOF)

palabra := caracteres...
caracteres := ASCII menos '#', espacio, '\', tabulador y control
numero := ("0".."9")...
texto := ([caracteres2] ["\"(EOL|EOF)])...
caracteres2 := ASCII menos control

Configuración de ejemplo:

#
# Parámetros Globales
#

IRCnick         ArgoBot
IRCpasswd       *clave* 
nick            _ArgoBOT
passwd          *clave* 
#server         irc.argo.es
#server         gaia.irc-hispano.org
server          irc.argo.es
port            6668
away            Bot de control de irc.argo.es. Para cualquier \
                consulta, hablar con jcea o mail a irc@argo.es
nick_collide    Escoge otro Nick, por favor

umbral_kline    0       # Máximo número de intentos (desconectado)
timeout_klines  0       # 15 minutos
timeout_whowas  0       # Tiempo entre whowas

set     todos   *!*@*   # Un comodín
group   todos   todos

# IRCops

set     jcea            *!*@castor.argo.es              *clave*
set     manolete        *!*@tequila.girona.com
set     artemisa        *!*@raul.cs2informatica.es      *clave* 

group   IRCops  jcea manolete artemisa

# Proveedores

set     arnal           *!oreixa@legba.arnal.es         *clave* 
set     tanaki          *!hal9000@nodo1.tanaki.es
set     nexnet          *!jesus@txuso.nexnet.es
set     gphoenix        *!juanan@aguila.gsphoenix.com
set     bemarnet        *!Midnight@host.bemarnet.es
set     conecta         *!*@hermes.conecta.es
set     anade           *!fsanchez@alpha1.anade-sl.es
set     mastercom       *!Chema@chema.bme.es
set     svalero         *!xiaman@Apocalipsis.svalero.es
set     juande          *!*@trevenque.es                *clave* 
set     alc             *!*@nt.alc.es
set     manolete        *!*@tequila.girona.com
set     airastur        *!*@ironsam.airastur.es
set     distrito        *!*@caridad.distrito.com
set     vidal           *!*@soledad.falcon-es.com
set     olivet          *!*@devnull.tech.olivet.com
set     chemita         *!*@chemita.bme.es
set     cat             *!*@testfw.Cat.es               *clave*
group   proveedores     jcea bot arnal tanaki nexnet gphoenix bemarnet conecta anade mastercom svalero juande artemisa alc manolete airastur distrito cat vidal olivet chemita


# Canal ayuda-esnet
set     petrus          *!beneitez@coventry.ac.uk       *clave* 

group   ayuda-esnet     jcea petrus


join            esnet           GOD
autoop          IRCops
privil          IRCops
mode_default    nti
mode_disallow   slmpk
timer   60 86400 privmsg olimpo :op #esnet _argobot

join            ayuda-esnet     GOD
autoop          IRCops
privil          ayuda-esnet     
mode_default    nt
mode_disallow   silmpk
timer   60 86400 privmsg olimpo :op #ayuda-esnet _argobot

join            proveedores_seguro      GOD
autoop          proveedores
#log            log_proveedores
privil          proveedores
mode_default    sntk (clave secreta)
mode_disallow   ilmp
notice          Por favor, ponte el nick de proveedor que representas. \
                Logs en http://www.argo.es/~jcea/irc/  \
                Página del canal en http://www.argo.es/~jcea/irc/prov_qmd.htm
timer   60 86400 privmsg olimpo :op #proveedores_seguro _argobot

join            lazo_azul GOD
#autoop         IRCops
mode_default    ntm
mode_disallow   silpko
notice          Este canal no es para hablar. Simplemente entra aquí \
                        para solidarizarte con las víctimas del terrorismo
timer   60 3600 privmsg #lazo_azul :Este canal no es para hablar. \
                        Simplemente entra aquí para solidarizarte con \
                        las víctimas del terrorismo (mensaje automático)
timer   60 9999 topic #lazo_azul :Este canal no es para hablar. \
                        Simplemente entra aquí para solidarizarte con \
                        las víctimas del terrorismo
timer   60 3600 privmsg $*.org :Los usuarios que lo deseen pueden entrar \
                        en el canal #lazo_azul. Este canal no es para hablar. \
                        Simplemente entra aquí para solidarizarte con \
                        las víctimas del terrorismo (mensaje automático)
timer   60 86400 privmsg olimpo :op #lazo_azul _argobot



# Pone un modo para reducir el consumo de ancho de banda

timer   60 600  mode _argobot :+d


Últimas actualizaciones



Get Firefox Python Zope ©1997-98 jcea@jcea.es