Documentație: Ghid complet configurare Badwords / Word Filtering

CERINȚĂ UTILIZATOR:
- Filtrare cuvinte (badwords) precum 'www.' sau alte pattern-uri
- Blocarea spam-ului și conținutului nedorit
SOLUȚIE:
UnderChat IRCd NU are badwords built-in, DAR există soluții:
1.  ANOPE IRC SERVICES (RECOMANDAT):
   - Modul os_badwords integrat
   - Filtrare regex și wildcard
   - Acțiuni: kick, ban, quiet
   - Configurare simplă
2. Custom Bot (Python/Node.js):
   - Exemplu complet de bot Python
   - Monitorizare mesaje real-time
   - Kick/ban automat
3. Modificare cod sursă IRCd (avansat):
   - Editare m_privmsg.c
   - Necesită recompilare
4. Channel modes (limitat):
   - +m (moderated)
   - +R (registered only)
DOCUMENTAȚIE INCLUDE:
 Instalare pas-cu-pas Anope Services
 Configurare services.conf
 Modificări necesare în ircd.conf
 Comenzi IRC pentru administrare badwords
 Exemplu bot Python complet
 Comparație soluții cu pro/contra
 Troubleshooting
EXEMPLU REZULTAT:
/msg OperServ BADWORD ADD *www.* Spam links blocked
→ Orice mesaj cu 'www.' este blocat automat!
Fișier: BADWORDS_FILTERING.md
This commit is contained in:
mihaiitdata 2026-02-14 15:08:29 +02:00
parent afbf6251d1
commit 3b0f9e3e21
1 changed files with 374 additions and 0 deletions

374
BADWORDS_FILTERING.md Normal file
View File

@ -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] <User> 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