Un serveur IRC sans services, c'est un immeuble sans serrures. N'importe qui peut prendre n'importe quel nom, n'importe qui peut prendre le controle d'un canal apres un netsplit, et personne ne peut prouver son identite. Les services IRC resolvent ces problemes. Anope est le package de services le plus utilise — il fait tourner NickServ, ChanServ, et tout le reste sur des milliers de reseaux depuis 2003.
Le role des services IRC
Les services IRC sont un ensemble de pseudo-clients qui se connectent au serveur et offrent des fonctionnalites que le protocole IRC de base ne fournit pas :
- NickServ : Enregistrement et protection des pseudonymes. Un utilisateur s'identifie avec un mot de passe pour prouver qu'il est le proprietaire d'un nick.
- ChanServ : Enregistrement et gestion des canaux. Protection contre les takeovers, gestion des droits d'acces, configuration persistante.
- MemoServ : Messagerie hors-ligne. Envoyer un message a quelqu'un qui n'est pas connecte.
- BotServ : Bots de canal geres par les services. Fournit un bot qui entre dans le canal avec un nick personnalise et executes les fonctions de ChanServ.
- HostServ : Virtual hosts (vhosts). Masque l'hostname real de l'utilisateur avec un hostname personnalise.
- OperServ : Administration du reseau. G-lines, session limits, AKILL, et outils d'administration reserves aux operateurs IRC.
Anope et Atheme sont les deux packages de services dominants. Anope est plus populaire avec UnrealIRCd (ils partagent une partie de leur communaute). Atheme est le choix historique de Freenode/Libera.Chat. Les deux font le travail. Cet article se concentre sur Anope.
Installation d'Anope
# Dependances :
sudo apt install build-essential cmake libssl-dev
# En tant qu'utilisateur ircd :
git clone https://github.com/anope/anope.git
cd anope
# Activer les modules necessaires :
# Copier les extra modules voulus :
cp modules/extra/stats/m_chanstats.cpp modules/
cp modules/extra/m_ssl_openssl.cpp modules/
# (ou m_ssl_gnutls.cpp si vous preferez GnuTLS)
# Configurer et compiler :
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/home/ircd/anope-install \
-DINSTDIR=/home/ircd/anope-install
make -j$(nproc)
make install
# Structure de l'installation :
# /home/ircd/anope-install/
# bin/services <- Binaire principal
# conf/services.conf <- Configuration
# data/ <- Bases de donnees
# logs/ <- Logs
# lib/modules/ <- Modules charges
Compilez toujours depuis les sources. Les versions empaquetees par les distributions sont souvent obsoletes, et la compatibilite entre Anope et l'IRCd depend de versions precises.
Liaison avec l'IRCd
Anope se connecte a l'IRCd comme un serveur linked. La configuration doit etre faite des deux cotes :
# === Cote UnrealIRCd (unrealircd.conf) ===
# Link pour les services :
link services.votredomaine.com {
incoming {
mask 127.0.0.1;
};
password "mot-de-passe-partage";
class servers;
};
# Autoriser les services a utiliser les commandes speciales :
ulines {
services.votredomaine.com;
};
# === Cote Anope (services.conf) ===
define {
name = "services.host"
value = "services.votredomaine.com"
}
uplink {
host = "127.0.0.1"
port = 6900
password = "mot-de-passe-partage"
ipv6 = no
ssl = no # TLS sur localhost n'est pas necessaire
}
# Module de protocole (doit correspondre a votre IRCd) :
module {
name = "unreal4"
# Autres options : "inspircd3", "inspircd4",
# "hybrid", "ngircd", "ratbox"
}
serverinfo {
name = "services.votredomaine.com"
description = "Services IRC"
id = "00A" # SID unique, different du SID de l'IRCd
}
# === Cote InspIRCd (inspircd.conf) ===
Le uline est critique. Il indique a l'IRCd que les services ont le droit d'executer des commandes privilegiees (changer les nicks des utilisateurs, forcer des modes, etc.). Sans uline, les services se connectent mais ne peuvent rien faire d'utile.
NickServ
# Configuration NickServ dans services.conf :
module {
name = "nickserv"
client = "NickServ"
forceemail = yes # Email obligatoire a l'enregistrement
confirmemailchanges = yes
unregistered = 60 # Delai avant kick si nick non identifie
expire = 90d # Expiration des nicks non utilises
maxaliases = 5 # Nicks groupes maximum
passlen = 32 # Longueur max du mot de passe
}
# Commandes NickServ courantes :
/msg NickServ REGISTER motdepasse email@exemple.com
/msg NickServ IDENTIFY motdepasse
/msg NickServ GROUP # Lier un nick secondaire au compte
/msg NickServ SET KILL QUICK # Kick rapide si quelqu'un
# utilise votre nick
/msg NickServ SET HIDE EMAIL ON # Cacher l'email
/msg NickServ SET SECURE ON # Forcer l'identification
/msg NickServ CERT ADD # Ajouter un fingerprint TLS
/msg NickServ INFO pseudo # Voir les infos d'un nick
/msg NickServ GHOST pseudo motdepasse # Deconnecter
# une session fantome
Forcez toujours l'email a l'enregistrement (forceemail = yes). Sans ca, les comptes perdus sont irrecuperables et les abus sont plus difficiles a tracer.
ChanServ
# Configuration ChanServ dans services.conf :
module {
name = "chanserv"
client = "ChanServ"
expire = 120d # Expiration canaux inactifs
maxregistered = 10 # Canaux par utilisateur
inhabit = yes # ChanServ reste dans les canaux vides
opersonly = no # Tout le monde peut enregistrer
}
# Commandes ChanServ courantes :
/msg ChanServ REGISTER #canal motdepasse
/msg ChanServ SET #canal DESC Description du canal
/msg ChanServ SET #canal KEEPTOPIC ON # Topic persistant
/msg ChanServ SET #canal SECURE ON # Seuls les identifies
# recoivent les droits
# Gestion des acces :
/msg ChanServ ACCESS #canal ADD pseudo FOUNDER # Fondateur
/msg ChanServ ACCESS #canal ADD pseudo SOP # Super operateur
/msg ChanServ ACCESS #canal ADD pseudo AOP # Auto-operateur
/msg ChanServ ACCESS #canal ADD pseudo HOP # Half-operateur
/msg ChanServ ACCESS #canal ADD pseudo VOP # Voice
/msg ChanServ ACCESS #canal LIST # Voir la liste
/msg ChanServ ACCESS #canal DEL pseudo # Retirer
# Bans persistants :
/msg ChanServ AKICK #canal ADD *!*@host 7d Raison
/msg ChanServ AKICK #canal LIST
/msg ChanServ AKICK #canal DEL numero
La hierarchie de droits ChanServ (FOUNDER > SOP > AOP > HOP > VOP) est un systeme de permissions par niveaux. Chaque niveau a des privileges specifiques. Le FOUNDER a tous les droits, le VOP n'a que le voice. Utilisez ACCESS LIST regulierement pour verifier qui a quels droits — les canaux accumulent des comptes inactifs avec le temps.
Autres services
# MemoServ — messagerie hors-ligne :
/msg MemoServ SEND pseudo Votre message ici
/msg MemoServ LIST # Voir les memos recus
/msg MemoServ READ 1 # Lire le memo #1
/msg MemoServ DEL ALL # Supprimer tous les memos
# BotServ — bots de canal :
/msg BotServ BOT LIST # Voir les bots disponibles
/msg BotServ ASSIGN #canal BotNick # Assigner un bot
/msg BotServ SET #canal DONTKICKOPS ON # Ne pas kick les ops
/msg BotServ KICK #canal FLOOD ON 5:10 # Anti-flood:
# 5 msgs en 10 sec
# HostServ — virtual hosts :
/msg HostServ REQUEST monhost.personnalise
# L'admin doit approuver :
/msg HostServ ACTIVATE pseudo
# OperServ — administration (operateurs seulement) :
/msg OperServ AKILL ADD +7d *@ip.spam Spam
/msg OperServ SESSION LIST # Voir les sessions par IP
/msg OperServ STATS # Statistiques du reseau
Maintenance
- Sauvegardes : La base de donnees Anope (par defaut
data/anope.db) contient tous les enregistrements. Sauvegardez-la quotidiennement. Une corruption de cette base signifie la perte de tous les nicks et canaux enregistres. - Logs : Les logs des services enregistrent toutes les actions (enregistrements, identifications, changements de droits). Utiles pour debugger les problemes et tracer les abus.
- Expiration : Configurez des delais d'expiration raisonnables pour les nicks et canaux inactifs. 90 jours pour les nicks, 120 pour les canaux sont des valeurs courantes. Trop court et les utilisateurs occasionnels perdent leurs comptes. Trop long et la base de donnees gonfle.
- Mises a jour : Suivez les releases Anope pour les correctifs de securite. La mise a jour est generalement simple :
git pull && cmake .. && make && make install, puis redemarrage des services.
# Systemd service pour Anope :
# /etc/systemd/system/anope.service
[Unit]
Description=Anope IRC Services
After=network.target unrealircd.service
Requires=unrealircd.service
[Service]
Type=forking
User=ircd
ExecStart=/home/ircd/anope-install/bin/services
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
# Sauvegarde automatique (crontab de l'utilisateur ircd) :
0 4 * * * cp /home/ircd/anope-install/data/anope.db \
/home/ircd/backups/anope-$(date +\%Y\%m\%d).db
Questions frequentes
Anope ou Atheme ?
Anope est plus populaire avec UnrealIRCd, Atheme avec InspIRCd et les reseaux herites de Freenode (Libera.Chat utilise Atheme). Les deux sont fonctionnellement equivalents pour la plupart des usages. Si vous utilisez UnrealIRCd, Anope est le choix naturel — la communaute et la documentation sont plus alignees.
Combien de nicks un reseau de 1 000 utilisateurs genere-t-il ?
Un reseau avec 1 000 utilisateurs reguliers aura typiquement 3 000-5 000 nicks enregistres (comptes + aliases). La base de donnees Anope pour ce volume fait quelques Mo — negligeable. Les problemes de performance n'apparaissent qu'au-dessus de 100 000+ enregistrements.
Comment migrer d'Atheme vers Anope (ou inversement) ?
Des outils de conversion existent dans le repertoire data/ d'Anope. La migration n'est pas triviale car les schemas de base de donnees different. Exportez les donnees Atheme en format plat, convertissez, et importez dans Anope. Testez sur un environnement de staging avant de migrer en production.