Exploring the roots and future of Internet Relay Chat

Anope: configurar NickServ, ChanServ y mas

La primera red IRC que administre no tenia servicios. Era 2001 y pense que no los necesitaba — eramos 50 usuarios y nos conociamos todos. Duro tres meses. Un netsplit de veinte minutos basto para que alguien registrara los nicks de medio staff y tomara el canal principal. Instale servicios esa misma noche. Desde entonces, la primera cosa que configuro despues del IRCd es Anope. Antes de abrir un solo puerto al publico.

Que son los servicios IRC

Los servicios IRC son un conjunto de pseudo-servidores que se conectan a tu red y proporcionan funcionalidades que el protocolo IRC por si solo no tiene. El protocolo original de 1988 no contemplaba cosas como registrar un nick, proteger un canal, o enviar mensajes offline. Era un protocolo de chat en tiempo real, punto. Todo lo demas fue anadido despues.

Los servicios mas comunes son:

  • NickServ: Registro y proteccion de nicks. Sin NickServ, cualquiera puede usar cualquier nick — el primero que llega se lo queda.
  • ChanServ: Registro y proteccion de canales. Gestiona listas de acceso, modos automaticos, y evita que los canales sean tomados durante netsplits.
  • MemoServ: Mensajes offline entre usuarios registrados. El equivalente IRC del correo electronico.
  • BotServ: Bots de canal gestionados centralmente. Proporcionan funcionalidades como fantasy commands (!kick, !ban) sin que cada canal necesite su propio bot.
  • HostServ: Asignacion de vhosts personalizados. Los usuarios pueden ocultar su IP detras de un host como usuario.tudominio.com.
  • OperServ: Herramientas de administracion para operadores de red. Kills, akills, jupe de servidores, gestion de sesiones.

Anope es el paquete de servicios mas usado en 2025. Soporta UnrealIRCd, InspIRCd, Charybdis, ngIRCd, y practicamente cualquier IRCd relevante. Es el sucesor espiritual de Epona, que a su vez descendia de DALnet Services. Si has configurado servicios antes con otro paquete, Anope te resultara familiar.

Instalacion de Anope

# Dependencias:
sudo apt install build-essential cmake libssl-dev

# Crear usuario (si no usas el mismo que el IRCd):
sudo useradd -m -s /bin/bash anope
sudo su - anope

# Descargar y compilar:
git clone https://github.com/anope/anope.git
cd anope
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/home/anope/services \
  -DINSTDIR=/home/anope/services
make -j$(nproc)
make install

# Copiar configuracion de ejemplo:
cd /home/anope/services/conf
cp example.conf services.conf
cp example/nickserv.example.conf nickserv.conf
cp example/chanserv.example.conf chanserv.conf
cp example/operserv.example.conf operserv.conf

La compilacion es rapida — mucho mas que un IRCd. Anope no necesita librerias especiales salvo OpenSSL para TLS. El binario resultante es pequeno y consume poca memoria.

Consejo: Si vas a usar base de datos SQL (MySQL/MariaDB) para almacenar los datos de servicios en vez de archivos planos, anade -DWANT_MYSQL=ON al cmake. Necesitaras libmysqlclient-dev instalado. Para la mayoria de redes pequenas y medianas, los archivos planos (flatfile) son suficientes y mas simples.

Enlazar Anope con el IRCd

Anope no se conecta como un cliente normal — se conecta como un servidor. Esto le da privilegios especiales: puede cambiar modos, matar usuarios, y enviar mensajes sin restricciones de flood. Para que esto funcione, tanto el IRCd como Anope necesitan estar configurados para aceptar la conexion del otro.

# --- En UnrealIRCd (unrealircd.conf): ---

link services.tudominio.com {
  incoming {
    mask 127.0.0.1;  /* IP de Anope */
  };
  password "password-compartido";
  class servers;
};

ulines {
  services.tudominio.com;
};

# --- En InspIRCd (inspircd.conf): ---







# --- En Anope (services.conf): ---

uplink {
  host = "127.0.0.1"
  port = 7000     /* O el puerto de link de tu IRCd */
  password = "password-compartido"
}

serverinfo {
  name = "services.tudominio.com"
  description = "IRC Services"
  id = "00A"     /* Unico en la red */
}

/* Protocolo segun tu IRCd: */
module { name = "unreal4" }   /* Para UnrealIRCd 5/6 */
/* module { name = "inspircd3" }  Para InspIRCd 3 */
/* module { name = "inspircd4" }  Para InspIRCd 4 */

La linea ulines (UnrealIRCd) o uline (InspIRCd) es critica. Marca al servidor de servicios como un servidor con privilegios especiales — un U-line. Sin esto, NickServ y ChanServ no podran forzar cambios de nick, aplicar bans, o gestionar modos correctamente.

Asegurate de que el password es el mismo en ambos lados. Parece obvio, pero es el error mas comun. El segundo error mas comun es el nombre del servidor: debe coincidir exactamente, incluyendo mayusculas si las hay.

NickServ: registro y proteccion de nicks

# En nickserv.conf — configuracion esencial:

module {
  name = "ns_register"
  registration = "email"   /* email, none, admin */
  /* Con "email": los usuarios reciben un codigo por email */
  /* Con "none": registro instantaneo sin verificacion */
}

module { name = "ns_identify" }
module { name = "ns_access" }
module { name = "ns_cert" }     /* Auth por certificado TLS */
module { name = "ns_set" }
module { name = "ns_sasl" }     /* SASL authentication */
module { name = "ns_suspend" }  /* Suspender cuentas */

/* Opciones globales de NickServ: */
nickserv {
  nick = "NickServ"
  defaults = "kill_quick ns_secure ns_private hide_email"
  /* kill_quick: cambia el nick del impostor rapido */
  /* ns_secure: requiere identify para usar el nick */
  expire = 90d              /* Nicks sin usar expiran en 90 dias */
  guestnickprefix = "Guest" /* Nicks para los no identificados */
}

Los comandos basicos que tus usuarios necesitan saber:

# Registrar un nick:
/msg NickServ REGISTER contrasena email@ejemplo.com

# Identificarse:
/msg NickServ IDENTIFY contrasena

# Agrupar un nick alternativo:
/nick MiNickAlt
/msg NickServ GROUP MiNickPrincipal contrasena

# Configurar proteccion:
/msg NickServ SET KILL QUICK
/msg NickServ SET SECURE ON

# Autenticacion por certificado TLS (mas seguro):
/msg NickServ CERT ADD
# Esto registra el fingerprint de tu certificado TLS de cliente

La autenticacion SASL es lo que permite a los usuarios identificarse durante la conexion, antes de que su nick sea visible en ningun canal. Sin SASL, hay una ventana entre la conexion y la identificacion donde el usuario aparece con un host real. Con SASL, la identificacion ocurre durante el handshake, el cloaking se aplica inmediatamente, y el usuario aparece en los canales ya identificado y protegido.

ChanServ: gestion de canales

# En chanserv.conf:

module { name = "cs_register" }
module { name = "cs_access" }    /* Sistema de acceso por niveles */
module { name = "cs_akick" }     /* Auto-kick list */
module { name = "cs_ban" }       /* Gestion de bans */
module { name = "cs_set" }       /* Configuracion de canal */
module { name = "cs_topic" }     /* Proteccion de topic */
module { name = "cs_mode" }      /* Modos automaticos */
module { name = "cs_flags" }     /* Sistema de flags (alternativa a access) */
module { name = "cs_entrymsg" }  /* Mensaje al entrar */

chanserv {
  nick = "ChanServ"
  defaults = "keeptopic peace cs_secure"
  expire = 180d   /* Canales sin actividad expiran en 6 meses */
  maxregistered = 10  /* Max canales por usuario */
}

Uso basico para los operadores de canal:

# Registrar un canal:
/msg ChanServ REGISTER #canal descripcion del canal

# Sistema de acceso (niveles numericos):
/msg ChanServ ACCESS #canal ADD usuario 10   /* Voice automatico */
/msg ChanServ ACCESS #canal ADD usuario 5    /* Auto-op */
/msg ChanServ ACCESS #canal ADD usuario 3    /* Founder-level */

# Sistema de flags (mas flexible):
/msg ChanServ FLAGS #canal usuario +votsriRA
# v=voice, o=op, t=topic, s=set, r=remove, i=invite, R=recover, A=access

# Protecciones:
/msg ChanServ SET #canal SECURE ON         /* Solo identificados pueden tener op */
/msg ChanServ SET #canal TOPICLOCK ON       /* Solo ops pueden cambiar topic */
/msg ChanServ SET #canal RESTRICTED ON      /* Solo usuarios en access list */

# Auto-kick:
/msg ChanServ AKICK #canal ADD *!*@host.abusivo razon del ban
/msg ChanServ AKICK #canal ADD nick razon del ban

El sistema de access por niveles es mas simple. El sistema de flags es mas granular. Elige uno y se consistente — mezclar ambos en el mismo canal genera confusion.

Atencion: Si usas RESTRICTED ON, nadie que no este en la lista de acceso puede entrar al canal. Esto incluye nuevos usuarios que quieras invitar. Asegurate de tener un proceso para anadir gente antes de activar esta opcion en canales publicos.

MemoServ, BotServ, HostServ

MemoServ permite enviar mensajes a usuarios desconectados. Cuando el destinatario se identifica, NickServ le avisa de que tiene memos pendientes. Es util pero poco usado — la mayoria de la gente usa otros medios para comunicacion asincrona. Lo cargo por completitud, no porque lo considere esencial.

# MemoServ:
/msg MemoServ SEND usuario Tu mensaje aqui
/msg MemoServ READ 1
/msg MemoServ LIST
/msg MemoServ DEL ALL

BotServ crea bots de canal gestionados centralmente. En vez de tener ChanServ presente en cada canal (que se ve feo), puedes asignar un bot con nombre personalizado que proporcione las mismas funciones mas extras como fantasy commands.

# BotServ (como oper de red):
/msg BotServ BOT ADD MiBot bot@tudominio.com :Bot del canal
/msg BotServ ASSIGN #canal MiBot

# Fantasy commands (los usuarios usan ! en el canal):
!kick usuario razon
!ban usuario
!topic nuevo topic del canal

HostServ gestiona vhosts — direcciones ficticias que ocultan la IP real del usuario. En vez de ver usuario@cable-123.isp.com, los demas ven usuario@vip.tudominio.com. Requiere que el IRCd soporte vhosts (UnrealIRCd e InspIRCd lo hacen nativamente).

# HostServ:
/msg HostServ REQUEST mi.vhost.personalizado
# El oper de red aprueba o rechaza:
/msg HostServ ACTIVATE usuario
# O asignar directamente (como oper):
/msg HostServ SETALL usuario su.nuevo.vhost

Seguridad y backups

Los datos de Anope son lo mas valioso de tu red IRC despues de la configuracion del IRCd. Contienen todos los nicks registrados, todos los canales, todas las listas de acceso, todos los akicks. Si pierdes esos datos, tu red empieza de cero.

  • Backups regulares: Anope guarda los datos en data/anope.db (flatfile) o en la base de datos SQL si la usas. Haz backup diario como minimo. Un cron con cp o rsync es suficiente para flatfile.
  • Password de servicios: El password del link entre Anope y el IRCd debe ser fuerte y unico. Si alguien lo obtiene, puede conectar un servicio falso a tu red.
  • OperServ access: Limita estrictamente quien puede usar OperServ. Un AKILL mal puesto puede bloquear a todo un ISP. Un JUPE puede desconectar un servidor entero.
  • Email de registro: Si requieres email para registrar nicks, asegurate de que el servidor SMTP funciona. Si el email de confirmacion no llega, los usuarios no pueden registrarse y abandonan tu red.
  • Expire timers: Configura los tiempos de expiracion con cabeza. Demasiado cortos y pierdes usuarios que se van de vacaciones. Demasiado largos y acumulas nicks y canales muertos.
# Backup diario de datos Anope (cron):
0 3 * * * cp /home/anope/services/data/anope.db \
  /home/anope/backups/anope.db.$(date +\%Y\%m\%d)

# Mantener solo 30 dias de backups:
find /home/anope/backups/ -name "anope.db.*" -mtime +30 -delete

# Systemd service para Anope:
# /etc/systemd/system/anope.service
[Unit]
Description=Anope IRC Services
After=network.target unrealircd.service

[Service]
Type=forking
User=anope
ExecStart=/home/anope/services/bin/services
Restart=on-failure

[Install]
WantedBy=multi-user.target

Preguntas frecuentes

Anope o Atheme?

Atheme fue la alternativa principal a Anope durante anos, pero su desarrollo se estanco. Anope esta activamente mantenido y tiene mejor documentacion. Para instalaciones nuevas en 2025, Anope es la eleccion obvia. Si ya tienes Atheme funcionando y no te da problemas, no hay urgencia en migrar.

Puedo usar Anope con Ergo?

Ergo (antes Oragono) tiene sus propios servicios integrados. No necesita Anope. Si quieres NickServ y ChanServ con Ergo, ya los tienes — vienen de serie. Anope es para IRCds que no incluyen servicios propios, como UnrealIRCd e InspIRCd.

Como migro de otro paquete de servicios a Anope?

Anope incluye herramientas de conversion para bases de datos de otros servicios (Atheme, Epona, etc.) en su directorio tools/. La migracion no es siempre limpia — algunos campos no tienen equivalente directo — pero para nicks y canales basicos funciona. Hazlo en un entorno de test primero.

Los servicios se caen si reinicio el IRCd?

Cuando el IRCd se reinicia, la conexion con Anope se corta. Anope detecta la desconexion e intenta reconectar automaticamente (configurable con la opcion reconnect). Los datos de servicios no se pierden — estan en la base de datos de Anope, no en el IRCd. Cuando reconecta, todo vuelve a la normalidad.