Mi experiencia creando un servidor IRC con InspIRCd y Docker

Estos días de vacaciones he estado trasteando con varias cosas, ya sabéis que me gusta saber cómo funcionan las cosas, y una de ellas ha sido el mundo de los chats IRC. Sé que para el gran público están en desuso, pero que queréis que os diga, para mi tienen bastante magia. De hecho, a mi compañera de vida la conocí en un chat IRC.

La cuestión, que he estado mirando como crear uno y ver como funciona. Mi idea era utilizar un producto que cumpliese con tres requisitos: el primero que funcionase en un contenedor con Docker, el segundo que utilizase GNU/Linux o similar y el tercero que fuese software libre. Finalmente he encontrado a InspIRCd, que cumple con todos los requisitos.

Como suele ser habitual he utilizado un VPS en mi proveedor de confianza Clouding.io. Empresa que siempre utilizo para mis proyectos y que ofrecen un excelente servicio. El sistema operativo donde tengo el entorno de Docker es un Ubuntu 22.04

Logo oficial de InspIRCd

Puesta en marcha de InspIRCd

Antes de nada explicar que InspIRCd es un servidor modular de IRC, esto est, Internet Relay Chat, escrito en C++ para sistemas GNU/Linux, BSD, Windows y macOS

Según comentan en sus web «Fue creado desde cero para ser estable, moderno y liviano. Proporciona una cantidad ajustable de funciones mediante el uso de un sistema de módulos avanzado pero bien documentado. Al mantener la funcionalidad principal al mínimo, esperamos aumentar la estabilidad, la seguridad y la velocidad de InspIRCd y, al mismo tiempo, hacerlo adaptable a las necesidades de muchos usuarios diferentes.«

Su puesta en marcha es bastante fácil en su uso básico, pero yo lo he querido dar una vuelta, ya que me interesaba, por lo menos, no utilizar contraseñas en texto plano para el usuario operador y dejar un fichero de docker-compose con cara y ojos.

De hecho, podéis ver el resultado en el repositorio para la ocasión creado en mi Github, así me ahorro copiar el código aquí y podéis ir viendo las modificaciones. Lo que he hecho es utilizar dos ficheros, el propio fichero YAML para el docker-compose y otro oculto, llamado .env donde están almacenadas las variables de entorno.

Cosas importantes para tener en cuenta

Primero de todo debemos tener abiertos en nuestro servidor los respectivos puertos que utiliza la herramienta, los podéis consultar en la página web del proyecto en Github, que he dejado justo al principio de la entrada.

Otra cosa que me ha dado mucha guerra es generar una contraseña entendible para InspIRCd que no esté en texto plano, sobre todo para el usuario operador. En las instrucciones indican que podemos generar un código de autentificación con hash, utilizando hmac-sha256, aunque se pueden utilizar otros como md5 o sha256

Para ello recomiendan utilizar mkpasswd que, en un principio, al no “entender” correctamente las instrucciones, pensaba que se refería a la herramienta de línea de comandos, llamada con el mismo nombre. Horas más tarde, entendí que se refería a un comando del propio IRC para generar dicho código. La cuestión es que utilizando Weechat, un cliente IRC para línea de comandos, este comando no existía. Finalmente lo pude generar utilizando el cliente de IRC de interfaz gráfica HexChat.

Generamos el código con mkpasswd desde HexChat

Al añadir el código al docker-compose, me generaba un error al intentar levantarlo. Esto era debido a que el código utilizaba algún símbolo “$” y esto no le gustaba. Por lo que, para solventarlo, tuve que añadir contiguo a cada símbolo otro “$”, quedando “$$” Eso sí, esto solo es necesario cuando la variable de entorno se encuentra en el fichero principal, si utilizamos un fichero aparte para las variables de entorno, esto no es necesario

Una vez hecho todo esto y levantado el contenedor, ya podía acceder al IRC utilizando mi cliente favorito:

Utilizando el cliente Weechat

Mi idea es seguir jugando, el siguiente paso sería asegurarlo mediante certificado TLS, pero poco a poco y buena letra. Nos vamos leyendo.