FINAL PUSH v1.5.0 - PSEUDO + SPOOFHOST complete
This commit is contained in:
parent
535265ebbb
commit
4851d9c500
|
|
@ -0,0 +1,473 @@
|
|||
# CRULE - Connection Rules (Reguli de Conectare)
|
||||
|
||||
## 📋 CE ESTE CRULE?
|
||||
|
||||
**CRULE** (Connection Rule) este un **sistem de reguli inteligente** care controlează **CÂND și CUM** serverul tău IRC se poate conecta la alte servere din rețea.
|
||||
|
||||
Este parte a sistemului **SmartRoute** - un mecanism avansat de routing pentru rețele IRC mari.
|
||||
|
||||
---
|
||||
|
||||
## 🎯 SCOPUL PRINCIPAL
|
||||
|
||||
CRULE permite administratorilor să definească **condiții** sub care o conexiune server-to-server:
|
||||
- ✅ **Este permisă** (dacă regulile sunt îndeplinite)
|
||||
- ❌ **Este blocată** (dacă regulile nu sunt îndeplinite)
|
||||
|
||||
### **Exemplu simplu:**
|
||||
*"Nu te conecta la un server din Europa dacă există deja o conexiune către un alt server european"*
|
||||
|
||||
---
|
||||
|
||||
## 🔧 CÂND SE FOLOSEȘTE?
|
||||
|
||||
### **Scenarii comune:**
|
||||
|
||||
#### 1. **Previne Link-uri Redundante**
|
||||
```
|
||||
Problema: Ai 2 servere US și 2 servere EU
|
||||
Vrei: Doar 1 link US-EU, nu 4!
|
||||
|
||||
Soluție CRULE: "connected(*eu.*)"
|
||||
→ Dacă există deja un server EU conectat, nu mai face alte link-uri
|
||||
```
|
||||
|
||||
#### 2. **Preferă Anumite Route**
|
||||
```
|
||||
Problema: Vrei ca Manhattan să gestioneze link-urile către Europa, nu Boston
|
||||
Vrei: Boston să se conecteze doar dacă Manhattan nu e disponibil
|
||||
|
||||
Soluție CRULE: "!via(manhattan.*, *eu.*)"
|
||||
→ Blochează Boston dacă există deja link EU prin Manhattan
|
||||
```
|
||||
|
||||
#### 3. **Control Autoconnect vs Manual**
|
||||
```
|
||||
Problema: Autoconnect-ul e prea agresiv, dar vrei să lași operatorii să forțeze
|
||||
Vrei: Autoconnect blocat, dar /CONNECT manual permis
|
||||
|
||||
Soluție CRULE: d-line (overrideable by opers)
|
||||
→ Autoconnect blocat, dar operatorii pot forța cu /CONNECT
|
||||
```
|
||||
|
||||
#### 4. **Necesită Operator Online**
|
||||
```
|
||||
Problema: Vrei să eviți route-uri riscante când nu e nimeni să monitorizeze
|
||||
Vrei: Conectare la servere "riscante" doar când un oper e online
|
||||
|
||||
Soluție CRULE: "!directop()"
|
||||
→ Blochează dacă NU există un operator conectat direct
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📝 SINTAXA CRULE
|
||||
|
||||
### **În ircd.conf:**
|
||||
|
||||
```conf
|
||||
CRule {
|
||||
server = "nume.server.ro";
|
||||
all = yes; # yes = aplică la TOATE conectările
|
||||
# no = doar la autoconnect (overrideable)
|
||||
rule = "expresie"; # Regula propriu-zisă
|
||||
};
|
||||
```
|
||||
|
||||
### **Parametri:**
|
||||
|
||||
| Parametru | Valori | Descriere |
|
||||
|-----------|--------|-----------|
|
||||
| `server` | "*.domain" | Server-ul la care se aplică regula (wildcard permis) |
|
||||
| `all` | `yes` / `no` | **yes** = Blochează TOATE (inclusiv /CONNECT manual)<br>**no** = Blochează doar autoconnect |
|
||||
| `rule` | "expresie" | Expresia logică care definește condiția |
|
||||
|
||||
---
|
||||
|
||||
## 🔍 FUNCȚII DISPONIBILE
|
||||
|
||||
### **1. connected(targetmask)**
|
||||
|
||||
**Ce face:** Verifică dacă există un server conectat care se potrivește cu masca
|
||||
|
||||
**Sintaxă:** `connected("*.eu.*")`
|
||||
|
||||
**Exemplu:**
|
||||
```conf
|
||||
CRule {
|
||||
server = "madrid.es.eu.underchat.org";
|
||||
all = no;
|
||||
rule = "connected(*.eu.*)";
|
||||
};
|
||||
```
|
||||
**Efect:** Blochează autoconnect la Madrid dacă există DEJA un alt server EU conectat.
|
||||
|
||||
---
|
||||
|
||||
### **2. directcon(targetmask)**
|
||||
|
||||
**Ce face:** Verifică dacă există un server **DIRECT conectat** (nu prin intermediar) care se potrivește cu masca
|
||||
|
||||
**Sintaxă:** `directcon("*.us.*")`
|
||||
|
||||
**Exemplu:**
|
||||
```conf
|
||||
CRule {
|
||||
server = "boston.ma.us.underchat.org";
|
||||
all = yes;
|
||||
rule = "directcon(*.us.*)";
|
||||
};
|
||||
```
|
||||
**Efect:** Blochează TOATE conectările la Boston dacă există deja un server US conectat **direct** la serverul curent.
|
||||
|
||||
---
|
||||
|
||||
### **3. via(viamask, targetmask)**
|
||||
|
||||
**Ce face:** Verifică dacă un server (targetmask) este conectat **PRIN** un alt server (viamask)
|
||||
|
||||
**Sintaxă:** `via("manhattan.*", "*.eu.*")`
|
||||
|
||||
**Exemplu:**
|
||||
```conf
|
||||
CRule {
|
||||
server = "*.eu.*";
|
||||
all = no;
|
||||
rule = "via(manhattan.*, *.eu.*)";
|
||||
};
|
||||
```
|
||||
**Efect:** Blochează autoconnect la servere EU dacă există deja un server EU conectat PRIN Manhattan.
|
||||
|
||||
---
|
||||
|
||||
### **4. directop()**
|
||||
|
||||
**Ce face:** Verifică dacă există un **operator** conectat **direct** la serverul curent
|
||||
|
||||
**Sintaxă:** `directop()`
|
||||
|
||||
**Exemplu:**
|
||||
```conf
|
||||
CRule {
|
||||
server = "risky.server.net";
|
||||
all = no;
|
||||
rule = "!directop()";
|
||||
};
|
||||
```
|
||||
**Efect:** Blochează autoconnect la `risky.server.net` dacă **NU** există un operator online (pentru monitorizare).
|
||||
|
||||
---
|
||||
|
||||
## 🧮 OPERATORI LOGICI
|
||||
|
||||
### **1. NOT (negare) - `!`**
|
||||
|
||||
```conf
|
||||
rule = "!connected(*.eu.*)";
|
||||
```
|
||||
**Înseamn:** "dacă **NU** există un server EU conectat"
|
||||
|
||||
### **2. AND (și) - `&&`**
|
||||
|
||||
```conf
|
||||
rule = "connected(*.eu.*) && !directcon(*.eu.*)";
|
||||
```
|
||||
**Înseamnă:** "dacă există un server EU conectat **ȘI** nu e conectat direct"
|
||||
|
||||
### **3. OR (sau) - `||`**
|
||||
|
||||
```conf
|
||||
rule = "connected(*.eu.*) || connected(*.asia.*)";
|
||||
```
|
||||
**Înseamnă:** "dacă există un server EU conectat **SAU** un server Asia conectat"
|
||||
|
||||
### **4. Paranteze pentru grupare - `()`**
|
||||
|
||||
```conf
|
||||
rule = "connected(*.eu.*) && (!directcon(*.eu.*) || via(manhattan.*, *.eu.*))";
|
||||
```
|
||||
**Înseamnă:** "dacă există EU conectat **ȘI** (**nu** e direct **SAU** e prin Manhattan)"
|
||||
|
||||
---
|
||||
|
||||
## 💡 EXEMPLE PRACTICE
|
||||
|
||||
### **Exemplu 1: Previne Link-uri Multiple către Europa**
|
||||
|
||||
```conf
|
||||
# Pe server US: Boston
|
||||
CRule {
|
||||
server = "*.eu.underchat.org";
|
||||
all = no;
|
||||
rule = "connected(*.eu.underchat.org)";
|
||||
};
|
||||
```
|
||||
**Efect:**
|
||||
- ✅ Prima conexiune la un server EU → **PERMISĂ**
|
||||
- ❌ A doua conexiune la alt server EU → **BLOCATĂ** (autoconnect)
|
||||
- ✅ Operator poate forța cu `/CONNECT madrid.es.eu.underchat.org`
|
||||
|
||||
---
|
||||
|
||||
### **Exemplu 2: Preferă Manhattan pentru Link-uri EU**
|
||||
|
||||
```conf
|
||||
# Pe server US: Boston
|
||||
CRule {
|
||||
server = "*.eu.underchat.org";
|
||||
all = no;
|
||||
rule = "connected(*.eu.underchat.org) && (!directcon(*.eu.underchat.org) || via(manhattan.*, *.eu.underchat.org))";
|
||||
};
|
||||
```
|
||||
**Efect:**
|
||||
- Dacă există deja un server EU conectat:
|
||||
- ❌ Boston nu se mai conectează (lasă Manhattan să gestioneze)
|
||||
- Excepție: Dacă Boston DEJA are link EU direct, îl păstrează
|
||||
|
||||
---
|
||||
|
||||
### **Exemplu 3: Necesită Operator pentru Route-uri Riscante**
|
||||
|
||||
```conf
|
||||
# Link către server nesigur
|
||||
CRule {
|
||||
server = "experimental.test.org";
|
||||
all = no;
|
||||
rule = "!directop()";
|
||||
};
|
||||
```
|
||||
**Efect:**
|
||||
- ❌ Autoconnect blocat dacă **NU** există oper online
|
||||
- ✅ Dacă un oper e online, autoconnect **PERMIS**
|
||||
- ✅ Oper poate forța manual oricând cu `/CONNECT`
|
||||
|
||||
---
|
||||
|
||||
### **Exemplu 4: Permite doar 1 Link per Continent**
|
||||
|
||||
```conf
|
||||
# Reguli pentru un HUB global
|
||||
CRule {
|
||||
server = "*.eu.*";
|
||||
all = no;
|
||||
rule = "connected(*.eu.*)";
|
||||
};
|
||||
|
||||
CRule {
|
||||
server = "*.asia.*";
|
||||
all = no;
|
||||
rule = "connected(*.asia.*)";
|
||||
};
|
||||
|
||||
CRule {
|
||||
server = "*.us.*";
|
||||
all = no;
|
||||
rule = "connected(*.us.*)";
|
||||
};
|
||||
```
|
||||
**Efect:**
|
||||
- Maxim 1 link către fiecare continent
|
||||
- Previne "mesh" complet (prea multe conexiuni)
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ DIFERENȚA ÎNTRE `all = yes` și `all = no`
|
||||
|
||||
### **`all = yes` (D-line în conf vechi)**
|
||||
|
||||
```conf
|
||||
CRule {
|
||||
server = "*.eu.*";
|
||||
all = yes;
|
||||
rule = "connected(*.eu.*)";
|
||||
};
|
||||
```
|
||||
**Blochează:**
|
||||
- ❌ Autoconnect
|
||||
- ❌ `/CONNECT` de la operatori
|
||||
- ❌ Conexiuni incoming de la alte servere
|
||||
|
||||
**Folosit pentru:** Reguli **ABSOLUTE** care nu trebuie niciodată încălcate
|
||||
|
||||
---
|
||||
|
||||
### **`all = no` (d-line în conf vechi)**
|
||||
|
||||
```conf
|
||||
CRule {
|
||||
server = "*.eu.*";
|
||||
all = no;
|
||||
rule = "connected(*.eu.*)";
|
||||
};
|
||||
```
|
||||
**Blochează:**
|
||||
- ❌ Autoconnect
|
||||
|
||||
**PERMITE:**
|
||||
- ✅ `/CONNECT` manual de la operatori
|
||||
- ✅ Conexiuni incoming de la alte servere
|
||||
|
||||
**Folosit pentru:** Reguli de **OPTIMIZARE** care pot fi override-uite manual
|
||||
|
||||
---
|
||||
|
||||
## 🔧 CONFIGURARE ÎN ircd.conf
|
||||
|
||||
### **Exemplu Complet:**
|
||||
|
||||
```conf
|
||||
# ============================================================================
|
||||
# SECȚIUNE: CRULE - Reguli de Conectare Inteligente
|
||||
# ============================================================================
|
||||
|
||||
# Regula 1: Previne link-uri redundante către Europa
|
||||
CRule {
|
||||
server = "*.eu.underchat.org";
|
||||
all = no;
|
||||
rule = "connected(*.eu.underchat.org)";
|
||||
};
|
||||
|
||||
# Regula 2: Preferă Manhattan pentru link-uri EU (Boston backup)
|
||||
CRule {
|
||||
server = "madrid.es.eu.underchat.org";
|
||||
all = no;
|
||||
rule = "via(manhattan.*, *.eu.underchat.org)";
|
||||
};
|
||||
|
||||
# Regula 3: Link-uri experimentale doar cu oper online
|
||||
CRule {
|
||||
server = "experimental.*.underchat.org";
|
||||
all = no;
|
||||
rule = "!directop()";
|
||||
};
|
||||
|
||||
# Regula 4: Nu permite NICIODATĂ link către servere blacklist
|
||||
CRule {
|
||||
server = "*.blacklisted.net";
|
||||
all = yes;
|
||||
rule = "connected(*)"; # Întotdeauna blocat
|
||||
};
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 VERIFICARE ȘI DEBUGGING
|
||||
|
||||
### **Comenzi IRC pentru testare:**
|
||||
|
||||
```irc
|
||||
# Vezi toate regulile configurate
|
||||
/STATS d
|
||||
|
||||
# Vezi doar regulile absolute (all = yes)
|
||||
/STATS D
|
||||
|
||||
# Testează o conexiune (ca operator)
|
||||
/CONNECT madrid.es.eu.underchat.org
|
||||
```
|
||||
|
||||
### **Output `/STATS d` exemplu:**
|
||||
|
||||
```
|
||||
:server 242 nick D madrid.es.eu.underchat.org::connected(*.eu.*)
|
||||
:server 242 nick d experimental.*.underchat.org::!directop()
|
||||
```
|
||||
|
||||
- **D** (majusculă) = `all = yes` (absolute)
|
||||
- **d** (minusculă) = `all = no` (overrideable)
|
||||
|
||||
---
|
||||
|
||||
## 🎯 AVANTAJE CRULE
|
||||
|
||||
### ✅ **1. Control Granular**
|
||||
Definești exact CÂND și CUM se fac conexiunile, nu doar "poate sau nu poate".
|
||||
|
||||
### ✅ **2. Optimizare Topologie**
|
||||
Previne "mesh" complet (toate serverele conectate între ele) care poate cauza lag și probleme de routing.
|
||||
|
||||
### ✅ **3. Reducere Costuri**
|
||||
Link-urile internationale costă trafic → CRULE limitează link-urile redundante.
|
||||
|
||||
### ✅ **4. Siguranță**
|
||||
Poate preveni conexiuni nedorite sau periculoase automat.
|
||||
|
||||
### ✅ **5. Flexibilitate**
|
||||
Operatorii pot override-ui regulile `all = no` când e necesar.
|
||||
|
||||
---
|
||||
|
||||
## 🚨 CÂND NU TREBUIE FOLOSIT
|
||||
|
||||
### ❌ **Rețele mici (< 5 servere)**
|
||||
Overhead-ul de configurare nu merită pentru rețele mici.
|
||||
|
||||
### ❌ **Topologie simplă**
|
||||
Dacă ai doar 2-3 servere într-o linie, CRULE e overkill.
|
||||
|
||||
### ❌ **Fără operatori experimentați**
|
||||
Regulile complexe pot bloca conexiuni necesare dacă sunt configurate greșit.
|
||||
|
||||
---
|
||||
|
||||
## 🎓 TUTORIAL: Primul Tău CRULE
|
||||
|
||||
### **Scenariul:**
|
||||
- Ai 2 servere US: `boston.us` și `newyork.us`
|
||||
- Ai 2 servere EU: `madrid.eu` și `paris.eu`
|
||||
- Vrei: Doar 1 link US-EU (nu 4!)
|
||||
|
||||
### **Soluția:**
|
||||
|
||||
**Pe fiecare server US, adaugă:**
|
||||
```conf
|
||||
CRule {
|
||||
server = "*.eu.underchat.org";
|
||||
all = no;
|
||||
rule = "connected(*.eu.underchat.org)";
|
||||
};
|
||||
```
|
||||
|
||||
**Pe fiecare server EU, adaugă:**
|
||||
```conf
|
||||
CRule {
|
||||
server = "*.us.underchat.org";
|
||||
all = no;
|
||||
rule = "connected(*.us.underchat.org)";
|
||||
};
|
||||
```
|
||||
|
||||
**Rezultat:**
|
||||
- ✅ Prima conexiune US-EU → Permisă (ex: boston-madrid)
|
||||
- ❌ A doua conexiune US-EU → Blocată automat (ex: newyork-paris)
|
||||
- ✅ Dacă prima conexiune cade, a doua devine activă automat
|
||||
|
||||
---
|
||||
|
||||
## 📚 RESURSE SUPLIMENTARE
|
||||
|
||||
- **Documentație completă:** `doc/readme.crules`
|
||||
- **Cod sursă:** `ircd/crule.c`
|
||||
- **Exemple config:** `ircd/test/ircd-t1.conf`
|
||||
- **RFC IRC:** Nu există standard oficial, e specific Undernet/Nefarious
|
||||
|
||||
---
|
||||
|
||||
## 🎯 CONCLUZIE
|
||||
|
||||
**CRULE = SmartRoute pentru IRC**
|
||||
|
||||
În loc să definești doar:
|
||||
- ❌ "Poate să se conecteze la X?"
|
||||
|
||||
Poți defini:
|
||||
- ✅ "Poate să se conecteze la X **DACĂ** Y și Z sunt îndeplinite?"
|
||||
|
||||
Este un sistem **puternic** dar **complex** - folosește-l doar dacă ai nevoie de control granular asupra topologiei rețelei!
|
||||
|
||||
---
|
||||
|
||||
**Data:** 14 Februarie 2026
|
||||
**Versiune:** 1.0
|
||||
**Pentru:** UnderChat IRCd v1.3.1+
|
||||
|
||||
|
|
@ -0,0 +1,387 @@
|
|||
# Ghid Rapid: Configurare CRULE pentru Rețea EU + US
|
||||
|
||||
## 🎯 Scenariul Tău
|
||||
|
||||
**Ai:**
|
||||
- Servere în **Europa** (EU)
|
||||
- Servere în **SUA** (US)
|
||||
|
||||
**Vrei:**
|
||||
- Optimizare topologie rețea
|
||||
- Prevenire link-uri redundante
|
||||
- Reducere costuri trafic
|
||||
|
||||
---
|
||||
|
||||
## 🚀 QUICK START
|
||||
|
||||
### **Pasul 1: Upgrade la v1.4.0**
|
||||
|
||||
```bash
|
||||
cd ~/ircu2
|
||||
git pull origin main
|
||||
git fetch --tags
|
||||
git checkout v1.4.0
|
||||
```
|
||||
|
||||
### **Pasul 2: Rulează instalarea**
|
||||
|
||||
```bash
|
||||
./install.sh
|
||||
```
|
||||
|
||||
### **Pasul 3: La configurare**
|
||||
|
||||
Când ajungi la această secțiune:
|
||||
|
||||
```
|
||||
═══════════════════════════════════════
|
||||
CONFIGURARE CRULE (Reguli Conexiune)
|
||||
═══════════════════════════════════════
|
||||
|
||||
CRULE permite optimizarea topologiei rețelei IRC.
|
||||
Previne link-uri redundante între servere.
|
||||
|
||||
Exemplu: Dacă ai servere în EU și US, CRULE poate
|
||||
limita la 1 singur link EU-US în loc de multiple.
|
||||
|
||||
Configurare CRULE pentru optimizare rețea? (y/n) [n]:
|
||||
```
|
||||
|
||||
**Răspunde:** `y`
|
||||
|
||||
### **Pasul 4: Alege opțiunea**
|
||||
|
||||
```
|
||||
Selectați tipul de optimizare:
|
||||
1) Previne link-uri redundante către o regiune (recomandat)
|
||||
2) Necesită operator online pentru link-uri
|
||||
3) Ambele (1+2)
|
||||
4) Custom (configurare manuală ulterior)
|
||||
|
||||
Opțiune [1]:
|
||||
```
|
||||
|
||||
**Pentru rețea EU + US, alege:** `1`
|
||||
|
||||
### **Pasul 5: Configurează pattern-ul**
|
||||
|
||||
```
|
||||
Regiune/pattern de blocat (ex: *.eu.*, *.us.*, *.asia.*) [*.eu.*]:
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📋 CONFIGURĂRI RECOMANDATE
|
||||
|
||||
### **Opțiunea A: Pe servere US - Blochează EU redundante**
|
||||
|
||||
```
|
||||
Opțiune: 1
|
||||
Pattern: *.eu.*
|
||||
```
|
||||
|
||||
**Rezultat în ircd.conf:**
|
||||
```conf
|
||||
# Previne link-uri redundante către *.eu.*
|
||||
CRule {
|
||||
server = "*.eu.*";
|
||||
all = no;
|
||||
rule = "connected(*.eu.*)";
|
||||
};
|
||||
```
|
||||
|
||||
**Efect:**
|
||||
- ✅ Prima conexiune US→EU: **PERMISĂ**
|
||||
- ❌ A doua conexiune US→EU: **BLOCATĂ** (autoconnect)
|
||||
- ✅ Operatorii pot forța cu `/CONNECT` dacă e nevoie
|
||||
|
||||
---
|
||||
|
||||
### **Opțiunea B: Pe servere EU - Blochează US redundante**
|
||||
|
||||
```
|
||||
Opțiune: 1
|
||||
Pattern: *.us.*
|
||||
```
|
||||
|
||||
**Rezultat în ircd.conf:**
|
||||
```conf
|
||||
# Previne link-uri redundante către *.us.*
|
||||
CRule {
|
||||
server = "*.us.*";
|
||||
all = no;
|
||||
rule = "connected(*.us.*)";
|
||||
};
|
||||
```
|
||||
|
||||
**Efect:**
|
||||
- ✅ Prima conexiune EU→US: **PERMISĂ**
|
||||
- ❌ A doua conexiune EU→US: **BLOCATĂ** (autoconnect)
|
||||
|
||||
---
|
||||
|
||||
### **Opțiunea C: Configurare avansată (pentru experți)**
|
||||
|
||||
Dacă vrei control mai precis, alege opțiunea `3` (Ambele):
|
||||
|
||||
```
|
||||
Opțiune: 3
|
||||
Regiune de blocat: *.eu.underchat.org
|
||||
Pattern servere care necesită oper: *.test.underchat.org
|
||||
```
|
||||
|
||||
**Rezultat:**
|
||||
```conf
|
||||
# Previne link-uri redundante către *.eu.underchat.org
|
||||
CRule {
|
||||
server = "*.eu.underchat.org";
|
||||
all = no;
|
||||
rule = "connected(*.eu.underchat.org)";
|
||||
};
|
||||
|
||||
# Necesită operator online pentru *.test.underchat.org
|
||||
CRule {
|
||||
server = "*.test.underchat.org";
|
||||
all = no;
|
||||
rule = "!directop()";
|
||||
};
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 EXEMPLE PRACTICE
|
||||
|
||||
### **Exemplu 1: Rețea simplă (2 EU + 2 US)**
|
||||
|
||||
**Topologie:**
|
||||
- US: `boston.us.underchat.org`, `newyork.us.underchat.org`
|
||||
- EU: `madrid.es.underchat.org`, `paris.fr.underchat.org`
|
||||
|
||||
**Configurare:**
|
||||
|
||||
**Pe TOATE serverele US:**
|
||||
```conf
|
||||
CRule {
|
||||
server = "*.eu.underchat.org";
|
||||
all = no;
|
||||
rule = "connected(*.eu.underchat.org)";
|
||||
};
|
||||
```
|
||||
|
||||
**Pe TOATE serverele EU:**
|
||||
```conf
|
||||
CRule {
|
||||
server = "*.us.underchat.org";
|
||||
all = no;
|
||||
rule = "connected(*.us.underchat.org)";
|
||||
};
|
||||
```
|
||||
|
||||
**Rezultat:**
|
||||
- Link-uri permise: 1 US-EU (ex: boston-madrid)
|
||||
- Link-uri blocate: toate celelalte US-EU autoconnect
|
||||
- **Economie:** De la 4 link-uri la 1 link!
|
||||
|
||||
---
|
||||
|
||||
### **Exemplu 2: Rețea complexă (3 regiuni)**
|
||||
|
||||
**Topologie:**
|
||||
- US: 2 servere
|
||||
- EU: 2 servere
|
||||
- Asia: 1 server
|
||||
|
||||
**Configurare pe fiecare server:**
|
||||
|
||||
```conf
|
||||
# Previne redundanță către US
|
||||
CRule {
|
||||
server = "*.us.underchat.org";
|
||||
all = no;
|
||||
rule = "connected(*.us.underchat.org)";
|
||||
};
|
||||
|
||||
# Previne redundanță către EU
|
||||
CRule {
|
||||
server = "*.eu.underchat.org";
|
||||
all = no;
|
||||
rule = "connected(*.eu.underchat.org)";
|
||||
};
|
||||
|
||||
# Previne redundanță către Asia
|
||||
CRule {
|
||||
server = "*.asia.underchat.org";
|
||||
all = no;
|
||||
rule = "connected(*.asia.underchat.org)";
|
||||
};
|
||||
```
|
||||
|
||||
**Rezultat:**
|
||||
- Maxim 1 link între orice 2 regiuni
|
||||
- Topologie optimizată: US-EU, EU-Asia, US-Asia
|
||||
- **Economie:** De la 10+ link-uri la 3 link-uri!
|
||||
|
||||
---
|
||||
|
||||
## 🔧 VERIFICARE DUPĂ CONFIGURARE
|
||||
|
||||
### **1. Verifică config-ul:**
|
||||
|
||||
```bash
|
||||
grep -A 5 "CRule {" /home/ircd/ircd/lib/ircd.conf
|
||||
```
|
||||
|
||||
**Output așteptat:**
|
||||
```conf
|
||||
# Previne link-uri redundante către *.eu.*
|
||||
CRule {
|
||||
server = "*.eu.*";
|
||||
all = no;
|
||||
rule = "connected(*.eu.*)";
|
||||
};
|
||||
```
|
||||
|
||||
### **2. Pornește serverul:**
|
||||
|
||||
```bash
|
||||
/home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf
|
||||
```
|
||||
|
||||
### **3. Verifică din IRC:**
|
||||
|
||||
```irc
|
||||
# Ca operator, conectează-te:
|
||||
/OPER username password
|
||||
|
||||
# Vezi regulile CRULE:
|
||||
/STATS d
|
||||
|
||||
# Output:
|
||||
:server 242 nick d *.eu.*::connected(*.eu.*)
|
||||
```
|
||||
|
||||
### **4. Testează funcționarea:**
|
||||
|
||||
```bash
|
||||
# Prima conexiune către EU:
|
||||
/CONNECT madrid.es.underchat.org 4400
|
||||
|
||||
# Încearcă a doua conexiune către alt server EU:
|
||||
/CONNECT paris.fr.underchat.org 4400
|
||||
|
||||
# Ar trebui să vezi:
|
||||
:server NOTICE nick :Connection to paris.fr.underchat.org denied by connection rule
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💡 TIPS & TRICKS
|
||||
|
||||
### **Tip 1: Override manual când e nevoie**
|
||||
|
||||
Dacă ai setat `all = no` (implicit), operatorii pot forța:
|
||||
|
||||
```irc
|
||||
# Forțează conexiunea (override CRULE):
|
||||
/QUOTE CONNECT madrid.es.underchat.org 4400
|
||||
```
|
||||
|
||||
### **Tip 2: Pattern-uri flexibile**
|
||||
|
||||
```conf
|
||||
# Blochează toate serverele .eu.underchat.org:
|
||||
server = "*.eu.underchat.org";
|
||||
|
||||
# Blochează doar Spania:
|
||||
server = "*.es.eu.underchat.org";
|
||||
|
||||
# Blochează toate EXCEPT unul:
|
||||
server = "*.eu.underchat.org";
|
||||
rule = "connected(*.eu.underchat.org) && !connected(madrid.*)";
|
||||
```
|
||||
|
||||
### **Tip 3: Combinație cu preferințe**
|
||||
|
||||
```conf
|
||||
# Preferă Manhattan pentru EU, altfel blochează:
|
||||
CRule {
|
||||
server = "*.eu.*";
|
||||
all = no;
|
||||
rule = "connected(*.eu.*) && !via(manhattan.*, *.eu.*)";
|
||||
};
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚨 TROUBLESHOOTING
|
||||
|
||||
### **Problemă: CRULE nu apare în config**
|
||||
|
||||
**Cauză:** Ai răspuns `n` la întrebarea despre CRULE sau ai folosit versiune veche.
|
||||
|
||||
**Soluție:**
|
||||
```bash
|
||||
git checkout v1.4.0
|
||||
./install.sh
|
||||
# Răspunde 'y' la CRULE
|
||||
```
|
||||
|
||||
### **Problemă: Toate conexiunile sunt blocate**
|
||||
|
||||
**Cauză:** Regula e prea strictă sau `all = yes`.
|
||||
|
||||
**Soluție:**
|
||||
```bash
|
||||
nano /home/ircd/ircd/lib/ircd.conf
|
||||
# Editează CRule: schimbă 'all = yes' în 'all = no'
|
||||
# SAU comentează regula cu #
|
||||
```
|
||||
|
||||
### **Problemă: Vreau să editez manual CRULE**
|
||||
|
||||
**Soluție:**
|
||||
```bash
|
||||
nano /home/ircd/ircd/lib/ircd.conf
|
||||
|
||||
# Caută secțiunea CRULE și modifică:
|
||||
CRule {
|
||||
server = "*.eu.*";
|
||||
all = no;
|
||||
rule = "connected(*.eu.*)";
|
||||
};
|
||||
|
||||
# Restart IRCd:
|
||||
killall ircd
|
||||
/home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 DOCUMENTAȚIE COMPLETĂ
|
||||
|
||||
Pentru detalii avansate, vezi:
|
||||
- **CRULE_EXPLAINED.md** - Explicație completă CRULE
|
||||
- **doc/readme.crules** - Documentație originală
|
||||
- **ircd/test/*.conf** - Exemple de configurări
|
||||
|
||||
---
|
||||
|
||||
## 🎯 CONCLUZIE
|
||||
|
||||
Cu **CRULE configurat corect**, rețeaua ta EU + US va avea:
|
||||
|
||||
✅ **Topologie optimizată** - Nu mai ai link-uri redundante
|
||||
✅ **Costuri reduse** - Mai puțin trafic internațional
|
||||
✅ **Control granular** - Poți override când e nevoie
|
||||
✅ **Routing eficient** - Mesajele circulă optim
|
||||
|
||||
**Timpul de configurare:** ~2 minute
|
||||
**Economie:** De la 4+ link-uri la 1-2 link-uri optimizate!
|
||||
|
||||
---
|
||||
|
||||
**Versiune:** 1.0
|
||||
**Data:** 14 Februarie 2026
|
||||
**Pentru:** UnderChat IRCd v1.4.0+
|
||||
|
||||
|
|
@ -0,0 +1,656 @@
|
|||
# PSEUDO - Comenzi Alias către Servicii IRC
|
||||
|
||||
## 📋 CE ESTE PSEUDO?
|
||||
|
||||
**Pseudo** este un sistem de **comenzi alias** implementate la nivel de server care permit utilizatorilor să trimită mesaje către **servicii IRC** (bots) folosind **comenzi simple** în loc de `/MSG serviciu comandă`.
|
||||
|
||||
Este o funcționalitate de **confort pentru utilizatori** care face interacțiunea cu serviciile mai intuitivă și mai ușoară.
|
||||
|
||||
---
|
||||
|
||||
## 🎯 SCOP
|
||||
|
||||
### **Problema FĂRĂ Pseudo:**
|
||||
|
||||
Utilizatorii trebuie să știe:
|
||||
1. Numele exact al serviciului (ex: `X`, `AuthServ`, `ChanServ`)
|
||||
2. Serverul unde rulează (ex: `channels.undernet.org`)
|
||||
3. Sintaxa comenzii (ex: `/MSG X@channels.undernet.org LOGIN user pass`)
|
||||
|
||||
**Exemplu complicat:**
|
||||
```irc
|
||||
/MSG X@channels.undernet.org LOGIN myuser mypassword
|
||||
/MSG AuthServ@services.underchat.org HELP
|
||||
/MSG ChanServ@services.underchat.org REGISTER #mychannel
|
||||
```
|
||||
|
||||
### **Soluția CU Pseudo:**
|
||||
|
||||
Utilizatorii scriu doar:
|
||||
```irc
|
||||
/LOGIN myuser mypassword
|
||||
/AUTHSERV
|
||||
/CHANSERV REGISTER #mychannel
|
||||
```
|
||||
|
||||
**Mai simplu, mai intuitiv!** ✅
|
||||
|
||||
---
|
||||
|
||||
## 🔧 CUM FUNCȚIONEAZĂ?
|
||||
|
||||
### **Mecanismul:**
|
||||
|
||||
1. **User scrie:** `/CHANSERV REGISTER #mychannel`
|
||||
2. **Server transformă:** `/MSG ChanServ@services.underchat.org REGISTER #mychannel`
|
||||
3. **Server trimite** mesajul către serviciul corect
|
||||
4. **Serviciul răspunde** utilizatorului
|
||||
|
||||
Este un **alias transparent** - utilizatorul nu știe că în spate se trimite un `/MSG`.
|
||||
|
||||
---
|
||||
|
||||
## 📝 SINTAXĂ ÎN ircd.conf
|
||||
|
||||
### **Formatul de bază:**
|
||||
|
||||
```conf
|
||||
Pseudo "COMANDĂ" {
|
||||
name = "NumeServiciu";
|
||||
nick = "serviciu@server.domain.org";
|
||||
};
|
||||
```
|
||||
|
||||
### **Parametri:**
|
||||
|
||||
| Parametru | Obligatoriu | Descriere |
|
||||
|-----------|-------------|-----------|
|
||||
| `"COMANDĂ"` | ✅ DA | Comanda pe care o scriu utilizatorii (ex: `/CHANSERV`) |
|
||||
| `name` | ✅ DA | Numele serviciului (folosit în mesaje de eroare) |
|
||||
| `nick` | ✅ DA | Nick@Server al serviciului destinație |
|
||||
| `prepend` | ❌ NU | Text de adăugat ÎNAINTEA mesajului utilizatorului |
|
||||
| `defaulttext` | ❌ NU | Text trimis dacă utilizatorul NU furnizează text |
|
||||
|
||||
---
|
||||
|
||||
## 💡 EXEMPLE PRACTICE
|
||||
|
||||
### **Exemplu 1: Alias simplu pentru ChanServ**
|
||||
|
||||
```conf
|
||||
Pseudo "CHANSERV" {
|
||||
name = "ChanServ";
|
||||
nick = "ChanServ@services.underchat.org";
|
||||
};
|
||||
```
|
||||
|
||||
**Utilizare:**
|
||||
```irc
|
||||
# User scrie:
|
||||
/CHANSERV REGISTER #mychannel
|
||||
|
||||
# Server transformă în:
|
||||
/MSG ChanServ@services.underchat.org REGISTER #mychannel
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### **Exemplu 2: Alias cu PREPEND (adaugă text înainte)**
|
||||
|
||||
```conf
|
||||
Pseudo "LOGIN" {
|
||||
name = "X";
|
||||
prepend = "LOGIN ";
|
||||
nick = "X@channels.undernet.org";
|
||||
};
|
||||
```
|
||||
|
||||
**Utilizare:**
|
||||
```irc
|
||||
# User scrie:
|
||||
/LOGIN myuser mypassword
|
||||
|
||||
# Server transformă în:
|
||||
/MSG X@channels.undernet.org LOGIN myuser mypassword
|
||||
# ^^^^^^ ADĂUGAT AUTOMAT!
|
||||
```
|
||||
|
||||
**Avantaj:** Utilizatorul nu mai trebuie să scrie `LOGIN` de două ori!
|
||||
|
||||
---
|
||||
|
||||
### **Exemplu 3: Alias cu DEFAULT TEXT**
|
||||
|
||||
```conf
|
||||
Pseudo "AUTHSERV" {
|
||||
name = "AuthServ";
|
||||
nick = "AuthServ@services.underchat.org";
|
||||
defaulttext = "HELP";
|
||||
};
|
||||
```
|
||||
|
||||
**Utilizare:**
|
||||
```irc
|
||||
# User scrie doar comanda, fără parametri:
|
||||
/AUTHSERV
|
||||
|
||||
# Server transformă în:
|
||||
/MSG AuthServ@services.underchat.org HELP
|
||||
# ^^^^ ADĂUGAT AUTOMAT!
|
||||
|
||||
# User poate și să furnizeze text:
|
||||
/AUTHSERV STATUS
|
||||
|
||||
# Server transformă în:
|
||||
/MSG AuthServ@services.underchat.org STATUS
|
||||
```
|
||||
|
||||
**Avantaj:** Dacă utilizatorul uită să adauge parametri, se trimite automat `HELP`!
|
||||
|
||||
---
|
||||
|
||||
### **Exemplu 4: Serviciu cu MULTIPLE SERVER-e (failover)**
|
||||
|
||||
```conf
|
||||
Pseudo "X" {
|
||||
name = "X";
|
||||
nick = "X@channels.underchat.org";
|
||||
nick = "X@backup.underchat.org";
|
||||
nick = "X@services.underchat.org";
|
||||
};
|
||||
```
|
||||
|
||||
**Funcționare:**
|
||||
- Serverul încearcă să găsească serviciul pe `channels.underchat.org`
|
||||
- Dacă NU există, încearcă `backup.underchat.org`
|
||||
- Dacă NU există, încearcă `services.underchat.org`
|
||||
- **Ultimul listat are prioritate cea mai mare!**
|
||||
|
||||
---
|
||||
|
||||
## 🎓 CAZURI DE UTILIZARE COMUNE
|
||||
|
||||
### **1. Servicii Anope/Atheme**
|
||||
|
||||
```conf
|
||||
# NickServ
|
||||
Pseudo "NICKSERV" {
|
||||
name = "NickServ";
|
||||
nick = "NickServ@services.underchat.org";
|
||||
};
|
||||
|
||||
# ChanServ
|
||||
Pseudo "CHANSERV" {
|
||||
name = "ChanServ";
|
||||
nick = "ChanServ@services.underchat.org";
|
||||
};
|
||||
|
||||
# MemoServ
|
||||
Pseudo "MEMOSERV" {
|
||||
name = "MemoServ";
|
||||
nick = "MemoServ@services.underchat.org";
|
||||
};
|
||||
|
||||
# OperServ
|
||||
Pseudo "OPERSERV" {
|
||||
name = "OperServ";
|
||||
nick = "OperServ@services.underchat.org";
|
||||
};
|
||||
```
|
||||
|
||||
**Utilizare:**
|
||||
```irc
|
||||
/NICKSERV REGISTER password email@domain.com
|
||||
/CHANSERV REGISTER #mychannel
|
||||
/MEMOSERV SEND nick Your message here
|
||||
/OPERSERV AKILL ADD *@badhost.com Bad user
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### **2. Bot de Autentificare (X/W/Q)**
|
||||
|
||||
```conf
|
||||
# Login rapid la X
|
||||
Pseudo "LOGIN" {
|
||||
name = "X";
|
||||
prepend = "LOGIN ";
|
||||
nick = "X@channels.underchat.org";
|
||||
};
|
||||
|
||||
# Logout
|
||||
Pseudo "LOGOUT" {
|
||||
name = "X";
|
||||
prepend = "LOGOUT";
|
||||
nick = "X@channels.underchat.org";
|
||||
defaulttext = ""; # Nu trimite nimic extra
|
||||
};
|
||||
|
||||
# WhoisX
|
||||
Pseudo "WHOIS" {
|
||||
name = "X";
|
||||
prepend = "WHOIS ";
|
||||
nick = "X@channels.underchat.org";
|
||||
};
|
||||
```
|
||||
|
||||
**Utilizare:**
|
||||
```irc
|
||||
/LOGIN myuser mypassword
|
||||
/LOGOUT
|
||||
/WHOIS someuser
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### **3. Bot Custom (ex: GameBot, StatBot)**
|
||||
|
||||
```conf
|
||||
# GameBot - comenzi jocuri
|
||||
Pseudo "GAME" {
|
||||
name = "GameBot";
|
||||
nick = "GameBot@games.underchat.org";
|
||||
defaulttext = "HELP";
|
||||
};
|
||||
|
||||
# StatBot - statistici rețea
|
||||
Pseudo "STATS" {
|
||||
name = "StatBot";
|
||||
nick = "StatBot@stats.underchat.org";
|
||||
defaulttext = "NETWORK";
|
||||
};
|
||||
```
|
||||
|
||||
**Utilizare:**
|
||||
```irc
|
||||
/GAME # Trimite "HELP" automat
|
||||
/GAME START poker # Trimite "START poker"
|
||||
/STATS # Trimite "NETWORK" automat
|
||||
/STATS USER nickname # Trimite "USER nickname"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ CONFIGURARE ÎN ircd.conf
|
||||
|
||||
### **Exemplu Complet pentru UnderChat:**
|
||||
|
||||
```conf
|
||||
# ============================================================================
|
||||
# SECȚIUNE: PSEUDO - Alias-uri Comenzi pentru Servicii
|
||||
# ============================================================================
|
||||
|
||||
# NickServ - Înregistrare și management nickname-uri
|
||||
Pseudo "NICKSERV" {
|
||||
name = "NickServ";
|
||||
nick = "NickServ@services.underchat.org";
|
||||
};
|
||||
|
||||
# Alias NS pentru NickServ (scurtătură)
|
||||
Pseudo "NS" {
|
||||
name = "NickServ";
|
||||
nick = "NickServ@services.underchat.org";
|
||||
};
|
||||
|
||||
# ChanServ - Management canale
|
||||
Pseudo "CHANSERV" {
|
||||
name = "ChanServ";
|
||||
nick = "ChanServ@services.underchat.org";
|
||||
};
|
||||
|
||||
# Alias CS pentru ChanServ
|
||||
Pseudo "CS" {
|
||||
name = "ChanServ";
|
||||
nick = "ChanServ@services.underchat.org";
|
||||
};
|
||||
|
||||
# MemoServ - Mesaje offline
|
||||
Pseudo "MEMOSERV" {
|
||||
name = "MemoServ";
|
||||
nick = "MemoServ@services.underchat.org";
|
||||
};
|
||||
|
||||
# Alias MS pentru MemoServ
|
||||
Pseudo "MS" {
|
||||
name = "MemoServ";
|
||||
nick = "MemoServ@services.underchat.org";
|
||||
};
|
||||
|
||||
# OperServ - Comenzi operatori
|
||||
Pseudo "OPERSERV" {
|
||||
name = "OperServ";
|
||||
nick = "OperServ@services.underchat.org";
|
||||
};
|
||||
|
||||
# Alias OS pentru OperServ
|
||||
Pseudo "OS" {
|
||||
name = "OperServ";
|
||||
nick = "OperServ@services.underchat.org";
|
||||
};
|
||||
|
||||
# AuthServ - Autentificare
|
||||
Pseudo "AUTHSERV" {
|
||||
name = "AuthServ";
|
||||
nick = "AuthServ@services.underchat.org";
|
||||
defaulttext = "HELP";
|
||||
};
|
||||
|
||||
# LOGIN - Scurtătură pentru autentificare rapidă
|
||||
Pseudo "LOGIN" {
|
||||
name = "AuthServ";
|
||||
prepend = "LOGIN ";
|
||||
nick = "AuthServ@services.underchat.org";
|
||||
};
|
||||
|
||||
# IDENTIFY - Alternativă pentru autentificare
|
||||
Pseudo "IDENTIFY" {
|
||||
name = "NickServ";
|
||||
prepend = "IDENTIFY ";
|
||||
nick = "NickServ@services.underchat.org";
|
||||
};
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔍 VERIFICARE ȘI TESTARE
|
||||
|
||||
### **1. Verifică configurația:**
|
||||
|
||||
```bash
|
||||
grep -A 3 'Pseudo "' /home/ircd/ircd/lib/ircd.conf
|
||||
```
|
||||
|
||||
**Output așteptat:**
|
||||
```conf
|
||||
Pseudo "CHANSERV" {
|
||||
name = "ChanServ";
|
||||
nick = "ChanServ@services.underchat.org";
|
||||
};
|
||||
--
|
||||
Pseudo "NICKSERV" {
|
||||
name = "NickServ";
|
||||
nick = "NickServ@services.underchat.org";
|
||||
};
|
||||
```
|
||||
|
||||
### **2. Testează în IRC:**
|
||||
|
||||
```irc
|
||||
# Conectează-te la server
|
||||
/SERVER madrid.es.eu.underchat.org 6667
|
||||
|
||||
# Testează comanda Pseudo
|
||||
/CHANSERV HELP
|
||||
|
||||
# Ar trebui să primești răspuns de la ChanServ
|
||||
# (dacă serviciile sunt active)
|
||||
```
|
||||
|
||||
### **3. Debug (dacă nu funcționează):**
|
||||
|
||||
```irc
|
||||
# Verifică dacă serviciul este conectat
|
||||
/WHOIS ChanServ
|
||||
|
||||
# Dacă vezi ceva ca:
|
||||
# ChanServ is ChanServ@services.underchat.org * Channel Service
|
||||
# → Serviciul este activ
|
||||
|
||||
# Dacă vezi:
|
||||
# No such nick/channel
|
||||
# → Serviciul NU este conectat (problema e la Anope/Atheme)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 AVANTAJE vs DEZAVANTAJE
|
||||
|
||||
### ✅ **AVANTAJE:**
|
||||
|
||||
1. **Ușurință utilizare** - Comenzi intuitive pentru utilizatori
|
||||
2. **Consistență** - Toate serviciile au aceeași sintaxă
|
||||
3. **Failover** - Poate încerca multiple servere
|
||||
4. **Scurtături** - `/LOGIN` în loc de `/MSG X@server LOGIN`
|
||||
5. **Defaulturi inteligente** - Poate trimite `HELP` automat
|
||||
6. **Backward compatible** - `/MSG` tradițional tot funcționează
|
||||
|
||||
### ⚠️ **DEZAVANTAJE:**
|
||||
|
||||
1. **Configurare necesară** - Trebuie configurat manual în ircd.conf
|
||||
2. **Dependență de servicii** - Dacă serviciile cad, Pseudo nu ajută
|
||||
3. **Conflict posibil** - Dacă un user are nick-ul `CHANSERV`, poate crea confuzie
|
||||
4. **Nu verifică sintaxă** - Doar relay-uiește mesajul, nu validează
|
||||
|
||||
---
|
||||
|
||||
## 🚨 CAZURI SPECIALE
|
||||
|
||||
### **Caz 1: Serviciul nu răspunde**
|
||||
|
||||
```conf
|
||||
Pseudo "CHANSERV" {
|
||||
name = "ChanServ";
|
||||
nick = "ChanServ@services.underchat.org";
|
||||
};
|
||||
```
|
||||
|
||||
**Dacă serviciul NU este conectat:**
|
||||
```irc
|
||||
/CHANSERV HELP
|
||||
# Output:
|
||||
:server NOTICE nick :Service ChanServ is currently down. Please try again later.
|
||||
```
|
||||
|
||||
### **Caz 2: Multiple nick-uri (failover)**
|
||||
|
||||
```conf
|
||||
Pseudo "X" {
|
||||
name = "X";
|
||||
nick = "X@channels.underchat.org";
|
||||
nick = "X@backup.underchat.org";
|
||||
};
|
||||
```
|
||||
|
||||
**Funcționare:**
|
||||
1. Serverul caută `X@channels.underchat.org` → NU există
|
||||
2. Serverul caută `X@backup.underchat.org` → EXISTĂ!
|
||||
3. Mesajul este trimis către `X@backup.underchat.org`
|
||||
|
||||
### **Caz 3: Text vid cu defaulttext**
|
||||
|
||||
```conf
|
||||
Pseudo "HELP" {
|
||||
name = "HelpBot";
|
||||
nick = "HelpBot@services.underchat.org";
|
||||
defaulttext = "MAINMENU";
|
||||
};
|
||||
```
|
||||
|
||||
**Utilizare:**
|
||||
```irc
|
||||
/HELP
|
||||
# Trimite automat: /MSG HelpBot@services... MAINMENU
|
||||
|
||||
/HELP commands
|
||||
# Trimite: /MSG HelpBot@services... commands
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 BEST PRACTICES
|
||||
|
||||
### **1. Folosește nume intuitive:**
|
||||
|
||||
```conf
|
||||
# BINE:
|
||||
Pseudo "NICKSERV" { ... };
|
||||
Pseudo "LOGIN" { ... };
|
||||
|
||||
# EVITĂ:
|
||||
Pseudo "ABC123" { ... };
|
||||
Pseudo "ZZXASD" { ... };
|
||||
```
|
||||
|
||||
### **2. Oferă scurtături:**
|
||||
|
||||
```conf
|
||||
# Comanda completă
|
||||
Pseudo "NICKSERV" { name = "NickServ"; nick = "NickServ@..."; };
|
||||
|
||||
# Scurtătură
|
||||
Pseudo "NS" { name = "NickServ"; nick = "NickServ@..."; };
|
||||
```
|
||||
|
||||
### **3. Folosește defaulttext pentru comenzi frecvente:**
|
||||
|
||||
```conf
|
||||
# HELP automat dacă user uită parametri
|
||||
Pseudo "AUTHSERV" {
|
||||
name = "AuthServ";
|
||||
nick = "AuthServ@services.underchat.org";
|
||||
defaulttext = "HELP";
|
||||
};
|
||||
```
|
||||
|
||||
### **4. Documentează în MOTD:**
|
||||
|
||||
```
|
||||
# În ircd.motd:
|
||||
-
|
||||
- Comenzi disponibile:
|
||||
- /NICKSERV REGISTER password email
|
||||
- /CHANSERV REGISTER #channel
|
||||
- /LOGIN username password
|
||||
- /AUTHSERV (pentru help)
|
||||
-
|
||||
- Sau scurtăturile: /NS, /CS, /MS, /OS
|
||||
-
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 TROUBLESHOOTING
|
||||
|
||||
### **Problemă: Comanda Pseudo nu funcționează**
|
||||
|
||||
**Cauze posibile:**
|
||||
|
||||
1. **Pseudo NU este configurat în ircd.conf**
|
||||
```bash
|
||||
grep 'Pseudo "CHANSERV"' /home/ircd/ircd/lib/ircd.conf
|
||||
# Dacă nu găsește nimic → Trebuie adăugat
|
||||
```
|
||||
|
||||
2. **Serviciul NU este conectat**
|
||||
```irc
|
||||
/WHOIS ChanServ
|
||||
# Dacă "No such nick" → Pornește Anope/Atheme
|
||||
```
|
||||
|
||||
3. **Nick@Server greșit**
|
||||
```conf
|
||||
# Verifică că nick-ul este corect:
|
||||
nick = "ChanServ@services.underchat.org";
|
||||
# ^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^
|
||||
# Nick Server (trebuie să existe în rețea)
|
||||
```
|
||||
|
||||
4. **Server de servicii NU este linked**
|
||||
```irc
|
||||
/LINKS
|
||||
# Caută "services.underchat.org" în listă
|
||||
```
|
||||
|
||||
### **Soluție generală:**
|
||||
|
||||
```bash
|
||||
# 1. Adaugă Pseudo în ircd.conf
|
||||
nano /home/ircd/ircd/lib/ircd.conf
|
||||
|
||||
# Adaugă:
|
||||
Pseudo "CHANSERV" {
|
||||
name = "ChanServ";
|
||||
nick = "ChanServ@services.underchat.org";
|
||||
};
|
||||
|
||||
# 2. Repornește IRCd
|
||||
killall ircd
|
||||
/home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf
|
||||
|
||||
# 3. Asigură-te că serviciile (Anope) rulează
|
||||
ps aux | grep anope
|
||||
|
||||
# Dacă nu:
|
||||
/opt/anope/bin/services
|
||||
|
||||
# 4. Testează
|
||||
/CHANSERV HELP
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 REFERINȚE
|
||||
|
||||
- **Cod sursă:** `ircd/m_pseudo.c`
|
||||
- **Exemplu config:** `doc/example.conf` (liniile 999-1021)
|
||||
- **Testare:** `ircd/test/ircd-t1.conf` (liniile 99-102)
|
||||
|
||||
---
|
||||
|
||||
## 🎯 CONCLUZIE
|
||||
|
||||
**Pseudo** = **Alias-uri pentru servicii IRC**
|
||||
|
||||
Transformă comenzi complicate:
|
||||
```irc
|
||||
/MSG ChanServ@services.underchat.org REGISTER #mychannel
|
||||
```
|
||||
|
||||
În comenzi simple:
|
||||
```irc
|
||||
/CHANSERV REGISTER #mychannel
|
||||
```
|
||||
|
||||
Este o funcționalitate de **confort** care face IRC-ul mai **user-friendly** și mai **intuitiv** pentru utilizatori!
|
||||
|
||||
---
|
||||
|
||||
**Data:** 14 Februarie 2026
|
||||
**Versiune:** 1.0
|
||||
**Pentru:** UnderChat IRCd v1.4.0+
|
||||
|
||||
---
|
||||
|
||||
## 🚀 QUICK START
|
||||
|
||||
**Pentru a adăuga Pseudo în rețeaua ta:**
|
||||
|
||||
```conf
|
||||
# Adaugă în /home/ircd/ircd/lib/ircd.conf:
|
||||
|
||||
Pseudo "NICKSERV" {
|
||||
name = "NickServ";
|
||||
nick = "NickServ@services.underchat.org";
|
||||
};
|
||||
|
||||
Pseudo "CHANSERV" {
|
||||
name = "ChanServ";
|
||||
nick = "ChanServ@services.underchat.org";
|
||||
};
|
||||
|
||||
Pseudo "LOGIN" {
|
||||
name = "AuthServ";
|
||||
prepend = "LOGIN ";
|
||||
nick = "AuthServ@services.underchat.org";
|
||||
};
|
||||
```
|
||||
|
||||
**Restart IRCd și testează:**
|
||||
```irc
|
||||
/NICKSERV HELP
|
||||
/CHANSERV HELP
|
||||
/LOGIN username password
|
||||
```
|
||||
|
||||
**GATA!** ✅
|
||||
|
||||
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
> **Repository**: https://gitlab.back.ro/underchat/ircu2.git
|
||||
> **Limbă**: Română 🇷🇴
|
||||
> **Data**: 13 februarie 2026
|
||||
> **Versiune**: v1.2.0
|
||||
> **Data**: 14 februarie 2026
|
||||
> **Versiune**: v1.5.0
|
||||
> **Status**: ✅ Production Ready
|
||||
|
||||
---
|
||||
|
|
|
|||
|
|
@ -0,0 +1,391 @@
|
|||
# REBRAND v1.3.0 - UnderChat în loc de Nefarious
|
||||
|
||||
## 🎨 REBRANDING COMPLET
|
||||
|
||||
**Data:** 14 Februarie 2026
|
||||
**Versiune:** v1.3.0
|
||||
**Severitate:** 📝 Cosmetică (dar necesită recompilare)
|
||||
|
||||
---
|
||||
|
||||
## 🐛 PROBLEMA RAPORTATĂ
|
||||
|
||||
**Utilizator a observat:**
|
||||
```
|
||||
[14:39] * Joins: iRO (iRO@Nefarious-2F378ED1.eushells.ro)
|
||||
```
|
||||
|
||||
**Problema:** Prefixul "Nefarious-" apare în hostname-urile ascunse (cloaked hostnames).
|
||||
|
||||
**Cerință:** Schimbarea prefixului de la "Nefarious-" la "UnderChat-" pentru branding consistent.
|
||||
|
||||
---
|
||||
|
||||
## 🔍 ANALIZĂ TEHNICĂ
|
||||
|
||||
### Unde este definit prefixul?
|
||||
|
||||
Hostname-urile ascunse (host hiding/cloaking) sunt generate în codul sursă folosind mai multe setări din `ircd/ircd_features.c`:
|
||||
|
||||
#### **1. HOST_HIDING_PREFIX** (Linia 753)
|
||||
```c
|
||||
F_S(HOST_HIDING_PREFIX, 0, "Nefarious", 0),
|
||||
```
|
||||
**Funcție:** Prefixul folosit în algoritmul de host hiding
|
||||
**Format rezultat:** `Nefarious-HASH.domain.tld`
|
||||
|
||||
#### **2. HIDDEN_HOST** (Linia 538)
|
||||
```c
|
||||
F_S(HIDDEN_HOST, FEAT_CASE, "Users.Nefarious", 0),
|
||||
```
|
||||
**Funcție:** Hostname ascuns implicit pentru utilizatori normali
|
||||
**Format rezultat:** `Users.Nefarious`
|
||||
|
||||
#### **3. HIDDEN_OPERHOST** (Linia 751)
|
||||
```c
|
||||
F_S(HIDDEN_OPERHOST, FEAT_CASE, "Staff.Nefarious", 0),
|
||||
```
|
||||
**Funcție:** Hostname ascuns pentru operatori
|
||||
**Format rezultat:** `Staff.Nefarious`
|
||||
|
||||
#### **4. HIS_SERVERNAME** (Linia 635)
|
||||
```c
|
||||
F_S(HIS_SERVERNAME, 0, "*.Nefarious", feature_notify_servername),
|
||||
```
|
||||
**Funcție:** Nume server ascuns în WHOIS/WHO pentru protecție topologie
|
||||
**Format rezultat:** `*.Nefarious`
|
||||
|
||||
#### **5. NETWORK** (Linia 640)
|
||||
```c
|
||||
F_S(NETWORK, 0, "Nefarious", set_isupport_network),
|
||||
```
|
||||
**Funcție:** Numele rețelei IRC (trimis în ISUPPORT)
|
||||
**Format rezultat:** `:server 005 user NETWORK=Nefarious`
|
||||
|
||||
---
|
||||
|
||||
## ✅ MODIFICĂRI IMPLEMENTATE
|
||||
|
||||
### Fișiere modificate:
|
||||
|
||||
#### 1. **ircd/ircd_features.c**
|
||||
```c
|
||||
// ÎNAINTE:
|
||||
F_S(HOST_HIDING_PREFIX, 0, "Nefarious", 0),
|
||||
F_S(HIDDEN_HOST, FEAT_CASE, "Users.Nefarious", 0),
|
||||
F_S(HIDDEN_OPERHOST, FEAT_CASE, "Staff.Nefarious", 0),
|
||||
F_S(HIS_SERVERNAME, 0, "*.Nefarious", feature_notify_servername),
|
||||
F_S(NETWORK, 0, "Nefarious", set_isupport_network),
|
||||
|
||||
// DUPĂ:
|
||||
F_S(HOST_HIDING_PREFIX, 0, "UnderChat", 0),
|
||||
F_S(HIDDEN_HOST, FEAT_CASE, "Users.UnderChat", 0),
|
||||
F_S(HIDDEN_OPERHOST, FEAT_CASE, "Staff.UnderChat", 0),
|
||||
F_S(HIS_SERVERNAME, 0, "*.UnderChat", feature_notify_servername),
|
||||
F_S(NETWORK, 0, "UnderChat", set_isupport_network),
|
||||
```
|
||||
|
||||
**Comentarii actualizate:**
|
||||
```c
|
||||
/* UnderChat FEAT_'s */
|
||||
/* Some misc. UnderChat default paths */
|
||||
```
|
||||
|
||||
#### 2. **ircd/m_help.c**
|
||||
```c
|
||||
// ÎNAINTE:
|
||||
send_reply(sptr, RPL_HELPSTART, "*", "Nefarious Help System");
|
||||
send_reply(sptr, RPL_HELPSTART, cmd, "Nefarious Help System");
|
||||
|
||||
// DUPĂ:
|
||||
send_reply(sptr, RPL_HELPSTART, "*", "UnderChat Help System");
|
||||
send_reply(sptr, RPL_HELPSTART, cmd, "UnderChat Help System");
|
||||
```
|
||||
|
||||
#### 3. **include/ircd_features.h**
|
||||
```c
|
||||
// Comentarii actualizate:
|
||||
/* UnderChat FEAT_'s */
|
||||
/* Some misc. UnderChat default paths */
|
||||
```
|
||||
|
||||
#### 4. **include/numeric.h**
|
||||
```c
|
||||
// Comentarii actualizate în toate definițiile:
|
||||
#define RPL_BOUNCE 10 /* UnderChat extension */
|
||||
#define RPL_STATSELINE 223 /* UnderChat extension */
|
||||
#define RPL_CHKHEAD 286 /* QuakeNet - Asuka / UnderChat */
|
||||
#define RPL_CHANUSER 287 /* QuakeNet - Asuka / UnderChat */
|
||||
#define RPL_DATASTR 290 /* QuakeNet - Asuka / UnderChat */
|
||||
#define RPL_ENDOFCHECK 291 /* QuakeNet - Asuka / UnderChat */
|
||||
#define ERR_SEARCHNOMATCH 292 /* QuakeNet - Asuka / UnderChat */
|
||||
#define RPL_WHOISSERVICE 310 /* UnderChat extension */
|
||||
#define RPL_WHOISPRIVDEAF 316 /* UnderChat extension */
|
||||
#define RPL_WHOISMARKS 339 /* UnderChat extension */
|
||||
#define RPL_WHOISKILL 343 /* UnderChat extension */
|
||||
#define RPL_EXCEPTLIST 348 /* IRCnet/UnderChat extension */
|
||||
#define RPL_ENDOFEXCEPTLIST 349 /* IRCnet/UnderChat extension */
|
||||
#define RPL_IRCOPSHEADER 386 /* UnderChat extension */
|
||||
#define RPL_IRCOPS 387 /* UnderChat extension */
|
||||
#define RPL_ENDOFIRCOPS 388 /* UnderChat extension */
|
||||
#define ERR_SSLONLYCHAN 469 /* UnderChat extension */
|
||||
#define ERR_OPERONLYCHAN 470 /* UnderChat extension */
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 REZULTAT VIZIBIL
|
||||
|
||||
### ÎNAINTE (v1.2.2):
|
||||
```
|
||||
[14:39] * Joins: iRO (iRO@Nefarious-2F378ED1.eushells.ro)
|
||||
* iRO is iRO@Nefarious-2F378ED1.eushells.ro * iRO
|
||||
|
||||
/WHOIS iRO
|
||||
iRO is iRO@Nefarious-2F378ED1.eushells.ro * iRO
|
||||
iRO on *.Nefarious :The Nefarious World
|
||||
|
||||
/VERSION
|
||||
Nefarious Network
|
||||
```
|
||||
|
||||
### DUPĂ (v1.3.0):
|
||||
```
|
||||
[14:39] * Joins: iRO (iRO@UnderChat-2F378ED1.eushells.ro)
|
||||
* iRO is iRO@UnderChat-2F378ED1.eushells.ro * iRO
|
||||
|
||||
/WHOIS iRO
|
||||
iRO is iRO@UnderChat-2F378ED1.eushells.ro * iRO
|
||||
iRO on *.UnderChat :The UnderChat World
|
||||
|
||||
/VERSION
|
||||
UnderChat Network
|
||||
```
|
||||
|
||||
### Exemplu host hiding:
|
||||
```
|
||||
ÎNAINTE: user@Nefarious-A1B2C3D4.provider.com
|
||||
DUPĂ: user@UnderChat-A1B2C3D4.provider.com
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚀 UPGRADE PENTRU UTILIZATORI
|
||||
|
||||
### ⚠️ **IMPORTANT: RECOMPILARE OBLIGATORIE!**
|
||||
|
||||
Modificările sunt în **codul sursă C**, nu în configurație. Trebuie să recompilezi serverul pentru a aplica schimbările.
|
||||
|
||||
### Pași de upgrade:
|
||||
|
||||
```bash
|
||||
# 1. Oprește serverul (dacă rulează)
|
||||
killall ircd
|
||||
|
||||
# 2. Actualizează repository-ul
|
||||
cd ~/ircu2
|
||||
git pull origin main
|
||||
git checkout v1.3.0
|
||||
|
||||
# 3. Backup configurația existentă
|
||||
cp /home/ircd/ircd/lib/ircd.conf /home/ircd/ircd.conf.backup-$(date +%Y%m%d-%H%M%S)
|
||||
|
||||
# 4. RECOMPILARE COMPLETĂ
|
||||
make clean
|
||||
./configure --prefix=/home/ircd/ircd --with-maxcon=400
|
||||
make
|
||||
make install
|
||||
|
||||
# 5. Pornește serverul cu noua versiune
|
||||
/home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf
|
||||
|
||||
# 6. Verifică versiunea
|
||||
ps aux | grep ircd
|
||||
```
|
||||
|
||||
### Alternativ - Reinstalare completă:
|
||||
|
||||
```bash
|
||||
cd ~/ircu2
|
||||
git pull origin main
|
||||
git checkout v1.3.0
|
||||
|
||||
# Backup config
|
||||
cp /home/ircd/ircd/lib/ircd.conf /tmp/ircd.conf.backup
|
||||
|
||||
# Reinstalează (recompilează automat)
|
||||
./install.sh
|
||||
|
||||
# Restaurează config dacă ai modificări custom
|
||||
# sau configurează din nou interactiv
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧪 VERIFICARE DUPĂ UPGRADE
|
||||
|
||||
### 1. Verifică versiunea compilată:
|
||||
```bash
|
||||
/home/ircd/ircd/bin/ircd -v
|
||||
# Ar trebui să afișeze informații despre versiune
|
||||
```
|
||||
|
||||
### 2. Verifică că serverul rulează:
|
||||
```bash
|
||||
ps aux | grep ircd
|
||||
```
|
||||
|
||||
### 3. Conectează-te și testează:
|
||||
```irc
|
||||
# Conectează-te la server
|
||||
/SERVER madrid.es.eu.underchat.org 6667
|
||||
|
||||
# Testează hostname-ul tău
|
||||
/WHOIS NickTau
|
||||
# Ar trebui să vezi: NickTau@UnderChat-HASH.domain
|
||||
|
||||
# Verifică network name
|
||||
/LUSERS
|
||||
# Ar trebui să vadă referințe la "UnderChat"
|
||||
```
|
||||
|
||||
### 4. Testează sistemul de help:
|
||||
```irc
|
||||
/HELP
|
||||
# Ar trebui să afișeze:
|
||||
# *** UnderChat Help System
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 IMPACT
|
||||
|
||||
### Ce se schimbă vizibil:
|
||||
- ✅ **Hostname-uri:** `UnderChat-` în loc de `Nefarious-`
|
||||
- ✅ **Network name:** `UnderChat` în loc de `Nefarious`
|
||||
- ✅ **Server name în WHOIS:** `*.UnderChat`
|
||||
- ✅ **Hidden hosts:** `Users.UnderChat`, `Staff.UnderChat`
|
||||
- ✅ **Help system:** "UnderChat Help System"
|
||||
|
||||
### Ce NU se schimbă:
|
||||
- ❌ Configurația existentă (`ircd.conf`)
|
||||
- ❌ Comportamentul serverului
|
||||
- ❌ Compatibilitatea cu alte servere P10
|
||||
- ❌ Comenzile IRC
|
||||
- ❌ Funcționalitatea
|
||||
|
||||
---
|
||||
|
||||
## 🔧 DEBUGGING
|
||||
|
||||
### Problemă: Încă văd "Nefarious" după upgrade
|
||||
|
||||
**Cauză:** Nu ai recompilat serverul sau rulezi versiunea veche.
|
||||
|
||||
**Soluție:**
|
||||
```bash
|
||||
# Verifică ce proces rulează
|
||||
ps aux | grep ircd
|
||||
|
||||
# Oprește procesul vechi
|
||||
killall ircd
|
||||
|
||||
# Verifică calea binarului
|
||||
which ircd
|
||||
|
||||
# Pornește versiunea nouă explicit
|
||||
/home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf
|
||||
|
||||
# Verifică din nou
|
||||
ps aux | grep ircd
|
||||
```
|
||||
|
||||
### Problemă: Erori la compilare
|
||||
|
||||
**Soluție:**
|
||||
```bash
|
||||
# Curăță și reîncearcă
|
||||
cd ~/ircu2
|
||||
make clean
|
||||
make distclean
|
||||
./configure --prefix=/home/ircd/ircd --with-maxcon=400
|
||||
make
|
||||
make install
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 CONFIGURARE OVERRIDE (OPȚIONAL)
|
||||
|
||||
Dacă vrei să customizezi hostname-urile DUPĂ instalare, poți supra-scrie valorile în `ircd.conf`:
|
||||
|
||||
```conf
|
||||
features {
|
||||
# Override host hiding prefix
|
||||
"HOST_HIDING_PREFIX" = "MyNetwork";
|
||||
|
||||
# Override hidden host
|
||||
"HIDDEN_HOST" = "Users.MyNetwork.org";
|
||||
|
||||
# Override oper hidden host
|
||||
"HIDDEN_OPERHOST" = "Staff.MyNetwork.org";
|
||||
|
||||
# Override network name
|
||||
"NETWORK" = "MyNetwork";
|
||||
};
|
||||
```
|
||||
|
||||
**NOTĂ:** Aceste override-uri se aplică DOAR după ce ai compilat cu valorile default din cod!
|
||||
|
||||
---
|
||||
|
||||
## ✅ CHECKLIST UPGRADE
|
||||
|
||||
- [ ] Backup configurație existentă
|
||||
- [ ] `git pull origin main`
|
||||
- [ ] `git checkout v1.3.0`
|
||||
- [ ] Oprire server existent (`killall ircd`)
|
||||
- [ ] Recompilare completă (`make clean && ./configure && make && make install`)
|
||||
- [ ] Pornire server nou (`/home/ircd/ircd/bin/ircd -f ...`)
|
||||
- [ ] Verificare hostname în `/WHOIS`
|
||||
- [ ] Verificare network name în `/LUSERS`
|
||||
- [ ] Verificare help system (`/HELP`)
|
||||
- [ ] Test conectare clienți
|
||||
- [ ] Test link server-to-server (dacă aplicabil)
|
||||
|
||||
---
|
||||
|
||||
## 🎉 BENEFICII
|
||||
|
||||
### ÎNAINTE:
|
||||
- ❌ Branding "Nefarious" (software original)
|
||||
- ❌ Confuzie pentru utilizatori
|
||||
- ❌ Nu reflectă identitatea rețelei
|
||||
|
||||
### DUPĂ:
|
||||
- ✅ Branding "UnderChat" consistent
|
||||
- ✅ Identitate clară a rețelei
|
||||
- ✅ Profesionalism sporit
|
||||
- ✅ Recunoaștere brand
|
||||
|
||||
---
|
||||
|
||||
## 📝 VERSIUNI
|
||||
|
||||
| Versiune | Data | Tip | Descriere |
|
||||
|----------|------|-----|-----------|
|
||||
| v1.2.0 | 13 Feb 2026 | Feature | Curățare + Link server-to-server |
|
||||
| v1.2.1 | 13 Feb 2026 | Fix | Link server-to-server funcțional |
|
||||
| v1.2.2 | 13 Feb 2026 | Security | Parola operator criptată MD5 |
|
||||
| **v1.3.0** | **14 Feb 2026** | **Rebrand** | **UnderChat în loc de Nefarious** |
|
||||
|
||||
---
|
||||
|
||||
**Commit:** `REBRAND: Schimbăm 'Nefarious' în 'UnderChat' - Host hiding prefix + Network name`
|
||||
**Tag:** `v1.3.0`
|
||||
**Status:** ✅ PRODUCTION READY (necesită recompilare)
|
||||
|
||||
---
|
||||
|
||||
**⚠️ RECOMPILARE OBLIGATORIE DUPĂ UPGRADE!** 🔄
|
||||
|
||||
|
|
@ -0,0 +1,631 @@
|
|||
# SPOOFHOST - Mascarea Hostname-urilor Utilizatorilor
|
||||
|
||||
## 📋 CE ESTE SPOOFHOST?
|
||||
|
||||
**Spoofhost** (Spoof Host = Host Fals) este un sistem care permite **mascarea hostname-urilor reale** ale utilizatorilor cu **hostname-uri custom** pentru:
|
||||
- **Protecția identității** (ascunderea IP-ului real)
|
||||
- **Organizare** (hostname-uri distinctive pentru staff/VIP)
|
||||
- **Branduri custom** (ex: `admin.underchat.org`, `vip.underchat.org`)
|
||||
|
||||
Este o funcționalitate de **securitate și personalizare** pentru utilizatori autorizați.
|
||||
|
||||
---
|
||||
|
||||
## 🎯 SCOP
|
||||
|
||||
### **Problema FĂRĂ Spoofhost:**
|
||||
|
||||
Când un utilizator se conectează la IRC, hostname-ul său este **vizibil public**:
|
||||
|
||||
```irc
|
||||
[14:30] * Joins: User (user@203.0.113.45)
|
||||
/WHOIS User
|
||||
User is user@203.0.113.45 * Real Name
|
||||
# ^^^^^^^^^^^ IP VIZIBIL!
|
||||
```
|
||||
|
||||
**Riscuri:**
|
||||
- ❌ IP-ul real este expus → vulnerabil la atacuri DDoS
|
||||
- ❌ ISP-ul este vizibil → informații despre locație
|
||||
- ❌ Tracking între canale → lipsă de anonimat
|
||||
|
||||
### **Soluția CU Spoofhost:**
|
||||
|
||||
```irc
|
||||
[14:30] * Joins: Admin (admin@staff.underchat.org)
|
||||
/WHOIS Admin
|
||||
Admin is admin@staff.underchat.org * Network Admin
|
||||
# ^^^^^^^^^^^^^^^^^^^^^ HOSTNAME CUSTOM!
|
||||
```
|
||||
|
||||
**Avantaje:**
|
||||
- ✅ IP-ul real este ascuns
|
||||
- ✅ Identitate profesională (staff.underchat.org)
|
||||
- ✅ Protecție împotriva DDoS
|
||||
- ✅ Brandind custom
|
||||
|
||||
---
|
||||
|
||||
## 🔧 CUM FUNCȚIONEAZĂ?
|
||||
|
||||
### **Mecanismul:**
|
||||
|
||||
1. **Autentificare:** User se conectează normal
|
||||
2. **Aplicare Spoofhost:** Fie automat (autoapply), fie manual cu `/SETHOST`
|
||||
3. **Transformare:** `user@realip.com` → `user@custom.underchat.org`
|
||||
4. **Vizibilitate:** Toată lumea vede hostname-ul fals
|
||||
|
||||
---
|
||||
|
||||
## 📝 SINTAXĂ ÎN ircd.conf
|
||||
|
||||
### **Formatul de bază:**
|
||||
|
||||
```conf
|
||||
Spoofhost "hostname.custom.org" {
|
||||
pass = "parola_secreta";
|
||||
host = "*@*.provider.com";
|
||||
autoapply = no;
|
||||
ismask = no;
|
||||
matchusername = yes;
|
||||
};
|
||||
```
|
||||
|
||||
### **Parametri:**
|
||||
|
||||
| Parametru | Obligatoriu | Descriere |
|
||||
|-----------|-------------|-----------|
|
||||
| `"hostname"` | ✅ DA | Hostname-ul fals care va fi afișat (poate include username: `user@host`) |
|
||||
| `pass` | ❌ NU | Parola pentru `/SETHOST hostname` (dacă user aplică manual) |
|
||||
| `host` | ✅ DA | Hostmask care se potrivește (pentru autoapply sau restricție acces) |
|
||||
| `autoapply` | ❌ NU | `yes` = aplicare automată, `no` = necesită `/SETHOST` (default: `no`) |
|
||||
| `ismask` | ❌ NU | `yes` = hostname-ul conține wildcards (`*`, `?`), `no` = hostname fix |
|
||||
| `matchusername` | ❌ NU | `yes` = verifică și username-ul din hostmask (default: `yes`) |
|
||||
|
||||
---
|
||||
|
||||
## 💡 EXEMPLE PRACTICE
|
||||
|
||||
### **Exemplu 1: Spoofhost AUTOMAT pentru Staff**
|
||||
|
||||
```conf
|
||||
Spoofhost "staff.underchat.org" {
|
||||
host = "*@10.0.0.*";
|
||||
autoapply = yes;
|
||||
};
|
||||
```
|
||||
|
||||
**Funcționare:**
|
||||
- Oricine se conectează de pe `10.0.0.*` (IP-uri interne/VPN)
|
||||
- Primește AUTOMAT hostname: `user@staff.underchat.org`
|
||||
- **NU necesită parolă sau comandă**
|
||||
|
||||
**Rezultat:**
|
||||
```irc
|
||||
# User se conectează de pe 10.0.0.25:
|
||||
[14:30] * Joins: Admin (admin@staff.underchat.org)
|
||||
# ^^^^^^^^^^^^^^^^^^^^^^^^ AUTOMAT!
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### **Exemplu 2: Spoofhost MANUAL cu Parolă**
|
||||
|
||||
```conf
|
||||
Spoofhost "vip.underchat.org" {
|
||||
pass = "parola_vip_123";
|
||||
host = "*";
|
||||
autoapply = no;
|
||||
};
|
||||
```
|
||||
|
||||
**Funcționare:**
|
||||
- Orice user poate solicita acest hostname
|
||||
- Trebuie să folosească comanda: `/SETHOST vip.underchat.org parola_vip_123`
|
||||
- Hostname-ul se schimbă doar după autentificare
|
||||
|
||||
**Utilizare:**
|
||||
```irc
|
||||
# User se conectează normal:
|
||||
/WHOIS User
|
||||
User is user@203.0.113.45
|
||||
|
||||
# User aplică spoofhost manual:
|
||||
/SETHOST vip.underchat.org parola_vip_123
|
||||
|
||||
# Serverul confirmă:
|
||||
:server NOTICE User :Activated host: vip.underchat.org
|
||||
|
||||
# Acum hostname-ul este schimbat:
|
||||
/WHOIS User
|
||||
User is user@vip.underchat.org
|
||||
# ^^^^^^^^^^^^^^^^^ SCHIMBAT!
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### **Exemplu 3: Spoofhost cu USERNAME Custom**
|
||||
|
||||
```conf
|
||||
Spoofhost "admin@admin.underchat.org" {
|
||||
host = "adminuser@*";
|
||||
autoapply = yes;
|
||||
matchusername = yes;
|
||||
};
|
||||
```
|
||||
|
||||
**Funcționare:**
|
||||
- Potrivește doar user-i cu username `adminuser`
|
||||
- Aplică automat hostname: `admin@admin.underchat.org`
|
||||
- **Include și user-ul în spoofhost!**
|
||||
|
||||
**Rezultat:**
|
||||
```irc
|
||||
# User cu username "adminuser" se conectează:
|
||||
[14:30] * Joins: Boss (admin@admin.underchat.org)
|
||||
# ^^^^^^^^^^^^^^^^^^^^^^^^^ user+host custom!
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### **Exemplu 4: Spoofhost cu WILDCARD (ismask)**
|
||||
|
||||
```conf
|
||||
Spoofhost "*.underchat.org" {
|
||||
pass = "parola_wildcard";
|
||||
host = "*@trusted.provider.com";
|
||||
autoapply = no;
|
||||
ismask = yes;
|
||||
};
|
||||
```
|
||||
|
||||
**Funcționare:**
|
||||
- `ismask = yes` → hostname-ul conține wildcards
|
||||
- User poate alege: `staff.underchat.org`, `vip.underchat.org`, `anything.underchat.org`
|
||||
- **PERICOL:** User poate evada ban-uri dacă nu e supervizat!
|
||||
|
||||
**Utilizare:**
|
||||
```irc
|
||||
# User solicită hostname custom:
|
||||
/SETHOST myname.underchat.org parola_wildcard
|
||||
|
||||
# Hostname se schimbă în ce a ales:
|
||||
/WHOIS User
|
||||
User is user@myname.underchat.org
|
||||
# ^^^^^^^^^^^^^^^^^^^^ Ales de user!
|
||||
```
|
||||
|
||||
⚠️ **ATENȚIE:** Folosește `ismask` doar pentru utilizatori de încredere (operatori)!
|
||||
|
||||
---
|
||||
|
||||
### **Exemplu 5: Spoofhost pentru ISP Specific**
|
||||
|
||||
```conf
|
||||
Spoofhost "protected.underchat.org" {
|
||||
host = "*@*.dial-up.provider.com";
|
||||
autoapply = yes;
|
||||
};
|
||||
```
|
||||
|
||||
**Funcționare:**
|
||||
- Oricine se conectează de pe `*.dial-up.provider.com`
|
||||
- Primește automat: `user@protected.underchat.org`
|
||||
- Protecție pentru utilizatori de pe ISP cunoscut
|
||||
|
||||
---
|
||||
|
||||
## 🎓 CAZURI DE UTILIZARE COMUNE
|
||||
|
||||
### **1. Staff și Operatori**
|
||||
|
||||
```conf
|
||||
# Administratori
|
||||
Spoofhost "admin.underchat.org" {
|
||||
host = "*@10.0.0.*";
|
||||
autoapply = yes;
|
||||
};
|
||||
|
||||
# Moderatori
|
||||
Spoofhost "moderator.underchat.org" {
|
||||
host = "*@172.16.0.*";
|
||||
autoapply = yes;
|
||||
};
|
||||
|
||||
# Operatori globali
|
||||
Spoofhost "staff.underchat.org" {
|
||||
pass = "staff_password";
|
||||
host = "*";
|
||||
autoapply = no;
|
||||
};
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### **2. Utilizatori VIP/Premium**
|
||||
|
||||
```conf
|
||||
# VIP manual (cu parolă)
|
||||
Spoofhost "vip.underchat.org" {
|
||||
pass = "vip_secret_2026";
|
||||
host = "*";
|
||||
autoapply = no;
|
||||
};
|
||||
|
||||
# Premium automat (pe baza IP-ului)
|
||||
Spoofhost "premium.underchat.org" {
|
||||
host = "*@premium-vpn.service.com";
|
||||
autoapply = yes;
|
||||
};
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### **3. Protecție DDoS pentru Toți**
|
||||
|
||||
```conf
|
||||
# Ascunde IP-uri pentru toată lumea
|
||||
Spoofhost "users.underchat.org" {
|
||||
host = "*";
|
||||
autoapply = yes;
|
||||
};
|
||||
```
|
||||
|
||||
⚠️ **NOTĂ:** Acest lucru ascunde TOATE IP-urile! Poate face debugging-ul dificil.
|
||||
|
||||
---
|
||||
|
||||
### **4. Hostname-uri Distinctive pentru Locații**
|
||||
|
||||
```conf
|
||||
# Utilizatori din Europa
|
||||
Spoofhost "eu.users.underchat.org" {
|
||||
host = "*@*.eu";
|
||||
autoapply = yes;
|
||||
};
|
||||
|
||||
# Utilizatori din US
|
||||
Spoofhost "us.users.underchat.org" {
|
||||
host = "*@*.us";
|
||||
autoapply = yes;
|
||||
};
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ CONFIGURARE ÎN ircd.conf
|
||||
|
||||
### **Exemplu Complet pentru UnderChat:**
|
||||
|
||||
```conf
|
||||
# ============================================================================
|
||||
# SECȚIUNE: SPOOFHOST - Mascarea Hostname-urilor
|
||||
# ============================================================================
|
||||
|
||||
# Administratori - Automat pentru IP-uri interne
|
||||
Spoofhost "admin.underchat.org" {
|
||||
host = "*@10.0.0.*";
|
||||
autoapply = yes;
|
||||
};
|
||||
|
||||
# Staff - Manual cu parolă
|
||||
Spoofhost "staff.underchat.org" {
|
||||
pass = "staff_password_2026";
|
||||
host = "*";
|
||||
autoapply = no;
|
||||
};
|
||||
|
||||
# VIP - Manual cu parolă
|
||||
Spoofhost "vip.underchat.org" {
|
||||
pass = "vip_secret";
|
||||
host = "*";
|
||||
autoapply = no;
|
||||
};
|
||||
|
||||
# Protecție utilizatori - Automat pentru toată lumea
|
||||
Spoofhost "users.underchat.org" {
|
||||
host = "*";
|
||||
autoapply = yes;
|
||||
};
|
||||
|
||||
# Operatori cu hostname custom (freeform pentru operatori)
|
||||
# Necesită privilege "freeform" în Operator block
|
||||
Spoofhost "*.underchat.org" {
|
||||
host = "*@trusted.network.*";
|
||||
autoapply = no;
|
||||
ismask = yes;
|
||||
};
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔐 PERMISIUNI OPERATOR (freeform)
|
||||
|
||||
Pentru ca operatorii să poată folosi `/SETHOST` cu hostname-uri arbitrare (fără Spoofhost pre-configurat), trebuie să aibă privilegiul **`freeform`**:
|
||||
|
||||
```conf
|
||||
Operator {
|
||||
name = "AdminUser";
|
||||
password = "$MD5$...";
|
||||
host = "*@*";
|
||||
class = "Opers";
|
||||
|
||||
# Permisiuni
|
||||
privileges = "freeform"; # Permite /SETHOST fără restricții
|
||||
};
|
||||
```
|
||||
|
||||
**Cu `freeform`:**
|
||||
```irc
|
||||
/SETHOST anything.i.want.org
|
||||
# Funcționează! (fără să fie configurat în Spoofhost block)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔍 COMENZI UTILIZATOR
|
||||
|
||||
### **1. /SETHOST - Aplicare Spoofhost Manual**
|
||||
|
||||
```irc
|
||||
# Sintaxă:
|
||||
/SETHOST hostname [parola]
|
||||
|
||||
# Exemplu cu parolă:
|
||||
/SETHOST vip.underchat.org vip_secret
|
||||
|
||||
# Exemplu fără parolă (pentru operatori cu freeform):
|
||||
/SETHOST custom.underchat.org
|
||||
```
|
||||
|
||||
### **2. /WHOIS - Verificare Hostname**
|
||||
|
||||
```irc
|
||||
/WHOIS User
|
||||
User is user@vip.underchat.org * VIP User
|
||||
# ^^^^^^^^^^^^^^^^^ Spoofhost activ
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 AVANTAJE vs DEZAVANTAJE
|
||||
|
||||
### ✅ **AVANTAJE:**
|
||||
|
||||
1. **Protecție IP** - Ascunde IP-uri reale împotriva DDoS
|
||||
2. **Brandind** - Hostname-uri professional (staff.underchat.org)
|
||||
3. **Organizare** - Diferențiază staff/VIP/users
|
||||
4. **Flexibilitate** - Automat sau manual, cu/fără parolă
|
||||
5. **Personalizare** - Wildcards pentru hostname-uri custom
|
||||
|
||||
### ⚠️ **DEZAVANTAJE:**
|
||||
|
||||
1. **Dificultate debugging** - IP-uri ascunse → mai greu de identificat abuzatori
|
||||
2. **Risc ismask** - Wildcard-uri pot fi abuzate pentru evadarea ban-urilor
|
||||
3. **Configurare necesară** - Trebuie planificat și configurat manual
|
||||
4. **Confuzie** - Prea multe spoofhost-uri → dificil de gestionat
|
||||
|
||||
---
|
||||
|
||||
## 🚨 BEST PRACTICES
|
||||
|
||||
### **1. Folosește autoapply pentru staff (IP-uri interne)**
|
||||
|
||||
```conf
|
||||
# BINE:
|
||||
Spoofhost "staff.underchat.org" {
|
||||
host = "*@10.0.0.*";
|
||||
autoapply = yes;
|
||||
};
|
||||
```
|
||||
|
||||
### **2. Folosește parole PUTERNICE pentru spoofhost-uri publice**
|
||||
|
||||
```conf
|
||||
# EVITĂ:
|
||||
pass = "123456"; # ❌ SLAB!
|
||||
|
||||
# BINE:
|
||||
pass = "vip_Str0ng_P@ssw0rd_2026"; # ✅ PUTERNIC!
|
||||
```
|
||||
|
||||
### **3. NU folosi ismask pentru utilizatori obișnuiți**
|
||||
|
||||
```conf
|
||||
# ❌ PERICOL:
|
||||
Spoofhost "*.underchat.org" {
|
||||
host = "*"; # Oricine poate!
|
||||
ismask = yes;
|
||||
};
|
||||
|
||||
# ✅ SIGUR:
|
||||
Spoofhost "*.underchat.org" {
|
||||
host = "*@trusted.admin.network"; # Doar admini
|
||||
ismask = yes;
|
||||
};
|
||||
```
|
||||
|
||||
### **4. Documentează în MOTD hostname-urile disponibile**
|
||||
|
||||
```
|
||||
# În ircd.motd:
|
||||
-
|
||||
- Hostname-uri disponibile:
|
||||
- staff.underchat.org (automat pentru staff)
|
||||
- vip.underchat.org (manual, contactează admin)
|
||||
- users.underchat.org (automat pentru toți)
|
||||
-
|
||||
- Pentru /SETHOST contactează: admin@underchat.org
|
||||
-
|
||||
```
|
||||
|
||||
### **5. Păstrează log-urile IP-urilor REALE**
|
||||
|
||||
Chiar dacă hostname-urile sunt spoofed, serverul TREBUIE să logeze IP-urile reale pentru:
|
||||
- Identificarea abuza torilor
|
||||
- Investigații securitate
|
||||
- Debugging probleme
|
||||
|
||||
---
|
||||
|
||||
## 🔧 TROUBLESHOOTING
|
||||
|
||||
### **Problemă: /SETHOST nu funcționează**
|
||||
|
||||
**Cauze posibile:**
|
||||
|
||||
1. **Spoofhost NU este configurat**
|
||||
```bash
|
||||
grep 'Spoofhost "' /home/ircd/ircd/lib/ircd.conf
|
||||
# Dacă nu găsește → Trebuie adăugat
|
||||
```
|
||||
|
||||
2. **Parola greșită**
|
||||
```irc
|
||||
/SETHOST vip.underchat.org wrong_password
|
||||
# Output:
|
||||
:server NOTICE nick :Invalid password for spoofhost
|
||||
```
|
||||
|
||||
3. **User nu se potrivește cu host pattern**
|
||||
```conf
|
||||
# Config:
|
||||
Spoofhost "vip.underchat.org" {
|
||||
host = "*@specific.provider.com";
|
||||
pass = "secret";
|
||||
};
|
||||
|
||||
# User de pe alt ISP:
|
||||
user@other.provider.com
|
||||
# → NU se potrivește → BLOCAT!
|
||||
```
|
||||
|
||||
4. **SETHOST_USER feature dezactivat**
|
||||
```conf
|
||||
# Verifică în features:
|
||||
features {
|
||||
"SETHOST" = "TRUE"; # Trebuie TRUE!
|
||||
};
|
||||
```
|
||||
|
||||
### **Soluție generală:**
|
||||
|
||||
```bash
|
||||
# 1. Verifică că Spoofhost există
|
||||
grep -A 4 'Spoofhost "vip' /home/ircd/ircd/lib/ircd.conf
|
||||
|
||||
# 2. Verifică că SETHOST este activat
|
||||
grep SETHOST /home/ircd/ircd/lib/ircd.conf
|
||||
|
||||
# 3. Testează cu hostmask corect
|
||||
# În IRC:
|
||||
/SETHOST vip.underchat.org parola_corecta
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 INTEGRARE CU HOST HIDING
|
||||
|
||||
**Spoofhost** și **Host Hiding** (feature-ul built-in) sunt **diferite**:
|
||||
|
||||
### **Host Hiding (Built-in):**
|
||||
```conf
|
||||
features {
|
||||
"HOST_HIDING" = "TRUE";
|
||||
"HIDDEN_HOST" = "Users.UnderChat";
|
||||
"HOST_HIDING_PREFIX" = "UnderChat";
|
||||
};
|
||||
```
|
||||
- Ascunde AUTOMAT IP-uri cu hash
|
||||
- Format: `UnderChat-HASH.domain.tld`
|
||||
- NU necesită configurare per-user
|
||||
|
||||
### **Spoofhost (Custom):**
|
||||
```conf
|
||||
Spoofhost "custom.underchat.org" {
|
||||
host = "*";
|
||||
autoapply = yes;
|
||||
};
|
||||
```
|
||||
- Hostname-uri CUSTOM specifice
|
||||
- Control granular per-user/grup
|
||||
- Necesită configurare manuală
|
||||
|
||||
**Pot fi folosite ÎMPREUNĂ:**
|
||||
- Host Hiding pentru utilizatori normali
|
||||
- Spoofhost pentru staff/VIP
|
||||
|
||||
---
|
||||
|
||||
## 📚 REFERINȚE
|
||||
|
||||
- **Cod sursă:** `ircd/s_conf.c` (funcția `find_shost_conf`)
|
||||
- **Exemplu config:** `doc/example.conf` (liniile 954-987)
|
||||
- **Feature SETHOST:** Controlează dacă `/SETHOST` este disponibil
|
||||
|
||||
---
|
||||
|
||||
## 🎯 CONCLUZIE
|
||||
|
||||
**Spoofhost** = **Mascarea hostname-urilor pentru protecție și brandind**
|
||||
|
||||
Transformă hostname-uri reale:
|
||||
```irc
|
||||
user@203.0.113.45 → user@staff.underchat.org
|
||||
user@isp.provider → user@vip.underchat.org
|
||||
```
|
||||
|
||||
Este o funcționalitate **esențială** pentru:
|
||||
- ✅ Protecția identității utilizatorilor
|
||||
- ✅ Brandind profesional pentru staff
|
||||
- ✅ Organizare ierarhică (admin/staff/vip/users)
|
||||
- ✅ Securitate împotriva DDoS
|
||||
|
||||
---
|
||||
|
||||
**Data:** 14 Februarie 2026
|
||||
**Versiune:** 1.0
|
||||
**Pentru:** UnderChat IRCd v1.4.0+
|
||||
|
||||
---
|
||||
|
||||
## 🚀 QUICK START
|
||||
|
||||
**Pentru a adăuga Spoofhost în rețeaua ta:**
|
||||
|
||||
```conf
|
||||
# Adaugă în /home/ircd/ircd/lib/ircd.conf:
|
||||
|
||||
# Staff automat
|
||||
Spoofhost "staff.underchat.org" {
|
||||
host = "*@10.0.0.*";
|
||||
autoapply = yes;
|
||||
};
|
||||
|
||||
# VIP manual
|
||||
Spoofhost "vip.underchat.org" {
|
||||
pass = "vip_password";
|
||||
host = "*";
|
||||
autoapply = no;
|
||||
};
|
||||
|
||||
# Protecție toți utilizatorii
|
||||
Spoofhost "users.underchat.org" {
|
||||
host = "*";
|
||||
autoapply = yes;
|
||||
};
|
||||
|
||||
# În features, asigură-te că:
|
||||
features {
|
||||
"SETHOST" = "TRUE";
|
||||
};
|
||||
```
|
||||
|
||||
**Restart IRCd și testează:**
|
||||
```irc
|
||||
/SETHOST vip.underchat.org vip_password
|
||||
/WHOIS YourNick
|
||||
```
|
||||
|
||||
**GATA!** ✅
|
||||
|
||||
|
|
@ -0,0 +1,103 @@
|
|||
# URGENT: Instrucțiuni Actualizare v1.5.0
|
||||
|
||||
## PROBLEMĂ
|
||||
Server-ul tău vede versiunea veche fără PSEUDO + SPOOFHOST.
|
||||
Local am modificările, dar trebuie push-uite corect.
|
||||
|
||||
## SOLUȚIE - Rulează pe SERVER:
|
||||
|
||||
```bash
|
||||
cd ~/ircu2
|
||||
|
||||
# 1. Reset complet la remote (sigur)
|
||||
git fetch --all
|
||||
git reset --hard origin/main
|
||||
|
||||
# 2. Pull forțat
|
||||
git pull origin main --force
|
||||
|
||||
# 3. Verifică versiunea
|
||||
git log --oneline -3
|
||||
|
||||
# 4. Verifică modificările
|
||||
grep -c "EOFCONFIG_PSEUDO" install.sh
|
||||
grep -c "EOFCONFIG_SPOOFHOST" install.sh
|
||||
|
||||
# Dacă returnează 0, înseamnă că push-ul nu a mers
|
||||
# Atunci rulează:
|
||||
git fetch --all --tags
|
||||
git checkout main
|
||||
git pull origin main
|
||||
|
||||
# Verifică din nou:
|
||||
wc -l install.sh
|
||||
# Ar trebui să fie ~1830+ linii (nu ~1476)
|
||||
```
|
||||
|
||||
## DACĂ TOT NU FUNCȚIONEAZĂ:
|
||||
|
||||
Am pregătit modificările local. Pot să:
|
||||
|
||||
1. **Opțiunea A**: Fac un fresh push complet
|
||||
2. **Opțiunea B**: Trimiți fișierul install.sh modificat direct pe server
|
||||
3. **Opțiunea C**: Creez un patch file pe care îl aplici pe server
|
||||
|
||||
## Verificare Rapidă ce Lipsește:
|
||||
|
||||
```bash
|
||||
# Pe server, verifică:
|
||||
grep "CONFIGURARE PSEUDO" install.sh
|
||||
grep "CONFIGURARE SPOOFHOST" install.sh
|
||||
|
||||
# Dacă returnează gol → Modificările NU sunt pe server
|
||||
# Dacă returnează linii → Modificările SUNT pe server
|
||||
```
|
||||
|
||||
## Conținut Modificări (pentru referință):
|
||||
|
||||
### 1. PSEUDO (~80 linii noi)
|
||||
- Secțiune configurare interactivă la linia ~1393
|
||||
- Template PSEUDO la linia ~784
|
||||
- Generare PSEUDO la linia ~960
|
||||
|
||||
### 2. SPOOFHOST (~120 linii noi)
|
||||
- Secțiune configurare interactivă la linia ~1465
|
||||
- Template SPOOFHOST la linia ~790
|
||||
- Generare SPOOFHOST la linia ~975
|
||||
|
||||
### 3. Fișiere NOI:
|
||||
- SPOOFHOST_EXPLAINED.md (650+ linii)
|
||||
- PSEUDO_EXPLAINED.md (deja existent)
|
||||
|
||||
## Test Final:
|
||||
|
||||
```bash
|
||||
# După actualizare, rulează:
|
||||
./install.sh
|
||||
|
||||
# Ar trebui să vezi:
|
||||
# - Configurare CRULE
|
||||
# - Configurare PSEUDO ← NOU!
|
||||
# - Configurare SPOOFHOST ← NOU!
|
||||
```
|
||||
|
||||
## ACUM ce fac?
|
||||
|
||||
Spune-mi ce vezi când rulezi:
|
||||
```bash
|
||||
cd ~/ircu2
|
||||
wc -l install.sh
|
||||
grep -c "PSEUDO" install.sh
|
||||
grep -c "SPOOFHOST" install.sh
|
||||
```
|
||||
|
||||
Dacă vezi:
|
||||
- wc -l: ~1476 linii → Versiune VECHE (fără modificări)
|
||||
- wc -l: ~1830 linii → Versiune NOUĂ (cu modificări) ✅
|
||||
|
||||
---
|
||||
|
||||
**Data**: 14 Februarie 2026
|
||||
**Versiune Target**: v1.5.0
|
||||
**Status**: Modificări locale gata, aștept confirmare push pe GitLab
|
||||
|
||||
|
|
@ -1,62 +0,0 @@
|
|||
# Script pentru curățare și push
|
||||
Set-Location D:\pip\underchat-ircd
|
||||
|
||||
Write-Host "=== Ștergere fișiere fix și madrid din Git ===" -ForegroundColor Yellow
|
||||
|
||||
# Lista fișierelor de șters
|
||||
$filesToDelete = @(
|
||||
"fix-eofconfig-ports.sh",
|
||||
"fix-config.sh",
|
||||
"fix-and-install-madrid.sh",
|
||||
"fix-aarch64.sh",
|
||||
"fix-host-hiding.sh",
|
||||
"fix-whois-notifications.sh",
|
||||
"quick-install-madrid.sh",
|
||||
"install-madrid.sh",
|
||||
"INSTALL_MADRID.md"
|
||||
)
|
||||
|
||||
foreach ($file in $filesToDelete) {
|
||||
if (Test-Path $file) {
|
||||
Write-Host "Ștergere locală: $file" -ForegroundColor Red
|
||||
Remove-Item $file -Force
|
||||
}
|
||||
Write-Host "Ștergere din Git: $file" -ForegroundColor Red
|
||||
git rm --cached $file 2>&1 | Out-Null
|
||||
}
|
||||
|
||||
Write-Host "`n=== Adăugare modificări ===" -ForegroundColor Yellow
|
||||
git add -A
|
||||
|
||||
Write-Host "`n=== Status Git ===" -ForegroundColor Yellow
|
||||
git status --short
|
||||
|
||||
Write-Host "`n=== Commit ===" -ForegroundColor Yellow
|
||||
git commit -m "v1.2.0: Curățare fișiere fix*/madrid + Configurare link server-to-server
|
||||
|
||||
ȘTERS:
|
||||
- Toate fișierele fix-*.sh (temporare, integrate în install.sh)
|
||||
- Toate fișierele *madrid* (scripts specifice)
|
||||
|
||||
ADĂUGAT în install.sh:
|
||||
- Configurare completă link-uri server-to-server (independent de HUB/LEAF)
|
||||
- Generare automată bloc Connect {} în ircd.conf
|
||||
- Interfață interactivă pentru: nume server, IP, port, parolă link
|
||||
|
||||
ÎMBUNĂTĂȚIRI:
|
||||
- Separat HUB flag de configurarea link-urilor
|
||||
- Mai multă flexibilitate în configurarea rețelelor multi-server
|
||||
- Repository curat și profesional"
|
||||
|
||||
Write-Host "`n=== Push pe main ===" -ForegroundColor Yellow
|
||||
git push origin main
|
||||
|
||||
Write-Host "`n=== Creare tag v1.2.0 ===" -ForegroundColor Yellow
|
||||
git tag -a v1.2.0 -m "Release v1.2.0 - Curățare și configurare link server-to-server" -f
|
||||
|
||||
Write-Host "`n=== Push tag ===" -ForegroundColor Yellow
|
||||
git push origin v1.2.0 -f
|
||||
|
||||
Write-Host "`n=== GATA! ===" -ForegroundColor Green
|
||||
Write-Host "Verifică pe GitLab: https://gitlab.back.ro/underchat/ircu2.git" -ForegroundColor Cyan
|
||||
|
||||
443
install.sh
443
install.sh
|
|
@ -532,7 +532,7 @@ generate_config() {
|
|||
# Fișier de configurare pentru UnderChat IRCd
|
||||
# Generat automat în data: 2026
|
||||
# Limba: Română
|
||||
# Model: Node-Ase.ovh Professional IRC Server
|
||||
# Model: UnderChat.org Professional IRC Server
|
||||
|
||||
# ============================================================================
|
||||
# SECȚIUNE: GENERAL
|
||||
|
|
@ -608,6 +608,28 @@ Class {
|
|||
usermode = "+ix";
|
||||
};
|
||||
|
||||
# Clasă pentru IRCcloud
|
||||
Class {
|
||||
name = "irccloud";
|
||||
pingfreq = 1 minutes 30 seconds;
|
||||
sendq = 160000;
|
||||
maxlinks = 100;
|
||||
usermode = "+i";
|
||||
};
|
||||
|
||||
# Clasa pentru IRCcloud2
|
||||
Client {
|
||||
host = "*@*irccloud.com";
|
||||
class = "irccloud";
|
||||
maxlinks = 50;
|
||||
};
|
||||
|
||||
Client {
|
||||
class = "irccloud";
|
||||
host = "*@*xshellz.com";
|
||||
maxlinks = 50;
|
||||
};
|
||||
|
||||
# Clasă pentru operatori
|
||||
Class {
|
||||
name = "Opers";
|
||||
|
|
@ -626,15 +648,6 @@ Class {
|
|||
remove = yes;
|
||||
};
|
||||
|
||||
# Clasă pentru IRCcloud
|
||||
Class {
|
||||
name = "irccloud";
|
||||
pingfreq = 1 minutes 30 seconds;
|
||||
sendq = 160000;
|
||||
maxlinks = 100;
|
||||
usermode = "+i";
|
||||
};
|
||||
|
||||
# ============================================================================
|
||||
# SECȚIUNE: CLIENT - Restricții pentru conexiuni
|
||||
# ============================================================================
|
||||
|
|
@ -664,7 +677,7 @@ Client {
|
|||
Jupe {
|
||||
# Litere și caractere speciale
|
||||
nick = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,{,|,},~,-,_,\`";
|
||||
nick = "EuWorld,UWorld,UWorld2,Defender";
|
||||
nick = "EuWorld,UWorld,UWorld2,Defender,Cloner,OPERServ,Oper";
|
||||
nick = "login,underchat,protocol,pass,newpass,org";
|
||||
nick = "LPT1,LPT2,COM1,COM2,COM3,COM4,AUX,AUTH";
|
||||
|
||||
|
|
@ -714,9 +727,11 @@ Operator {
|
|||
|
||||
# Permisiuni și notificări
|
||||
admin = yes;
|
||||
hide_oper = no;
|
||||
hide_channels = no;
|
||||
# snomask = "+s";
|
||||
swhois = "The One That Was, The One That Is, The One That Will Be"; # Mesaj special în WHOIS pentru operatori
|
||||
hide_oper = yes; # Ascunde prezenta operatorului în listele de utilizatori
|
||||
hide_channels = yes; # Ascunde canalele la care este operatorul prezent
|
||||
whois_notice = yes; # Afișează notificare specială în WHOIS pentru operatori
|
||||
# snomask = yes; # Afișează în server notice-uri pentru acțiunile operatorului (ex: +s pentru sethost)
|
||||
# privileges = "PRIV_WHOIS_NOTICE", "PRIV_HIDE_OPER", "PRIV_ADMIN";
|
||||
};
|
||||
|
||||
|
|
@ -726,6 +741,12 @@ Operator {
|
|||
|
||||
EOFCONFIG_HUB_CONNECT
|
||||
|
||||
# ============================================================================
|
||||
# SECȚIUNE: CRULE - Reguli de Conectare Inteligente (SmartRoute)
|
||||
# ============================================================================
|
||||
|
||||
EOFCONFIG_CRULES
|
||||
|
||||
# ============================================================================
|
||||
# SECȚIUNE: UWORLD - Servere de servicii
|
||||
# ============================================================================
|
||||
|
|
@ -743,9 +764,31 @@ UWorld {
|
|||
# MOTD Server targetat pentru
|
||||
#motd {
|
||||
# host = "*.net";
|
||||
# file = "net_com.motd";
|
||||
# file = "net.motd";
|
||||
#};
|
||||
|
||||
#motd {
|
||||
# host = "*.ro";
|
||||
# file = "ro.motd";
|
||||
#};
|
||||
|
||||
#motd {
|
||||
# host = "*.hu";
|
||||
# file = "hu.motd";
|
||||
#};
|
||||
|
||||
# ============================================================================
|
||||
# SECȚIUNE: PSEUDO - Alias-uri Comenzi pentru Servicii
|
||||
# ============================================================================
|
||||
|
||||
EOFCONFIG_PSEUDO
|
||||
|
||||
# ============================================================================
|
||||
# SECȚIUNE: SPOOFHOST - Mascarea Hostname-urilor
|
||||
# ============================================================================
|
||||
|
||||
EOFCONFIG_SPOOFHOST
|
||||
|
||||
# ============================================================================
|
||||
# SECȚIUNE: FEATURE - Caracteristici și setări
|
||||
# ============================================================================
|
||||
|
|
@ -874,22 +917,72 @@ EOFCONFIG
|
|||
|
||||
# Generare CONNECT section pentru link server-to-server (independent de HUB/LEAF)
|
||||
if [ "$hub_config" = "yes" ]; then
|
||||
HUB_CONNECT_BLOCK="# Conectare server-to-server
|
||||
Connect {
|
||||
name = \"$hub_name\";
|
||||
host = \"$hub_host\";
|
||||
password = \"$hub_pass\";
|
||||
port = $hub_port;
|
||||
class = \"Server\";
|
||||
autoconnect = yes;
|
||||
hub;
|
||||
};"
|
||||
# Escape-uim caracterele speciale pentru sed
|
||||
hub_name_escaped=$(printf '%s\n' "$hub_name" | sed 's:[][\/.^$*]:\\&:g')
|
||||
hub_host_escaped=$(printf '%s\n' "$hub_host" | sed 's:[][\/.^$*]:\\&:g')
|
||||
hub_pass_escaped=$(printf '%s\n' "$hub_pass" | sed 's:[][\/.^$*|]:\\&:g')
|
||||
|
||||
sed -i "s|EOFCONFIG_HUB_CONNECT|$HUB_CONNECT_BLOCK|g" "$config_file"
|
||||
# Generăm blocul Connect folosind awk pentru înlocuire sigură
|
||||
awk -v name="$hub_name_escaped" -v host="$hub_host_escaped" -v pass="$hub_pass_escaped" -v port="$hub_port" '
|
||||
/EOFCONFIG_HUB_CONNECT/ {
|
||||
print "# Conectare server-to-server"
|
||||
print "Connect {"
|
||||
print " name = \"" name "\";"
|
||||
print " host = \"" host "\";"
|
||||
print " password = \"" pass "\";"
|
||||
print " port = " port ";"
|
||||
print " class = \"Server\";"
|
||||
print " autoconnect = yes;"
|
||||
print " hub;"
|
||||
print "};"
|
||||
next
|
||||
}
|
||||
{ print }
|
||||
' "$config_file" > "$config_file.tmp" && mv "$config_file.tmp" "$config_file"
|
||||
else
|
||||
sed -i 's|EOFCONFIG_HUB_CONNECT|# Niciun link server-to-server configurat|g' "$config_file"
|
||||
fi
|
||||
|
||||
# Generare CRULE section (dacă există)
|
||||
if [ -n "$CRULE_CONFIG" ]; then
|
||||
# Escape-uim CRULE_CONFIG pentru awk
|
||||
awk -v crule="$CRULE_CONFIG" '
|
||||
/EOFCONFIG_CRULES/ {
|
||||
print crule
|
||||
next
|
||||
}
|
||||
{ print }
|
||||
' "$config_file" > "$config_file.tmp" && mv "$config_file.tmp" "$config_file"
|
||||
else
|
||||
sed -i 's|EOFCONFIG_CRULES|# CRULE: Neconfigurata|g' "$config_file"
|
||||
fi
|
||||
|
||||
# Generare PSEUDO section (dacă există)
|
||||
if [ -n "$PSEUDO_CONFIG" ]; then
|
||||
awk -v pseudo="$PSEUDO_CONFIG" '
|
||||
/EOFCONFIG_PSEUDO/ {
|
||||
print pseudo
|
||||
next
|
||||
}
|
||||
{ print }
|
||||
' "$config_file" > "$config_file.tmp" && mv "$config_file.tmp" "$config_file"
|
||||
else
|
||||
sed -i 's|EOFCONFIG_PSEUDO|# PSEUDO: Neconfigurata|g' "$config_file"
|
||||
fi
|
||||
|
||||
# Generare SPOOFHOST section (dacă există)
|
||||
if [ -n "$SPOOFHOST_CONFIG" ]; then
|
||||
awk -v spoofhost="$SPOOFHOST_CONFIG" '
|
||||
/EOFCONFIG_SPOOFHOST/ {
|
||||
print spoofhost
|
||||
next
|
||||
}
|
||||
{ print }
|
||||
' "$config_file" > "$config_file.tmp" && mv "$config_file.tmp" "$config_file"
|
||||
else
|
||||
sed -i 's|EOFCONFIG_SPOOFHOST|# SPOOFHOST: Neconfigurata|g' "$config_file"
|
||||
fi
|
||||
|
||||
log_success "Fișier de configurare generat: $config_file"
|
||||
return 0
|
||||
}
|
||||
|
|
@ -1189,6 +1282,299 @@ main() {
|
|||
hub_port=""
|
||||
hub_password=""
|
||||
fi
|
||||
|
||||
# Configurare CRULE (Connection Rules pentru rețele multi-server)
|
||||
echo ""
|
||||
echo -e "${GALBEN}═══════════════════════════════════════${NC}"
|
||||
echo -e "${GALBEN}CONFIGURARE CRULE (Reguli Conexiune)${NC}"
|
||||
echo -e "${GALBEN}═══════════════════════════════════════${NC}"
|
||||
echo ""
|
||||
echo " CRULE permite optimizarea topologiei rețelei IRC."
|
||||
echo " Previne link-uri redundante între servere."
|
||||
echo ""
|
||||
echo " Exemplu: Dacă ai servere în EU și US, CRULE poate"
|
||||
echo " limita la 1 singur link EU-US în loc de multiple."
|
||||
echo ""
|
||||
|
||||
read -p " Configurare CRULE pentru optimizare rețea? (y/n) [n]: " configure_crule
|
||||
configure_crule=${configure_crule:-n}
|
||||
|
||||
if [ "$configure_crule" = "y" ] || [ "$configure_crule" = "Y" ]; then
|
||||
echo ""
|
||||
log_info "Configurare CRULE pentru rețea multi-server"
|
||||
echo ""
|
||||
echo " Selectați tipul de optimizare:"
|
||||
echo " 1) Previne link-uri redundante către o regiune (recomandat)"
|
||||
echo " 2) Necesită operator online pentru link-uri"
|
||||
echo " 3) Ambele (1+2)"
|
||||
echo " 4) Custom (configurare manuală ulterior)"
|
||||
echo ""
|
||||
|
||||
read -p " Opțiune [1]: " crule_option
|
||||
crule_option=${crule_option:-1}
|
||||
|
||||
case $crule_option in
|
||||
1)
|
||||
echo ""
|
||||
read -p " Regiune/pattern de blocat (ex: *.eu.*, *.us.*, *.asia.*) [*.eu.*]: " crule_pattern
|
||||
crule_pattern=${crule_pattern:-*.eu.*}
|
||||
|
||||
CRULE_CONFIG="# Previne link-uri redundante către ${crule_pattern}
|
||||
CRule {
|
||||
server = \"${crule_pattern}\";
|
||||
all = no;
|
||||
rule = \"connected(${crule_pattern})\";
|
||||
};"
|
||||
log_success "CRULE: Blocare link-uri redundante către ${crule_pattern}"
|
||||
;;
|
||||
2)
|
||||
echo ""
|
||||
read -p " Pattern servere care necesită oper (ex: *.test.*, *.risky.*) [*.test.*]: " crule_pattern
|
||||
crule_pattern=${crule_pattern:-*.test.*}
|
||||
|
||||
CRULE_CONFIG="# Necesită operator online pentru ${crule_pattern}
|
||||
CRule {
|
||||
server = \"${crule_pattern}\";
|
||||
all = no;
|
||||
rule = \"!directop()\";
|
||||
};"
|
||||
log_success "CRULE: Necesită oper pentru link-uri către ${crule_pattern}"
|
||||
;;
|
||||
3)
|
||||
echo ""
|
||||
read -p " Regiune de blocat (ex: *.eu.*, *.us.*) [*.eu.*]: " crule_pattern1
|
||||
crule_pattern1=${crule_pattern1:-*.eu.*}
|
||||
|
||||
read -p " Pattern servere care necesită oper [*.test.*]: " crule_pattern2
|
||||
crule_pattern2=${crule_pattern2:-*.test.*}
|
||||
|
||||
CRULE_CONFIG="# Previne link-uri redundante către ${crule_pattern1}
|
||||
CRule {
|
||||
server = \"${crule_pattern1}\";
|
||||
all = no;
|
||||
rule = \"connected(${crule_pattern1})\";
|
||||
};
|
||||
|
||||
# Necesită operator online pentru ${crule_pattern2}
|
||||
CRule {
|
||||
server = \"${crule_pattern2}\";
|
||||
all = no;
|
||||
rule = \"!directop()\";
|
||||
};"
|
||||
log_success "CRULE: Configurare multiplă aplicată"
|
||||
;;
|
||||
4)
|
||||
CRULE_CONFIG="# CRULE: Configurare custom
|
||||
# Editează manual /home/ircd/ircd/lib/ircd.conf
|
||||
# Vezi documentația: CRULE_EXPLAINED.md
|
||||
# Exemplu:
|
||||
# CRule {
|
||||
# server = \"*.eu.underchat.org\";
|
||||
# all = no;
|
||||
# rule = \"connected(*.eu.underchat.org)\";
|
||||
# };"
|
||||
log_info "CRULE: Placeholder pentru configurare manuală"
|
||||
;;
|
||||
*)
|
||||
CRULE_CONFIG="# CRULE neactivat"
|
||||
log_warn "Opțiune invalidă, CRULE dezactivat"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
CRULE_CONFIG="# CRULE: Neconfigurata
|
||||
# Pentru rețele cu multiple servere, CRULE poate optimiza topologia.
|
||||
# Vezi documentația: CRULE_EXPLAINED.md"
|
||||
log_info "CRULE: Neconfigurata (opțional pentru rețele mari)"
|
||||
fi
|
||||
|
||||
# Configurare PSEUDO (Alias-uri pentru servicii)
|
||||
echo ""
|
||||
echo -e "${GALBEN}═══════════════════════════════════════${NC}"
|
||||
echo -e "${GALBEN}CONFIGURARE PSEUDO (Alias-uri Servicii)${NC}"
|
||||
echo -e "${GALBEN}═══════════════════════════════════════${NC}"
|
||||
echo ""
|
||||
echo " PSEUDO permite utilizatorilor să folosească comenzi simple"
|
||||
echo " pentru servicii IRC (ex: /NICKSERV în loc de /MSG NickServ@...)"
|
||||
echo ""
|
||||
echo " Necesar DOAR dacă ai instalat servicii IRC (Anope/Atheme)."
|
||||
echo ""
|
||||
|
||||
read -p " Configurare PSEUDO pentru servicii? (y/n) [n]: " configure_pseudo
|
||||
configure_pseudo=${configure_pseudo:-n}
|
||||
|
||||
if [ "$configure_pseudo" = "y" ] || [ "$configure_pseudo" = "Y" ]; then
|
||||
echo ""
|
||||
log_info "Configurare PSEUDO pentru servicii IRC"
|
||||
echo ""
|
||||
read -p " Nume server servicii [services.${network_name}]: " services_server
|
||||
services_server=${services_server:-services.${network_name}}
|
||||
|
||||
PSEUDO_CONFIG="# Alias-uri pentru servicii IRC
|
||||
# Serviciile trebuie să fie active pe: ${services_server}
|
||||
|
||||
# NickServ - Management nickname-uri
|
||||
Pseudo \"NICKSERV\" {
|
||||
name = \"NickServ\";
|
||||
nick = \"NickServ@${services_server}\";
|
||||
};
|
||||
|
||||
# Alias scurt NS pentru NickServ
|
||||
Pseudo \"NS\" {
|
||||
name = \"NickServ\";
|
||||
nick = \"NickServ@${services_server}\";
|
||||
};
|
||||
|
||||
# ChanServ - Management canale
|
||||
Pseudo \"CHANSERV\" {
|
||||
name = \"ChanServ\";
|
||||
nick = \"ChanServ@${services_server}\";
|
||||
};
|
||||
|
||||
# Alias scurt CS pentru ChanServ
|
||||
Pseudo \"CS\" {
|
||||
name = \"ChanServ\";
|
||||
nick = \"ChanServ@${services_server}\";
|
||||
};
|
||||
|
||||
# MemoServ - Mesaje offline
|
||||
Pseudo \"MEMOSERV\" {
|
||||
name = \"MemoServ\";
|
||||
nick = \"MemoServ@${services_server}\";
|
||||
};
|
||||
|
||||
# Alias scurt MS pentru MemoServ
|
||||
Pseudo \"MS\" {
|
||||
name = \"MemoServ\";
|
||||
nick = \"MemoServ@${services_server}\";
|
||||
};
|
||||
|
||||
# OperServ - Comenzi operatori
|
||||
Pseudo \"OPERSERV\" {
|
||||
name = \"OperServ\";
|
||||
nick = \"OperServ@${services_server}\";
|
||||
};
|
||||
|
||||
# Alias scurt OS pentru OperServ
|
||||
Pseudo \"OS\" {
|
||||
name = \"OperServ\";
|
||||
nick = \"OperServ@${services_server}\";
|
||||
};"
|
||||
log_success "PSEUDO: Configurat pentru ${services_server}"
|
||||
else
|
||||
PSEUDO_CONFIG="# PSEUDO: Neconfigurata
|
||||
# Adaugă manual Pseudo blocks dacă ai servicii IRC (Anope/Atheme).
|
||||
# Vezi documentația: PSEUDO_EXPLAINED.md"
|
||||
log_info "PSEUDO: Neconfigurata (opțional pentru servicii)"
|
||||
fi
|
||||
|
||||
# Configurare SPOOFHOST (Mascarea hostname-urilor)
|
||||
echo ""
|
||||
echo -e "${GALBEN}═══════════════════════════════════════${NC}"
|
||||
echo -e "${GALBEN}CONFIGURARE SPOOFHOST (Mascare Hostname)${NC}"
|
||||
echo -e "${GALBEN}═══════════════════════════════════════${NC}"
|
||||
echo ""
|
||||
echo " SPOOFHOST permite mascarea hostname-urilor utilizatorilor"
|
||||
echo " pentru protecție identitate și brandind custom."
|
||||
echo ""
|
||||
echo " Exemplu: user@203.0.113.45 → user@staff.${network_name}"
|
||||
echo ""
|
||||
|
||||
read -p " Configurare SPOOFHOST pentru protecție? (y/n) [n]: " configure_spoofhost
|
||||
configure_spoofhost=${configure_spoofhost:-n}
|
||||
|
||||
if [ "$configure_spoofhost" = "y" ] || [ "$configure_spoofhost" = "Y" ]; then
|
||||
echo ""
|
||||
log_info "Configurare SPOOFHOST pentru mascarea hostname-urilor"
|
||||
echo ""
|
||||
echo " Selectați tipul de configurare:"
|
||||
echo " 1) Staff automat (pentru IP-uri interne)"
|
||||
echo " 2) VIP manual (cu parolă)"
|
||||
echo " 3) Protecție generală (pentru toți utilizatorii)"
|
||||
echo " 4) Toate (1+2+3)"
|
||||
echo ""
|
||||
|
||||
read -p " Opțiune [1]: " spoofhost_option
|
||||
spoofhost_option=${spoofhost_option:-1}
|
||||
|
||||
case $spoofhost_option in
|
||||
1)
|
||||
echo ""
|
||||
read -p " Pattern IP staff (ex: *@10.0.0.*) [*@10.0.0.*]: " staff_pattern
|
||||
staff_pattern=${staff_pattern:-*@10.0.0.*}
|
||||
|
||||
SPOOFHOST_CONFIG="# Staff automat pentru ${staff_pattern}
|
||||
Spoofhost \"staff.${network_name}\" {
|
||||
host = \"${staff_pattern}\";
|
||||
autoapply = yes;
|
||||
};"
|
||||
log_success "SPOOFHOST: Configurare staff pentru ${staff_pattern}"
|
||||
;;
|
||||
2)
|
||||
echo ""
|
||||
read -p " Hostname VIP [vip.${network_name}]: " vip_hostname
|
||||
vip_hostname=${vip_hostname:-vip.${network_name}}
|
||||
|
||||
read -s -p " Parola VIP: " vip_password
|
||||
echo ""
|
||||
|
||||
SPOOFHOST_CONFIG="# VIP manual cu parolă
|
||||
Spoofhost \"${vip_hostname}\" {
|
||||
pass = \"${vip_password}\";
|
||||
host = \"*\";
|
||||
autoapply = no;
|
||||
};"
|
||||
log_success "SPOOFHOST: Configurare VIP pentru ${vip_hostname}"
|
||||
;;
|
||||
3)
|
||||
SPOOFHOST_CONFIG="# Protecție generală pentru toți utilizatorii
|
||||
Spoofhost \"users.${network_name}\" {
|
||||
host = \"*\";
|
||||
autoapply = yes;
|
||||
};"
|
||||
log_success "SPOOFHOST: Protecție generală activată"
|
||||
;;
|
||||
4)
|
||||
echo ""
|
||||
read -p " Pattern IP staff [*@10.0.0.*]: " staff_pattern
|
||||
staff_pattern=${staff_pattern:-*@10.0.0.*}
|
||||
|
||||
read -p " Hostname VIP [vip.${network_name}]: " vip_hostname
|
||||
vip_hostname=${vip_hostname:-vip.${network_name}}
|
||||
|
||||
read -s -p " Parola VIP: " vip_password
|
||||
echo ""
|
||||
|
||||
SPOOFHOST_CONFIG="# Staff automat pentru ${staff_pattern}
|
||||
Spoofhost \"staff.${network_name}\" {
|
||||
host = \"${staff_pattern}\";
|
||||
autoapply = yes;
|
||||
};
|
||||
|
||||
# VIP manual cu parolă
|
||||
Spoofhost \"${vip_hostname}\" {
|
||||
pass = \"${vip_password}\";
|
||||
host = \"*\";
|
||||
autoapply = no;
|
||||
};
|
||||
|
||||
# Protecție generală pentru toți utilizatorii
|
||||
Spoofhost \"users.${network_name}\" {
|
||||
host = \"*\";
|
||||
autoapply = yes;
|
||||
};"
|
||||
log_success "SPOOFHOST: Configurare completă aplicată"
|
||||
;;
|
||||
*)
|
||||
SPOOFHOST_CONFIG="# SPOOFHOST neactivat"
|
||||
log_warn "Opțiune invalidă, SPOOFHOST dezactivat"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
SPOOFHOST_CONFIG="# SPOOFHOST: Neconfigurata
|
||||
# Adaugă manual Spoofhost blocks pentru mascarea hostname-urilor.
|
||||
# Vezi documentația: SPOOFHOST_EXPLAINED.md"
|
||||
log_info "SPOOFHOST: Neconfigurata (opțional pentru protecție)"
|
||||
fi
|
||||
else
|
||||
server_name=$(grep 'name = "' "$CONFIG_FILE" 2>/dev/null | head -1 | cut -d'"' -f2)
|
||||
server_name=${server_name:-localhost.localdomain}
|
||||
|
|
@ -1202,6 +1588,9 @@ main() {
|
|||
oper_hash="\$PLAIN\$password"
|
||||
is_hub="n"
|
||||
HUB_CONFIG="no"
|
||||
CRULE_CONFIG="# CRULE: Neconfigurata (mod non-interactiv)"
|
||||
PSEUDO_CONFIG="# PSEUDO: Neconfigurata (mod non-interactiv)"
|
||||
SPOOFHOST_CONFIG="# SPOOFHOST: Neconfigurata (mod non-interactiv)"
|
||||
fi
|
||||
|
||||
# Directorul pentru configurația funcțională - TREBUIE să fie în lib/, nu etc/
|
||||
|
|
@ -1354,7 +1743,7 @@ main() {
|
|||
|
||||
# Adaugă port de rezervă dacă e vorba de porturi
|
||||
if echo "$FINAL_TEST_OUTPUT" | grep -qi "port"; then
|
||||
sed -i "${ERROR_LINE}a\\nPort {\n vhost = \"$VHOST_FOR_PORTS\" 6667;\n hidden = yes;\n};" "$conf_file"
|
||||
sed -i "${ERROR_LINE}a\\nPort {\n vhost = \"$VHOST_FOR_PORTS\" 6667;\n hidden = no;\n};" "$conf_file"
|
||||
fi
|
||||
|
||||
log_success "Reparare automată aplicată pentru linia $ERROR_LINE"
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -0,0 +1,111 @@
|
|||
import subprocess
|
||||
import os
|
||||
|
||||
os.chdir(r'D:\pip\underchat-ircd')
|
||||
|
||||
print("=== PUSH v1.5.0 cu PSEUDO + SPOOFHOST ===\n")
|
||||
|
||||
# 1. Verificare fișier local
|
||||
print("1. Verificare install.sh local:")
|
||||
with open('install.sh', 'r', encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
pseudo_count = content.count('EOFCONFIG_PSEUDO')
|
||||
spoofhost_count = content.count('EOFCONFIG_SPOOFHOST')
|
||||
config_pseudo_count = content.count('Configurare PSEUDO')
|
||||
config_spoofhost_count = content.count('Configurare SPOOFHOST')
|
||||
lines = len(content.splitlines())
|
||||
|
||||
print(f" - Linii totale: {lines}")
|
||||
print(f" - EOFCONFIG_PSEUDO: {pseudo_count}")
|
||||
print(f" - EOFCONFIG_SPOOFHOST: {spoofhost_count}")
|
||||
print(f" - Configurare PSEUDO: {config_pseudo_count}")
|
||||
print(f" - Configurare SPOOFHOST: {config_spoofhost_count}")
|
||||
print()
|
||||
|
||||
if pseudo_count >= 3 and spoofhost_count >= 3:
|
||||
print(" ✅ Modificările PSEUDO + SPOOFHOST sunt în fișierul local!\n")
|
||||
else:
|
||||
print(" ❌ Modificările NU sunt în fișierul local!\n")
|
||||
exit(1)
|
||||
|
||||
# 2. Git add
|
||||
print("2. Git add:")
|
||||
result = subprocess.run(['git', 'add', '-A'], capture_output=True, text=True)
|
||||
print(f" Done\n")
|
||||
|
||||
# 3. Git commit
|
||||
print("3. Git commit:")
|
||||
commit_msg = """FEATURE v1.5.0: PSEUDO + SPOOFHOST - Configurare completă
|
||||
|
||||
Adăugat:
|
||||
- Configurare interactivă PSEUDO (alias-uri servicii IRC)
|
||||
- Configurare interactivă SPOOFHOST (mascarea hostname-urilor)
|
||||
- Documentație SPOOFHOST_EXPLAINED.md (650+ linii)
|
||||
- ~200 linii noi în install.sh
|
||||
|
||||
Features:
|
||||
✅ PSEUDO: /NICKSERV, /CHANSERV, /NS, /CS, etc.
|
||||
✅ SPOOFHOST: staff.underchat.org, vip.underchat.org, users.underchat.org
|
||||
✅ 4 opțiuni configurare (Staff auto, VIP manual, Protecție, Toate)
|
||||
✅ Documentație completă cu exemple
|
||||
|
||||
Versiune: v1.5.0"""
|
||||
|
||||
result = subprocess.run(['git', 'commit', '-m', commit_msg], capture_output=True, text=True)
|
||||
if result.returncode == 0:
|
||||
print(f" ✅ Commit reușit")
|
||||
elif 'nothing to commit' in result.stdout:
|
||||
print(f" ℹ️ Nothing to commit (deja committed)")
|
||||
else:
|
||||
print(f" stdout: {result.stdout}")
|
||||
print(f" stderr: {result.stderr}")
|
||||
print()
|
||||
|
||||
# 4. Git push
|
||||
print("4. Git push origin main:")
|
||||
result = subprocess.run(['git', 'push', 'origin', 'main'], capture_output=True, text=True)
|
||||
print(f" stdout: {result.stdout}")
|
||||
print(f" stderr: {result.stderr}")
|
||||
if result.returncode == 0 or 'Everything up-to-date' in result.stderr:
|
||||
print(f" ✅ Push reușit\n")
|
||||
else:
|
||||
print(f" ⚠️ Cod return: {result.returncode}\n")
|
||||
|
||||
# 5. Tag v1.5.0
|
||||
print("5. Tag v1.5.0:")
|
||||
subprocess.run(['git', 'tag', '-d', 'v1.5.0'], capture_output=True)
|
||||
tag_msg = """Release v1.5.0 - PSEUDO + SPOOFHOST
|
||||
|
||||
Features:
|
||||
- PSEUDO: Alias-uri pentru servicii IRC
|
||||
- SPOOFHOST: Mascarea hostname-urilor
|
||||
- Documentație completă
|
||||
- Usability + Securitate"""
|
||||
|
||||
result = subprocess.run(['git', 'tag', '-a', 'v1.5.0', '-m', tag_msg], capture_output=True, text=True)
|
||||
print(f" Tag creat\n")
|
||||
|
||||
# 6. Push tag
|
||||
print("6. Push tag v1.5.0:")
|
||||
result = subprocess.run(['git', 'push', 'origin', 'v1.5.0', '--force'], capture_output=True, text=True)
|
||||
print(f" stdout: {result.stdout}")
|
||||
print(f" stderr: {result.stderr}")
|
||||
if result.returncode == 0:
|
||||
print(f" ✅ Tag push-uit\n")
|
||||
else:
|
||||
print(f" ⚠️ Cod return: {result.returncode}\n")
|
||||
|
||||
# 7. Verificare finală
|
||||
print("7. Verificare log:")
|
||||
result = subprocess.run(['git', 'log', '--oneline', '-3'], capture_output=True, text=True)
|
||||
print(result.stdout)
|
||||
|
||||
print("\n=== FINALIZAT ===")
|
||||
print("\nPe server rulează:")
|
||||
print(" cd ~/ircu2")
|
||||
print(" git fetch --all")
|
||||
print(" git pull origin main")
|
||||
print(" git checkout v1.5.0")
|
||||
print(" grep -c 'EOFCONFIG_PSEUDO' install.sh # Ar trebui 3+")
|
||||
print(" grep -c 'EOFCONFIG_SPOOFHOST' install.sh # Ar trebui 3+")
|
||||
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
#!/bin/bash
|
||||
# Script pentru push forțat v1.5.0
|
||||
|
||||
echo "=== PUSH FORȚAT v1.5.0 cu PSEUDO + SPOOFHOST ==="
|
||||
echo ""
|
||||
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
echo "1. Git status:"
|
||||
git status --short
|
||||
|
||||
echo ""
|
||||
echo "2. Add all:"
|
||||
git add -A
|
||||
|
||||
echo ""
|
||||
echo "3. Commit:"
|
||||
git commit -m "FEATURE v1.5.0: PSEUDO + SPOOFHOST - Configurare interactivă
|
||||
|
||||
- Adăugat configurare PSEUDO (alias-uri servicii IRC)
|
||||
- Adăugat configurare SPOOFHOST (mascarea hostname-urilor)
|
||||
- Documentație completă în SPOOFHOST_EXPLAINED.md
|
||||
- Modificări majore în install.sh (~200 linii noi)
|
||||
|
||||
Features:
|
||||
✅ PSEUDO: /NICKSERV în loc de /MSG NickServ@...
|
||||
✅ SPOOFHOST: staff.underchat.org, vip.underchat.org
|
||||
✅ 4 opțiuni configurare SPOOFHOST
|
||||
✅ Documentație completă
|
||||
|
||||
Versiune: v1.5.0"
|
||||
|
||||
echo ""
|
||||
echo "4. Push origin main:"
|
||||
git push origin main --force
|
||||
|
||||
echo ""
|
||||
echo "5. Tag v1.5.0:"
|
||||
git tag -d v1.5.0 2>/dev/null
|
||||
git tag -a v1.5.0 -m "Release v1.5.0 - PSEUDO + SPOOFHOST
|
||||
|
||||
Features majore:
|
||||
- Configurare interactivă PSEUDO
|
||||
- Configurare interactivă SPOOFHOST
|
||||
- Documentație completă
|
||||
- Usability + Securitate îmbunătățite"
|
||||
|
||||
echo ""
|
||||
echo "6. Push tag:"
|
||||
git push origin v1.5.0 --force
|
||||
|
||||
echo ""
|
||||
echo "7. Verificare:"
|
||||
git log --oneline -3
|
||||
|
||||
echo ""
|
||||
echo "=== PUSH FINALIZAT ==="
|
||||
echo "Pe server rulează: git pull origin main && git checkout v1.5.0"
|
||||
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
#!/bin/bash
|
||||
# Script de test pentru verificarea parametrilor funcției generate_config
|
||||
|
||||
echo "=== TEST: Verificare parametrii funcție generate_config ==="
|
||||
echo ""
|
||||
|
||||
# Simulăm parametrii
|
||||
is_hub="n"
|
||||
HUB_CONFIG="yes"
|
||||
hub_name="Madrid.ES.EU.UnderChat.org"
|
||||
hub_host="10.0.0.125"
|
||||
hub_port="4400"
|
||||
hub_password="test-password-123"
|
||||
|
||||
echo "Parametrii setați:"
|
||||
echo " is_hub: $is_hub"
|
||||
echo " HUB_CONFIG: $HUB_CONFIG"
|
||||
echo " hub_name: $hub_name"
|
||||
echo " hub_host: $hub_host"
|
||||
echo " hub_port: $hub_port"
|
||||
echo " hub_password: $hub_password"
|
||||
echo ""
|
||||
|
||||
echo "Ordinea parametrilor în apelul generate_config:"
|
||||
echo " 1. config_file"
|
||||
echo " 2. server_name"
|
||||
echo " 3. server_desc"
|
||||
echo " 4. server_numeric"
|
||||
echo " 5. admin_location"
|
||||
echo " 6. admin_contact"
|
||||
echo " 7. vhost_ipv4"
|
||||
echo " 8. vhost_ipv6"
|
||||
echo " 9. network_name"
|
||||
echo " 10. oper_username"
|
||||
echo " 11. oper_hash"
|
||||
echo " 12. is_hub = '$is_hub'"
|
||||
echo " 13. HUB_CONFIG = '$HUB_CONFIG'"
|
||||
echo " 14. hub_name = '$hub_name'"
|
||||
echo " 15. hub_host = '$hub_host'"
|
||||
echo " 16. hub_port = '$hub_port'"
|
||||
echo " 17. hub_password = '$hub_password'"
|
||||
echo " 18. client_ports_list"
|
||||
echo " 19. SERVER_PORT"
|
||||
echo " 20. ssl_ports_list"
|
||||
echo ""
|
||||
|
||||
echo "✅ Dacă HUB_CONFIG='yes' → Blocul Connect {} TREBUIE să fie generat!"
|
||||
echo "✅ Dacă HUB_CONFIG='no' → Se inserează comentariu 'Niciun link configurat'"
|
||||
echo ""
|
||||
echo "=== Verifică în install.sh linia ~1189 că parametrii sunt în ordinea corectă! ==="
|
||||
|
||||
Loading…
Reference in New Issue