Exploring the roots and future of Internet Relay Chat

Configurar InspIRCd desde cero

La primera vez que instale InspIRCd fue en 2008, para reemplazar un UnrealIRCd que se habia vuelto inmanejable. Tenia demasiados modulos activos, la configuracion era un archivo de 2.000 lineas donde nadie sabia que hacia cada bloque, y cada actualizacion rompia algo. InspIRCd prometia modularidad. Cumplio.

Por que InspIRCd

InspIRCd es diferente de UnrealIRCd en un aspecto fundamental: casi todo es un modulo. En UnrealIRCd, las funcionalidades estan compiladas en el binario y se activan o desactivan en la configuracion. En InspIRCd, cada funcionalidad — incluyendo cosas tan basicas como los modos de canal — es un modulo que se carga o no se carga. Si no necesitas soporte para SSL, no cargas el modulo SSL. Si no quieres cloaking, no cargas el modulo cloaking. El binario base es minimo.

Esto tiene ventajas reales. El servidor usa menos memoria porque solo carga lo que necesita. La superficie de ataque es menor. Y si un modulo tiene un bug, puedes descargarlo en caliente sin reiniciar el servidor. En un IRCd con miles de usuarios conectados, poder arreglar un problema sin desconectar a nadie es valioso.

La desventaja es que la curva de aprendizaje es mas pronunciada. En UnrealIRCd, instalas y tienes todo funcionando. En InspIRCd, tienes que entender que modulos necesitas y configurar cada uno. Para alguien que monta su primer servidor IRC, puede ser frustrante. Para alguien que sabe lo que quiere, es exactamente lo correcto.

Instalacion en Debian

# Dependencias:
sudo apt install build-essential pkg-config libssl-dev \
  libgnutls28-dev libpcre2-dev cmake git

# Crear usuario:
sudo useradd -m -s /bin/bash ircd
sudo su - ircd

# Clonar y compilar InspIRCd 4:
git clone https://github.com/inspircd/inspircd.git
cd inspircd
git checkout insp4  # Branch estable de v4

# Configurar con cmake:
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/home/ircd/inspircd-install
make -j$(nproc)
make install

InspIRCd 4 usa cmake en vez del sistema de configuracion propio de versiones anteriores. Es mas estandar y menos sorprendente. Si vienes de InspIRCd 3, vas a notar diferencias en la estructura de directorios.

Consejo: Antes de compilar, revisa los extras disponibles con ./modulemanager list (v3) o en la documentacion de v4. Algunos modulos utiles como m_ldap o m_mysql requieren librerias adicionales que debes instalar antes de compilar.

Configuracion basica

La configuracion de InspIRCd usa XML. Si, XML. En 2025. Lo se. Pero una vez que te acostumbras, la estructura es clara: cada funcionalidad tiene su propio tag.

<!-- inspircd.conf -->

<!-- Identidad del servidor -->
<server
  name="irc.tudominio.com"
  description="Mi servidor IRC"
  id="01A"
  network="MiRed">

<!-- Admin info -->
<admin
  name="Tu Nombre"
  nick="tunick"
  email="admin@tudominio.com">

<!-- Bind: donde escucha -->
<bind address="" port="6667" type="clients">
<bind address="" port="6697" type="clients" ssl="gnutls">

<!-- Clase de conexion -->
<connect
  name="main"
  allow="*"
  maxchans="20"
  timeout="60"
  pingfreq="120"
  hardsendq="1M"
  softsendq="8192"
  recvq="8192"
  threshold="10"
  commandrate="1000"
  localmax="3"
  globalmax="3">

<!-- Archivos auxiliares -->
<files motd="conf/motd.txt" rules="conf/rules.txt">

Cada tag corresponde a una funcionalidad. No hay bloques genericos como en UnrealIRCd — cada modulo define sus propios tags de configuracion. Esto significa que cuando cargas un modulo, tienes que anadir su configuracion especifica al archivo. La documentacion de cada modulo lista exactamente que tags espera.

El sistema de modulos

Los modulos se cargan con el tag <module>:

<!-- Modulos esenciales -->
<module name="ssl_gnutls">  <!-- TLS via GnuTLS -->
<module name="cap">          <!-- IRCv3 CAP negotiation -->
<module name="sasl">         <!-- SASL authentication -->
<module name="cloaking">     <!-- Host cloaking -->
<module name="conn_waitpong"> <!-- Anti-bot: PING on connect -->
<module name="chanprotect">  <!-- Channel founder mode -->
<module name="services">     <!-- Services integration -->
<module name="spanningtree"> <!-- Server linking -->

<!-- Modulos de moderacion -->
<module name="banredirect">  <!-- Redirect banned users -->
<module name="muteban">      <!-- Mute instead of ban -->
<module name="antibear">     <!-- Anti-proxy -->
<module name="dnsbl">        <!-- DNS blacklists -->

<!-- Modulos IRCv3 -->
<module name="ircv3">        <!-- server-time, message-ids -->
<module name="ircv3_batch">  <!-- Batch messaging -->
<module name="ircv3_echomessage"> <!-- Echo messages back -->

La belleza del sistema es que puedes cargar y descargar modulos en caliente:

/LOADMODULE m_cloaking
/UNLOADMODULE m_dnsbl
/RELOADMODULE m_sasl

Si un modulo tiene un bug y causa problemas, lo descargas sin tocar el resto del servidor. Los usuarios ni se enteran. Prueba a hacer eso con UnrealIRCd.

TLS y SASL

InspIRCd soporta dos backends TLS: GnuTLS y OpenSSL. Ambos funcionan bien. GnuTLS es el default y lo que recomiendo salvo que tengas una razon especifica para usar OpenSSL.

<!-- Configuracion GnuTLS -->
<gnutls
  certfile="conf/cert.pem"
  keyfile="conf/key.pem"
  dhfile="conf/dhparams.pem"
  priority="SECURE256:-VERS-ALL:+VERS-TLS1.2:+VERS-TLS1.3">

<!-- Generar dhparams: -->
<!-- certtool --generate-dh-params --outfile conf/dhparams.pem -->

<!-- SASL: requiere Anope o Atheme -->
<sasl target="services.tudominio.com">

SASL permite a los usuarios autenticarse con NickServ durante la conexion, antes de que su nick aparezca en ningun canal. Es el metodo preferido en redes modernas y casi obligatorio si quieres que tu red sea tomada en serio.

Configurar operadores

<!-- Tipo de operador -->
<type
  name="NetAdmin"
  classes="ServerLink OperChat BanControl HostCloak"
  host="netadmin.tudominio.com"
  vhost="netadmin.tudominio.com">

<!-- Cuenta de operador -->
<oper
  name="tunick"
  type="NetAdmin"
  password="hash-de-tu-password"
  hash="hmac-sha256"
  host="*@tu.ip.aqui *@tu.vhost.aqui"
  fingerprint="sha256-fingerprint-de-tu-certificado-tls">

La autenticacion por fingerprint TLS es lo mas seguro. Generas un certificado cliente, lo cargas en tu cliente IRC, y el fingerprint sirve como segundo factor. Si alguien descubre tu contrasena de oper, aun necesita tu certificado privado para autenticarse.

Atencion: El bloque host en la definicion de oper es una mascara de IP. Si lo dejas como *@*, cualquiera que conozca la contrasena puede hacer /oper desde cualquier IP. Siempre restringe a tu IP o rango conocido.

Linking de servidores

Si necesitas mas de un servidor, InspIRCd usa el modulo spanningtree para linking. La configuracion es un tag <link> en cada servidor que describe al otro:

<!-- En servidor A (hub) -->
<link
  name="leaf.tudominio.com"
  ipaddr="ip.del.leaf"
  port="7000"
  allowmask="ip.del.leaf"
  sendpass="password-compartido"
  recvpass="password-compartido"
  ssl="gnutls">

<autoconnect period="60" server="leaf.tudominio.com">

<!-- En servidor B (leaf) -->
<link
  name="hub.tudominio.com"
  ipaddr="ip.del.hub"
  port="7000"
  allowmask="ip.del.hub"
  sendpass="password-compartido"
  recvpass="password-compartido"
  ssl="gnutls">

<autoconnect period="60" server="hub.tudominio.com">

Usa siempre TLS para los links entre servidores. La comunicacion server-to-server incluye contrasenas de usuarios, mensajes privados, y comandos de oper. Sin cifrado, cualquiera en la ruta puede interceptar todo.

El modelo de topologia es spanning tree, como en todos los IRCds estandar. Un servidor hub se conecta a varios leafs. Los leafs no se conectan directamente entre si. Si el hub cae, la red se fragmenta. Para alta disponibilidad, necesitas multiples hubs con una topologia pensada para tolerar la caida de cualquier nodo individual.

Preguntas frecuentes

InspIRCd o UnrealIRCd?

Si quieres todo funcionando rapido con configuracion minima, UnrealIRCd. Si quieres control granular sobre cada funcionalidad y no te importa invertir mas tiempo en configuracion, InspIRCd. Para redes pequenas, ambos funcionan. Para redes grandes, depende de tus necesidades especificas.

Puedo migrar de UnrealIRCd a InspIRCd?

Si, pero no es trivial. Los formatos de configuracion son completamente diferentes. Los modos de canal tienen nombres distintos. Si usas Anope, la migracion de servicios es mas facil porque Anope soporta ambos IRCds. Planifica la migracion en un entorno de test antes de hacerla en produccion.

InspIRCd soporta IRCv3?

Si, ampliamente. Los modulos ircv3, ircv3_batch, ircv3_echomessage, cap, y sasl implementan las extensiones mas importantes. InspIRCd es uno de los IRCds con mejor soporte de IRCv3 actualmente.

Cuanta memoria usa InspIRCd?

Con una configuracion minima (pocos modulos), InspIRCd usa 10-20 MB de RAM. Con todos los modulos cargados y 1.000 usuarios, entre 50-100 MB. Es muy eficiente en memoria gracias a su arquitectura modular — solo carga lo que necesita.