Úplne manuálna inštalácia: od práve zakúpeného VPS až po funkčný dashboard, krok za krokom.
Príprava servera, vytvorenie webu, databáza, config.php a SSL sú popísané tu.
Príkazy pre jednotlivé bezpečnostné nástroje a cron nájdete v
príručke FAQ, odkazy sú priebežne.
Hlavné pravidlo: pri zmene SSH alebo firewallu nezatvárajte aktuálne pripojenie, kým si nové neoveríte v samostatnom okne. Ak sa prístup predsa len stratí — takmer všetci hostingoví poskytovatelia ponúkajú núdzovú konzolu (VNC/Recovery) v ovládacom paneli.
01. Kúpili ste VPS s Ubuntu/Debian — kde začať
Po nákupe vám hoster pošle: IP adresu, meno používateľa (zvyčajne root) a heslo (alebo SSH kľúč). To na prihlásenie stačí. Postup (každý krok je sekcia nižšie):
Pripojiť sa k serveru cez SSH;
Aktualizovať systém, nastaviť názov hostiteľa a časové pásmo;
Vytvoriť bežného používateľa s právami sudo (nepracovať pod root);
Nastaviť prihlásenie cez SSH kľúč a vypnúť prihlásenie heslom;
Zapnúť firewall a autoochranu;
(voliteľné) nainštalovať ovládací panel HestiaCP — webový server, databáza a pošta „hneď po inštalácii“.
02. Prvé pripojenie cez SSH
SSH je zabezpečený terminál k serveru. Namiesto 203.0.113.10 zadajte vlastnú IP adresu.
203.0.113.10 je príklad, neexistujúca adresa (vyhradená pre dokumentáciu). Nezadávajte ju tak, ako je — nahraďte ju skutočnou IP adresou vášho servera z e-mailu od poskytovateľa hostingu. Inak sa pripojenie nepodarí.
Windows 10/11: otvorte PowerShell alebo „Terminál“ a použite zabudovaný ssh (prípadne klientov PuTTY / MobaXterm). macOS / Linux: otvorte „Terminál“.
# Prihlásenie ako root (heslo prišlo od poskytovateľa hostingu):
ssh root@203.0.113.10
# Ak poskytovateľ hostingu dal súbor s kľúčom namiesto hesla:
ssh -i cesta/ku/kľúču root@203.0.113.10
Pri prvom pripojení sa SSH opýta na „authenticity of host“ — zadajte yes. Heslo sa počas zadávania nezobrazuje (to je normálne). Ak vám poskytovateľ hostingu dal dočasné heslo, zmeňte ho príkazom passwd.
03. Aktualizácia systému a základné nastavenie
V prvom rade aktualizujte všetky balíky a nastavte názov hostiteľa a časové pásmo.
Zoznam časových pásiem — timedatectl list-timezones. Ak sa na konci aktualizácie objaví modré okno „Daemons using outdated libraries“ — označte všetky služby (medzerník) a stlačte OK, je to bezpečné.
04. Vytvorenie používateľa s právami sudo
Neustále pracovať pod účtom root je nebezpečné. Vytvorte si bežného používateľa a udeľte mu práva sudo (spúšťanie príkazov ako správca podľa potreby). Nahraďte deploy ľubovoľným menom.
# Vytvoriť používateľa (nastaví heslo a spýta sa na údaje — možno preskočiť Enterom):
adduser deploy
# Pridať do skupiny sudo:
usermod -aG sudo deploy
# Overiť (pod root):
su - deploy
sudo whoami # malo by vypísať: root
exit
Ďalej sa na server prihlasujte už pod týmto používateľom: ssh deploy@203.0.113.10, a príkazy správcu spúšťajte s predponou sudo.
05. SSH kľúče a vypnutie prihlásenia heslom
Prihlásenie kľúčom je bezpečnejšie než heslom: heslo sa dá uhádnuť, kľúč prakticky nie. Najprv vytvoríme kľúč na svojom počítači, skopírujeme ho na server, overíme prihlásenie – a až potom vypneme heslo.
Krok 1. Vytvorte kľúč na svojom počítači (Windows PowerShell / macOS / Linux):
ssh-keygen -t ed25519 -C "my-laptop"
# Enter na všetky otázky (kľúč sa uloží do ~/.ssh/id_ed25519)
Krok 3. Overte prihlásenie kľúčom v novom okne – malo by vpustiť bez hesla:
ssh deploy@203.0.113.10
Nevykonávajte Variant B, kým prihlásenie kľúčom neoveríte a nefunguje (Kroky 1–3), a nezatvárajte pracovnú reláciu. Vypne prihlásenie heslom pre všetkých používateľov vrátane root. Bez funkčného kľúča úplne stratíte prístup k serveru — vrátiť ho pôjde len cez konzolu hostingu. Nemáte kľúč — zvoľte Variant A.
Krok 4. Sprísniť prístup cez SSH. Nastavenia ukladáme do samostatného súboru, hlavný konfig nemeníme. Vyberte variant podľa situácie:
Variant A — len zakázať root, heslo ponechať. Kľúč nie je nutný, o prístup neprídete:
Variant B — plný hardening. Vypnúť prihlásenie heslom a root ponechať len cez kľúč. Vykonávajte len po overení, že prihlásenie kľúčom funguje:
sudo tee /etc/ssh/sshd_config.d/00-hardening.conf >/dev/null <<'EOF'
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin prohibit-password
KbdInteractiveAuthentication no
EOF
sudo systemctl restart ssh
V oboch variantoch je root cez heslo zakázaný. PermitRootLogin no zakazuje root úplne, prohibit-password — ponecháva prihlásenie len cez kľúč (na administráciu sa prihlasujte ako deploy a používajte sudo). Ak chcete zmeniť SSH port — pridajte riadok Port 2222, ale najprv otvorte nový port vo firewalle (nasledujúca sekcia) a overte prihlásenie, inak si zablokujete prístup.
06. Základný firewall a automatická ochrana
Zablokujte firewallom všetko nepotrebné a zapnite fail2ban (banuje hádanie hesiel cez SSH). Najprv povoľte SSH, inak po zapnutí UFW stratíte prístup.
# Povoliť SSH (alebo váš port, ak ste ho menili) a web:
sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
# Zapnúť firewall:
sudo ufw enable
sudo ufw status verbose
# fail2ban — ochrana SSH pred hádaním hesiel (základný profil je aktívny hneď):
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
Toto je minimum. Prevádzkové nastavenia fail2ban, blok-list ipsum, rozšírený UFW a ostatné nástroje nájdete v skupine „Bezpečnostné nástroje“ príručky. Samotný panel Arcivéo Monitor prehľadne zobrazí stav toho všetkého.
07. Inštalácia panela HestiaCP (voliteľné)
HestiaCP — bezplatný panel na správu hostingu: nainštaluje a nastaví webový server (nginx + apache), PHP, databázu (MariaDB), poštu, DNS a SSL certifikáty, poskytuje webové rozhranie pre stránky. Praktický, ak nechcete všetko nastavovať ručne a plánujete hostovať stránky (vrátane samotného panela Arcivéo Monitor).
HestiaCP inštalujte na čistý server (čerstvá podporovaná Ubuntu/Debian, minimálne ~1–2 GB RAM), pred inštaláciou iných webových serverov a databáz — inak nastanú konflikty. Inštalácia trvá 10–20 minút a reštartuje server.
# Stiahnuť inštalátor a spustiť:
wget https://raw.githubusercontent.com/hestiacp/hestiacp/release/install/hst-install.sh
sudo bash hst-install.sh
Inštalátor sa spýta na email a názov hostiteľa, potom nainštaluje celý stack. Po reštarte je panel dostupný na adrese https://YOUR_IP:8083 (login a heslo zobrazí inštalátor na konci).
HestiaCP sám spravuje UFW a fail2ban — netreba ich nastavovať zvlášť, prevezme ich. SSH kľúče a vypnutie hesla (predchádzajúca časť) aj tak urobte.
08. Systémové požiadavky a ionCube
Panel je PHP aplikácia na bežnom LAMP/LEMP zásobníku:
OS: Linux (odporúčame Ubuntu/Debian);
Webový server: nginx alebo Apache s PHP-FPM;
PHP 8.0+ s rozšíreniami: pdo_mysql, openssl, curl, json, mbstring;
ionCube Loader — rozšírenie PHP potrebné na chod panela;
DB: MySQL 5.7+ alebo MariaDB 10.3+;
HTTPS — povinné (prihlásenie a WebAuthn fungujú len cez https);
sudo pre používateľa webového servera (úzka množina — krok 13).
# Overiť verziu PHP a rozšírenia:
php -v
php -m | grep -iE 'pdo_mysql|openssl|curl|mbstring|ioncube'
Inštalácia ionCube Loader (ak ešte nie je nainštalovaný). Na hostingu s panelom (HestiaCP, cPanel) sa ionCube zapína zaškrtnutím v nastaveniach PHP. Manuálne na Ubuntu/Debian:
# Zistiť verziu PHP a adresár rozšírení:
php -v
EXTDIR=$(php -r 'echo ini_get("extension_dir");'); PHPVER=$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')
# Stiahnuť a rozbaliť loadery (64-bit):
cd /tmp
wget -q https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz
tar xzf ioncube_loaders_lin_x86-64.tar.gz
# Skopírovať loader pre vašu verziu PHP do adresára rozšírení:
sudo cp ioncube/ioncube_loader_lin_${PHPVER}.so "$EXTDIR"/
# Pripojiť (CLI + PHP-FPM) a reštartovať:
echo "zend_extension=ioncube_loader_lin_${PHPVER}.so" | sudo tee /etc/php/${PHPVER}/mods-available/ioncube.ini
sudo phpenmod ioncube
sudo systemctl restart php${PHPVER}-fpm
# Kontrola — vo výstupe sa objaví riadok "with the ionCube PHP Loader":
php -v
Verzia loadera sa musí zhodovať s verziou PHP (napríklad ioncube_loader_lin_8.1.so pre PHP 8.1). Ak používate viac verzií PHP — pripojte loader pre každú z nich.
09. Doména a DNS
Ak chcete panel otvárať na adrese ako monitor.example.com a získať bezplatný SSL — potrebujete doménu smerujúcu na váš server. V paneli správy DNS vytvorte A-záznam:
Typ: A
Názov: monitor (poddoména → monitor.example.com)
alebo @ (koreň domény → example.com)
Hodnota: 203.0.113.10 ← IP vášho servera
TTL: 3600
Po niekoľkých minútach overte, že doména smeruje na server:
dig +short monitor.example.com # mal by vrátiť vašu IP
# alebo, ak dig nie je k dispozícii:
getent hosts monitor.example.com
SSL certifikát Let's Encrypt sa vydáva len na doménu — DNS musí smerovať na server pred vydaním certifikátu.
10. Vytvorenie stránky a nahranie súborov panela
Apache: DocumentRoot — na koreň panela, NIE na public/. Štýly (CSS/JS), sw.js, manifest.json sú v assets/ vedľa public/ a načítavajú sa z koreňa stránky. Koreňový .htaccess je front controller. Ak pri Apache nastavíte DocumentRoot na public/, panel sa otvorí bez štýlov. Pri čistom nginx je to naopak: koreňom je public/ a assets/ sa poskytujú samostatným pravidlom (pozri blok nginx nižšie).
Súbory panela (archív distribúcie) sa po nákupe sťahujú v účte my.arciveo.com → „Stiahnutia“. Pred nahraním archív rozbaľte.
1) Vytvorte adresár panela a nahrajte doň obsah distribúcie (aby vnútri boli public/, assets/, config.php atď.):
sudo mkdir -p /var/www/monitor
# potom nahrajte súbory distribúcie do /var/www/monitor (FileZilla / WinSCP / scp)
2) Nastavte webový server.Apache: DocumentRoot — na koreň panela (NIE na /public); AllowOverride All je povinný. Cesta k soketu PHP-FPM sa určí automaticky. Blok sa vkladá do terminálu celý:
nginx: nginx nemá .htaccess, preto koreňom berieme public/ a assets/, sw.js, manifest.json (o úroveň vyššie) poskytujeme samostatným pravidlom:
PHPSOCK=$(ls -1 /run/php/php*-fpm.sock 2>/dev/null | head -1) # auto-detekcia soketu PHP-FPM
sudo tee /etc/nginx/sites-available/monitor.conf > /dev/null <<'EOF'
server {
listen 80;
server_name monitor.example.com;
root /var/www/monitor/public;
index index.php;
# assets, service worker a manifest sú o úroveň vyššie ako public/
location ~ ^/(assets/|sw\.js|manifest\.json) { root /var/www/monitor; }
location / { try_files $uri $uri/ /index.php?$query_string; }
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:__PHPSOCK__;
}
}
EOF
sudo sed -i "s#__PHPSOCK__#${PHPSOCK}#" /etc/nginx/sites-available/monitor.conf
sudo ln -s /etc/nginx/sites-available/monitor.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
Nahranie súborov — SFTP/SCP (FileZilla, WinSCP) alebo scp:
# Príklad cez scp z lokálneho počítača:
scp -r ./monitor/* deploy@203.0.113.10:/var/www/monitor/
Nastavte práva na súbory — je to povinný krok. Ak ste súbory nahrávali pod root alebo cez SFTP, patria používateľovi root a webový server (www-data) ich nedokáže prečítať — panel sa otvorí prázdny alebo s chybou 403 (v logu: .htaccess unreadable / directory not executable). Príkaz nižšie to opraví:
# Normalizujeme práva celého webrootu: adresár vytvorený pod root je pre
# webový server (www-data) neprístupný — bez toho panel vracia prázdnu stránku alebo 403.
# Apache beží pod www-data; ak máte iného webového používateľa, nahraďte ho.
cd /var/www/monitor
# Pracovné priečinky vytvárame PRED chown — inak nové adresáre zostanú root:root
# a pri chmod 750 do nich webový server (www-data) nebude môcť zapisovať.
sudo mkdir -p data/lynis data/logwatch tmp logs
sudo chown -R www-data:www-data /var/www/monitor
sudo find /var/www/monitor -type d -exec chmod 755 {} \;
sudo find /var/www/monitor -type f -exec chmod 644 {} \;
sudo chmod 640 /var/www/monitor/config.php
sudo chmod 750 data tmp logs
3) Sprístupnite si nahrávanie súborov cez SFTP. Po príkaze vyššie patria všetky súbory používateľovi www-data, kým FileZilla / WinSCP sa pripájajú pod vaším vlastným používateľom — nahrávanie potom zlyhá s SSH_FX_PERMISSION_DENIED (Permission denied). Prihlásiť sa kvôli nahrávaniu ako root nie je možné — prihlásenie root bolo vypnuté v kroku 05. Vyberte jednu z dvoch variantov.
Variant A — ACL len pre vášho používateľa (odporúčané). Právo zápisu získate iba vy; webový server stále nemôže prepísať kód panela:
sudo apt install -y acl
# Právo zápisu pre vášho používateľa na celý adresár panela:
sudo setfacl -R -m u:deploy:rwX /var/www/monitor
# To isté pravidlo ako predvolené — pre súbory a priečinky vytvorené neskôr:
sudo setfacl -R -d -m u:deploy:rwX /var/www/monitor
Variant B — cez skupinu www-data. Jednoduchší, ale právo zápisu k súborom panela získa aj webový server: pri zraniteľnosti v PHP by sa kód dal vymeniť. Na poradí príkazov záleží — config.php a pracovné priečinky sa uzatvárajú ako posledné:
sudo usermod -aG www-data deploy
# Zápis pre skupinu + setgid (bit 2): súbory nahrané cez SFTP zostávajú
# v skupine www-data — inak ich panel nedokáže prepísať.
sudo find /var/www/monitor -type d -exec chmod 2775 {} \;
sudo find /var/www/monitor -type f -exec chmod 664 {} \;
sudo chmod 640 /var/www/monitor/config.php
sudo chmod 2750 /var/www/monitor/data /var/www/monitor/tmp /var/www/monitor/logs
Po variante B sa vo FileZille pripojte nanovo (Server → Odpojiť, potom sa znova prihláste) — nová skupina sa prejaví až pri novom prihlásení, dovtedy oprávnenia stále mať nebudete. Kontrola: id deploy — v zozname skupín sa musí objaviť www-data; ls -ld /var/www/monitor — práva drwxrwsr-x, písmeno s namiesto x znamená, že setgid je nastavený.
11. Databáza
Vytvorte databázu a používateľa, potom naimportujte schému. Blok sa do terminálu vkladá celý. monitor_db a monitor_user sú príkladové názvy, môžete zadať vlastné; zapamätajte si názov databázy, používateľa a heslo — zapíšete ich do config.php v ďalšom kroku:
# 1. Databáza. Heslo sa zadáva RAZ v DBPASS a dosadí sa do všetkých riadkov.
# Blok sa do terminálu vkladá CELÝ; sudo mysql prihlási root cez unix-socket
# (heslo root netreba). NEPOUŽÍVAJTE interaktívny `sudo mysql -u root -p`
# s kopírovaním — pri vložení SQL riadky pôjdu do výzvy na heslo a stratia sa.
DBPASS='CHOOSE_A_PASSWORD' # ← zmeňte len tento riadok
sudo mysql <<SQL
CREATE DATABASE IF NOT EXISTS monitor_db CHARACTER SET utf8mb4;
CREATE USER IF NOT EXISTS 'monitor_user'@'localhost' IDENTIFIED BY '$DBPASS';
GRANT ALL ON monitor_db.* TO 'monitor_user'@'localhost';
FLUSH PRIVILEGES;
SQL
# Kontrola (má zobraziť monitor_db):
mysql -u monitor_user -p"$DBPASS" -e "SHOW DATABASES;"
# To isté heslo zapíšte do config.php → DB_PASS.
Schému nie je nutné importovať — panel si tabuľky a účet admin vytvorí sám pri prvom otvorení v prehliadači (z database/db.sql), ak je databáza prázdna. Ručný import schémy je potrebný len vtedy, ak automatická inicializácia nezabrala.
Ak ste použili inštalátor v prehliadači public/start_db.php — zmažte ho hneď po inštalácii: umožňuje bez prihlásenia znovu vytvoriť databázu. Kým súbor leží v koreni panela alebo v public/, panel zobrazuje červené upozornenie.
12. Nastavenie config.php
config.php v koreňovom priečinku panela (/var/www/monitor/config.php) je jediný súbor, ktorý treba upraviť ručne. Všetky nastavenia panela sú v ňom zadané konštantami define(). Otvorte ho v editore:
sudo nano /var/www/monitor/config.php
Do zvýraznených miest doplňte svoje hodnoty; zvyšok nechajte tak, ako je:
// --- Databáza (z kroku 11) ---
define('DB_HOST', 'localhost'); // nechať
define('DB_NAME', 'db_name'); // čo ste vytvorili v kroku 11
define('DB_USER', 'user'); // čo ste vytvorili v kroku 11
define('DB_PASS', 'db_password'); // čo ste zadali v kroku 11
define('DB_CHARSET', 'utf8mb4'); // nechať
// --- Aplikácia ---
define('APP_URL', 'https://monitor.example.com'); // adresa panela, bez lomky na konci
define('TIMEZONE', 'Europe/Bratislava'); // vaše časové pásmo
// --- Trvanie relácie ---
define('SESSION_LIFETIME', 28800); // nečinnosť do opätovného prihlásenia, s (28800 = 8 h)
Čo meniť:
DB_NAME, DB_USER, DB_PASS — presne tie isté meno databázy, používateľ a heslo, ktoré ste zadali pri vytváraní databázy v kroku 11 (ak ste nechali príklady — monitor_db / monitor_user). DB_HOST a DB_CHARSET nemeňte.
APP_URL — úplná adresa panela s https://, bez lomky na konci a bez www. Musí sa zhodovať s doménou, na ktorú aktivujete licenciu (krok 16), inak bude kľúč odmietnutý.
TIMEZONE — vaše časové pásmo (zoznam — timedatectl list-timezones). Ovplyvňuje len to, ako panel zobrazuje dátumy; čas spúšťania cron úloh neovplyvňuje (tam platí pásmo systému).
Uložte súbor (Ctrl+O, Enter, potom Ctrl+X) a reštartujte PHP-FPM — inak sa kvôli OPcache zmeny neprejavia:
sudo systemctl restart php*-fpm
config.php je tajný súbor (obsahuje heslo k databáze). Leží v koreňovom priečinku panela, ktorý je zároveň webovým koreňom, no je chránený: práva 640 (nastavené v kroku 10) a výslovný zákaz v koreňovom .htaccess. Nezverejňujte ho vo verejných repozitároch a neposielajte podpore so skutočným heslom.
PHP beží pod používateľom webového servera, ktorý nemá práva na systémové príkazy. Prístup sa udeľuje úzko: cielené sudo na konkrétne nástroje a čítanie logov cez skupiny (bez sudo). Prelomenie webovej vrstvy nedá root.
V príkladoch je www-data štandardný používateľ Apache. Ak máte iného (v niektorých paneloch beží PHP pod samostatným používateľom) — nahraďte ho všade. Zistíte to príkazom: ps -o user= -C php-fpm | sort -u.
# UFW — stav a pravidlá (stránka „Firewall“)
www-data ALL=(ALL) NOPASSWD: /usr/sbin/ufw status, /usr/sbin/ufw status verbose, /usr/sbin/ufw status numbered
www-data ALL=(ALL) NOPASSWD: /usr/sbin/ufw allow [0-9]*, /usr/sbin/ufw deny [0-9]*, /usr/sbin/ufw --force delete [0-9]*
# Fail2ban — stav, ban a unban (banned vráti bany všetkých jailov jedným príkazom;
# ban/unban potrebujú tlačidlá panela)
www-data ALL=(ALL) NOPASSWD: /usr/bin/fail2ban-client status, /usr/bin/fail2ban-client status *, /usr/bin/fail2ban-client banned, /usr/bin/fail2ban-client set * banip *, /usr/bin/fail2ban-client set * unbanip *
# Bezpečnostné aktualizácie (karta „Aktualizácie“). Len na čítanie, ale práve od roota:
# apt cache (~70 MB) je dostupný len rootovi, non-root ho pri každom volaní prestavuje
# (4.2 s CPU oproti 0.01 s). Bez wildcard — presne tento jeden príkaz, nič neinštaluje.
www-data ALL=(ALL) NOPASSWD: /usr/bin/apt list --upgradable
# IPset (mapa útokov, dashboard)
www-data ALL=(ALL) NOPASSWD: /usr/sbin/ipset list -t ipsum
# CrowdSec
www-data ALL=(ALL) NOPASSWD: /usr/bin/cscli decisions list *, /usr/bin/cscli alerts list *, /usr/bin/cscli bouncers list *, /usr/bin/cscli scenarios list *
# Auditd — vyhľadávanie udalostí + čítanie posledných riadkov denníka (presná cesta)
www-data ALL=(ALL) NOPASSWD: /usr/sbin/ausearch -m *
www-data ALL=(ALL) NOPASSWD: /usr/bin/tail -n 300 /var/log/audit/audit.log
# Monit / ModSecurity / AppArmor / PSAD
www-data ALL=(ALL) NOPASSWD: /usr/bin/monit status
www-data ALL=(ALL) NOPASSWD: /usr/sbin/apache2ctl -M
www-data ALL=(ALL) NOPASSWD: /usr/local/bin/monitor-modsec
www-data ALL=(ALL) NOPASSWD: /usr/sbin/aa-status
www-data ALL=(ALL) NOPASSWD: /usr/sbin/psad --Status
# Otvorené porty (denníky jadra/SSH/Falco sa čítajú BEZ sudo — cez skupinu
# systemd-journal, pozri bod 2; sudo pre journalctl NIE je potrebné a je nebezpečné)
www-data ALL=(ALL) NOPASSWD: /usr/bin/ss -tuln, /usr/sbin/ss -tuln, /bin/ss -tuln
# PostgreSQL (len ak ho používate) — pevný read-only skript,
# vytvorte podľa FAQ „PostgreSQL sa nezobrazuje“; bez neho riadok odstráňte
www-data ALL=(ALL) NOPASSWD: /usr/local/bin/monitor-pgstat
sudo chmod 440 /etc/sudoers.d/monitor
sudo visudo -c # malo by byť "parsed OK"
2. Prístup k logom a denníku systemd. Moduly čítajú /var/log/fail2ban.log, auth.log, ufw.log, apache2/*, aide priamo (na Debian/Ubuntu sú tieto logy v skupine adm). Udalosti jadra, SSH a Falco sa berú z journald príkazom journalctlbez sudo, cez skupinu systemd-journal. Pridajte webového používateľa do oboch skupín a reštartujte PHP-FPM:
sudo usermod -aG adm,systemd-journal www-data
sudo systemctl restart php*-fpm # povinné, inak sa skupiny neuplatnia
3. Ak ClamAV alebo Suricata zapisujú logy mimo skupiny adm (býva root:root) — udeľte prístup cez ACL:
4. Obal ModSecurity. Audit log WAF (/var/log/apache2/modsec_audit.log) patrí rootovi s právami 640, webový používateľ ho priamo čítať nemôže. Stránka ModSecurity berie režim enginu, udalosti a zoznam aktívnych pravidiel cez pevný read-only skript — práve ten je povolený v sudoers riadkom vyššie:
Bez súboru /etc/modsecurity/modsecurity.conf samotný WAF nefunguje: balík vloží len modsecurity.conf-recommended a engine pravidiel zostáva vypnutý — ako ho zapnúť, pozri FAQ → „Inštalácia ModSecurity“.
Používateľ vo všetkých riadkoch sudoers sa musí zhodovať s používateľom FPM poolu: na bežnom Apache/Debian je to www-data, v HestiaCP beží pool stránky pod vlastníkom stránky (napríklad admin) — overte grep -E '^user' /etc/php/*/fpm/pool.d/monitor.example.com.conf.
5. Ak je pred Apache Nginx (HestiaCP, ISPmanager a ďalšie panely — tam Nginx proxuje PHP do Apache a statiku vydáva sám). Služobné adresáre sú uzavreté súbormi .htaccess, ale Nginx ich nečíta: každý statický súbor (.json, .txt, .log, .dat) vydá priamo, mimo Apache. Von uniknú cache panela a dáta — napríklad tmp/modsec_cache.json s udalosťami WAF a IP adresami útočníkov. Pridajte zákaz do konfigurácie stránky Nginx:
Prefix ^~ je povinný: vyberie sa skôr než regulárne pravidlo pre statiku vnútri location /, inak zákaz nezaberie.
V HestiaCP to vložte ako samostatný súbor /home/<user>/conf/web/<domain>/nginx.ssl.conf_deny (a nginx.conf_deny pre HTTP) — konfigurácia stránky pripája nginx.ssl.conf_* a pri prestavbe takéto súbory neprepíše. Použite: sudo nginx -t && sudo systemctl reload nginx.
Overenie: curl -s -o /dev/null -w '%{http_code}\n' https://monitor.example.com/tmp/modsec_cache.json — malo by byť 403. Ak Apache beží bez Nginx (počúva 80/443 sám), netreba nič pridávať — .htaccess stačí.
Cesty k binárkam overte cez which (napríklad which ufw cscli ausearch ss). Sudoers upravujte len cez visudo. Zoznam všetkých databáz MySQL sa zapne samostatným GRANT (FAQ → „Viditeľná je len jedna DB“).
14. Obmedzenie prístupu podľa IP
Obmedzte prístup k monitoru podľa IP adresy — aj keď sa URL stane známou, prihlasovacia stránka sa neotvorí. Dá sa to na úrovni webového servera (príklad pre nginx nižšie) alebo priamo v paneli („Nastavenia“ → „Obmedzenie prístupu podľa IP“). Ak máte Apache, použite obmedzenie v paneli.
Ak je web nginx už nastavený podľa kroku 10, nepridávajte druhýlocation / — vpíšte riadky allow/deny do už existujúceho bloku. Dva rovnaké location / v jednom server { } sú chybou konfigurácie, nginx sa nereštartuje.
# V konfigurácii nginx (vnútri server { }):
# ACME cestu Let's Encrypt necháme otvorenú mimo IP obmedzenia —
# aby vydanie a automatické obnovenie SSL (krok 15) nezáviselo od IP filtra.
location ^~ /.well-known/acme-challenge/ { allow all; }
location / {
allow 203.0.113.10; # ← vpíšte svoju IP
allow 10.0.0.0/8; # lokálna sieť (ak treba)
deny all;
try_files $uri $uri/ /index.php?$query_string;
}
# Reštartovať nginx:
sudo nginx -t && sudo systemctl reload nginx
15. Vydanie SSL (HTTPS)
Dashboard funguje len cez HTTPS. Prihlasovacia relácia používa zabezpečené cookie a WebAuthn (2FA) funguje iba cez HTTPS. Cez http:// sa prihlásiť nedá.
Certifikát je zadarmo (Let's Encrypt). DNS domény už musí smerovať na server. Príkaz závisí od webového servera:
# Apache:
sudo certbot --apache -d monitor.example.com
# nginx — LEN ak máte naozaj nginx. Na Apache NESPÚŠŤAJTE:
# apt stiahne nginx a obsadí port 80, konflikt s Apache.
# sudo apt install python3-certbot-nginx
# sudo certbot --nginx -d monitor.example.com
# certbot sám zapíše HTTPS do konfigurácie a nastaví automatické obnovenie
Na čo sa certbot spýta: e-mail → súhlas s Terms (Y) → odovzdanie e-mailu do EFF (podľa vášho uváženia). Potom sám vydá certifikát, zapíše <VirtualHost *:443>, nastaví presmerovanie http→https a automatické obnovenie.
DNS musí smerovať na server PRED spustením certbot (overenie vlastníctva cez port 80). Kontrola: dig +short monitor.example.com → IP servera. Porty 80/443 sú otvorené: sudo ufw allow 80,443/tcp.
Po vydaní: https://monitor.example.com sa otvára so zámkom, http:// presmeruje na https:// (APP_URL v config.php je už nastavený v kroku 12).
16. Prihlásenie a prvotné nastavenie
Otvorte https://monitor.example.com, prihláste sa cez admin / useradmin a prejdite kontrolný zoznam:
Zmeňte heslo admin — sekcia „Používatelia“ v menu.
Zapnite WebAuthn (2FA) — „Kľúče WebAuthn“ → zaregistrujte kľúč/passkey (vyžaduje HTTPS). Zaregistrujte hneď dva: pri strate jediného kľúča ním nebude možné sa prihlásiť. Viac.
Obmedzte prístup podľa IP — „Nastavenia“ → „Obmedzenie prístupu podľa IP“ (pred zapnutím zadajte svoju IP adresu, inak si zablokujete prístup).
Zadajte licenciu — kód ARCIVEO-… z účtu aktivujte na svoju doménu a vložte kľúč do „Nastavenia“ → „Licencia“. Viac.
Nastavte upozornenia — Telegram a/alebo Email v „Nastaveniach“. Viac.
Odstráňte inštalátorpublic/start_db.php, ak ostal (krok 11).
17. Bezpečnostné nástroje (voliteľné)
Panel už funguje. Nástroje sa inštalujú podľa potreby — nainštalujete, čo potrebujete, a panel hneď zobrazí stav. Príkazy na inštaláciu každého z nich nájdete v príručke (samostatné sekcie k nástrojom):
Toto je ukážka Arcivéo Security Monitor len na prezeranie — všetky zmeny sú vypnuté. Nasaďte ho na svojom serveri a spravujte reálne bezpečnostné údaje.