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
|
> **Repository**: https://gitlab.back.ro/underchat/ircu2.git
|
||||||
> **Limbă**: Română 🇷🇴
|
> **Limbă**: Română 🇷🇴
|
||||||
> **Data**: 13 februarie 2026
|
> **Data**: 14 februarie 2026
|
||||||
> **Versiune**: v1.2.0
|
> **Versiune**: v1.5.0
|
||||||
> **Status**: ✅ Production Ready
|
> **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
|
# Fișier de configurare pentru UnderChat IRCd
|
||||||
# Generat automat în data: 2026
|
# Generat automat în data: 2026
|
||||||
# Limba: Română
|
# Limba: Română
|
||||||
# Model: Node-Ase.ovh Professional IRC Server
|
# Model: UnderChat.org Professional IRC Server
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# SECȚIUNE: GENERAL
|
# SECȚIUNE: GENERAL
|
||||||
|
|
@ -608,6 +608,28 @@ Class {
|
||||||
usermode = "+ix";
|
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
|
# Clasă pentru operatori
|
||||||
Class {
|
Class {
|
||||||
name = "Opers";
|
name = "Opers";
|
||||||
|
|
@ -626,15 +648,6 @@ Class {
|
||||||
remove = yes;
|
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
|
# SECȚIUNE: CLIENT - Restricții pentru conexiuni
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
|
|
@ -664,7 +677,7 @@ Client {
|
||||||
Jupe {
|
Jupe {
|
||||||
# Litere și caractere speciale
|
# 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 = "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 = "login,underchat,protocol,pass,newpass,org";
|
||||||
nick = "LPT1,LPT2,COM1,COM2,COM3,COM4,AUX,AUTH";
|
nick = "LPT1,LPT2,COM1,COM2,COM3,COM4,AUX,AUTH";
|
||||||
|
|
||||||
|
|
@ -714,9 +727,11 @@ Operator {
|
||||||
|
|
||||||
# Permisiuni și notificări
|
# Permisiuni și notificări
|
||||||
admin = yes;
|
admin = yes;
|
||||||
hide_oper = no;
|
swhois = "The One That Was, The One That Is, The One That Will Be"; # Mesaj special în WHOIS pentru operatori
|
||||||
hide_channels = no;
|
hide_oper = yes; # Ascunde prezenta operatorului în listele de utilizatori
|
||||||
# snomask = "+s";
|
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";
|
# privileges = "PRIV_WHOIS_NOTICE", "PRIV_HIDE_OPER", "PRIV_ADMIN";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -726,6 +741,12 @@ Operator {
|
||||||
|
|
||||||
EOFCONFIG_HUB_CONNECT
|
EOFCONFIG_HUB_CONNECT
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# SECȚIUNE: CRULE - Reguli de Conectare Inteligente (SmartRoute)
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
EOFCONFIG_CRULES
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# SECȚIUNE: UWORLD - Servere de servicii
|
# SECȚIUNE: UWORLD - Servere de servicii
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
|
|
@ -743,9 +764,31 @@ UWorld {
|
||||||
# MOTD Server targetat pentru
|
# MOTD Server targetat pentru
|
||||||
#motd {
|
#motd {
|
||||||
# host = "*.net";
|
# 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
|
# SECȚIUNE: FEATURE - Caracteristici și setări
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
|
|
@ -874,22 +917,72 @@ EOFCONFIG
|
||||||
|
|
||||||
# Generare CONNECT section pentru link server-to-server (independent de HUB/LEAF)
|
# Generare CONNECT section pentru link server-to-server (independent de HUB/LEAF)
|
||||||
if [ "$hub_config" = "yes" ]; then
|
if [ "$hub_config" = "yes" ]; then
|
||||||
HUB_CONNECT_BLOCK="# Conectare server-to-server
|
# Escape-uim caracterele speciale pentru sed
|
||||||
Connect {
|
hub_name_escaped=$(printf '%s\n' "$hub_name" | sed 's:[][\/.^$*]:\\&:g')
|
||||||
name = \"$hub_name\";
|
hub_host_escaped=$(printf '%s\n' "$hub_host" | sed 's:[][\/.^$*]:\\&:g')
|
||||||
host = \"$hub_host\";
|
hub_pass_escaped=$(printf '%s\n' "$hub_pass" | sed 's:[][\/.^$*|]:\\&:g')
|
||||||
password = \"$hub_pass\";
|
|
||||||
port = $hub_port;
|
|
||||||
class = \"Server\";
|
|
||||||
autoconnect = yes;
|
|
||||||
hub;
|
|
||||||
};"
|
|
||||||
|
|
||||||
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
|
else
|
||||||
sed -i 's|EOFCONFIG_HUB_CONNECT|# Niciun link server-to-server configurat|g' "$config_file"
|
sed -i 's|EOFCONFIG_HUB_CONNECT|# Niciun link server-to-server configurat|g' "$config_file"
|
||||||
fi
|
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"
|
log_success "Fișier de configurare generat: $config_file"
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
@ -1189,6 +1282,299 @@ main() {
|
||||||
hub_port=""
|
hub_port=""
|
||||||
hub_password=""
|
hub_password=""
|
||||||
fi
|
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
|
else
|
||||||
server_name=$(grep 'name = "' "$CONFIG_FILE" 2>/dev/null | head -1 | cut -d'"' -f2)
|
server_name=$(grep 'name = "' "$CONFIG_FILE" 2>/dev/null | head -1 | cut -d'"' -f2)
|
||||||
server_name=${server_name:-localhost.localdomain}
|
server_name=${server_name:-localhost.localdomain}
|
||||||
|
|
@ -1202,6 +1588,9 @@ main() {
|
||||||
oper_hash="\$PLAIN\$password"
|
oper_hash="\$PLAIN\$password"
|
||||||
is_hub="n"
|
is_hub="n"
|
||||||
HUB_CONFIG="no"
|
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
|
fi
|
||||||
|
|
||||||
# Directorul pentru configurația funcțională - TREBUIE să fie în lib/, nu etc/
|
# 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
|
# Adaugă port de rezervă dacă e vorba de porturi
|
||||||
if echo "$FINAL_TEST_OUTPUT" | grep -qi "port"; then
|
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
|
fi
|
||||||
|
|
||||||
log_success "Reparare automată aplicată pentru linia $ERROR_LINE"
|
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