# 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!** ✅

