Member of The Internet Defense League Últimos cambios
Últimos Cambios
Blog personal: El hilo del laberinto Geocaching

Internet Relay Chat (IRC)

Última Actualización: 29 de enero de 2013

ATENCIÓN: Esta página ha estado inactiva desde diciembre de 2003 hasta enero de 2013.
Message-ID: <50C82EB4.6090606@puente.nu>
Date: Wed, 12 Dec 2012 08:13:56 +0100
From: Juan Puente <juan@puente.nu>
To: jcea@jcea.es
Subject: código

Buenas días Jesús,
Ayer hablé con  con Toni Garcia y me contó  que estabas interesado en 
liberar código de la Asociación del año 2004 de los tiempos en que tu 
ayudabas en estas labores . La postura de la asociación es que te 
sientas libre de liberarlo  y así te lo confirmo por escrito.
SI tienes cualquier duda o necesitas una papel mas formal llámame y lo 
comentamos.
Un abrazo
Juan Puente

Código liberado:

  • Código IRCD e IRCD-OoB

    En este repositorio se publica el código fuente del servidor IRC que se utilizaba en IRC-Hispano en 2004. El código ha seguido evolucionando, claro, pero ya sin mi colaboración.

    Como extra interesante, publico también el código OoB (Out of Band). Se trata de parte de la tecnología "IRC sobre Túneles IP" que funcionaba en Argo, para que los cibercafés no necesitasen contratar clones, y se pudiesen identificar los puestos individuales dentro del local. Para ello se utilizaban cuatro componentes:

    • Un cliente de túneles, funcionando en la red del cibercafé cliente. Este programa estaba funcionando siempre y recibe las conexiones IRC de los puestos locales. Esas conexiones se tunelizan hacia el servidor en Argo, utilizando una única conexión TCP/IP, donde se multiplexan las diferentes sesiones, junto con información adicional como la IP original del puesto.

    • Un servidor de túneles en Argo, que recibe las conexiones del cliente de túneles, autentifica la conexión, controla el tráfico por local, se demultiplexan las conexiones de los diferentes puestos hacia al servidor de IRC, y se envían datos de tráfico hacia el servidor de autenticación y tarificación.

    • Un servidor de IRC modificado para acepte las conexiones provenientes del servidor de túneles y que las identifique claramente con la información de la conexión original, no la conexión física que nos llega. Éste es el servidor IRCD-OoB, porque la comunicación de esos datos que identifican la conexión se realiza mediante un mecanismo "fuera de banda", utilizando memoria compartida entre el servidor IRCD-OoB y el servidor de túneles.

    • El servidor de autenticación y tarificación mantiene los datos del cliente, de acceso y de tráfico. Se comunica con el servidor de túneles mediante XMLRPC.

    El repositorio Mercurial se ha limpiado considerablemente, desde el "subversion original". Ha sido bastante complicado.

    Otro problema es que no hay apenas comentarios en el log del control de versiones. Eso es un fallo de estilo personal en aquel momento (he aprendido mucho desde entonces). Los cambios se pueden ver en los ficheros "CAMBIOS" y "CAMBIOS2_10_H_0*".

    La licencia de IRCD-OoB es la misma del IRCD original: GPLv1 o superior. OJO, ¡versión 1!. Esto es así porque se trata de una obra derivada, y no se puede cambiar la licencia sin hablar con TODO EL MUNDO que en algún momento haya metido código no ya en mi versión, sino en toda la larga historia del IRC. Es decir, imposible.

  • IRC sobre Túneles IP (el nombre clave de este proyecto era "WormProof")

    En el principio de los tiempos IRC-Hispano se financiaba, fundamentalmente, a través del servicio de "clones": dado que el IRC limita a 2 conexiones simultaneas por IP, los cibercafés que querían ofrecer conexión al IRC tenían que contratar permiso para conectar más personas simultaneamente. La idea no era mala e impone un coste solo a quien se beneficiaba económicamente del IRC.

    Pero había algunos problemas: El precio por clon dependía de si eras cliente de un miembro de la red o no (bueno para los miembros, malo para los cibercafés, que tenían una oferta limitada) y, sobre todo, necesitabas tener una IP fija, lo que resultaba caro y en algunos casos no era posible. Además, si el cibercafé tenía varios proveedores de conexión, para protegerse de caídas de uno de ellos, debía contratar clones con cada una de las IPs, dichas IPs debían ser fijas, etc. Por último, si el cibercafé tenía una IP fija, requerido por el sistema de clones, podía convertirse en un objetivo fácil para ataques de denegación de servicio, un clásico de la época.

    En un momento dado, Argo empezó a ofrecer el servicio de "IRC sobre Túneles IP". Dicho servicio requería que un cibercafé instalase un programa en su red, que establecía un túnel con Argo y canalizaba el tráfico IRC (exclusivamente) a través del mismo. En la parte de Argo, las conexiones que llegaban a través del túnel se mandaban al servidor de IRC usando como remitente una IP de la red 10.0.0.0/8 (red asignada a direcciones privadas). Cada cibercafé tenía su IP virtual 10.0.0.0/8 independiente, y el servidor DNS de Argo le asignaba una IP inversa del tipo "ciberperico.irc.argo.es".

    Para el cibercafé este cambio tenía consecuencias interesantes: no se requería ser cliente de un nodo de la red, porque cara a IRC-Hispano aparecía como cliente de Argo, no se requería tener IP fija (bajando costes y permitiendo tener varios proveedores de conexión, por redundancia) y la IP real del local permanecía oculta y protegida de ataques. Como detalle original, el aparecer como "ciberperico.irc.argo.es" permitía la personalización y publicitaba el local.

    La versión 1 y 2 del sistema de "IRC sobre Túneles IP" se desplegaron utilizando SSH. La versión de SSH en el servidor de Argo estaba muy modificada para no permitir lanzar comandos arbitrarios, o abrir túneles de entrada hacia la red del cliente, comprometiendo la seguridad de Argo. Cuando el cliente abría la conexión SSH, se lanzaba un script que iba mostrando en el terminal el tráfico de datos del usuario, y el número de sesiones establecidas dentro del túnel.

    Argo cobraba al usuario por el tráfico del túnel, y el cliente pagaba a IRC-Hispano por clones de forma normal, como "cliente" de Argo, que es lo que veía el resto de la red.

    Este esquema funcionó bien durante años. No obstante era bastante pesado en el servidor (se usaban varios procesos por cada túnel, que demandaban bastante CPU y memoria) y había poco control en el funcionamiento del túnel. El empleo de SSH en el cliente era un problema también, sobre todo en entornos MS Windows, con administradores poco experimentados. El servicio fue creciendo y llegó un momento en el que el servidor no podía con tantos túneles. La opción evidente era instalar máquinas adicionales, pero decidí desarrollar una nueva versión del servicio de túneles que solucionase los problemas encontrados con la experiencia previa de operar el servicio.

    Esto fue la versión 3 del sistema de "IRC sobre Túneles IP" de Argo.

    Este desarrollo estaba escrito en Python (versión 2.1). El cibercafé recibía un pequeño cliente (menos de 700Kbytes en el caso de MS Windows, 17 Kbytes en el caso de Linux), con mantenimiento cero, que restauraba el túnel automáticamente en caso de caída, mostraba al operador del local información de tráfico y conexiones activas, etc. En el servidor se completaban los túneles, como siempre, y se mandaban al servidor IRC usando la red 10.0.0.0/8 y las inversas "*.irc.argo.es", como siempre. La gran ventaja es que con el nuevo servicio de túneles, Argo tenía control total sobre ambos extremos y la parte servidor era mucho más ligera. Una sola máquina llegó a albergar más de 700 túneles simultaneos, sin pestañear.

    La facturación era la misma: Argo facturaba por el tráfico del túnel (si no lo usas, no pagas) e IRC-Hispano recibía su parte por la contratación de clones por parte de un cliente de un miembro (Argo). La migración de clientes al nuevo sistema fue bastante rápida, ya que la nueva clave de acceso se derivaba (hash MD5) de la vieja clave SSH que el cliente utilizaba para el antiguo túnel. Enseguida pudimos eliminar el sistema de túneles anterior, que era un dolor de muelas de operar, cargaba la máquina, nos daba muy poco control y opciones, y siempre me preocupaba que un cliente encontrase algún fallo de seguridad del servidor SSH, por muy modificado que lo tuviese. El día en que apagué el demonio SSH del túnel dormí mejor.

    Argo ofreció esta tecnología a otros nodos de la red IRC-Hispano, pero no hubo interés.

    A nivel técnico, cada vez que un usuario se daba de alta en el servicio, Argo necesitaba añadir una IP 10.0.0.0/8 nueva al servidor de túneles (para utilizarla como IP fuente en las conexiones al IRC) y configurar su DNS inversa como "ciberperico.irc.argo.es". Manualmente. Pronto pensé que teniendo control también del IRC, podía modificarlo para que el sistema de túneles y el IRC se comunicasen datos "virtuales" de IPs y DNSs inversos, sin necesidad de que existiesen en realidad. Esa tecnología fue el IRCD-OoB (Out of Band) descrito en el punto anterior. Así se hizo, simplificando la carga administrativa en Argo y dándonos un respiro en cuanto a carga de trabajo.

    Poco después se me ocurrió lo siguiente: dado que el túnel con el cibercafé nos indica la IP de origen real de cada conexión canalizada (típicamente una IP del local del tipo 192.168.x.x), podíamos identificar cada mesa en el servidor. Si en vez de poner las inversas "ciberperico.irc.argo.es" poníamos "puestoXXX.ciberperico.irc.argo.es" y asignábamos a cada puesto una IP 10.0.0.0/8 separada, no necesitaríamos contratar clones en IRC-Hispano (porque cada mesa del local se ve como una conexión independiente) y el control de IRC-Hispano y de los locales mejoraría (se podría "banear" una mesa concreta, en vez de todo el local). Argo podría embolsarse dinero adicional en concepto de clones (que ahora controlaría Argo, no IRC-Hispano). Pero IRC-Hispano dejaría de facturar clones, que era su principal fuente de financiación.

    Planteé la cuestión en una reunión de IRC-Hispano, presentando la idea y ofreciendo compartir la explotación. Una de las premisas de IRC-Hispano era permitir que los miembros de la red se "buscasen la vida", y Argo recibió permiso para desarrollar y lanzar el servicio, y nadie más se interesó en explotarlo. Creo sinceramente que fue un error de cálculo por parte de IRC-Hispano, que o bien dudó de mi capacidad para desarrollar el servicio o pensaron que Argo era un proveedor minúsculo e irrelevante y no lo consideraron una amenaza. El hecho es que el servicio se desarrolló en días y tuvo un gran éxito. Sospecho que tuvo peso también en la decisión de expulsar a Argo de IRC-Hispano en Marzo de 2004, aunque el motivo declarado fue otro. Argo proporcionó el código a LleidaNet (otro miembro de IRC-Hispano y presidente de la asociación en aquel momento), pero no me consta que lo llegase a usar. Puede verse este hecho en el sistema de control de versiones.

    Ésta fue la cuarta generación del servicio de "IRC sobre Túneles IP" de Argo. La documentación sigue online y recomiendo echarle un vistazo, sobre todo a la base de datos de conocimientos, por su valor histórico.

    He liberado la versión 3 y la versión 4 del sistema de "IRC sobre Túneles IP" de Argo. En esta ocasión el repositorio está limpito y la conversión desde el Subversion original fue trivial. Hay pocos comentarios en los "commits", pero creo que el código es simple de entender y se puede reutilizar con facilidad. Está escrito para Python 2.1. Su arquitectura de procesos se explica un poco en la sección sobre IRCD-OoB.

    El código se libera con licencia GNU Affero General Public License 3 o superior. Espero que sea útil a alguien. Eso sí, recordad que si lo usáis deberéis publicar vuestros cambios, como manda la licencia AGPL3. Aunque no entreguéis el ejecutable a nadie :-)

  • Olimpo

    La personalidad de una red de IRC, además de por su comunidad de usuarios, viene marcada por los servicios que despliega, su filosofía, y su interacción con los usuarios.

    Mi interés en IRC-Hispano, cuando se fundó, era desarrollar tecnología y nuevos servicios nunca vistos antes. Tenía una visión: una red de chat en la que se pudieran llevar a cabo innovaciones técnicas como la base de datos distribuida, pero enseguida me tropecé con reticencias, inmovilismo e intereses poco claros. A los pocos meses y tras unas cuantas decepciones, fundé una segunda red de IRC, ESNET, en la que fuera posible desarrollar esas ideas. Quiero hacer una mención especial para Adrián García, por su tiempo, apoyo y esfuerzo en la creación de ESNET y en muchas sesiones de "brainstorming".

    Los progresos fueron rápidos y espectaculares.

    Tal vez por ese éxito, o simplemente por la elección de una nueva Junta Directiva en IRC-Hispano, los vientos cambiaron. Las innovaciones eran mejor recibidas, así que durante años ESNET fue el banco de pruebas, desarrollo y experimentación, e IRC-Hispano la red "grande" donde las cosas se desplegaban de forma masiva.

    Este periodo, y todo el trabajo realizado durante el mismo, está bastante bien documentado en mi web: ESNET, y Olimpo. Recomiendo echar un ojo a todos esos artículos. Son interesantes.

    Faltan por documentar dos módulos:

    • AIMC:

      AIMC hacía una encuesta anual de usuarios de Internet. IRC-Hispano era (¿es?) una plataforma de captación de internautas, y este bot se encargaba de mandar "publicidad". Toma muchas precauciones para molestar lo menos posible a los usuarios, aunque intenta ser efectivo.

    • lazo-azul:

      Este bot fue una reacción al ataque terrorista del 11 de Marzo de 2004. Permitía dejar una frase sobre el atentado. No recuerdo qué se hizo luego con esas firmas, si se colgaron online o no.

    El código fuente que he liberado de Olimpo consta de dos ramas. La rama "default" contiene la última versión del código, y es la base que debería utilizarse para continuar el desarrollo. La rama "v1_66" fue una variante pagada por IRC-Hispano y tiene un interés meramente histórico. No contiene nada que no esté en la rama principal.

    El código de Olimpo está tal y como lo dejé en 2004. Veréis que escribí los primeros pasos de una librería que permitiría integrar bots ajenos a Olimpo para funcionar en IRC-Hispano de forma oficial. Sería interesante que alguien siguiese esos pasos.

    Dejar el código listo para ser publicado no ha sido trivial.

    El código se libera con licencia GNU Affero General Public License 3 o superior. Espero que sea útil a alguien. Eso sí, recordad que si lo usáis deberéis publicar vuestros cambios, como manda la licencia AGPL3. Aunque no entreguéis el ejecutable a nadie :-)

Argo pertenece a las siguientes redes de IRC:

ESNET
IRC-HISPANO


Desarrollos IRC

Si te interesa la investigación y el desarrollo en el mundo IRC,
seas programador de servidor, programador de clientes o bots IRC,
o "scripter", deberías tener muy presentes los siguientes enlaces:


Argobot
Se trata de un bot 100% producción propia cuya primera motivación era la distribución de líneas K respondiendo a las líneas G y Kills de Theilax. El resultado fue bastante interesante y, en la actualidad, este bot realiza muchas más operaciones útiles.

Artículos IRC
Algunos textos sobre IRC que he publicado en diferentes listas, news, medios, etc.

BulletProof
Sistema de comunicaciones confidenciales para IRC. Compatible con cualquier servidor. Programado en Python, y debería funcionar sobre "cualquier cosa" con un intérprete Python disponible.

Canal de Proveedores
Desde hace bastante tiempo existe un canal para Proveedores Internet, en plan consulta, compartición de experiencias, etc.

Clones
En el IRC Hispano y en ESNET, el número de clones (conexiones diferentes desde una misma IP) está limitado a dos para evitar ataques del tipo Flood. En algunos casos, no obstante, es necesario abrir cuentas especiales para poder introducir más. Esto es lo que sucede, por ejemplo, con los cibercafés que acceden a través de un proxy o las máquinas multiusuario de una universidad.

Los datos a remitir son:

  • Dirección IP de la máquina en cuestión (debe ser una IP fija)
  • Dirección inversa, si existe
  • Número de usuarios simultaneos
  • Horario de funcionamiento
  • Organización propietaria de esa IP
  • Persona de contacto

Dichos datos deben remitirse al IRCop de su proveedor. En caso de que el proveedor no pertenezca a la red, se puede remitir a un IRCop cualquiera del IRC Hispano o ESNET (a la red que le interese).

Listados históricos de uso de clones:

A finales de mes se empiezan a facturar clones

Comandos IRC Server
Listado y explicación de los comandos IRC Server.

Comandos IRCop
Listado y explicación de comandos accesibles a un IRCop.

DNS Inverso y Expulsiones
Algunos de los nodos de la red, mientras no se decide una política conjunta, han optado por expulsar de sus servidores a algunas redes. Los motivos pueden ser muy variados:

  • No existe DNS inverso para ese dominio.

  • El dominio no se responsabiliza de los actos de sus usuarios: ibm.net, samsung.co.kr, compuserve.com, etc.

Aquí puedes encontrar algunas de las motivaciones que nos obligan a tomar medidas tan drásticas.

Documentación IRC
Existe muchísima documentación sobre el mundo del IRC, tanto respecto a servidores como a clientes y scripts:

Fallos en el IRC
En ocasiones las cosas no ocurren como deberían. Lo que debería funcionar no funciona o, al menos, no lo hace correctamente. A veces ello es debido a un error del usuario, pero también puede deberse a un fallo en alguno de los programas, ya sea en el cliente del usuario o bien en los servidores de la red. En esta página podrás informarte sobre los fallos y problemas conocidos.

Instalación y configuración de un servidor de IRC
Documentación en castellano. Incluye documentación sobre ARGOBOT.

IRCops
¿Cómo ser un IRCop de esta red?. No existen unos pasos explícitos. Lo más normal es que un IRCop sea un empleado de uno de los nodos de la red, pero probablemente se aprobarían también las peticiones de usuarios con buenos antecedentes y responsabilidades asociadas al IRC, como pueden ser los operadores de un cibercafé. En cualquier caso, éste y otros temas deben discutirse con el proveedor internet al cual pertenezca el usuario (si es un nodo de la red).

Los IRCops estamos para ayudar a solucionar problemas y contribuir a que la red funcione lo mejor posible. Existen una serie normas de Netiqueta que tanto IRCops como usuarios deberían seguir cuando tratan entre sí.

IRC Server (modificaciones)
Todos los detalles sobre nuestro servidor de IRC, servicios que provee, modificaciones, código fuente, etc.

Modos
En este documento se explica qué significa cada modo, tanto de usuario como de canal. Incluye los modos estándares y los modos añadidos en IRC-Hispano/ESNET.

Normas de Netiqueta
Algunas normas mínimas de convivencia, tanto para usuarios como para IRCops.

Nukes
¿Se te corta la conexión a veces?. ¿Te caes del servidor IRC con frecuencia?. ¿Tu ordenador se queda colgado mientras estás en el IRC?. Si es así puede que estés siendo víctima de una variedad de ataques llamado "Nukes". También puedes ver el documento sobre Tácticas de Guerra en el IRC.

Otras Redes de IRC

Regional and Local IRC Networks

En castellano:

En Inglés:

Seguridad
Al margen de los comentarios sobre nukes, existen varias implicaciones de seguridad que hay que tener en cuenta:

Software

STATS de los servidores IRC
Los servidores de IRC disponen de una serie de comandos que proporcionan gran cantidad de información sobre su configuración, historia y estado actual. ¡Descúbrelos! :-).

Undernet
La red IRC-HISPANO y ESNET están basadas en el código Undernet.

Varios



Python Zope ©1997-2013 jcea@jcea.es

Más información sobre los OpenBadges

Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS