Documentație și ghiduri de instalare
Alege tipul de host: comanda, opțiunile ei, ce citește agentul, ce nu atinge și cum îl scoți.
Instalarea, pe tipuri de host
Pașii sunt cei din panou. Comanda reală, cu cheia hostului, apare acolo când adaugi hostul, iar secretul se arată o singură dată.
VPS cu agent
- root (sau sudo -i)
- curl, openssl, sha256sum
- python3, pentru remedieri
- HTTPS spre valinor.sbs
- În panou alegi „Add a host”, tipul „VPS with agent”, cu adresa serverului (IP sau domeniu).
- Copiezi comanda de instalare generată acolo și o rulezi pe server, ca root. Cheia și secretul trec prin variabile de mediu, nu prin adresă.
- Instalatorul trimite primul raport și îți spune dacă panoul l-a primit. De acolo agentul raportează singur, la 5 minute.
- Opțional: remedierile. Le pornești la instalare și din panou; fără ambele, nicio comandă nu rulează.
Hosting partajat
- un terminal în cont (SSH sau cPanel)
- crontab în cont
- curl, openssl, sha256sum
- fără root
- În panou alegi „Add a host”, tipul „Shared hosting”, cu domeniul site-ului.
- Rulezi comanda de instalare din terminalul contului (SSH sau Terminal din cPanel), fără root.
- Instalatorul pune o linie în crontab-ul contului și găsește singur webroot-ul (public_html, www, htdocs).
- Prima baleiere inventariază fișierele în tranșe; până se termină, nimic nu apare ca „fișier nou”.
Site extern
- doar domeniul
- opțional, un cuvânt din pagină
- În panou alegi „Add a host”, tipul „External site”.
- Scrii domeniul și, opțional, un text care trebuie să apară în pagină: așa se prind și pagina de cont suspendat sau un site defăimat, care răspund tot cu 200.
- Sonda HTTP pornește în primul minut. Verificările rare (la 6 sau 12 ore) își fac prima rulare eșalonat, în interiorul intervalului lor.
Reseller cPanel/WHM
- acces la WHM
- un token API cu list-accts
- În WHM creezi un token API. Minimul e dreptul list-accts, suficient pentru conturi și site-urile lor.
- În panou alegi „Add a host”, tipul „cPanel/WHM reseller”, cu adresa WHM, și salvezi tokenul.
- Conturile apar ca hosturi la prima sincronizare (la 30 de minute), iar cele cu domeniul delegat primesc sonde.
- Opțional: instalezi agentul pe toate conturile dintr-o comandă sau lași conturile noi să se înroleze singure.
curl -fsSL https://valinor.sbs/…/install.sh | \ VPSDASH_KEY='<cheie>' \ VPSDASH_SECRET='<secret>' sh
Forma comenzii. Cea reală, cu cheia și secretul hostului, se generează în panou. Opțiunile merg după sh -s --: un --enable-actions pus direct după sh e respins de shell înainte să citească instalatorul.
--enable-actions: Remedierile: blocarea unui IP (24 h), oprirea unui proces, carantina fișierelor, repornirea serverului web. Fiecare cere aprobarea ta. Fără python3 rămân oprite.--disable-service-restart: Remedierile, fără repornirea serverului web.--enable-self-update: Actualizări din panou, doar cu o versiune a cărei amprentă e semnată. Pe VPS cere root și systemd-run. Formularul din panou o bifează implicit.
Ce citește agentul și ce nu pleacă de pe mașină
Pentru fiecare sursă: ce ajunge în panou și ce rămâne pe server. Fișierele se compară în panou după amprente, nu după conținut.
- Autentificări (/var/log/auth.log · /var/log/secure · journal). Ce trimite: IP-urile și utilizatorii autentificărilor reușite, amprentele cheilor, numărul de eșecuri, conturile create sau schimbate. Ce nu trimite niciodată: Parolele și conținutul integral al jurnalului.
- Firewall (nft · firewall-cmd · ufw · iptables). Ce trimite: Regulile (fără contoare), numărul de blocări din contoare, primele 3 IP-uri sursă din jurnal. Ce nu trimite niciodată: Traficul propriu-zis.
- Procese (ps · /proc/<pid>). Ce trimite: PID, utilizator, calea executabilului, procesor, linia de comandă (cel mult 200 de caractere). Ce nu trimite niciodată: Memoria proceselor și descriptorii de fișiere.
- Conexiuni (ss). Ce trimite: Conexiunile ieșite spre porturi de mining și socket-urile TCP și UDP care ascultă. Ce nu trimite niciodată: Traficul propriu-zis.
- Directoare temporare (/tmp · /var/tmp · /dev/shm). Ce trimite: Numele, mărimea și amprenta SHA256 a executabilelor noi. Ce nu trimite niciodată: Conținutul fișierelor.
- Cron și timere (/etc/crontab · /etc/cron.d · cron.{hourly,daily,…} · systemd timers). Ce trimite: Liniile de cron, numele scripturilor cu o amprentă scurtă, numele și starea timerelor. Ce nu trimite niciodată: Conținutul scripturilor.
- Chei SSH, conturi, sudo (sshd -T · /etc/passwd · /etc/group · /etc/sudoers*). Ce trimite: Doar amprentele cheilor, numele conturilor, membrii grupurilor echivalente cu root, regulile sudo. Ce nu trimite niciodată: Materialul cheilor, private sau publice.
- Loguri web (nginx / apache access.log). Ce trimite: Pe adresă sursă: numărul de cereri și coduri, căi distincte, user agent-ul cel mai folosit, încercări de autentificare și câteva adrese care seamănă cu un backdoor. Ce nu trimite niciodată: Logul integral.
- Mail (maillog · mail.log · exim mainlog · journal). Ce trimite: Doar unde rulează postfix, exim sau dovecot. Pe adresă sursă: autentificările eșuate și serviciul; pe cont: câte mesaje a trimis; lungimea cozii. Ce nu trimite niciodată: Corespondenții, subiectele, conținutul mesajelor, numele tastate la autentificările eșuate.
- Fișierele site-urilor (webroot (hosting partajat) · document root-urile din nginx și apache (VPS)). Ce trimite: Căi și amprente SHA256 trunchiate pentru PHP, HTML, JS și configurația serverului; la un tipar de injecție, fragmentul găsit (40 de caractere) și linia lui. Ce nu trimite niciodată: Conținutul fișierelor.
Plus încărcarea, memoria, discul și uptime-ul. Fără .env, fără variabile de mediu, fără baze de date. Pe hosting partajat agentul vede doar fișierele site-ului, logurile de acces, cronul contului și cota.
Remedieri: ce poate face, și numai cu aprobarea ta
Implicit agentul nu execută nimic. Remedierile cer două comutatoare separate, iar fiecare comandă așteaptă un om.
Instalat cu --enable-actions. Canalul pornit din panou. Canal oprit. Agentul refuză orice comandă, oricât de corect ar fi semnată.
- Blocarea unui IP: VPS (root): IPv4, expiră singură după 24 h; Hosting partajat: Nu, cere root
- Oprirea unui proces: VPS (root): Cu identitatea procesului verificată din nou; Hosting partajat: Nu, cere root
- Carantina fișierelor: VPS (root): Din /tmp, /var/tmp, /dev/shm; Hosting partajat: Din webroot-ul contului, cu restaurare
- Repornirea serverului web: VPS (root): nginx, Apache, LiteSpeed, PHP-FPM, după testul configurației; Hosting partajat: Nu, cere root
- Propria actualizare: VPS (root): Doar cu --enable-self-update; Hosting partajat: Doar cu --enable-self-update
- Orice altceva: VPS (root): Niciodată; Hosting partajat: Niciodată
Mereu refuzate: adresa mașinii, gateway-ul, rezolvatoarele DNS, sesiunea SSH curentă, adresa panoului, systemd și sshd, orice legătură simbolică. Ieșirea de urgență, local și fără rețea: vpsdash-agent.sh --unblock-all.
Operare de zi cu zi
Comenzile de pe mașină, pentru un agent instalat ca root. Pe hosting partajat totul stă în ~/.vpsdash-agent.
Rulează?
systemctl status vpsdash-agent.timer
Timerul pornește agentul la intervalul ales (implicit 5 minute), cu prioritate scăzută. Între rulări nu rămâne niciun proces.
Ce a făcut
journalctl -u vpsdash-agent -n 50 /opt/vpsdash-agent/vpsdash-agent.sh --once --verbose
Jurnalul ultimelor rulări, apoi o rulare de mână, cu detalii. Răspunsul panoului la ultimul raport stă în /var/lib/vpsdash-agent/last_send.
Ce trimite
/opt/vpsdash-agent/vpsdash-agent.sh --dry-run
Afișează exact conținutul care ar pleca spre panou, fără să trimită nimic. Îl poți rula oricând.
Verifică legătura
/opt/vpsdash-agent/vpsdash-agent.sh --check
Codul de ieșire spune unde e problema: 0 acceptat, 3 cheia, secretul sau ceasul, 4 panoul nu răspunde (nume, conexiune, TLS), 5 alt răspuns (abonament suspendat, prea multe cereri).
Actualizare
/opt/vpsdash-agent/vpsdash-agent.sh --version
Din panou, cu butonul „Update to …” de pe pagina hostului, dacă agentul are --enable-self-update; preia comanda în cel mult 5 minute. Altfel, panoul îți dă o comandă de o singură dată care refolosește cheile de pe mașină. Ce avea voie să facă rămâne la fel.
Dezinstalare
systemctl disable --now vpsdash-agent.timer vpsdash-agent-poll.timer /opt/vpsdash-agent/vpsdash-agent.sh --unblock-all rm -rf /opt/vpsdash-agent /etc/vpsdash-agent /var/lib/vpsdash-agent /etc/systemd/system/vpsdash-agent.* /etc/systemd/system/vpsdash-agent-poll.* systemctl daemon-reload
Apoi revoci cheia hostului din panou. Pe hosting partajat: crontab -l | grep -v vpsdash-agent | crontab - și rm -rf ~/.vpsdash-agent.
Modelul de securitate
O cheie pe host, revocabilă
Fiecare host are cheia și secretul lui. Secretul se arată o singură dată, la creare. Din panou îl rotești sau îl revoci oricând, iar rapoartele cu o cheie revocată sunt respinse imediat.
Rapoarte semnate
Fiecare raport e semnat HMAC-SHA256 cu secretul mașinii. Panoul respinge semnăturile greșite, ceasurile decalate cu peste 5 minute și orice nonce folosit deja.
Secretul nu trece prin adresă
Ajunge pe mașină prin variabile de mediu, deci nu apare în logurile serverului web, și stă în agent.conf cu drepturi 600. Cu python3 instalat nu apare nici în lista de procese.
Comenzi semnate, dintr-o listă închisă
Cu --enable-actions, agentul execută doar comenzile din listă, semnate cu secretul lui și legate de cererea curentă, deci nu pot fi reluate. Niciodată un shell arbitrar.
Probleme frecvente
Instalatorul spune „Installed, but NOT verified”
Agentul e instalat și reîncearcă singur la fiecare interval: nu trebuie scos nimic, doar cauza reparată. Rulează --check: 3 înseamnă cheia, secretul sau un ceas decalat cu peste 5 minute, 4 că mașina nu ajunge la panou (DNS, firewall pe portul 443, certificate CA vechi), 5 un abonament suspendat sau prea multe cereri.
Am pus --enable-actions, dar remedierile nu merg
Opțiunile se dau după sh -s --. Un --enable-actions lipit direct după sh e respins de shell, iar instalarea nu schimbă nimic. Apoi: fără python3 remedierile rămân oprite, iar canalul trebuie pornit și din panou.
Hostul apare ca „Agent tăcut”
Panoul deschide un incident după trei intervale fără raport (15 minute la intervalul implicit). Cauzele obișnuite: cheia rotită sau revocată, mașina fără HTTPS spre afară, timerul oprit. Rapoartele care nu pleacă stau într-o coadă locală (cel mult 50, șapte zile) și se trimit când revine legătura.
Am rotit cheia și agentul a tăcut
Rotirea revocă imediat cheia veche. Rulează pe mașină comanda nouă afișată de panou: secretul nou se arată o singură dată.
Pe hosting partajat, fila de trafic e goală
Agentul citește logurile de acces din locurile folosite de cPanel; pe alte panouri fila poate rămâne goală, iar fișa spune de ce. Webroot-ul îl caută în public_html, www, htdocs, httpdocs și domains/*/public_html; altfel îl dai la înrolare.
WHM refuză tokenul (403)
Verifică utilizatorul exact din WHM, că tokenul e copiat întreg și că are dreptul list-accts. Adresa trebuie să fie serverul care rulează WHM (portul 2087), nu un site găzduit pe el.