242 lines
9.1 KiB
Bash
242 lines
9.1 KiB
Bash
#!/bin/bash
|
|
#
|
|
# Script specializat pentru diagnosticarea și repararea host hiding în UnderChat IRCd
|
|
# Versiunea: 1.0.3 - Bazată pe configurația funcțională de la ns2.node-ase.ovh
|
|
# Limba: Română
|
|
#
|
|
|
|
# Culori
|
|
ROSU='\033[0;31m'
|
|
VERDE='\033[0;32m'
|
|
GALBEN='\033[1;33m'
|
|
ALBASTRU='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
log_info() { echo -e "${ALBASTRU}[INFO]${NC} $1"; }
|
|
log_success() { echo -e "${VERDE}[SUCCES]${NC} $1"; }
|
|
log_warn() { echo -e "${GALBEN}[AVERTIZARE]${NC} $1"; }
|
|
log_error() { echo -e "${ROSU}[EROARE]${NC} $1"; }
|
|
|
|
echo -e "${ALBASTRU}"
|
|
echo "════════════════════════════════════════"
|
|
echo " Diagnostic și Reparare Host Hiding"
|
|
echo "════════════════════════════════════════"
|
|
echo -e "${NC}"
|
|
|
|
# Detectează PREFIX
|
|
if [ -n "$1" ]; then
|
|
PREFIX="$1"
|
|
elif [ -d "$HOME/ircd" ]; then
|
|
PREFIX="$HOME/ircd"
|
|
elif [ -d "/home/ircd/ircd" ]; then
|
|
PREFIX="/home/ircd/ircd"
|
|
else
|
|
log_error "Nu pot detecta directorul IRCd!"
|
|
echo "Utilizare: $0 [PREFIX_PATH]"
|
|
exit 1
|
|
fi
|
|
|
|
CONFIG_FILE="$PREFIX/etc/ircd.conf"
|
|
|
|
log_info "Folosesc PREFIX: $PREFIX"
|
|
log_info "Config file: $CONFIG_FILE"
|
|
|
|
if [ ! -f "$CONFIG_FILE" ]; then
|
|
log_error "Fișierul de configurare nu există: $CONFIG_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${GALBEN}═══ DIAGNOSTIC CURENT ═══${NC}"
|
|
|
|
# Compară cu serverul funcțional (ns2.node-ase.ovh)
|
|
echo ""
|
|
log_info "Comparare cu configurația funcțională de pe ns2.node-ase.ovh..."
|
|
echo -e "${VERDE}Pe serverul funcțional IP-ul se ascunde automat cu format hexadecimal:${NC}"
|
|
echo -e " Exemplu: ~Raducu@4C5DA6.3305AC.147F4A.B19664.IP"
|
|
echo -e "${GALBEN}Pe serverul tău IP-ul rămâne vizibil:${NC}"
|
|
echo -e " Problema: ~Raducu@188.24.5.202"
|
|
|
|
# Verifică setările actuale de host hiding
|
|
echo ""
|
|
log_info "Verificare setări HOST_HIDING actuale..."
|
|
|
|
if grep -q '"HOST_HIDING" = "TRUE"' "$CONFIG_FILE"; then
|
|
log_success "HOST_HIDING = TRUE găsit"
|
|
else
|
|
log_error "HOST_HIDING = TRUE LIPSEȘTE!"
|
|
fi
|
|
|
|
if grep -q '"HOST_HIDING_STYLE"' "$CONFIG_FILE"; then
|
|
STYLE=$(grep '"HOST_HIDING_STYLE"' "$CONFIG_FILE" | sed -E 's/.*"HOST_HIDING_STYLE" = "([^"]+)".*/\1/')
|
|
log_success "HOST_HIDING_STYLE = $STYLE găsit"
|
|
else
|
|
log_error "HOST_HIDING_STYLE LIPSEȘTE!"
|
|
fi
|
|
|
|
if grep -q '"HIDDEN_HOST"' "$CONFIG_FILE"; then
|
|
HIDDEN_HOST=$(grep '"HIDDEN_HOST"' "$CONFIG_FILE" | sed -E 's/.*"HIDDEN_HOST" = "([^"]+)".*/\1/')
|
|
log_success "HIDDEN_HOST = $HIDDEN_HOST găsit"
|
|
else
|
|
log_error "HIDDEN_HOST LIPSEȘTE!"
|
|
fi
|
|
|
|
if grep -q '"HIDDEN_IP"' "$CONFIG_FILE"; then
|
|
HIDDEN_IP=$(grep '"HIDDEN_IP"' "$CONFIG_FILE" | sed -E 's/.*"HIDDEN_IP" = "([^"]+)".*/\1/')
|
|
log_success "HIDDEN_IP = $HIDDEN_IP găsit"
|
|
else
|
|
log_error "HIDDEN_IP LIPSEȘTE!"
|
|
fi
|
|
|
|
# Verifică modul utilizatorilor
|
|
echo ""
|
|
log_info "Verificare moduri utilizatori..."
|
|
|
|
if grep -A10 'Class {' "$CONFIG_FILE" | grep -q 'usermode = "+ix"'; then
|
|
log_success "Usermode +ix găsit în clase"
|
|
else
|
|
if grep -A10 'Class {' "$CONFIG_FILE" | grep -q 'usermode = "+i"'; then
|
|
log_warn "Usermode +i găsit (ar trebui să fie +ix)"
|
|
else
|
|
log_error "Niciun usermode +ix găsit!"
|
|
fi
|
|
fi
|
|
|
|
# Verifică placeholder-uri neînlocuite
|
|
echo ""
|
|
log_info "Verificare placeholder-uri..."
|
|
|
|
if grep -q "EOFCONFIG" "$CONFIG_FILE"; then
|
|
log_error "Placeholder-uri EOFCONFIG neînlocuite găsite:"
|
|
grep -n "EOFCONFIG" "$CONFIG_FILE" | head -5
|
|
fi
|
|
|
|
# Afișează setările features complete
|
|
echo ""
|
|
log_info "Secțiunea features actuală:"
|
|
echo -e "${GALBEN}────────────────────────────────────────${NC}"
|
|
sed -n '/^features {/,/^};$/p' "$CONFIG_FILE" | head -30
|
|
echo -e "${GALBEN}────────────────────────────────────────${NC}"
|
|
|
|
# Întrebă dacă să aplice reparațiile
|
|
echo ""
|
|
echo -e "${GALBEN}Vrei să aplic reparațiile automate? [y/N]:${NC}"
|
|
read -r apply_fixes
|
|
|
|
if [[ "$apply_fixes" =~ ^[Yy]$ ]]; then
|
|
echo ""
|
|
echo -e "${VERDE}═══ APLICARE REPARAȚII ═══${NC}"
|
|
|
|
# Backup
|
|
cp "$CONFIG_FILE" "$CONFIG_FILE.backup.hosthiding.$(date +%s)"
|
|
log_success "Backup creat"
|
|
|
|
# 1. Corectează placeholder-uri
|
|
if grep -q "EOFCONFIG" "$CONFIG_FILE"; then
|
|
log_info "Corectez placeholder-uri EOFCONFIG..."
|
|
sed -i "s|EOFCONFIG_PREFIX|$PREFIX|g" "$CONFIG_FILE"
|
|
sed -i "s|EOFCONFIG_NETWORK|underchat.org|g" "$CONFIG_FILE"
|
|
sed -i "s|\\.EOFCONFIG_NETWORK|.underchat.org|g" "$CONFIG_FILE"
|
|
sed -i "s|\\*\\.EOFCONFIG_NETWORK|*.underchat.org|g" "$CONFIG_FILE"
|
|
log_success "Placeholder-uri corectate"
|
|
fi
|
|
|
|
# 2. Setează HOST_HIDING_STYLE pentru format hexadecimal exact ca pe ns2.node-ase.ovh
|
|
log_info "Configurez HOST_HIDING_STYLE pentru format hexadecimal..."
|
|
|
|
# Elimină orice HOST_HIDING_STYLE existent
|
|
sed -i '/HOST_HIDING_STYLE/d' "$CONFIG_FILE"
|
|
|
|
# Adaugă HOST_HIDING_STYLE = "3" pentru format hexadecimal (ca pe ns2.node-ase.ovh)
|
|
sed -i '/"HOST_HIDING" = "TRUE"/a\ "HOST_HIDING_STYLE" = "3";' "$CONFIG_FILE"
|
|
log_success "HOST_HIDING_STYLE setat la 3 (format hexadecimal)"
|
|
|
|
# 3. Setează HIDDEN_HOST pentru format .IP
|
|
log_info "Configurez HIDDEN_HOST pentru sufix .IP..."
|
|
|
|
# Elimină orice HIDDEN_HOST existent
|
|
sed -i '/HIDDEN_HOST/d' "$CONFIG_FILE"
|
|
|
|
# Adaugă HIDDEN_HOST cu sufix .IP (exact ca pe ns2.node-ase.ovh)
|
|
sed -i '/"HOST_HIDING_STYLE" = "3"/a\ "HIDDEN_HOST" = "users.underchat.org";' "$CONFIG_FILE"
|
|
sed -i '/"HIDDEN_HOST" = "users.underchat.org"/a\ "HIDDEN_IP" = "127.0.0.1";' "$CONFIG_FILE"
|
|
log_success "HIDDEN_HOST și HIDDEN_IP configurate"
|
|
|
|
# 4. Adaugă setări critice pentru ascunderea automată
|
|
log_info "Adaug setări pentru ascunderea automată la conectare..."
|
|
|
|
# Setările specifice pentru a replica comportamentul de pe ns2.node-ase.ovh
|
|
if ! grep -q '"HIDDEN_HOSTTYPE"' "$CONFIG_FILE"; then
|
|
sed -i '/"HIDDEN_IP" = "127.0.0.1"/a\ "HIDDEN_HOSTTYPE" = "3";' "$CONFIG_FILE"
|
|
fi
|
|
|
|
if ! grep -q '"AUTOCONNECT_MODE"' "$CONFIG_FILE"; then
|
|
sed -i '/"HIDDEN_HOSTTYPE" = "3"/a\ "AUTOCONNECT_MODE" = "+ix";' "$CONFIG_FILE"
|
|
fi
|
|
|
|
log_success "Setări pentru ascundere automată adăugate"
|
|
|
|
# 5. Asigură că toate clasele au usermode +ix pentru ascundere automată
|
|
log_info "Configurez toate clasele cu usermode +ix..."
|
|
|
|
# Înlocuiește orice usermode existent cu +ix în toate clasele
|
|
sed -i 's/usermode = "[^"]*"/usermode = "+ix"/' "$CONFIG_FILE"
|
|
log_success "Usermode +ix setat în toate clasele"
|
|
|
|
# 6. Verifică și adaugă setări pentru notificări WHOIS la operatori
|
|
log_info "Verificare și adăugare setări notificări WHOIS pentru operatori..."
|
|
|
|
if ! grep -q '"SPY_WHOIS"' "$CONFIG_FILE"; then
|
|
log_info "Adaug setări SPY_WHOIS pentru notificări complete..."
|
|
sed -i '/WHOIS_NOTICE.*TRUE/a\ "SPY_WHOIS" = "TRUE";\n "SNOMASK_OPERDEFAULT" = "1024";\n "SNOMASK_DEFAULT" = "1024";' "$CONFIG_FILE"
|
|
fi
|
|
|
|
if ! grep -q 'PRIV_WHOIS_NOTICE' "$CONFIG_FILE"; then
|
|
log_info "Adaug privilegii WHOIS pentru operatori..."
|
|
sed -i '/admin = yes/a\ snomask = "+HACK,THROTTLE,OLDSNO,NETWORK,OPERKILL,GLINE";\n privileges = "PRIV_WHOIS_NOTICE", "PRIV_HIDE_OPER", "PRIV_ADMIN";' "$CONFIG_FILE"
|
|
fi
|
|
|
|
log_success "Setări pentru notificări WHOIS la operatori complete"
|
|
|
|
echo ""
|
|
echo -e "${VERDE}═══ TEST FINAL ═══${NC}"
|
|
|
|
# Test sintaxă
|
|
if [ -x "$PREFIX/bin/ircd" ]; then
|
|
log_info "Test sintaxă configurație..."
|
|
if "$PREFIX/bin/ircd" -c -f "$CONFIG_FILE" > /dev/null 2>&1; then
|
|
log_success "✓ Sintaxă configurație validă!"
|
|
else
|
|
log_error "✗ Erori în sintaxă găsite:"
|
|
"$PREFIX/bin/ircd" -c -f "$CONFIG_FILE" 2>&1 | head -10
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${VERDE}════════════════════════════════════════${NC}"
|
|
echo -e "${VERDE} REPARAȚII APLICATE!${NC}"
|
|
echo -e "${VERDE}════════════════════════════════════════${NC}"
|
|
echo ""
|
|
echo -e "${GALBEN}Pași următori:${NC}"
|
|
echo "1. Restart server: $PREFIX/bin/ircd restart"
|
|
echo "2. Conectează-te și testează: /mode nickname +x"
|
|
echo "3. Verifică cu /whois nickname"
|
|
echo ""
|
|
echo -e "${GALBEN}Dacă tot nu funcționează:${NC}"
|
|
echo "- Recompilează cu: make clean && make install"
|
|
echo "- Verifică support compilation cu: ./configure --help | grep hiding"
|
|
|
|
else
|
|
echo ""
|
|
log_info "Reparații anulate. Pentru aplicare manuală:"
|
|
echo ""
|
|
echo -e "${GALBEN}Setări necesare în features:${NC}"
|
|
echo ' "HOST_HIDING" = "TRUE";'
|
|
echo ' "HOST_HIDING_STYLE" = "1";'
|
|
echo ' "HIDDEN_HOST" = "users.underchat.org";'
|
|
echo ' "HIDDEN_IP" = "127.0.0.1";'
|
|
echo ""
|
|
echo -e "${GALBEN}În clase, usermode:${NC}"
|
|
echo ' usermode = "+ix";'
|
|
fi
|