Actualizare README.md la v1.6.0
This commit is contained in:
parent
4851d9c500
commit
71860b5b47
|
|
@ -0,0 +1,671 @@
|
||||||
|
# WEBIRC - Gateway Web-to-IRC
|
||||||
|
|
||||||
|
## 📋 CE ESTE WEBIRC?
|
||||||
|
|
||||||
|
**WebIRC** este un protocol care permite **gateway-urilor web-to-IRC** (clienți IRC în browser) să comunice **IP-ul real** al utilizatorilor către serverul IRC, în loc ca toți utilizatorii să apară cu IP-ul serverului web.
|
||||||
|
|
||||||
|
Este esențial pentru **integrarea IRC în pagini web** fără ca toți utilizatorii să fie văzuți ca provenind de pe același IP (care ar fi IP-ul serverului web).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 SCOP
|
||||||
|
|
||||||
|
### **Problema FĂRĂ WebIRC:**
|
||||||
|
|
||||||
|
Când ai un **client IRC web** (ex: Kiwi IRC, TheLounge, etc.) pe site-ul tău:
|
||||||
|
|
||||||
|
```
|
||||||
|
User1 (România) → WebServer (10.0.0.50) → IRCd
|
||||||
|
User2 (SUA) → WebServer (10.0.0.50) → IRCd
|
||||||
|
User3 (Franța) → WebServer (10.0.0.50) → IRCd
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ce vede IRCd-ul:**
|
||||||
|
```irc
|
||||||
|
[14:30] * Joins: User1 (user1@10.0.0.50)
|
||||||
|
[14:31] * Joins: User2 (user2@10.0.0.50)
|
||||||
|
[14:32] * Joins: User3 (user3@10.0.0.50)
|
||||||
|
# ^^^^^^^^^^^ TOȚI au același IP (serverul web)!
|
||||||
|
```
|
||||||
|
|
||||||
|
**Probleme:**
|
||||||
|
- ❌ Toți utilizatorii apar cu același IP (IP-ul serverului web)
|
||||||
|
- ❌ Limitele de conexiuni per IP (clone protection) blochează utilizatori legitimi
|
||||||
|
- ❌ Gline/Ban-uri afectează TOȚI utilizatorii web
|
||||||
|
- ❌ Imposibil de identificat abuza tori individuali
|
||||||
|
- ❌ GeoIP-ul arată locația serverului, nu a utilizatorului real
|
||||||
|
|
||||||
|
### **Soluția CU WebIRC:**
|
||||||
|
|
||||||
|
```
|
||||||
|
User1 (RO: 203.0.113.10) → WebServer → WEBIRC → IRCd
|
||||||
|
User2 (US: 198.51.100.25) → WebServer → WEBIRC → IRCd
|
||||||
|
User3 (FR: 192.0.2.15) → WebServer → WEBIRC → IRCd
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ce vede IRCd-ul:**
|
||||||
|
```irc
|
||||||
|
[14:30] * Joins: User1 (user1@203.0.113.10)
|
||||||
|
[14:31] * Joins: User2 (user2@198.51.100.25)
|
||||||
|
[14:32] * Joins: User3 (user3@192.0.2.15)
|
||||||
|
# ^^^^^^^^^^^^^^^^ IP-uri REALE ale utilizatorilor!
|
||||||
|
```
|
||||||
|
|
||||||
|
**Avantaje:**
|
||||||
|
- ✅ Fiecare utilizator are IP-ul său real vizibil
|
||||||
|
- ✅ Clone protection funcționează normal
|
||||||
|
- ✅ Ban-uri afectează doar utilizatorul problematic
|
||||||
|
- ✅ GeoIP corect (arată țara reală)
|
||||||
|
- ✅ Identificare abuzatori individuali
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 CUM FUNCȚIONEAZĂ?
|
||||||
|
|
||||||
|
### **Protocolul WebIRC:**
|
||||||
|
|
||||||
|
1. **User** se conectează la **WebServer** (ex: https://chat.underchat.org)
|
||||||
|
2. **WebServer** (Kiwi IRC, etc.) se conectează la **IRCd**
|
||||||
|
3. **WebServer** trimite comanda **WEBIRC** ÎNAINTE de USER/NICK:
|
||||||
|
```
|
||||||
|
WEBIRC parola_secreta cgiirc hostname.real 203.0.113.10
|
||||||
|
```
|
||||||
|
4. **IRCd** verifică:
|
||||||
|
- Parola este corectă?
|
||||||
|
- WebServer-ul este autorizat (în WebIRC block)?
|
||||||
|
- IP-ul și hostname-ul sunt valide?
|
||||||
|
5. **IRCd** înlocuiește IP-ul WebServer-ului cu IP-ul real al utilizatorului
|
||||||
|
6. **User** apare pe IRC cu IP-ul său real!
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 SINTAXĂ ÎN ircd.conf
|
||||||
|
|
||||||
|
### **Formatul de bază:**
|
||||||
|
|
||||||
|
```conf
|
||||||
|
WebIRC {
|
||||||
|
host = "webserver@ip.address";
|
||||||
|
password = "parola_secreta";
|
||||||
|
description = "Kiwi IRC Gateway";
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
### **Parametri:**
|
||||||
|
|
||||||
|
| Parametru | Obligatoriu | Descriere |
|
||||||
|
|-----------|-------------|-----------|
|
||||||
|
| `host` | ✅ DA | Hostmask-ul serverului web autorizat (format: `user@host` sau `*@ip`) |
|
||||||
|
| `password` | ✅ DA | Parola secretă pentru autentificare (shared secret) |
|
||||||
|
| `description` | ❌ NU | Descriere afișată în WHOIS (ex: "Web User") |
|
||||||
|
| `ident` | ❌ NU | Ident fix pentru utilizatori web (ex: "webchat") |
|
||||||
|
| `userident` | ❌ NU | Folosește username-ul din USER ca ident (yes/no, default: no) |
|
||||||
|
| `ignoreident` | ❌ NU | Ignoră identd reply de la server web (yes/no, default: no) |
|
||||||
|
| `stripsslfp` | ❌ NU | Șterge SSL fingerprint de la web server (yes/no, default: no) |
|
||||||
|
| `enableoptions` | ❌ NU | Activează parsarea IRCv3 WEBIRC options (yes/no, default: no) |
|
||||||
|
| `trustaccount` | ❌ NU | Permite autentificare automată via WEBIRC (yes/no, default: no) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 💡 EXEMPLE PRACTICE
|
||||||
|
|
||||||
|
### **Exemplu 1: Configurare Simplă (Kiwi IRC)**
|
||||||
|
|
||||||
|
```conf
|
||||||
|
WebIRC {
|
||||||
|
host = "*@203.0.113.50";
|
||||||
|
password = "$PLAIN$k1w1_s3cr3t_p@ssw0rd";
|
||||||
|
description = "Kiwi IRC Web Gateway";
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
**Explicație:**
|
||||||
|
- Orice conexiune de pe `203.0.113.50` (serverul unde rulează Kiwi IRC)
|
||||||
|
- Trebuie să furnizeze parola `k1w1_s3cr3t_p@ssw0rd`
|
||||||
|
- În WHOIS se va afișa: "Kiwi IRC Web Gateway"
|
||||||
|
|
||||||
|
**Configurare Kiwi IRC (config.ini):**
|
||||||
|
```ini
|
||||||
|
[webirc]
|
||||||
|
password = k1w1_s3cr3t_p@ssw0rd
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **Exemplu 2: Multiple Servere Web**
|
||||||
|
|
||||||
|
```conf
|
||||||
|
# Server Web Principal
|
||||||
|
WebIRC {
|
||||||
|
host = "*@203.0.113.50";
|
||||||
|
password = "$PLAIN$main_server_pass";
|
||||||
|
description = "Main Web Chat";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Server Web Backup
|
||||||
|
WebIRC {
|
||||||
|
host = "*@203.0.113.51";
|
||||||
|
password = "$PLAIN$backup_server_pass";
|
||||||
|
description = "Backup Web Chat";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Server Web Localhost (pentru testing)
|
||||||
|
WebIRC {
|
||||||
|
host = "*@127.0.0.1";
|
||||||
|
password = "$PLAIN$localhost_test";
|
||||||
|
description = "Local Testing";
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **Exemplu 3: Cu Ident Custom și Opțiuni**
|
||||||
|
|
||||||
|
```conf
|
||||||
|
WebIRC {
|
||||||
|
host = "*@203.0.113.50";
|
||||||
|
password = "$PLAIN$web_password";
|
||||||
|
description = "Web Chat";
|
||||||
|
|
||||||
|
# Setări avansate
|
||||||
|
ident = "webchat"; # Toți web users au ident "webchat"
|
||||||
|
userident = no; # Nu folosi username-ul ca ident
|
||||||
|
ignoreident = yes; # Ignoră identd de la webserver
|
||||||
|
stripsslfp = yes; # Șterge SSL fingerprint
|
||||||
|
enableoptions = yes; # Activează IRCv3 WEBIRC options
|
||||||
|
trustaccount = no; # Nu permite auto-auth
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
**Rezultat:**
|
||||||
|
```irc
|
||||||
|
/WHOIS WebUser
|
||||||
|
WebUser is webchat@203.0.113.10 * Real Name
|
||||||
|
# ^^^^^^^ ident fix ^^^^^^^^^^^ IP real
|
||||||
|
WebUser using Web Chat (Web Gateway)
|
||||||
|
# ^^^^^^^^^ description
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **Exemplu 4: Rețea CIDR (Multiple IP-uri)**
|
||||||
|
|
||||||
|
```conf
|
||||||
|
# Permite tot subnet-ul 203.0.113.0/24
|
||||||
|
WebIRC {
|
||||||
|
host = "*@203.0.113.*";
|
||||||
|
password = "$PLAIN$subnet_password";
|
||||||
|
description = "Web Gateway Farm";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Sau cu CIDR notation:
|
||||||
|
WebIRC {
|
||||||
|
host = "*@203.0.113.0/24";
|
||||||
|
password = "$PLAIN$cidr_password";
|
||||||
|
description = "Web Gateway CIDR";
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **Exemplu 5: TheLounge (Self-hosted IRC Client)**
|
||||||
|
|
||||||
|
```conf
|
||||||
|
WebIRC {
|
||||||
|
host = "*@10.0.0.100";
|
||||||
|
password = "$PLAIN$thelounge_secret";
|
||||||
|
description = "TheLounge Web Client";
|
||||||
|
ident = "lounge";
|
||||||
|
userident = yes;
|
||||||
|
ignoreident = yes;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
**Configurare TheLounge (config.js):**
|
||||||
|
```javascript
|
||||||
|
webirc: {
|
||||||
|
"underchat.org": {
|
||||||
|
password: "thelounge_secret",
|
||||||
|
server: "irc.underchat.org",
|
||||||
|
port: 6667
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎓 CAZURI DE UTILIZARE
|
||||||
|
|
||||||
|
### **1. Kiwi IRC pe site-ul tău**
|
||||||
|
|
||||||
|
```conf
|
||||||
|
WebIRC {
|
||||||
|
host = "*@chat.underchat.org";
|
||||||
|
password = "$PLAIN$kiwi_password";
|
||||||
|
description = "UnderChat Web Client";
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
**Link-ul utilizatorilor:** https://chat.underchat.org/
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **2. IRCCloud / Hosted Services**
|
||||||
|
|
||||||
|
```conf
|
||||||
|
# IRCCloud folosește IP-uri specifice
|
||||||
|
WebIRC {
|
||||||
|
host = "*@192.0.2.0/24";
|
||||||
|
password = "$PLAIN$irccloud_pass";
|
||||||
|
description = "IRCCloud Gateway";
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **3. Multiple Gateway-uri (Load Balancing)**
|
||||||
|
|
||||||
|
```conf
|
||||||
|
# Gateway 1
|
||||||
|
WebIRC {
|
||||||
|
host = "*@gateway1.underchat.org";
|
||||||
|
password = "$PLAIN$shared_password";
|
||||||
|
description = "Web Gateway 1";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Gateway 2
|
||||||
|
WebIRC {
|
||||||
|
host = "*@gateway2.underchat.org";
|
||||||
|
password = "$PLAIN$shared_password";
|
||||||
|
description = "Web Gateway 2";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Gateway 3
|
||||||
|
WebIRC {
|
||||||
|
host = "*@gateway3.underchat.org";
|
||||||
|
password = "$PLAIN$shared_password";
|
||||||
|
description = "Web Gateway 3";
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚙️ CONFIGURARE COMPLETĂ ÎN ircd.conf
|
||||||
|
|
||||||
|
### **Exemplu pentru UnderChat:**
|
||||||
|
|
||||||
|
```conf
|
||||||
|
# ============================================================================
|
||||||
|
# SECȚIUNE: WEBIRC - Gateway-uri Web-to-IRC
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
# Kiwi IRC - Server Principal
|
||||||
|
WebIRC {
|
||||||
|
host = "*@203.0.113.50";
|
||||||
|
password = "$PLAIN$k1w1_Str0ng_P@ssw0rd_2026";
|
||||||
|
description = "UnderChat Web Chat";
|
||||||
|
ident = "webchat";
|
||||||
|
userident = no;
|
||||||
|
ignoreident = yes;
|
||||||
|
stripsslfp = yes;
|
||||||
|
enableoptions = yes;
|
||||||
|
trustaccount = no;
|
||||||
|
};
|
||||||
|
|
||||||
|
# TheLounge - Self-hosted
|
||||||
|
WebIRC {
|
||||||
|
host = "*@10.0.0.100";
|
||||||
|
password = "$PLAIN$l0ung3_S3cr3t_K3y";
|
||||||
|
description = "UnderChat Lounge";
|
||||||
|
ident = "lounge";
|
||||||
|
userident = yes;
|
||||||
|
ignoreident = yes;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Testing local
|
||||||
|
WebIRC {
|
||||||
|
host = "*@127.0.0.1";
|
||||||
|
password = "$PLAIN$localhost_test_123";
|
||||||
|
description = "Local Testing";
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔍 VERIFICARE ȘI TESTARE
|
||||||
|
|
||||||
|
### **1. Verifică configurația:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
grep -A 5 'WebIRC {' /home/ircd/ircd/lib/ircd.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
**Output așteptat:**
|
||||||
|
```conf
|
||||||
|
WebIRC {
|
||||||
|
host = "*@203.0.113.50";
|
||||||
|
password = "$PLAIN$password_here";
|
||||||
|
description = "Web Gateway";
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
### **2. Testează conexiunea WebIRC:**
|
||||||
|
|
||||||
|
În **Kiwi IRC config** sau **TheLounge config**, adaugă parola WebIRC.
|
||||||
|
|
||||||
|
**Kiwi IRC (config.ini):**
|
||||||
|
```ini
|
||||||
|
[webirc]
|
||||||
|
password = k1w1_Str0ng_P@ssw0rd_2026
|
||||||
|
```
|
||||||
|
|
||||||
|
**TheLounge (config.js):**
|
||||||
|
```javascript
|
||||||
|
webirc: {
|
||||||
|
"underchat.org": {
|
||||||
|
password: "l0ung3_S3cr3t_K3y"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### **3. Verifică în IRC:**
|
||||||
|
|
||||||
|
```irc
|
||||||
|
# Conectează-te prin web client
|
||||||
|
# Apoi verifică:
|
||||||
|
|
||||||
|
/WHOIS YourNick
|
||||||
|
|
||||||
|
# Ar trebui să vezi:
|
||||||
|
YourNick is webchat@YOUR_REAL_IP * Real Name
|
||||||
|
# ^^^^^^^ ident ^^^^^^^^^^^^^ IP-ul tău real!
|
||||||
|
YourNick using UnderChat Web Chat
|
||||||
|
# ^^^^^^^^^^^^^^^^^^^ description
|
||||||
|
```
|
||||||
|
|
||||||
|
### **4. Verifică log-urile IRCd:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
tail -f /home/ircd/ircd/log/ircd.log | grep WEBIRC
|
||||||
|
```
|
||||||
|
|
||||||
|
**Output SUCCESS:**
|
||||||
|
```
|
||||||
|
WEBIRC Client host: from 203.0.113.50 [203.0.113.50] to user.isp.ro [198.51.100.25]
|
||||||
|
```
|
||||||
|
|
||||||
|
**Output ERROR:**
|
||||||
|
```
|
||||||
|
WEBIRC Attempt unauthorized from 203.0.113.50 [203.0.113.50]
|
||||||
|
# → IP-ul nu e în WebIRC block
|
||||||
|
|
||||||
|
WEBIRC Attempt with invalid password from 203.0.113.50
|
||||||
|
# → Parola greșită
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 AVANTAJE vs DEZAVANTAJE
|
||||||
|
|
||||||
|
### ✅ **AVANTAJE:**
|
||||||
|
|
||||||
|
1. **IP-uri reale** - Fiecare user are IP-ul său vizibil
|
||||||
|
2. **Clone protection** - Funcționează normal (nu mai sunt toți pe același IP)
|
||||||
|
3. **GeoIP corect** - Arată țara reală a utilizatorului
|
||||||
|
4. **Ban-uri precise** - Afectează doar utilizatorul problematic
|
||||||
|
5. **Identificare** - Poți identifica abuzatori individuali
|
||||||
|
6. **Statistici** - GeoIP, conexiuni per țară, etc. sunt corecte
|
||||||
|
|
||||||
|
### ⚠️ **DEZAVANTAJE:**
|
||||||
|
|
||||||
|
1. **Configurare necesară** - Trebuie configurat în IRCd ȘI în web client
|
||||||
|
2. **Shared secret** - Parola trebuie păstrată secretă
|
||||||
|
3. **Securitate** - Dacă cineva află parola, poate spoofa IP-uri
|
||||||
|
4. **Trust** - Trebuie să ai încredere în gateway-ul web
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚨 SECURITATE - BEST PRACTICES
|
||||||
|
|
||||||
|
### **1. Folosește parole FOARTE PUTERNICE**
|
||||||
|
|
||||||
|
```conf
|
||||||
|
# ❌ SLAB:
|
||||||
|
password = "$PLAIN$123456";
|
||||||
|
|
||||||
|
# ❌ SLAB:
|
||||||
|
password = "$PLAIN$webirc";
|
||||||
|
|
||||||
|
# ✅ BINE:
|
||||||
|
password = "$PLAIN$W3b1RC_Str0ng_P@ssw0rd_2026_UnD3rCh@t";
|
||||||
|
```
|
||||||
|
|
||||||
|
### **2. Limitează la IP-uri SPECIFICE**
|
||||||
|
|
||||||
|
```conf
|
||||||
|
# ❌ PERICOL (oricine poate):
|
||||||
|
host = "*@*";
|
||||||
|
|
||||||
|
# ✅ SIGUR (doar server-ul tău):
|
||||||
|
host = "*@203.0.113.50";
|
||||||
|
|
||||||
|
# ✅ SIGUR (doar subnet-ul tău):
|
||||||
|
host = "*@203.0.113.0/24";
|
||||||
|
```
|
||||||
|
|
||||||
|
### **3. Folosește HTTPS pentru web client**
|
||||||
|
|
||||||
|
```
|
||||||
|
❌ http://chat.underchat.org (parola e trimisă în clar!)
|
||||||
|
✅ https://chat.underchat.org (parola e criptată)
|
||||||
|
```
|
||||||
|
|
||||||
|
### **4. Monitorizează încercări neautorizate**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# În ircd.conf, activează notificări:
|
||||||
|
Operator {
|
||||||
|
# ...
|
||||||
|
snomask = "+s +w"; # Include SNO_WEBIRC
|
||||||
|
};
|
||||||
|
|
||||||
|
# Vei primi notificări pentru:
|
||||||
|
# - Încercări cu parolă greșită
|
||||||
|
# - Încercări de pe IP-uri neautorizate
|
||||||
|
# - IP-uri/hostname-uri invalide
|
||||||
|
```
|
||||||
|
|
||||||
|
### **5. Rotează parolele regulat**
|
||||||
|
|
||||||
|
```
|
||||||
|
Schimbă parola WebIRC la fiecare 3-6 luni
|
||||||
|
Actualizează în:
|
||||||
|
- ircd.conf (pe server IRC)
|
||||||
|
- config web client (Kiwi/Lounge/etc.)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 TROUBLESHOOTING
|
||||||
|
|
||||||
|
### **Problemă: WEBIRC nu funcționează**
|
||||||
|
|
||||||
|
**Cauze posibile:**
|
||||||
|
|
||||||
|
1. **WebIRC NU este configurat în ircd.conf**
|
||||||
|
```bash
|
||||||
|
grep 'WebIRC {' /home/ircd/ircd/lib/ircd.conf
|
||||||
|
# Dacă nu găsește → Trebuie adăugat
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Parola greșită în web client**
|
||||||
|
```bash
|
||||||
|
# Log IRCd:
|
||||||
|
tail -f /home/ircd/ircd/log/ircd.log | grep WEBIRC
|
||||||
|
# Caută: "WEBIRC Attempt with invalid password"
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **IP-ul web server-ului nu se potrivește**
|
||||||
|
```conf
|
||||||
|
# Config:
|
||||||
|
host = "*@203.0.113.50";
|
||||||
|
|
||||||
|
# Dar web server-ul are IP: 203.0.113.51
|
||||||
|
# → NU se potrivește → BLOCAT!
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Comanda WEBIRC trimisă prea târziu**
|
||||||
|
```
|
||||||
|
WEBIRC trebuie trimisă ÎNAINTE de USER/NICK
|
||||||
|
Ordinea corectă:
|
||||||
|
1. WEBIRC password user host ip
|
||||||
|
2. NICK nickname
|
||||||
|
3. USER username 0 * :realname
|
||||||
|
```
|
||||||
|
|
||||||
|
### **Soluție generală:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Adaugă WebIRC în ircd.conf
|
||||||
|
nano /home/ircd/ircd/lib/ircd.conf
|
||||||
|
|
||||||
|
# Adaugă:
|
||||||
|
WebIRC {
|
||||||
|
host = "*@IP_WEB_SERVER";
|
||||||
|
password = "$PLAIN$parola_aici";
|
||||||
|
description = "Web Gateway";
|
||||||
|
};
|
||||||
|
|
||||||
|
# 2. Repornește IRCd
|
||||||
|
killall ircd
|
||||||
|
/home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf
|
||||||
|
|
||||||
|
# 3. Configurează parola în web client (Kiwi/Lounge)
|
||||||
|
|
||||||
|
# 4. Testează conexiunea
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📚 INTEGRARE CU CLIENȚI POPULARI
|
||||||
|
|
||||||
|
### **1. Kiwi IRC**
|
||||||
|
|
||||||
|
**Instalare:**
|
||||||
|
```bash
|
||||||
|
# Pe serverul web
|
||||||
|
cd /opt
|
||||||
|
git clone https://github.com/kiwiirc/kiwiirc.git
|
||||||
|
cd kiwiirc
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
**Configurare (config.ini):**
|
||||||
|
```ini
|
||||||
|
[webirc]
|
||||||
|
password = your_webirc_password
|
||||||
|
|
||||||
|
[connections]
|
||||||
|
default_server = irc.underchat.org
|
||||||
|
default_port = 6667
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **2. TheLounge**
|
||||||
|
|
||||||
|
**Instalare:**
|
||||||
|
```bash
|
||||||
|
npm install -g thelounge
|
||||||
|
thelounge start
|
||||||
|
```
|
||||||
|
|
||||||
|
**Configurare (config.js):**
|
||||||
|
```javascript
|
||||||
|
module.exports = {
|
||||||
|
webirc: {
|
||||||
|
"underchat.org": {
|
||||||
|
password: "your_webirc_password",
|
||||||
|
server: "irc.underchat.org",
|
||||||
|
port: 6667
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### **3. IRCCloud (Service Hosted)**
|
||||||
|
|
||||||
|
Contactează IRCCloud pentru a cere adăugarea rețelei tale.
|
||||||
|
Ei vor furniza IP-urile lor și parola WebIRC necesară.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 REFERINȚE
|
||||||
|
|
||||||
|
- **Cod sursă:** `ircd/m_webirc.c`
|
||||||
|
- **Exemplu config:** `doc/example.conf` (liniile 1047-1089)
|
||||||
|
- **Specificație IRCv3:** https://ircv3.net/specs/extensions/webirc
|
||||||
|
- **Kiwi IRC:** https://kiwiirc.com/
|
||||||
|
- **TheLounge:** https://thelounge.chat/
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 CONCLUZIE
|
||||||
|
|
||||||
|
**WebIRC** = **Gateway Web-to-IRC cu IP-uri reale**
|
||||||
|
|
||||||
|
Transformă conexiuni web:
|
||||||
|
```
|
||||||
|
FĂRĂ: Toți → WebServer IP → IRCd (toți cu același IP)
|
||||||
|
CU: User1 → WebServer → WEBIRC → IRCd (fiecare cu IP-ul său)
|
||||||
|
```
|
||||||
|
|
||||||
|
Este **ESENȚIAL** pentru:
|
||||||
|
- ✅ Clienți IRC web (Kiwi IRC, TheLounge)
|
||||||
|
- ✅ Integrare IRC pe site-uri
|
||||||
|
- ✅ GeoIP corect pentru web users
|
||||||
|
- ✅ Clone protection funcțional
|
||||||
|
- ✅ Ban-uri precise
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Data:** 14 Februarie 2026
|
||||||
|
**Versiune:** 1.0
|
||||||
|
**Pentru:** UnderChat IRCd v1.5.0+
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 QUICK START
|
||||||
|
|
||||||
|
**Pentru a adăuga WebIRC:**
|
||||||
|
|
||||||
|
```conf
|
||||||
|
# Adaugă în /home/ircd/ircd/lib/ircd.conf:
|
||||||
|
|
||||||
|
WebIRC {
|
||||||
|
host = "*@IP_WEBSERVER_TĂU";
|
||||||
|
password = "$PLAIN$parola_foarte_puternica_2026";
|
||||||
|
description = "UnderChat Web Client";
|
||||||
|
ident = "webchat";
|
||||||
|
ignoreident = yes;
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
**În Kiwi IRC (config.ini):**
|
||||||
|
```ini
|
||||||
|
[webirc]
|
||||||
|
password = parola_foarte_puternica_2026
|
||||||
|
```
|
||||||
|
|
||||||
|
**Restart IRCd:**
|
||||||
|
```bash
|
||||||
|
killall ircd
|
||||||
|
/home/ircd/ircd/bin/ircd -f /home/ircd/ircd/lib/ircd.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
**Testează:** Conectează-te prin web client și verifică `/WHOIS` - ar trebui să vezi IP-ul tău real!
|
||||||
|
|
||||||
|
**GATA!** ✅
|
||||||
|
|
||||||
117
install.sh
117
install.sh
|
|
@ -789,6 +789,12 @@ EOFCONFIG_PSEUDO
|
||||||
|
|
||||||
EOFCONFIG_SPOOFHOST
|
EOFCONFIG_SPOOFHOST
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# SECȚIUNE: WEBIRC - Gateway-uri Web-to-IRC
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
EOFCONFIG_WEBIRC
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# SECȚIUNE: FEATURE - Caracteristici și setări
|
# SECȚIUNE: FEATURE - Caracteristici și setări
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
|
|
@ -983,6 +989,19 @@ EOFCONFIG
|
||||||
sed -i 's|EOFCONFIG_SPOOFHOST|# SPOOFHOST: Neconfigurata|g' "$config_file"
|
sed -i 's|EOFCONFIG_SPOOFHOST|# SPOOFHOST: Neconfigurata|g' "$config_file"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Generare WEBIRC section (dacă există)
|
||||||
|
if [ -n "$WEBIRC_CONFIG" ]; then
|
||||||
|
awk -v webirc="$WEBIRC_CONFIG" '
|
||||||
|
/EOFCONFIG_WEBIRC/ {
|
||||||
|
print webirc
|
||||||
|
next
|
||||||
|
}
|
||||||
|
{ print }
|
||||||
|
' "$config_file" > "$config_file.tmp" && mv "$config_file.tmp" "$config_file"
|
||||||
|
else
|
||||||
|
sed -i 's|EOFCONFIG_WEBIRC|# WEBIRC: 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
|
||||||
}
|
}
|
||||||
|
|
@ -1418,6 +1437,12 @@ Pseudo \"NICKSERV\" {
|
||||||
nick = \"NickServ@${services_server}\";
|
nick = \"NickServ@${services_server}\";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# LOGIN - Management nickname-uri
|
||||||
|
Pseudo \"LOGIN\" {
|
||||||
|
name = \"X\";
|
||||||
|
nick = \"X@${services_server}\";
|
||||||
|
};
|
||||||
|
|
||||||
# Alias scurt NS pentru NickServ
|
# Alias scurt NS pentru NickServ
|
||||||
Pseudo \"NS\" {
|
Pseudo \"NS\" {
|
||||||
name = \"NickServ\";
|
name = \"NickServ\";
|
||||||
|
|
@ -1575,6 +1600,97 @@ Spoofhost \"users.${network_name}\" {
|
||||||
# Vezi documentația: SPOOFHOST_EXPLAINED.md"
|
# Vezi documentația: SPOOFHOST_EXPLAINED.md"
|
||||||
log_info "SPOOFHOST: Neconfigurata (opțional pentru protecție)"
|
log_info "SPOOFHOST: Neconfigurata (opțional pentru protecție)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Configurare WEBIRC (Gateway Web-to-IRC)
|
||||||
|
echo ""
|
||||||
|
echo -e "${GALBEN}═══════════════════════════════════════${NC}"
|
||||||
|
echo -e "${GALBEN}CONFIGURARE WEBIRC (Gateway Web-to-IRC)${NC}"
|
||||||
|
echo -e "${GALBEN}═══════════════════════════════════════${NC}"
|
||||||
|
echo ""
|
||||||
|
echo " WEBIRC permite clienților IRC web (Kiwi IRC, TheLounge)"
|
||||||
|
echo " să transmită IP-ul REAL al utilizatorilor către server."
|
||||||
|
echo ""
|
||||||
|
echo " FĂRĂ WebIRC: Toți web users apar cu IP-ul serverului web"
|
||||||
|
echo " CU WebIRC: Fiecare user are IP-ul său real vizibil"
|
||||||
|
echo ""
|
||||||
|
echo " Necesar DOAR dacă ai un client IRC web (ex: Kiwi IRC)."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
read -p " Configurare WEBIRC pentru web gateway? (y/n) [n]: " configure_webirc
|
||||||
|
configure_webirc=${configure_webirc:-n}
|
||||||
|
|
||||||
|
if [ "$configure_webirc" = "y" ] || [ "$configure_webirc" = "Y" ]; then
|
||||||
|
echo ""
|
||||||
|
log_info "Configurare WEBIRC pentru gateway web-to-IRC"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
read -p " IP/Host server web (ex: 203.0.113.50, chat.domain.org) [127.0.0.1]: " webirc_host
|
||||||
|
webirc_host=${webirc_host:-127.0.0.1}
|
||||||
|
|
||||||
|
read -s -p " Parola WebIRC (shared secret): " webirc_password
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [ -z "$webirc_password" ]; then
|
||||||
|
webirc_password="webirc_$(openssl rand -hex 8 2>/dev/null || date +%s)"
|
||||||
|
log_warn "Parola generată automat: ${webirc_password}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
read -p " Descriere gateway (ex: Kiwi IRC, TheLounge) [Web Gateway]: " webirc_description
|
||||||
|
webirc_description=${webirc_description:-Web Gateway}
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
read -p " Setări avansate? (y/n) [n]: " webirc_advanced
|
||||||
|
webirc_advanced=${webirc_advanced:-n}
|
||||||
|
|
||||||
|
if [ "$webirc_advanced" = "y" ] || [ "$webirc_advanced" = "Y" ]; then
|
||||||
|
read -p " Ident fix pentru web users (ex: webchat) [webchat]: " webirc_ident
|
||||||
|
webirc_ident=${webirc_ident:-webchat}
|
||||||
|
|
||||||
|
WEBIRC_CONFIG="# Gateway Web-to-IRC pentru ${webirc_host}
|
||||||
|
WebIRC {
|
||||||
|
host = \"*@${webirc_host}\";
|
||||||
|
password = \"\$PLAIN\$${webirc_password}\";
|
||||||
|
description = \"${webirc_description}\";
|
||||||
|
ident = \"${webirc_ident}\";
|
||||||
|
userident = no;
|
||||||
|
ignoreident = yes;
|
||||||
|
stripsslfp = yes;
|
||||||
|
enableoptions = yes;
|
||||||
|
};"
|
||||||
|
log_success "WEBIRC: Configurare avansată pentru ${webirc_host}"
|
||||||
|
else
|
||||||
|
WEBIRC_CONFIG="# Gateway Web-to-IRC pentru ${webirc_host}
|
||||||
|
WebIRC {
|
||||||
|
host = \"*@${webirc_host}\";
|
||||||
|
password = \"\$PLAIN\$${webirc_password}\";
|
||||||
|
description = \"${webirc_description}\";
|
||||||
|
};"
|
||||||
|
log_success "WEBIRC: Configurare simplă pentru ${webirc_host}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${VERDE}═══════════════════════════════════════${NC}"
|
||||||
|
echo -e "${VERDE}IMPORTANT - Configurare Web Client${NC}"
|
||||||
|
echo -e "${VERDE}═══════════════════════════════════════${NC}"
|
||||||
|
echo ""
|
||||||
|
echo " În Kiwi IRC (config.ini):"
|
||||||
|
echo " [webirc]"
|
||||||
|
echo " password = ${webirc_password}"
|
||||||
|
echo ""
|
||||||
|
echo " În TheLounge (config.js):"
|
||||||
|
echo " webirc: {"
|
||||||
|
echo " \"${network_name}\": {"
|
||||||
|
echo " password: \"${webirc_password}\""
|
||||||
|
echo " }"
|
||||||
|
echo " }"
|
||||||
|
echo ""
|
||||||
|
log_warn "SALVEAZĂ această parolă pentru configurarea web client-ului!"
|
||||||
|
else
|
||||||
|
WEBIRC_CONFIG="# WEBIRC: Neconfigurata
|
||||||
|
# Adaugă manual WebIRC blocks pentru gateway-uri web-to-IRC.
|
||||||
|
# Vezi documentația: WEBIRC_EXPLAINED.md"
|
||||||
|
log_info "WEBIRC: Neconfigurata (opțional pentru web gateways)"
|
||||||
|
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}
|
||||||
|
|
@ -1591,6 +1707,7 @@ Spoofhost \"users.${network_name}\" {
|
||||||
CRULE_CONFIG="# CRULE: Neconfigurata (mod non-interactiv)"
|
CRULE_CONFIG="# CRULE: Neconfigurata (mod non-interactiv)"
|
||||||
PSEUDO_CONFIG="# PSEUDO: Neconfigurata (mod non-interactiv)"
|
PSEUDO_CONFIG="# PSEUDO: Neconfigurata (mod non-interactiv)"
|
||||||
SPOOFHOST_CONFIG="# SPOOFHOST: Neconfigurata (mod non-interactiv)"
|
SPOOFHOST_CONFIG="# SPOOFHOST: Neconfigurata (mod non-interactiv)"
|
||||||
|
WEBIRC_CONFIG="# WEBIRC: 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/
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue