Teljesen kézi telepítés: a frissen vásárolt VPS-től a működő vezérlőpultig, lépésről lépésre.
A szerver előkészítése, a webhely létrehozása, az adatbázis, a config.php és az SSL itt van részletezve.
Az egyes biztonsági eszközökhöz és a cronhoz tartozó parancsok a
FAQ-tudástárban találhatók, a hivatkozások útközben.
Fő szabály: az SSH vagy a tűzfal módosításakor ne zárja be az aktuális kapcsolatot, amíg egy külön ablakban nem ellenőrizte az újat. Ha mégis elveszti a hozzáférést, szinte minden tárhelyszolgáltató biztosít vészkonzolt (VNC/Recovery) a vezérlőpulton.
01. Vettem egy VPS-t Ubuntu/Debian rendszerrel — hol kezdjem
A vásárlás után a szolgáltató elküldi az IP-címet, a felhasználónevet (általában root) és a jelszót (vagy egy SSH-kulcsot). Ez elég a belépéshez. A lépések sorrendje (minden lépés egy-egy alábbi szakasz):
Csatlakozzon a szerverhez SSH-n keresztül;
Frissítse a rendszert, állítsa be a hosztnevet és az időzónát;
Hozzon létre egy normál felhasználót sudo jogokkal (ne dolgozzon root alatt);
Állítsa be az SSH-kulcsos belépést, és tiltsa le a jelszavas belépést;
Kapcsolja be a tűzfalat és az automatikus védelmet;
(tetszés szerint) telepítse a HestiaCP vezérlőpultot — webszerver, adatbázis, levelezés azonnal használhatóan.
02. Első csatlakozás SSH-n keresztül
Az SSH egy titkosított terminál a szerverhez. Írja be a saját IP-címét a 203.0.113.10 helyére.
A 203.0.113.10 csak példa, nem létező cím (dokumentációhoz fenntartott). Ne így adja meg — cserélje le a szerverének a tárhelyszolgáltatótól kapott levélben szereplő valódi IP-címére. Különben nem jön létre a kapcsolat.
Windows 10/11: nyissa meg a PowerShellt vagy a „Terminál” alkalmazást, és használja a beépített ssh parancsot (vagy a PuTTY / MobaXterm klienseket). macOS / Linux: nyissa meg a „Terminál” alkalmazást.
# Belépés root felhasználóként (a jelszót a tárhelyszolgáltató küldte):
ssh root@203.0.113.10
# Ha a szolgáltató jelszó helyett kulcsfájlt adott:
ssh -i út/a/kulcshoz root@203.0.113.10
Az első csatlakozáskor az SSH rákérdez az „authenticity of host” kérdésre — írja be, hogy yes. A jelszó beírásakor nem jelenik meg semmi (ez normális). Ha a szolgáltató ideiglenes jelszót adott, cserélje le a passwd paranccsal.
03. Rendszerfrissítés és alapbeállítás
Először is — frissítse az összes csomagot, majd állítsa be a gépnevet és az időzónát.
# Rendszer frissítése:
apt update && apt upgrade -y
# Alapvető segédeszközök:
apt install -y curl wget ufw fail2ban unattended-upgrades
# Időzóna (példa) és gépnév:
timedatectl set-timezone Europe/Budapest
hostnamectl set-hostname myserver
# Automatikus biztonsági frissítések:
dpkg-reconfigure -plow unattended-upgrades
Az időzónák listája — timedatectl list-timezones. Ha a frissítés végén megjelenik a kék „Daemons using outdated libraries” ablak — jelölje ki az összes szolgáltatást (szóköz), majd nyomja meg az OK gombot, ez biztonságos.
04. Sudo jogú felhasználó létrehozása
Nem biztonságos folyamatosan root alatt dolgozni. Hozzon létre egy normál felhasználót, és adjon neki sudo jogot (adminisztrátori parancsok futtatása szükség esetén). Cserélje a deploy nevet tetszőleges névre.
# Felhasználó létrehozása (jelszót kér és adatokra kérdez rá — Enterrel átugorható):
adduser deploy
# Hozzáadás a sudo csoporthoz:
usermod -aG sudo deploy
# Ellenőrzés (root alatt):
su - deploy
sudo whoami # ezt kell kiírnia: root
exit
Ezután már ezzel a felhasználóval lépjen be a szerverre: ssh deploy@203.0.113.10, az adminisztrátori parancsokat pedig sudo előtaggal futtassa.
05. SSH-kulcsok és a jelszavas belépés kikapcsolása
A kulccsal történő belépés biztonságosabb a jelszónál: a jelszó kitalálható, a kulcs gyakorlatilag nem. Először létrehozzuk a kulcsot a saját számítógépén, átmásoljuk a szerverre, ellenőrizzük a belépést – és csak ezután kapcsoljuk ki a jelszót.
1. lépés. Hozza létre a kulcsot a saját számítógépén (Windows PowerShell / macOS / Linux):
ssh-keygen -t ed25519 -C "my-laptop"
# Enter minden kérdésre (a kulcs ide kerül: ~/.ssh/id_ed25519)
2. lépés. Másolja a nyilvános kulcsot a szerverre:
3. lépés. Ellenőrizze a kulcsos belépést egy új ablakban – jelszó nélkül be kell engednie:
ssh deploy@203.0.113.10
Ne hajtsa végre a B változatot, amíg a kulcsos belépés nincs ellenőrizve és nem működik (1–3. lépés), és ne zárja be a munkamenetet. Ez minden felhasználónak, a root-ot is beleértve, kikapcsolja a jelszavas belépést. Működő kulcs nélkül teljesen elveszíti a hozzáférést a szerverhez — visszaszerezni csak a tárhelyszolgáltató konzolján keresztül tudja. Ha nincs kulcsa, válassza az A változatot.
4. lépés. Szigorítsa az SSH-hozzáférést. A beállításokat külön fájlba tesszük, a fő konfigurációt nem érintjük. Válassza a helyzetnek megfelelő változatot:
A változat — csak a root tiltása, a jelszó marad. Kulcs nem kell, a hozzáférést nem veszíti el:
B változat — teljes hardening. Kapcsolja ki a jelszavas belépést, és a root csak kulccsal maradjon. Csak akkor hajtsa végre, ha meggyőződött róla, hogy a kulcsos belépés működik:
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
Mindkét változatban a jelszavas root-belépés le van tiltva. A PermitRootLogin no teljesen tiltja a root-ot, a prohibit-password — csak kulccsal engedi a belépést (adminisztrációhoz deploy felhasználóval lépjen be, és használja a sudo parancsot). Ha módosítani szeretné az SSH-portot, adja hozzá a Port 2222 sort, de előbb nyissa meg az új portot a tűzfalon (következő szakasz), és ellenőrizze a belépést, különben elzárja saját magát a hozzáféréstől.
06. Alap tűzfal és automatikus védelem
Zárjon le mindent, ami felesleges, a tűzfallal, és kapcsolja be a fail2ban-t (bannolja az SSH jelszó-próbálgatást). Először engedélyezze az SSH-t, különben az UFW bekapcsolása után elveszíti a hozzáférést.
# SSH (vagy a saját portja, ha módosította) és a web engedélyezése:
sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
# Tűzfal bekapcsolása:
sudo ufw enable
sudo ufw status verbose
# fail2ban — az SSH védelme a próbálgatás ellen (az alapprofil azonnal aktív):
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
Ez a minimum. A fail2ban működő beállításait, az ipsum blokklistát, a bővített UFW-t és a többi eszközt a súgó „Biztonsági eszközök” csoportjában találja. Maga az Arcivéo Monitor panel áttekinthetően megmutatja mindezek állapotát.
07. A HestiaCP telepítése (opcionális)
HestiaCP — ingyenes tárhely-vezérlőpult: telepíti és beállítja a webkiszolgálót (nginx + apache), a PHP-t, az adatbázist (MariaDB), a levelezést, a DNS-t és az SSL-tanúsítványokat, és webes felületet ad a webhelyekhez. Kényelmes, ha nem szeretne mindent kézzel beállítani, és webhelyeket tervez elhelyezni (beleértve magát az Arcivéo Monitor felületet is).
A HestiaCP-t tiszta kiszolgálóra telepítse (friss, támogatott Ubuntu/Debian, legalább ~1–2 GB RAM), más webkiszolgálók és adatbázisok telepítése előtt — különben ütközések lesznek. A telepítés 10–20 percet vesz igénybe, és újraindítja a kiszolgálót.
# A telepítő letöltése és futtatása:
wget https://raw.githubusercontent.com/hestiacp/hestiacp/release/install/hst-install.sh
sudo bash hst-install.sh
A telepítő megkérdezi az e-mail-címet és a gépnevet, majd feltelepíti a teljes csomagot. Újraindítás után a felület a https://YOUR_IP:8083 címen érhető el (a felhasználónevet és a jelszót a telepítő a végén kiírja).
A HestiaCP maga kezeli az UFW-t és a fail2ban-t — ezeket külön nem kell beállítani, magától átveszi. Az SSH-kulcsokat és a jelszavas belépés kikapcsolását (előző szakasz) mindenképpen végezze el.
08. Rendszerkövetelmények és ionCube
A vezérlőpult egy PHP-alkalmazás, amely tipikus LAMP/LEMP-stacken fut:
OS: Linux (Ubuntu/Debian ajánlott);
Webszerver: nginx vagy Apache PHP-FPM-mel;
PHP 8.0+ a következő bővítményekkel: pdo_mysql, openssl, curl, json, mbstring;
ionCube Loader — a vezérlőpult működéséhez szükséges PHP-bővítmény;
Adatbázis: MySQL 5.7+ vagy MariaDB 10.3+;
HTTPS — kötelező (a belépés és a WebAuthn csak https-en működik);
sudo a webszerver felhasználójának (szűk körben — 13. lépés).
Az ionCube Loader telepítése (ha még nincs telepítve). Vezérlőpultos tárhelyen (HestiaCP, cPanel) az ionCube a PHP-beállításokban egy jelölőnégyzettel kapcsolható be. Kézzel Ubuntu/Debian rendszeren:
# PHP-verzió és a bővítmények könyvtárának lekérdezése:
php -v
EXTDIR=$(php -r 'echo ini_get("extension_dir");'); PHPVER=$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')
# A loaderek letöltése és kicsomagolása (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
# A PHP-verziójának megfelelő loader másolása a bővítmények könyvtárába:
sudo cp ioncube/ioncube_loader_lin_${PHPVER}.so "$EXTDIR"/
# Betöltés (CLI + PHP-FPM) és újraindítás:
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
# Ellenőrzés — a kimenetben megjelenik a "with the ionCube PHP Loader" sor:
php -v
A loader verziójának egyeznie kell a PHP verziójával (például ioncube_loader_lin_8.1.so a PHP 8.1-hez). Ha több PHP-verziót használ, mindegyikhez töltse be a megfelelő loadert.
09. Domain és DNS
Ahhoz, hogy a panelt egy monitor.example.com jellegű címen nyithassa meg, és ingyenes SSL-t kapjon, olyan domainre van szükség, amely a szerverére mutat. A DNS-kezelő panelen hozzon létre egy A-rekordot:
Típus: A
Név: monitor (aldomain → monitor.example.com)
vagy @ (gyökérdomain → example.com)
Érték: 203.0.113.10 ← a szervere IP-címe
TTL: 3600
Néhány perc múlva ellenőrizze, hogy a domain a szerverre mutat-e:
dig +short monitor.example.com # az Ön IP-címét kell visszaadnia
# vagy, ha nincs dig:
getent hosts monitor.example.com
A Let's Encrypt SSL-tanúsítványt csak domainre állítja ki – a DNS-nek a tanúsítvány kiállítása előtt a szerverre kell mutatnia.
10. Webhely létrehozása és a panel fájljainak feltöltése
Apache: a DocumentRoot a panel gyökerére mutasson, NE a public/ mappára. A stílusok (CSS/JS), a sw.js és a manifest.json az assets/ mappában, a public/ mellett vannak, és a webhely gyökeréről kérődnek le. A gyökér .htaccess a fő vezérlő. Ha az Apache alatt a DocumentRoot a public/ mappára állítja, a panel stílusok nélkül nyílik meg. Tiszta nginx esetén fordítva van: a gyökér a public/, az assets/ pedig külön szabállyal szolgálódik ki (lásd az alábbi nginx blokkot).
A panel fájljai (a disztribúció archívuma) a vásárlás után a fiókban tölthetők le a my.arciveo.com → „Letöltések” menüpontban. Csomagolja ki az archívumot a feltöltés előtt.
1) Hozza létre a panel könyvtárát, és töltse fel bele a disztribúció tartalmát (hogy benne legyen a public/, assets/, config.php stb.):
sudo mkdir -p /var/www/monitor
# ezután töltse fel a disztribúció fájljait a /var/www/monitor mappába (FileZilla / WinSCP / scp)
2) Állítsa be a webszervert.Apache: a DocumentRoot a panel gyökerére mutasson (NE a /public mappára); az AllowOverride All kötelező. A PHP-FPM socket útvonala automatikusan meghatározódik. A blokkot egészében illessze be a terminálba:
nginx: az nginx-nek nincs .htaccess-e, ezért a gyökérnek a public/ mappát vesszük, az assets/, sw.js, manifest.json (egy szinttel feljebb) pedig külön szabállyal szolgálódik ki:
PHPSOCK=$(ls -1 /run/php/php*-fpm.sock 2>/dev/null | head -1) # PHP-FPM socket automatikus meghatározása
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;
# az assets, a service worker és a manifest egy szinttel a public/ felett vannak
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
Fájlok feltöltése — SFTP/SCP (FileZilla, WinSCP) vagy scp:
# Példa scp-vel a helyi számítógépről:
scp -r ./monitor/* deploy@203.0.113.10:/var/www/monitor/
Állítsa be a fájljogosultságokat — ez kötelező lépés. Ha root alatt vagy SFTP-n keresztül töltötte fel, a fájlok a root tulajdonában vannak, és a webszerver (www-data) nem tudja őket olvasni — a panel üresen vagy 403-as hibával nyílik meg (a naplóban: .htaccess unreadable / directory not executable). Az alábbi parancs ezt javítja:
# Normalizáljuk az egész webroot jogosultságait: a root által létrehozott könyvtár
# nem elérhető a webszerver (www-data) számára — enélkül a panel üres oldalt vagy 403-at ad.
# Az Apache www-data alatt fut; ha Önnél más a webfelhasználó, cserélje ki.
cd /var/www/monitor
# A munkakönyvtárakat a chown ELŐTT hozzuk létre — különben az új könyvtárak root:root
# maradnak, és chmod 750 mellett a webszerver (www-data) nem tud írni beléjük.
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) Nyissa meg magának a fájlfeltöltést SFTP-n. A fenti parancs után minden fájl a www-data tulajdonában van, miközben a FileZilla / WinSCP a saját felhasználójával csatlakozik — a feltöltés ekkor SSH_FX_PERMISSION_DENIED (Permission denied) hibával áll le. root-ként belépni a feltöltéshez nem lehet — a root-belépést az 05. lépésben kikapcsoltuk. Válasszon a két változat közül.
A változat — ACL csak a saját felhasználójának (ajánlott). Írási jogot csak Ön kap; a webszerver továbbra sem tudja felülírni a panel kódját:
sudo apt install -y acl
# Írási jog a felhasználójának a teljes panelkönyvtárra:
sudo setfacl -R -m u:deploy:rwX /var/www/monitor
# Ugyanez alapértelmezésként — a később létrehozott fájlokra és mappákra:
sudo setfacl -R -d -m u:deploy:rwX /var/www/monitor
B változat — a www-data csoporton keresztül. Egyszerűbb, de a panel fájljaira a webszerver is írási jogot kap: PHP-sebezhetőség esetén a kód lecserélhető lenne. A parancsok sorrendje számít — a config.php és a munkamappák zárása marad a végére:
sudo usermod -aG www-data deploy
# Írási jog a csoportnak + setgid (a 2-es bit): az SFTP-n feltöltött fájlok
# a www-data csoportban maradnak — különben a panel nem tudja felülírni őket.
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
A B változat után csatlakozzon újra a FileZillában (Kiszolgáló → Bontás, majd lépjen be újra) — az új csoport csak új bejelentkezéskor lép életbe, addig továbbra sem lesz jogosultsága. Ellenőrzés: id deploy — a csoportok listájában meg kell jelennie a www-data csoportnak; ls -ld /var/www/monitor — jogok drwxrwsr-x, az x helyén álló s betű azt jelenti, hogy a setgid be van állítva.
11. Adatbázis
Hozzon létre egy adatbázist és egy felhasználót, majd importálja a sémát. A blokkot teljes egészében illessze be a terminálba. A monitor_db és a monitor_user csak példanevek, tetszőleges sajátot is megadhat; jegyezze meg az adatbázis nevét, a felhasználót és a jelszót — ezeket a következő lépésben a config.php fájlba írja be:
# 1. Adatbázis. A jelszót EGYSZER kell megadni a DBPASS-ban, és minden sorba behelyettesítődik.
# A blokkot TELJES EGÉSZÉBEN illessze be a terminálba; a sudo mysql root-ként lép be unix-socketen
# (a root jelszava nem kell). NE használjon interaktív `sudo mysql -u root -p` parancsot
# másolással-beillesztéssel — beillesztéskor az SQL-sorok a jelszókérésbe kerülnek és elvesznek.
DBPASS='CHOOSE_A_PASSWORD' # ← csak ezt a sort módosítsa
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
# Ellenőrzés (a monitor_db-t kell mutatnia):
mysql -u monitor_user -p"$DBPASS" -e "SHOW DATABASES;"
# Ugyanezt a jelszót írja be a config.php → DB_PASS mezőbe.
A sémát nem kell importálni — a panel maga hozza létre a táblákat és az admin fiókot az első böngészős belépéskor (a database/db.sql alapján), ha az adatbázis üres. A séma kézi importálására csak akkor van szükség, ha az automatikus inicializálás nem működött.
Ha a böngészős telepítőt (public/start_db.php) használta — törölje azt közvetlenül a telepítés után: engedélyezi az adatbázis újralétrehozását hitelesítés nélkül. Amíg a fájl a panel gyökerében vagy a public/ mappában van, a panel piros figyelmeztetést jelenít meg.
12. A config.php beállítása
A config.php a panel gyökerében (/var/www/monitor/config.php) az egyetlen fájl, amelyet kézzel kell szerkeszteni. A panel összes beállítása define() konstansokként van megadva benne. Nyissa meg egy szerkesztőben:
sudo nano /var/www/monitor/config.php
Helyettesítse be a saját értékeit a kiemelt helyeken; a többit hagyja változatlanul:
// --- Adatbázis (a 11. lépésből) ---
define('DB_HOST', 'localhost'); // hagyja
define('DB_NAME', 'db_name'); // amit a 11. lépésben létrehozott
define('DB_USER', 'user'); // amit a 11. lépésben létrehozott
define('DB_PASS', 'db_password'); // amit a 11. lépésben megadott
define('DB_CHARSET', 'utf8mb4'); // hagyja
// --- Alkalmazás ---
define('APP_URL', 'https://monitor.example.com'); // a panel címe, záró perjel nélkül
define('TIMEZONE', 'Europe/Budapest'); // az Ön időzónája
// --- Munkamenet ideje ---
define('SESSION_LIFETIME', 28800); // tétlenség az újbóli belépésig, mp (28800 = 8 ó)
Mit módosítson:
DB_NAME, DB_USER, DB_PASS — pontosan ugyanaz az adatbázisnév, felhasználó és jelszó, amelyet az adatbázis létrehozásakor adott meg a 11. lépésben (ha a példákat hagyta meg — monitor_db / monitor_user). A DB_HOST és DB_CHARSET értékeket ne módosítsa.
APP_URL — a panel teljes címe https:// előtaggal, záró perjel nélkül és www nélkül. Meg kell egyeznie azzal a doménnal, amelyre a licencet aktiválja (16. lépés), különben a kulcsot elutasítja a rendszer.
TIMEZONE — az Ön időzónája (a lista: timedatectl list-timezones). Csak arra van hatással, hogyan jeleníti meg a panel a dátumokat; a cron-feladatok indítási idejére nincs hatással (ott a rendszer időzónája érvényes).
SESSION_LIFETIME — hány másodperc tétlenség után kéri a panel az újbóli belépést (alapértelmezetten 8 óra). Pl. 3600 = 1 óra, 86400 = egy nap.
A hibanaplózási blokk (display_errors, log_errors, error_log) — hagyja alapértelmezetten.
Mentse a fájlt (Ctrl+O, Enter, majd Ctrl+X), és indítsa újra a PHP-FPM-et — különben az OPcache miatt a módosítások nem lépnek életbe:
sudo systemctl restart php*-fpm
A config.php titkos fájl (benne van az adatbázis jelszava). A panel gyökerében található, amely egyben a webgyökér is, de védve van: 640 jogosultságok (a 10. lépésben beállítva) és kifejezett tiltás a gyökér .htaccess fájlban. Ne tegye közzé nyilvános tárolókban, és ne küldje el a valódi jelszóval az ügyfélszolgálatnak.
A PHP a webkiszolgáló felhasználójaként fut, amelynek nincs joga rendszerparancsokhoz. A hozzáférés szűken adható meg: célzott sudo a konkrét segédprogramokra és naplóolvasás csoportokon keresztül (sudo nélkül). A webréteg feltörése nem ad root jogot.
A példákban a www-data az Apache szabványos felhasználója. Ha Önnél más van (egyes paneleknél a PHP külön felhasználó alatt fut) — cserélje ki mindenhol. Lekérdezés: ps -o user= -C php-fpm | sort -u.
1. Hozza létre a /etc/sudoers.d/monitor fájlt a sudo visudo -f /etc/sudoers.d/monitor paranccsal, és illessze be (a nem használt modulok sorait törölje):
# UFW — állapot és szabályok (a „Tűzfal” oldal)
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 — állapot, bannolás és feloldás (a banned egyetlen paranccsal adja vissza
# minden jail bannjait; a ban/unban a panel gombjaihoz kell)
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 *
# Biztonsági frissítések (a „Frissítések” kártya). Csak olvasás, de éppen root alól:
# az apt gyorsítótár (~70 MB) csak a root számára elérhető, a nem-root minden hívásnál újraépíti
# (4,2 mp CPU szemben a 0,01 mp-cel). Wildcard nélkül — pontosan ez az egy parancs, semmit sem telepít.
www-data ALL=(ALL) NOPASSWD: /usr/bin/apt list --upgradable
# IPset (támadási térkép, irányítópult)
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 — események keresése + a napló utolsó sorainak olvasása (pontos útvonal)
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
# Nyitott portok (a kernel/SSH/Falco naplók sudo NÉLKÜL olvashatók — a
# systemd-journal csoporton keresztül, lásd 2. pont; a journalctl-hez NEM kell sudo, és nem is biztonságos)
www-data ALL=(ALL) NOPASSWD: /usr/bin/ss -tuln, /usr/sbin/ss -tuln, /bin/ss -tuln
# PostgreSQL (csak ha használja) — rögzített, csak olvasható szkript,
# hozza létre a „A PostgreSQL nem jelenik meg” FAQ szerint; enélkül törölje a sort
www-data ALL=(ALL) NOPASSWD: /usr/local/bin/monitor-pgstat
sudo chmod 440 /etc/sudoers.d/monitor
sudo visudo -c # a "parsed OK" kell legyen
2. Hozzáférés a naplókhoz és a systemd naplóhoz. A modulok közvetlenül olvassák a /var/log/fail2ban.log, auth.log, ufw.log, apache2/*, aide fájlokat (Debian/Ubuntu esetén ezek a naplók az adm csoportban vannak). A kernel-, SSH- és Falco-események a journaldból származnak a journalctl paranccsal sudo nélkül, a systemd-journal csoporton keresztül. Adja hozzá a webfelhasználót mindkét csoporthoz, és indítsa újra a PHP-FPM-et:
sudo usermod -aG adm,systemd-journal www-data
sudo systemctl restart php*-fpm # kötelező, különben a csoportok nem lépnek életbe
3. Ha a ClamAV vagy a Suricata nem az adm csoportba írja a naplókat (előfordul a root:root) — adjon hozzáférést ACL-en keresztül:
4. ModSecurity burkoló. A WAF audit-naplója (/var/log/apache2/modsec_audit.log) a root tulajdona 640-es jogokkal, a webfelhasználó nem tudja közvetlenül olvasni. A ModSecurity oldal a motor módját, az eseményeket és az aktív szabályok listáját egy rögzített, csak olvasható szkripten keresztül kéri le — ezt engedélyezi a fenti sudoers sor:
A /etc/modsecurity/modsecurity.conf fájl nélkül maga a WAF nem működik: a csomag csak a modsecurity.conf-recommended fájlt teszi le, és a szabálymotor kikapcsolva marad — a bekapcsolásáról lásd: FAQ → „A ModSecurity telepítése”.
A sudoers minden sorában szereplő felhasználónak egyeznie kell az FPM-készlet felhasználójával: szokásos Apache/Debian esetén ez a www-data, HestiaCP-ben a webhely készlete a webhely tulajdonosaként fut (például admin) — ellenőrizze: grep -E '^user' /etc/php/*/fpm/pool.d/monitor.example.com.conf.
5. Ha az Apache előtt Nginx áll (HestiaCP, ISPmanager és más panelek — ott az Nginx a PHP-t az Apache-hoz proxyzza, a statikus tartalmat pedig maga szolgálja ki). A szolgáltatáskönyvtárak .htaccess fájlokkal vannak lezárva, de az Nginx nem olvassa őket: bármely statikus fájlt (.json, .txt, .log, .dat) közvetlenül, az Apache megkerülésével szolgál ki. Kifelé szivárognak a panel gyorsítótárai és adatai — például a tmp/modsec_cache.json a WAF-eseményekkel és a támadók IP-címeivel. Adjon tiltást az Nginx webhelykonfigurációjához:
A ^~ előtag kötelező: ez a location / statikus tartalomra vonatkozó reguláris szabálya előtt választódik ki, különben a tiltás nem lép működésbe.
HestiaCP-ben ezt külön fájlként helyezze el: /home/<user>/conf/web/<domain>/nginx.ssl.conf_deny (és nginx.conf_deny a HTTP-hez) — a webhelykonfiguráció betölti a nginx.ssl.conf_* fájlokat, és újraépítéskor nem írja felül őket. Alkalmazás: sudo nginx -t && sudo systemctl reload nginx.
Ellenőrzés: curl -s -o /dev/null -w '%{http_code}\n' https://monitor.example.com/tmp/modsec_cache.json — 403 kell legyen. Ha az Apache Nginx nélkül működik (maga figyeli a 80/443 portokat), semmit sem kell hozzáadni — a .htaccess elegendő.
A binárisok útvonalait ellenőrizze a which paranccsal (például which ufw cscli ausearch ss). A sudoers fájlt csak a visudo segítségével szerkessze. Az összes MySQL-adatbázis listája külön GRANT paranccsal kapcsolható be (FAQ → „Csak egy adatbázis látszik”).
14. Hozzáférés korlátozása IP alapján
Korlátozza a monitor elérését IP-cím alapján — így a bejelentkezési oldal akkor sem nyílik meg, ha az URL ismertté válik. Megoldható a webszerver szintjén (lásd az alábbi nginx-példát) vagy magában a felületen („Beállítások” → „Hozzáférés korlátozása IP alapján”). Ha Apache-ot használ, alkalmazza a felületen elérhető korlátozást.
Ha az nginx-oldalt már beállította a 10. lépés szerint, ne adjon hozzá másodiklocation / blokkot — az allow/deny sorokat a meglévő blokkba írja be. Két azonos location / ugyanabban a server { } blokkban konfigurációs hiba, az nginx nem indul újra.
# Az nginx konfigurációjában (a server { } blokkon belül):
# A Let's Encrypt ACME-útvonalát az IP-korlátozás megkerülésével nyitva tartjuk —
# hogy az SSL kiállítása és automatikus megújítása (15. lépés) ne függjön az IP-szűrőtől.
location ^~ /.well-known/acme-challenge/ { allow all; }
location / {
allow 203.0.113.10; # ← írja be a saját IP-címét
allow 10.0.0.0/8; # helyi hálózat (ha szükséges)
deny all;
try_files $uri $uri/ /index.php?$query_string;
}
# Az nginx újratöltése:
sudo nginx -t && sudo systemctl reload nginx
15. SSL kiállítása (HTTPS)
A vezérlőpult csak HTTPS-en működik. A bejelentkezési munkamenet védett sütit használ, a WebAuthn (2FA) pedig csak HTTPS-en működik. A http:// címen nem lehet bejelentkezni.
A tanúsítvány ingyenes (Let's Encrypt). A domain DNS-ének már a szerverre kell mutatnia. A parancs a webszervertől függ:
# Apache:
sudo certbot --apache -d monitor.example.com
# nginx — CSAK ha valóban nginx-et használ. Apache-on NE futtassa:
# az apt behúzza az nginx-et és lefoglalja a 80-as portot, ütközik az Apache-csal.
# sudo apt install python3-certbot-nginx
# sudo certbot --nginx -d monitor.example.com
# a certbot maga beírja a HTTPS-t a konfigba és beállítja az automatikus megújítást
Mit kérdez a certbot: e-mail → a Terms elfogadása (Y) → e-mail átadása az EFF felé (az Ön belátása szerint). Ezután maga állítja ki a tanúsítványt, beírja a <VirtualHost *:443>-t, beállítja a http→https átirányítást és az automatikus megújítást.
A DNS-nek a certbot indítása ELŐTT a szerverre kell mutatnia (tulajdonjog ellenőrzése a 80-as porton). Ellenőrzés: dig +short monitor.example.com → a szerver IP-je. A 80/443-as portok nyitva vannak: sudo ufw allow 80,443/tcp.
Kiállítás után: a https://monitor.example.com lakattal nyílik meg, a http:// átirányít a https:// címre (az APP_URL a config.php-ban a 12. lépésben már be van állítva).
16. Bejelentkezés és első beállítások
Nyissa meg a https://monitor.example.com címet, jelentkezzen be az admin / useradmin párossal, és haladjon végig az ellenőrzőlistán:
Az admin jelszó módosítása — a menü „Felhasználók” szakaszában.
WebAuthn (2FA) bekapcsolása — „WebAuthn kulcsok” → kulcs/passkey regisztrálása (HTTPS szükséges). Rögtön kettőt regisztráljon: az egyetlen kulcs elvesztésekor azzal nem lehet majd bejelentkezni. Bővebben.
Hozzáférés korlátozása IP alapján — „Beállítások” → „IP-alapú hozzáférés-korlátozás” (bekapcsolás előtt írja be a saját IP-címét, különben kizárja magát).
Licenc megadása — a fiókjában lévő ARCIVEO-… kódot aktiválja a saját domainjére, a kulcsot pedig illessze be a „Beállítások” → „Licenc” menübe. Bővebben.
Értesítések beállítása — Telegram és/vagy Email a „Beállítások” menüben. Bővebben.
A telepítő törlésepublic/start_db.php, ha még megmaradt (11. lépés).
17. Biztonsági eszközök (opcionális)
A vezérlőpult már működik. Az eszközök tetszés szerint telepíthetők — csak azt telepíti, amire szüksége van, a vezérlőpult pedig azonnal megjeleníti az állapotot. Az egyes eszközök telepítési parancsai a súgóban találhatók (külön szakaszokban eszközönként):
Ez az Arcivéo Security Monitor csak megtekintésre szolgáló demója – minden módosítás le van tiltva. Telepítse a saját szerverére a valós biztonsági adatok kezeléséhez.