diff --git a/STEALTH_OPER_MODE.md b/STEALTH_OPER_MODE.md new file mode 100644 index 0000000..d60c901 --- /dev/null +++ b/STEALTH_OPER_MODE.md @@ -0,0 +1,419 @@ +# 🎭 STEALTH OPER MODE - Operator Invizibil + +**Data**: 23 Februarie 2026 +**Feature**: Stealth Oper (Operator Invizibil) +**Status**: ✅ **IMPLEMENTAT ÎN INSTALL.SH** + +--- + +## 🎯 CE ESTE STEALTH OPER? + +**Stealth Oper Mode** = Ești operator cu toate privilegiile, dar **NIMENI nu știe** că ești staff! + +### Operator VIZIBIL (standard): +``` +/whois Raducu +Raducu is ~Raducu@Raducu.Staff.UnderChat.org * Raducu +Raducu is an UnderChat Founder +Raducu is an UnderChat Staff Member +``` +👆 **Toată lumea vede că ești staff!** + +### Operator INVIZIBIL (stealth): +``` +/whois Raducu +Raducu is ~Raducu@4C5DA6.3305AC.147F4A.B19664.IP * Raducu +Raducu on #CService +``` +👆 **Pari un user normal!** + +--- + +## ✅ BENEFICII STEALTH MODE + +### Pentru Tine: + +1. ✅ **Monitorizare discretă** + - Observi comportamentul real al utilizatorilor + - Nu se comportă diferit când te văd staff + +2. ✅ **Fără target pentru atacuri** + - Trolls nu știu pe cine să ataceze + - Reducere spam/flood către tine + +3. ✅ **Privacy complet** + - Hostname normal (nu Staff.Network) + - Canalele tale rămân private + - Fără notice când primești /WHOIS + +4. ✅ **Toate privilegiile de oper!** + - /KILL, /GLINE, /REHASH - TOT funcționează + - Doar că nimeni nu știe că le ai + +### Pentru Rețea: + +1. ✅ **Securitate îmbunătățită** + - Staff undercover pentru investigații + - Detectare abuse fără să fie observat + +2. ✅ **Moderare eficientă** + - Verifici comportament REAL, nu când știu că ești staff + +--- + +## 🎮 CUM FUNCȚIONEAZĂ + +### La Instalare (Interactive): + +```bash +./install.sh + +# ...configurare server... + +═══════════════════════════════════════ +MOD OPERATOR +═══════════════════════════════════════ + +Alege modul de operator: + +1) VIZIBIL (standard, recomandat) + - Apare în /WHOIS: 'is an UnderChat Staff Member' + - Hostname: username.Staff.UnderChat.org + - Vizibil în /STATS o + +2) INVIZIBIL (stealth mode) + - NU apare mesaj staff în /WHOIS + - Hostname NORMAL ca un user obișnuit + - Ascuns din /STATS o + - Păstrezi TOATE privilegiile de oper! + +Alege [1-2] [1]: 2 ← Tu alegi 2 pentru stealth! +``` + +### Config Generat (Stealth): + +```conf +# Operator INVIZIBIL (Stealth Mode) +# NU apare în /WHOIS ca staff, hostname normal ca user obișnuit +Operator { + name = "YourUsername"; + password = "$5$hash..."; + host = "*@*"; + class = "Opers"; + admin = yes; + snomask = 157445; + # FĂRĂ swhois = NU apare "is an UnderChat Staff Member" + hide_oper = yes; # Ascunde din /STATS o + hide_channels = yes; # Ascunde canalele în /WHOIS + whois_notice = no; # NU trimite notice când primești /WHOIS +}; +``` + +### Config Generat (Vizibil): + +```conf +# Operator VIZIBIL (Standard Mode) +# Apare în /WHOIS ca staff, hostname Staff.Network +Operator { + name = "YourUsername"; + password = "$5$hash..."; + host = "*@*"; + class = "Opers"; + admin = yes; + snomask = 157445; + swhois = "is an UnderChat Staff Member"; + hide_oper = no; # Vizibil în /STATS o + hide_channels = yes; # Ascunde canalele în /WHOIS + whois_notice = yes; # Trimite notice când primești /WHOIS +}; +``` + +--- + +## 📊 DIFERENȚE DETALIATE + +| Aspect | VIZIBIL | INVIZIBIL | +|--------|---------|-----------| +| **Mesaj în /WHOIS** | ✅ "is an UnderChat Staff Member" | ❌ Fără mesaj | +| **Hostname** | `Raducu.Staff.UnderChat.org` | `A5F8B9.CD8514.147F4A.B19664.IP` | +| **În /STATS o** | ✅ Apare | ❌ Ascuns | +| **Canale în /WHOIS** | ❌ Ascunse (hide_channels) | ❌ Ascunse | +| **Notice la /WHOIS** | ✅ Primești notice | ❌ NU primești notice | +| **Comenzi oper** | ✅ Toate | ✅ Toate (identic!) | +| **Privilegii** | ✅ Admin complet | ✅ Admin complet | +| **Kill users** | ✅ Da | ✅ Da | +| **GLINE/KLINE** | ✅ Da | ✅ Da | +| **REHASH** | ✅ Da | ✅ Da | +| **Mode +o pe canale** | ✅ Da | ✅ Da | + +**Concluzie**: **Toate privilegiile sunt identice!** Doar vizibilitatea diferă. + +--- + +## 🎭 EXEMPLE UTILIZARE + +### Scenario 1: Staff Undercover + +``` +# Tu (stealth oper): +/oper StealthUser password +# Nimeni nu vede că te-ai făcut oper + +# Join canal cu probleme: +/join #problema + +# Observi comportament: +# Users vorbesc NORMAL, nu se "prefac" + +# Verifici abuse: +/whois TrollUser + +# Dacă e nevoie, acționezi: +/kill TrollUser :Abuse detected + +# Exit discret: +/part #problema +``` + +### Scenario 2: Investigație Discret + +``` +# Te faci oper fără să știe nimeni: +/oper InvestigatorUser password + +# Monitorizezi canal suspect: +/join #suspect + +# Verifici logs: +/check SuspectUser + +# Dacă găsești probleme: +/gline *@suspect-host :Network abuse + +# Nimeni nu știe cine a făcut gline! +``` + +### Scenario 3: Test Server ca User Normal + +``` +# Te conectezi ca user normal: +/server underchat.org +/nick TestUser + +# Te faci oper când e nevoie: +/oper TestUser password + +# Testezi features ca oper: +/rehash +/stats u + +# Dar în /WHOIS pari user normal! +# Perfect pentru debugging production! +``` + +--- + +## 🔧 CONFIGURARE MANUALĂ + +### Dacă vrei să schimbi un oper existent: + +```conf +# Editează ircd.conf: +nano /home/anope/ircd/lib/ircd.conf + +# Găsește blocul Operator: +Operator { + name = "YourOper"; + password = "$5$..."; + host = "*@*"; + class = "Opers"; + admin = yes; + snomask = 157445; + + # Pentru STEALTH, schimbă: + # swhois = "is an UnderChat Staff Member"; ← ȘTERGE sau comentează + hide_oper = yes; ← TRUE + hide_channels = yes; ← TRUE + whois_notice = no; ← FALSE +}; + +# Restart IRCd: +killall ircd +/home/anope/ircd/bin/ircd -f /home/anope/ircd/lib/ircd.conf +``` + +### Adaugă un al doilea oper stealth: + +```conf +# În ircd.conf, după primul Operator block: + +# Operator stealth secundar +Operator { + name = "SecretAdmin"; + password = "$PLAIN$secretpass"; # Schimbă cu hash MD5! + host = "*@*"; + class = "Opers"; + admin = yes; + snomask = 157445; + hide_oper = yes; + hide_channels = yes; + whois_notice = no; +}; +``` + +--- + +## 🎯 CÂND SĂ FOLOSEȘTI FIECARE MOD + +### Folosește VIZIBIL când: + +- ✅ Vrei să fii recunoscut ca staff oficial +- ✅ User support (users să știe că pot cere ajutor) +- ✅ Moderare publică (prezență vizibilă descurajează abuse) +- ✅ Managementul rețelei (clear authority) + +### Folosește INVIZIBIL când: + +- ✅ Investigații undercover +- ✅ Monitorizare comportament real +- ✅ Testing ca user normal +- ✅ Nu vrei să fii target pentru trolls/spam +- ✅ Privacy personală (când nu ești "on duty") + +--- + +## 🐛 TROUBLESHOOTING + +### Problemă: Tot apar mesaje în /WHOIS + +**Cauză 1**: Config nu salvat corect. + +**Soluție**: +```bash +# Verifică config: +grep -A 10 "name = \"YourOper\"" /home/anope/ircd/lib/ircd.conf + +# Ar trebui să vezi: +# hide_oper = yes; +# whois_notice = no; +# Fără swhois = "..." +``` + +**Cauză 2**: Nu ai făcut restart. + +**Soluție**: +```bash +killall ircd +sleep 3 +/home/anope/ircd/bin/ircd -f /home/anope/ircd/lib/ircd.conf +``` + +### Problemă: Tot am hostname Staff.Network + +**Cauză**: Feature `OPERHOST_HIDING` e TRUE. + +**Soluție**: +```conf +# În ircd.conf, secțiunea features: +features { + # ... + "OPERHOST_HIDING" = "FALSE"; # Dezactivează hostname special pentru opers + # ... +}; +``` + +**Sau** doar nu te autentifica la X înainte de /oper (hostname-ul de la X va fi normal). + +### Problemă: Apar în /STATS o + +**Cauză**: `hide_oper = no` sau nu e setat. + +**Soluție**: +```conf +Operator { + # ... + hide_oper = yes; # OBLIGATORIU pentru stealth! +}; +``` + +--- + +## ✅ VERIFICARE POST-CONFIGURARE + +### Test stealth mode: + +```bash +# 1. Conectează IRC client: +/server underchat.org +/nick TestUser + +# 2. Fă-te oper: +/oper YourStealthOper password + +# 3. Verifică /WHOIS (de pe alt client sau alt user): +/whois YourStealthOper + +# Ar trebui să vezi DOAR: +# YourStealthOper is ~user@hostname * Real Name +# YourStealthOper on #channels +# YourStealthOper using server.network The Network +# End of /WHOIS + +# FĂRĂ: +# ❌ "is an UnderChat Staff Member" +# ❌ Hostname Staff.Network + +# 4. Verifică că ești oper: +/rehash +# Ar trebui să funcționeze! + +# 5. Verifică /STATS o (de pe alt user): +/stats o +# NU ar trebui să apari în listă! +``` + +--- + +## 📚 FEATURES FOLOSITE + +### Setări Operator Block: + +| Setare | Vizibil | Invizibil | Funcție | +|--------|---------|-----------|---------| +| `swhois` | "is an..." | ABSENT | Mesaj custom în /WHOIS | +| `hide_oper` | no | **yes** | Ascunde din /STATS o | +| `hide_channels` | yes | yes | Ascunde canale în /WHOIS | +| `whois_notice` | yes | **no** | Notice când primești /WHOIS | + +### Features Related: + +```conf +features { + "OPERHOST_HIDING" = "FALSE"; # Dezactivează hostname Staff.Network + "OPER_HIDE" = "TRUE"; # Permite hide_oper = yes +}; +``` + +--- + +## 🎉 CONCLUZIE + +**Stealth Oper Mode** e perfect pentru: + +- 🎭 **Investigații undercover** +- 🔍 **Monitorizare discretă** +- 🛡️ **Protecție împotriva target-ării** +- 🧪 **Testing ca user normal** + +**Păstrezi TOATE privilegiile de oper**, doar că nimeni nu știe! 🤫 + +--- + +**Implementat de**: Senior Software Architect +**Data**: 23 Februarie 2026 +**Feature Status**: ✅ **PRODUCTION READY** + +--- + +**🎭 ACUM POȚI FI OPER INVIZIBIL! 🎭** + diff --git a/install.sh b/install.sh index 0865b75..f9ebd75 100755 --- a/install.sh +++ b/install.sh @@ -645,6 +645,7 @@ generate_config() { local client_ports_list="${18}" local server_port="${19:-4400}" local ssl_ports_list="${20}" + local oper_stealth="${21:-no}" # NOU: Stealth oper mode # Linie IPv6 comentata daca nu e furnizata local vhost6_line=" # vhost = \"2001:db8::1\";" @@ -883,18 +884,7 @@ EOFCONFIG_SSL_PORTS # SECȚIUNE: OPERATORI # ============================================================================ -Operator { - name = "EOFCONFIG_OPER_USER"; - password = "EOFCONFIG_OPER_PASS"; - host = "*@*"; - class = "Opers"; - admin = yes; - snomask = 157445; - swhois = "is an UnderChat Staff Member"; - hide_oper = no; - hide_channels = yes; - whois_notice = yes; -}; +EOFCONFIG_OPERATOR_BLOCK # ============================================================================ # SECȚIUNE: CONNECT - Legări cu alte servere @@ -1194,6 +1184,42 @@ features { EOFCONFIG + # Generare bloc Operator (vizibil sau invizibil) + local operator_block="" + if [ "$oper_stealth" = "yes" ]; then + # Operator INVIZIBIL (stealth mode) + operator_block="# Operator INVIZIBIL (Stealth Mode) +# NU apare în /WHOIS ca staff, hostname normal ca user obișnuit +Operator { + name = \"EOFCONFIG_OPER_USER\"; + password = \"EOFCONFIG_OPER_PASS\"; + host = \"*@*\"; + class = \"Opers\"; + admin = yes; + snomask = 157445; + # FĂRĂ swhois = NU apare \"is an UnderChat Staff Member\" + hide_oper = yes; # Ascunde din /STATS o + hide_channels = yes; # Ascunde canalele în /WHOIS + whois_notice = no; # NU trimite notice când primești /WHOIS +};" + else + # Operator VIZIBIL (standard) + operator_block="# Operator VIZIBIL (Standard Mode) +# Apare în /WHOIS ca staff, hostname Staff.Network +Operator { + name = \"EOFCONFIG_OPER_USER\"; + password = \"EOFCONFIG_OPER_PASS\"; + host = \"*@*\"; + class = \"Opers\"; + admin = yes; + snomask = 157445; + swhois = \"is an UnderChat Staff Member\"; + hide_oper = no; # Vizibil în /STATS o + hide_channels = yes; # Ascunde canalele în /WHOIS + whois_notice = yes; # Trimite notice când primești /WHOIS +};" + fi + # Înlocuiește placeholder-ele sed -i "s|EOFCONFIG_NAME|$server_name|g" "$config_file" sed -i "s|EOFCONFIG_DESC|$server_desc|g" "$config_file" @@ -1208,6 +1234,16 @@ EOFCONFIG sed -i "s|EOFCONFIG_SERVER_PORT|$server_port|g" "$config_file" sed -i "s|EOFCONFIG_CLIENT_PORTS|$client_ports_block|g" "$config_file" sed -i "s|EOFCONFIG_SSL_PORTS|$ssl_ports_block|g" "$config_file" + + # Înlocuire bloc Operator cu awk (pentru a păstra newlines) + awk -v operator="$operator_block" ' + /EOFCONFIG_OPERATOR_BLOCK/ { + print operator + next + } + { print } + ' "$config_file" > "$config_file.tmp" && mv "$config_file.tmp" "$config_file" + sed -i "s|EOFCONFIG_OPER_USER|$oper_user|g" "$config_file" sed -i "s|EOFCONFIG_OPER_PASS|$oper_pass|g" "$config_file" @@ -1562,6 +1598,36 @@ main() { break done + # Configurare Stealth Mode (Oper Invizibil) + echo "" + echo -e "${GALBEN}═══════════════════════════════════════${NC}" + echo -e "${GALBEN}MOD OPERATOR${NC}" + echo -e "${GALBEN}═══════════════════════════════════════${NC}" + echo "" + echo " Alege modul de operator:" + echo "" + echo " ${VERDE}1) VIZIBIL${NC} (standard, recomandat)" + echo " - Apare în /WHOIS: 'is an UnderChat Staff Member'" + echo " - Hostname: username.Staff.UnderChat.org" + echo " - Vizibil în /STATS o" + echo "" + echo " ${ALBASTRU}2) INVIZIBIL${NC} (stealth mode)" + echo " - NU apare mesaj staff în /WHOIS" + echo " - Hostname NORMAL ca un user obișnuit" + echo " - Ascuns din /STATS o" + echo " - Păstrezi TOATE privilegiile de oper!" + echo "" + read -p " Alege [1-2] [1]: " oper_mode_choice + oper_mode_choice=${oper_mode_choice:-1} + + if [ "$oper_mode_choice" = "2" ]; then + OPER_STEALTH_MODE="yes" + log_info "Mod INVIZIBIL activat - Vei fi oper stealth!" + else + OPER_STEALTH_MODE="no" + log_info "Mod VIZIBIL activat - Staff clasic" + fi + # Configurare HUB echo "" echo -e "${GALBEN}═══════════════════════════════════════${NC}" @@ -2012,6 +2078,7 @@ WebIRC { oper_hash="\$PLAIN\$password" is_hub="n" HUB_CONFIG="no" + OPER_STEALTH_MODE="no" # Default: oper vizibil pentru non-interactive CRULE_CONFIG="# CRULE: Neconfigurata (mod non-interactiv)" PSEUDO_CONFIG="# PSEUDO: Neconfigurata (mod non-interactiv)" SPOOFHOST_CONFIG="# SPOOFHOST: Neconfigurata (mod non-interactiv)" @@ -2021,7 +2088,7 @@ WebIRC { # Directorul pentru configurația funcțională - TREBUIE să fie în lib/, nu etc/ conf_file="$PREFIX/lib/ircd.conf" - generate_config "$conf_file" "$server_name" "$server_desc" "$server_numeric" "$admin_location" "$admin_contact" "$vhost_ipv4" "$vhost_ipv6" "$network_name" "$oper_username" "$oper_hash" "$is_hub" "$HUB_CONFIG" "$hub_name" "$hub_host" "$hub_port" "$hub_password" "$client_ports_list" "$SERVER_PORT" "$ssl_ports_list" + generate_config "$conf_file" "$server_name" "$server_desc" "$server_numeric" "$admin_location" "$admin_contact" "$vhost_ipv4" "$vhost_ipv6" "$network_name" "$oper_username" "$oper_hash" "$is_hub" "$HUB_CONFIG" "$hub_name" "$hub_host" "$hub_port" "$hub_password" "$client_ports_list" "$SERVER_PORT" "$ssl_ports_list" "$OPER_STEALTH_MODE" if [ $? -ne 0 ]; then exit 1 fi