Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

🛰️ IRC Stack

Tout ce qu'il faut pour tenir un réseau IRC grand public : le serveur, les passerelles web, les robots de sécurité — et les pièces de musée.

Treize projets libres, écrits entre 2002 et 2026 pour des réseaux IRC francophones réels. Chacun dans son dépôt, tous rassemblés ici.

Projets Python Go Java Tcl UnrealIRCd


📖 Ce dépôt

Ce dépôt ne contient aucun code : c'est la porte d'entrée vers les projets IRC publiés sous le compte replicatorbe.

Ils ne viennent pas d'un laboratoire. Ils ont tourné sur Espace-IRC puis Baboon.fr, des tchats francophones ouverts aux visiteurs anonymes — le contexte le plus exigeant qui soit pour un réseau IRC : pas d'inscription, donc des bots, des VPN, des multi-comptes et des contenus à filtrer, en continu. Baboon.fr a fermé en 2026 ; plutôt que de laisser le code disparaître avec le réseau, il est publié, nettoyé de ce qui était propre au site.

Le fil conducteur est une idée simple : décider avant l'entrée plutôt que sanctionner après, et pour cela ne jamais perdre l'IP réelle de l'utilisateur — du navigateur jusqu'au serveur, en passant par le BNC.


🧭 Vue d'ensemble

Projet Rôle Techno État
IRCbook Robot branché comme serveur lié : filtre les connexions avant le premier salon Java 8 · MySQL 🔵
sentinel-irc Journalise chaque connexion, corrèle les empreintes, synchronise les G-Lines Python 3.8+ · MySQL 🟢
GlineBotApp Repère les bannis qui reviennent par BNC et re-gline Python 🟢
alphaBaboon Modère un salon généraliste et redirige plutôt que de sanctionner Python 🟢
soju-webirc-forward Fork de BNC qui transmet la vraie IP de chaque utilisateur Go 🔵
kiwiirc-plugins-baboon-legacy ~30 plugins KiwiIRC : amis, modération, visio, mobile JavaScript · Vue 🔵
cgiirc-smug Passerelle web IRC en CGI Perl, conteneurisée Docker · Perl
docker-unrealircd-nossl Le serveur IRC lui-même, compilé en conteneur Docker · C
docker-denora Statistiques du réseau, en pseudo-serveur, vers MySQL Docker · C · SQL
docker-eggdrop Eggdrop 1.6 compilé depuis les sources Docker
EggdropTCL Le pack Tcl de modération de salon des robots du réseau Tcl
IRCFlashClient Client IRC en Flash, avec webcams, de l'époque des tchats ActionScript 3
docker-flashpolicyd Le serveur de politique qui autorisait ce client à ouvrir sa socket Docker · Ruby

🟢 réutilisable tel quel sur un réseau UnrealIRCd · 🔵 publié comme référence, à adapter · ⚪ archive historique, ne se reconstruit plus sans effort


🧩 Comment ça s'emboîte

                             le visiteur
                                  │
          ┌───────────────────────┼───────────────────────┐
          │                       │                       │
     KiwiIRC                  CGI:IRC              client Flash
  + ~30 plugins             cgiirc-smug           IRCFlashClient
          │                       │                       │
          │                       │              flashpolicyd :843
          └───────────────────────┼───────────────────────┘
                                  │
                         WEBIRC : l'IP réelle
                         ne doit jamais se perdre
                                  │
                        ┌─────────┴─────────┐
       soju BNC ────────┤    UnrealIRCd     ├──────── Eggdrop
  (webirc-forward)      └─────────┬─────────┘      + scripts Tcl
                                  │
      ┌──────────────┬────────────┼────────────┬──────────────┐
      │              │            │            │              │
   IRCbook       GlineBot     Sentinel    alphaBaboon      Denora
 (serveur lié)  (anti-BNC)   (journal +   (modération     (statistiques)
      │              │        G-lines)     de salon)          │
      └──────────────┴────────────┴───────────────────────────┘
                                  │
                                MySQL

🔒 Sécurité et modération

Le cœur du sujet. Quatre robots qui répondent à quatre questions différentes : qui entre ?, qui revient malgré un ban ?, qui était là hier ?, que se dit-il dans le salon ?

IRCbook — décider avant l'entrée

Un robot branché comme serveur IRC, qui filtre avant l'entrée.

La plupart des robots se connectent comme un utilisateur : ils ne voient que les salons qu'ils rejoignent, arrivent après coup, et n'ont que les droits qu'on leur donne. IRCbook s'enregistre auprès de l'IRCd comme un serveur lié (PASS / PROTOCTL / SERVER / EAUTH). Il reçoit le flux serveur complet — chaque connexion avec son IP réelle, avant même le premier JOIN — et décide d'autoriser ou de gliner. Le dépôt se présente d'ailleurs comme une méthode, illustrée par une implémentation réelle : chaque principe renvoie à la ligne de code qui le met en œuvre.

  • Filtre par liste blanche d'IP (TKL + Z), alimentée par l'application web à l'ouverture du tchat
  • Liste blanche des FAI résidentiels francophones (Orange, Free, SFR, Bouygues, Proximus, Videotron…) résolue par reverse DNS, pour amortir les faux positifs
  • Détection VPN/proxy via IPHub, appelée seulement sur les cas douteux restants
  • Modération des messages privés par lots, via une API de modération en ligne, sans conservation du contenu
  • Corrélation d'identifiants d'installation et d'appareil pour repérer les multi-comptes
  • Interrupteurs à chaud depuis le salon opérateurs (.toggle, .status)

Détail qui compte : l'empreinte du client (navigateur, OS, type d'appareil, connexion, langue) est encodée sur six caractères dans l'ident, puis décodée à la connexion — pas de canal de communication séparé avec le site web. Et les modes de panne sont assumés et documentés : le filtre MySQL échoue en mode fermé (base injoignable = personne n'entre), les contrôles web échouent en mode ouvert.

Java 8 · Ant · MySQL · MIT — code de 2008 conservé dans le style de son époque. 📦 IRCBook

sentinel-irc — la mémoire du réseau

Surveille les connexions, corrèle les empreintes, synchronise les G-Lines.

Sentinel écoute le salon où l'application publie les métadonnées de chaque connexion, et les stocke intégralement en MySQL : IP publique, hostname, identifiant matériel, identifiant unique, modèle, version, noyau, ville, pseudo. C'est l'outil d'investigation du réseau — retrouver toutes les connexions d'un pseudo, d'une IP ou d'une machine — doublé d'un automate de bannissement.

  • Bans automatiques sur clones (même IP) et flood (connexions par minute), seuils configurables
  • Critères de bannissement gérés en base : motifs regex d'IP et de hostname, identifiants matériels, villes
  • Copie à jour des G-Lines du serveur, rafraîchie par /stats g dans un thread dédié
  • Administration entièrement en message privé : !searchip, !searchhardware, !userinfo, !stats
  • Journalisation triple : fichier, stdout et table SQL
  • Déploiement documenté par unité systemd

Python 3.8+ · MySQL · MIT 📦 sentinel-irc

GlineBotApp — le ban qui tient

Repère les bannis qui reviennent par BNC et re-gline.

Bannir une IP ne suffit pas : l'utilisateur revient derrière un BNC, son IP apparente change, et le ban ne mord plus. GlineBot compare les connexions annoncées — avec leur IP réelle — à la liste des G-Lines actives, sur trois axes : IP, hostname et pseudonyme. Quand un banni réapparaît, il repose une G-Line.

  • Synchronisation périodique des G-Lines, masques /24, /16 et jokers compris
  • !glinereal <pseudo> : double G-Line, l'une sur le pseudo, l'autre sur l'IP réelle retrouvée dans l'historique
  • Historique de connexions en mémoire, avec rotation automatique
  • Garde-fous anti-emballement : vérification que la cible est bien bannie, cooldowns de re-ban, timeout de vérification
  • Suivi en direct des notices GLINE added / removed / expired et des tkl.TKL_ADD / TKL_DEL

Python · UnrealIRCd · MIT — aucune base de données, tout l'état vit en mémoire et se reconstruit depuis le serveur au démarrage. 📦 GlineBotApp

alphaBaboon — rediriger plutôt que punir

Déplace poliment les conversations adultes vers le bon salon.

Sur un tchat généraliste, la conversation dérive. Plutôt que de sanctionner sèchement, alphaBaboon déplace l'utilisateur vers le salon adapté — SAPART puis SAJOIN — avec un message d'explication et un accueil qui varie selon l'heure. L'analyse est en cascade, pour ne pas payer un appel réseau à chaque phrase : liste blanche d'habitués, cache des messages déjà vus, détection rapide par mots-clés optimisée pour le français, et seulement ensuite une API de modération en ligne pour le contexte.

  • Score de sensibilité configurable (0 à 10) et cache à durée de vie
  • Filtres déterministes complémentaires : mots interdits avec exceptions, pseudonymes, numéros de téléphone (formats français et internationaux)
  • Une vingtaine de commandes op/halfop : !status, !fa, !whitelist, !phonestats, !hostinfo, !health
  • Healthcheck périodique de la connexion IRC et du service d'analyse
  • État persistant (compteurs, sanctions) avec sauvegarde automatique, fichier de secours et restauration au démarrage
  • Analyse d'euphémismes, suivi comportemental, détection d'escalade et de motifs répétitifs

Détail qui compte : un module résout le véritable host des utilisateurs, pour que les bans portent sur la bonne cible et pas sur un masque.

Python 3.8+ · privilèges IRCop requis · MIT 📦 alphaBaboon


🔌 Accès et passerelles

Comment on entre sur le réseau — et comment l'IP réelle survit au voyage.

soju-webirc-forward — le BNC qui ne masque pas

Un bouncer IRC qui transmet la vraie IP de chaque utilisateur.

Par défaut, un BNC se connecte au serveur avec sa propre IP : tous les utilisateurs bouncés apparaissent derrière la même adresse, et la modération par IP s'effondre. Ce fork de soju transmet l'IP réelle du client au serveur amont via WEBIRC — K-line, G-line, anti-flood et géolocalisation redeviennent possibles par utilisateur. Toutes les additions sont optionnelles : sans directive spécifique, le binaire se comporte comme un soju standard.

  • upstream-webirc-password : transmission WEBIRC de l'IP réelle
  • no-log-channels : motifs de canaux exclus du stockage des messages
  • default-network : réseau créé d'office pour tout nouvel utilisateur
  • Bot de contrôle IRC optionnel : OPER, commandes d'administration, événements BNC
  • Passerelle HTTP sojuctl (POST /execute, jeton porteur) pour outiller l'administration depuis l'extérieur
  • Docker et Docker Compose fournis

Détail qui compte : quand aucun client n'est connecté, le fork retombe sur la dernière IP connue, puis sur une IP déterministe du range privé, stable par couple (utilisateur, réseau) — les reconnexions sans client ne cassent pas le suivi. Format de configuration, schéma de base et protocole restent ceux de soju : les clients et les configurations existantes fonctionnent sans retouche.

Go 1.19+ · AGPL-3.0 — fork d'archive, figé sur soju de mars 2024. 📦 soju-webirc-forward

kiwiirc-plugins-baboon-legacy — le tchat web, côté navigateur

Une trentaine de plugins KiwiIRC issus d'un chat francophone fermé.

Tout ce qui transformait un client KiwiIRC nu en site de tchat : liste d'amis, modération au clic droit, visioconférence, confort mobile. Le code a été nettoyé avant publication — domaines et points d'accès codés en dur remplacés par des réglages, branding et logique métier propres au site retirés, journalisation de débogage supprimée.

  • Liste d'amis avec présence en ligne (WATCH/WHOIS), notes et widget flottant
  • Modération par menu contextuel (clic droit / appui long) et panneau complet de gestion de salon : modes, historique de topic, liste de bans
  • Visio Jitsi : appels privés 1:1, et mode « radio » où le mode de canal +T bascule les utilisateurs dans un salon audio partagé
  • Partage de médias : glisser-déposer, enregistrement webcam dans le navigateur
  • Sons d'interface générés par synthèse (Web Audio API) — aucun fichier audio embarqué
  • Reconnexion robuste : détection de la veille mobile, des changements de réseau et des WebSockets zombies, repli exponentiel

Les 29 plugins autonomes s'installent en déposant un .js dans static/plugins/ — aucune étape de build. Seul le sous-projet de conférence se construit à part.

JavaScript · Vue 2 · MIT (Apache-2.0 pour le sous-projet visio) 📦 kiwiirc-plugins-baboon-legacy

cgiirc-smug — IRC dans le navigateur, version 2015

Un client IRC dans le navigateur, servi en CGI Perl.

Une image Docker minimale : CGI:IRC 0.5.11 derrière Apache, pour offrir une passerelle web vers IRC sans rien installer côté visiteur. Tout le dépôt tient dans un Dockerfile — installation, VirtualHost, et ajustement de la configuration au sed.

  • Serveur et salon par défaut préconfigurés, limite de 40 utilisateurs simultanés
  • webirc_password et realhost_as_password activés : même logique WEBIRC que le BNC, mais côté passerelle web

⚠️ L'image est livrée avec le mot de passe WEBIRC littéral password, et access_server = .* en fait un relais ouvert vers n'importe quel serveur IRC : à restreindre impérativement avant toute exposition.

Docker · Debian Jessie · Perl — dernier commit 2015. 📦 cgiirc-smug


🐳 Serveur et services

Les briques d'infrastructure, conteneurisées à l'époque des --link Docker.

docker-unrealircd-nossl — le serveur

UnrealIRCd 3.2.10.4 compilé depuis les sources, avec ses paramètres de capacité réglés au build (historique des pseudos, sendq, bufferpool, descripteurs). Sans SSL, volontairement : le chiffrement est censé être terminé en amont. Ports 6667 et 7777, lancement en avant-plan (unrealircd -F) pour la supervision Docker. Il faut fournir son propre unrealircd.conf. 📦 docker-unrealircd-nossl

docker-denora — les statistiques

Denora 1.5.0 en conteneur : un service qui se relie au serveur comme un pseudo-serveur et enregistre l'activité (serveurs, salons, utilisateurs) en MySQL, pour alimenter des pages de statistiques. Le dépôt embarque le schéma générique plus un fichier SQL par IRCd (Unreal 3.2, InspIRCd, Bahamut, Charybdis, Hybrid, Ratbox, ircu, Nefarious…). C'est le dépôt qui relie explicitement l'infrastructure au réseau : sa configuration nomme Denora.baboon.fr et le réseau « Espace-IRC ». 📦 docker-denora

docker-eggdrop — le robot de salon

Eggdrop 1.6.21 compilé depuis le FTP officiel, sous un utilisateur non privilégié. L'image produit le binaire ; le eggdrop.conf et la commande de lancement restent à fournir. C'est le support d'exécution des scripts Tcl ci-dessous. 📦 docker-eggdrop

EggdropTCL — vingt ans de modération de salon

Le pack Tcl qui armait les robots du réseau Espace-IRC.

Les scripts de deux Eggdrop : BotAtoMic, modérateur de salons, et Unknown, robot d'aide. Datés de 2002-2004, archivés tels quels en 2024 — accents abîmés en ISO-8859-1 compris. C'est un témoignage d'usage réel, pas un produit distribuable : listes de mots et noms de salons sont codés en dur.

  • badwords.tcl : mots interdits par salon, avertissement puis kick et ban, avec alerte au staff
  • badnick.tcl : sanction à l'arrivée ou au changement de pseudo, avec notice expliquant comment en changer
  • banflooders.tcl, norepeat.tcl, caps.tcl, noctcp.tcl : flood, répétitions, majuscules, CTCP publics
  • autolimit100.tcl : ajustement périodique du mode +l selon la fréquentation
  • tapavu.tcl : base « seen » en français (!seen <nick>) alimentée par join/part/quit/kick/nick/netsplit
  • Surveillance.tcl : utilisateurs marqués, avec alerte automatique aux opérateurs à leur arrivée

Piège documenté : les appels newchanban sont commentés au profit d'un MODE +b direct — le ban échappe donc à la gestion d'expiration d'Eggdrop, et le bantime configuré ne s'applique pas. 📦 EggdropTCL


🕰️ Pièces de musée

Deux dépôts qui ne tourneront plus, gardés pour ce qu'ils racontent.

IRCFlashClient — le tchat Flash, avec les webcams

Client IRC complet en ActionScript 3 / Flex, développé de 2008 à 2014 sous le nom ChatFlash et publié en 2024. Il parlait IRC directement depuis le navigateur via une flash.net.Socket brute — pas de passerelle — et ajoutait la vidéo par webcam en RTMFP. Multi-salons à onglets, smileys, couleurs mIRC, avatars, répondeur, cam invisible : tout l'écosystème des tchats francophones de l'époque.

Le code explique pourquoi Socket et non XMLSocket : le protocole IRC l'exige, XMLSocket attendant des messages terminés par un octet nul. Le tampon est recoupé sur \r\n à la main.

Flash Player a été retiré de tous les navigateurs fin 2020 : le projet ne peut plus tourner. CC BY-NC 4.0. 📦 IRCFlashClient

docker-flashpolicyd — la brique qui autorisait la socket

Le compagnon obligatoire du précédent. Avant d'ouvrir une socket vers un serveur tiers, le lecteur Flash interrogeait le port 843 de l'hôte cible, envoyait <policy-file-request/> et n'établissait la connexion que si la politique renvoyée l'autorisait — d'où un démon dédié plutôt qu'un simple fichier servi en HTTP. Ce conteneur ouvre les ports IRC 6667 et 7777 à tous les domaines.

Le README le dit lui-même : conservé à titre documentaire, à ne pas utiliser. 📦 docker-flashpolicyd


🔑 Ce que ces projets ont en commun

L'IP réelle, de bout en bout WEBIRC côté passerelle web, WEBIRC côté BNC, lien serveur pour le robot de filtrage : à aucun moment la véritable adresse de l'utilisateur ne doit se perdre. Sans elle, plus aucune modération par IP ne tient.
Décider avant, pas après Filtrer la connexion avant le premier salon coûte infiniment moins cher que de nettoyer derrière.
Échouer dans le bon sens Chaque contrôle a un mode de panne choisi et documenté : fermé quand un faux négatif est pire, ouvert quand un faux positif l'est.
Des garde-fous contre soi-même Cooldowns de re-ban, vérification avant action, détections qui alertent sans bannir : un automate qui s'emballe fait plus de dégâts qu'un abus.
Publier plutôt que perdre Les réseaux ferment. Le code est nettoyé de ce qui était propre au site, puis publié — y compris quand il est vieux, à condition de le dire.

🤝 Contribuer

Les remontées se font dans le dépôt du projet concerné, via ses Issues. Les projets marqués ⚪ sont des archives : ils sont conservés en l'état et ne reçoivent pas de correctifs.

Les licences varient d'un dépôt à l'autre (MIT, AGPL-3.0, CC BY-NC) — la licence qui s'applique est celle du dépôt du projet, pas celle de cet index.


sMug — Jérôme Fafchamps github.com/replicatorbe · fafchamps.be

Projets indépendants, sans lien avec les équipes d'UnrealIRCd, Eggdrop, soju, KiwiIRC, Denora ou CGI:IRC. Les marques citées appartiennent à leurs propriétaires.

About

Index des projets IRC de sMug : robots de sécurité et de modération (UnrealIRCd), BNC avec WEBIRC, passerelles web KiwiIRC/CGI:IRC, serveur et services en conteneur, scripts Eggdrop.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors