ircu2/WEBIRC_EXPLAINED.md

15 KiB

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:

[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:

[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ă:

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)

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):

[webirc]
password = k1w1_s3cr3t_p@ssw0rd

Exemplu 2: Multiple Servere Web

# 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

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:

/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)

# 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)

WebIRC {
    host = "*@10.0.0.100";
    password = "$PLAIN$thelounge_secret";
    description = "TheLounge Web Client";
    ident = "lounge";
    userident = yes;
    ignoreident = yes;
};

Configurare TheLounge (config.js):

webirc: {
    "underchat.org": {
        password: "thelounge_secret",
        server: "irc.underchat.org",
        port: 6667
    }
}

🎓 CAZURI DE UTILIZARE

1. Kiwi IRC pe site-ul tău

WebIRC {
    host = "*@chat.underchat.org";
    password = "$PLAIN$kiwi_password";
    description = "UnderChat Web Client";
};

Link-ul utilizatorilor: https://chat.underchat.org/


2. IRCCloud / Hosted Services

# 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)

# 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:

# ============================================================================
# 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:

grep -A 5 'WebIRC {' /home/ircd/ircd/lib/ircd.conf

Output așteptat:

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):

[webirc]
password = k1w1_Str0ng_P@ssw0rd_2026

TheLounge (config.js):

webirc: {
    "underchat.org": {
        password: "l0ung3_S3cr3t_K3y"
    }
}

3. Verifică în 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:

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

# ❌ SLAB:
password = "$PLAIN$123456";

# ❌ SLAB:
password = "$PLAIN$webirc";

# ✅ BINE:
password = "$PLAIN$W3b1RC_Str0ng_P@ssw0rd_2026_UnD3rCh@t";

2. Limitează la IP-uri SPECIFICE

# ❌ 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

# Î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

    grep 'WebIRC {' /home/ircd/ircd/lib/ircd.conf
    # Dacă nu găsește → Trebuie adăugat
    
  2. Parola greșită în web client

    # 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

    # 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ă:

# 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:

# Pe serverul web
cd /opt
git clone https://github.com/kiwiirc/kiwiirc.git
cd kiwiirc
npm install

Configurare (config.ini):

[webirc]
password = your_webirc_password

[connections]
default_server = irc.underchat.org
default_port = 6667

2. TheLounge

Instalare:

npm install -g thelounge
thelounge start

Configurare (config.js):

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


🎯 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:

# 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):

[webirc]
password = parola_foarte_puternica_2026

Restart IRCd:

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!