diff --git a/BADWORDS_FILTERING.md b/BADWORDS_FILTERING.md new file mode 100644 index 0000000..50c1334 --- /dev/null +++ b/BADWORDS_FILTERING.md @@ -0,0 +1,374 @@ +# Ghid: Configurare Badwords / Word Filtering în UnderChat IRCd + +## 📋 IMPORTANT: UnderChat IRCd NU are badwords built-in! + +**UnderChat IRCd** (bazat pe Nefarious/ircu) **NU include** un sistem nativ de filtrare cuvinte (badwords). + +--- + +## ✅ SOLUȚII DISPONIBILE + +### **Opțiunea 1: Servicii IRC (RECOMANDAT) ⭐** + +Instalează servicii IRC precum **Anope** sau **Atheme** care au module dedicate de badwords. + +#### **A. Anope IRC Services** + +**Link:** https://www.anope.org/ + +**Caracteristici:** +- ✅ Modul `os_badwords` - Filtrare cuvinte globală +- ✅ Modul `cs_badwords` - Filtrare pe canal +- ✅ Suport regex și wildcard patterns +- ✅ Acțiuni: kick, ban, quiet +- ✅ Exceptii pentru operatori + +**Exemplu configurare:** + +```conf +# Încarcă modulul +module +{ + name = "os_badwords" +} + +# Configurare badwords +service +{ + nick = "OperServ" + user = "services" + host = "services.underchat.org" +} + +# Lista de badwords +badword +{ + word = "*www.*" + type = "start" # start, end, single + reason = "Spam link detected" +} + +badword +{ + word = "*http*" + type = "any" + reason = "URL not allowed" +} + +badword +{ + word = "badword123" + type = "single" + reason = "Offensive language" +} +``` + +**Comenzi IRC:** +```irc +/msg OperServ BADWORD ADD *www.* Spam links not allowed +/msg OperServ BADWORD ADD *http* URLs not allowed +/msg OperServ BADWORD DEL *www.* +/msg OperServ BADWORD LIST +``` + +--- + +#### **B. Atheme IRC Services** + +**Link:** https://atheme.github.io/ + +**Modul:** `operserv/akill` + custom filtering + +**Exemplu:** +```conf +loadmodule "modules/operserv/akill"; + +# Apoi folosești AKILL pentru pattern matching +``` + +--- + +### **Opțiunea 2: BotServ / Custom Bot** + +Creează un bot IRC (Python, Node.js) care monitorizează mesajele și kickează/banează utilizatorii care folosesc cuvinte interzise. + +#### **Exemplu Bot Python (irc library):** + +```python +#!/usr/bin/env python3 +import irc.bot +import re + +class BadwordBot(irc.bot.SingleServerIRCBot): + def __init__(self, channel, nickname, server, port=6667): + irc.bot.SingleServerIRCBot.__init__(self, [(server, port)], nickname, nickname) + self.channel = channel + + # Lista de badwords (regex patterns) + self.badwords = [ + r'www\.', # Blochează www. + r'http[s]?://', # Blochează link-uri + r'badword', # Cuvânt specific + ] + + def on_welcome(self, c, e): + c.join(self.channel) + c.privmsg("OperServ", "OPER botuser password") # Login ca oper + + def on_pubmsg(self, c, e): + message = e.arguments[0] + nick = e.source.nick + + # Verifică fiecare badword + for pattern in self.badwords: + if re.search(pattern, message, re.IGNORECASE): + c.kick(self.channel, nick, f"Badword detected: {pattern}") + c.mode(self.channel, f"+b *!*@{nick}") + return + +def main(): + server = "madrid.es.eu.underchat.org" + channel = "#underchat" + nickname = "BadwordBot" + + bot = BadwordBot(channel, nickname, server, 6667) + bot.start() + +if __name__ == "__main__": + main() +``` + +**Instalare:** +```bash +pip3 install irc +python3 badword_bot.py +``` + +--- + +### **Opțiunea 3: Modificare Cod Sursă IRCd (AVANSAT)** + +Poți modifica codul sursă al IRCd-ului pentru a adăuga filtrare de cuvinte. + +**Fișiere de modificat:** +- `ircd/m_privmsg.c` - Handler pentru PRIVMSG +- `ircd/m_notice.c` - Handler pentru NOTICE + +**Exemplu simplu (pseudo-cod):** + +```c +// În ircd/m_privmsg.c, funcția m_privmsg() + +// Adaugă înainte de trimiterea mesajului: +const char *badwords[] = {"www.", "http", "badword", NULL}; +const char *msg = parv[parc - 1]; + +for (int i = 0; badwords[i] != NULL; i++) { + if (strstr(msg, badwords[i]) != NULL) { + // Blochează mesajul + sendcmdto_one(&me, CMD_NOTICE, sptr, "%C :Message blocked: contains forbidden word '%s'", + sptr, badwords[i]); + return 0; // Nu trimite mesajul + } +} + +// ... cod existent pentru trimitere mesaj +``` + +**⚠️ ATENȚIE:** Necesită recompilare și poate introduce bug-uri! + +--- + +### **Opțiunea 4: Channel Modes (Limitat)** + +IRCd-ul suportă mode-uri de canal care pot limita cine poate vorbi: + +```irc +# Doar voice/halfop/op pot vorbi +/MODE #canal +m + +# Apoi dai voice doar utilizatorilor de încredere +/MODE #canal +v nickname + +# Blochează utilizatori non-autentificați +/MODE #canal +R +``` + +**Configurare în ircd.conf:** +```conf +features { + # Restricționează canalele + "CHMODE_r_NONICKCHANGE" = "TRUE"; + "CHMODE_m_NONICKCHANGE" = "TRUE"; +} +``` + +--- + +## 🎯 RECOMANDARE FINALĂ + +### **Pentru filtrare eficientă de "www." și alte pattern-uri:** + +**Instalează Anope IRC Services:** + +```bash +# 1. Descarcă Anope +cd /opt +wget https://github.com/anope/anope/releases/download/2.0.14/anope-2.0.14-source.tar.gz +tar xzf anope-2.0.14-source.tar.gz +cd anope-2.0.14-source + +# 2. Compilează +cd build +cmake -DCMAKE_INSTALL_PREFIX=/opt/anope .. +make +make install + +# 3. Configurează +cd /opt/anope/conf +cp example.conf services.conf +nano services.conf + +# Editează: +# - uplink { ... } - IP și port către IRCd +# - serverinfo { ... } - Nume services +# - Încarcă modulul os_badwords + +# 4. Pornește serviciile +cd /opt/anope/bin +./services + +# 5. Conectează-te la IRC și configurează +/msg OperServ IDENTIFY password +/msg OperServ BADWORD ADD *www.* Spam links blocked +/msg OperServ BADWORD ADD *http* URLs not allowed +``` + +--- + +## 📊 COMPARAȚIE SOLUȚII + +| Soluție | Dificultate | Eficiență | Mențineță | Recomandare | +|---------|------------|-----------|-----------|-------------| +| **Anope Services** | ⚡ Medie | ⭐⭐⭐⭐⭐ | ⚡⚡⚡ Bună | ✅ **RECOMANDAT** | +| **Custom Bot** | ⚡⚡ Medie-Ușoară | ⭐⭐⭐⭐ | ⚡⚡ Ok | ✅ OK pentru teste | +| **Modificare IRCd** | ⚡⚡⚡⚡ Dificilă | ⭐⭐⭐⭐⭐ | ⚡ Dificilă | ❌ Nu recomandat | +| **Channel Modes** | ⚡ Foarte ușoară | ⭐⭐ | ⚡⚡⚡ Bună | ✅ Limitat | + +--- + +## 🔧 CONFIGURARE RAPIDĂ ANOPE + +### **services.conf (simplificat):** + +```conf +############### +# UPLINK +############### +uplink +{ + host = "127.0.0.1" + port = 6667 + password = "link-password" # Trebuie să corespundă cu Connect {} din ircd.conf +} + +############### +# SERVER INFO +############### +serverinfo +{ + name = "services.underchat.org" + description = "UnderChat IRC Services" + pid = "data/services.pid" + motd = "conf/services.motd" +} + +############### +# MODULE - BADWORDS +############### +module +{ + name = "os_badwords" +} + +############### +# OPERSERV +############### +service +{ + nick = "OperServ" + user = "services" + host = "services.underchat.org" + gecos = "Operator Service" +} + +############### +# ADMIN +############### +oper +{ + name = "admin" + type = "Services Root" + password = "admin_password_aici" +} +``` + +### **ircd.conf - Adaugă blocul pentru Services:** + +```conf +# Conectare pentru Services +Connect { + name = "services.underchat.org"; + host = "127.0.0.1"; + password = "link-password"; # Aceeași cu cea din services.conf + port = 6667; + class = "Server"; + autoconnect = yes; +}; + +# UWorld pentru Services (permisiuni speciale) +UWorld { + name = "services.underchat.org"; +}; +``` + +--- + +## ✅ PAȘI FINALI + +1. ✅ **Instalează Anope Services** +2. ✅ **Configurează uplink în services.conf** +3. ✅ **Adaugă Connect {} pentru services în ircd.conf** +4. ✅ **Pornește services: `/opt/anope/bin/services`** +5. ✅ **Identifică-te ca admin: `/msg OperServ IDENTIFY password`** +6. ✅ **Adaugă badwords: `/msg OperServ BADWORD ADD *www.* Spam`** +7. ✅ **Testează: Scrie "www.test.com" în canal → Ar trebui să fie blocat** + +--- + +## 📚 RESURSE + +- **Anope Documentation:** https://wiki.anope.org/ +- **Anope Modules:** https://wiki.anope.org/index.php/2.0/Modules +- **P10 Protocol (pentru linking):** `doc/p10.txt` în repository + +--- + +## 🎉 REZULTAT FINAL + +După configurarea Anope cu modulul `os_badwords`: + +``` +[15:30] Check out www.spam-site.com +[15:30] * User was kicked by OperServ (Badword detected: *www.*) +[15:30] * OperServ sets mode: +b *!*@user.host +``` + +**Spam-ul cu "www." este BLOCAT automat!** ✅ + +--- + +**Autor:** UnderChat IRCd Team +**Data:** 14 Februarie 2026 +**Versiune:** 1.0 +