Automaattinen asennus

Automaattinen tapa: yksi tililtä ladattava skripti valmistelee koko palvelimen (Apache + PHP -verkkoympäristö, tietokanta, tietoturvatyökalut, cron). Sen jälkeen otetaan paneeli käyttöön, luodaan SSL ja syötetään lisenssi. Toimii Ubuntu/Debian-järjestelmillä: tuoreelle VPS:lle asennetaan kaikki alusta asti, jo määritetylle palvelimelle vain lisäävästi (profiili ”Määritetty palvelin”, vaihe 01). Kaikki alla olevat komennot ovat järjestyksessä — selaa vain ylhäältä alas. Tuoreella VPS:llä jokainen vaihe sopii sellaisenaan peräkkäin; jos palvelin on jo määritetty tai siinä on hostingpaneeli, skripti jättää osan työstä tarkoituksella sinulle — ja kertoo työnsä lopuksi, mitä täsmälleen (tulosteen läpikäynti on vaiheessa 01).

Korvaa komentojen paikkamerkit omillasi: monitor.example.com — sinun domainisi; 203.0.113.10 — palvelimen todellinen IP; /var/www/monitor — paneelin juuri (jossa ovat public/, assets/, config.php); keksi tietokannalle oma salasana.
Täysi paketti (”Täysi suojaus”) on tarkoitettu tuoreelle VPS:lle. Puhtaalla Ubuntu/Debian-järjestelmällä se määrittää tietoturvajärjestelmän alusta asti — Fail2ban (jail.local), root-crontab, UFW-säännöt, Apache-konfiguraation. Jos palvelin on jo määritetty (toimiva paneeli, sivustot, sähköposti, omat jailit) — valitse profiili ”Määritetty palvelin”: se tekee vain lisääviä muutoksia eikä koske palomuuriisi, Fail2baniin, sähköpostiin, SSH:hon tai sysctliin. Kun hostingpaneeli havaitaan, skripti siirtyy tähän tilaan itse. Ennen ensimmäistä ajoa voit ottaa käyttöön kuivaajon (valintaruutu tilillä) — se näyttää, mitä tehdään, muuttamatta mitään. Tee toimivalla palvelimella varmuuden vuoksi tilannevedos (snapshot).

01. Automaattisen määrityksen komento tililtä

Komennon saat omalta tililtäsi my.arciveo.com → osio ”Palvelimen määritys” (käytettävissä Arcivéo Security Monitorin tilauksen jälkeen). Se on sidottu tiliisi ja sisältää henkilökohtaisen tunnisteen.

Skripti valmistelee koko palvelimen: web-pinon (Apache + PHP), tietokannan, SSL-työkalut, täyden suojausvalikoiman ja cron-tehtävät (Lynis, SMART, debsums, Logwatch, päivittäinen raportti, ipsum-päivitys).

1) Valitse suojaustaso (tilillä, ennen komennon kopiointia):

  • Täysi suojaus (suositeltu) — UFW (palomuuri), Fail2ban, CrowdSec + bouncer, ipsum (IP-estolista), Suricata (IDS/IPS), Falco, ModSecurity + OWASP CRS (WAF), PSAD, mod_evasive (DoS-suojaus), AIDE (tiedostojen eheys), debsums, ClamAV + maldet (virustorjunta), Auditd, AppArmor, Monit, Lynis (auditointi), Logwatch, automaattiset tietoturvapäivitykset.
  • Kevennetty — vähän RAM-muistia sisältäville VPS-palvelimille: peruskokoonpano ilman raskaita komponentteja.
  • Määritetty palvelin (hallintapaneeli) — jo toimivalle palvelimelle, jossa on paneeli (HestiaCP jne.), sivustot ja sähköposti: vain lisäävät muutokset (työkalujen lisäasennus, cron, sudo-säännöt), kun taas palomuuri, Fail2ban, sähköposti, SSH ja sysctl jäävät ennalleen. Paneelin sisältävällä palvelimella skripti valitsee tämän tilan itse.
Kuiva ajo. Tilillä voit valita ”Kuiva ajo” — silloin komento vain näyttää, mitä skripti asentaa ja muuttaa, ja päättyy koskematta mihinkään. Hyödyllistä jo määritetyllä palvelimella: ensin ajo, sitten todellinen suoritus ilman valintaa.

2) Suorita palvelimella root-käyttäjänä tilin komento — se näyttää tältä:

curl -fsSL "https://my.arciveo.com/install.php?token=YOUR_TOKEN" | sudo bash
Pidä komento salassa — se on sidottu tiliisi. Linkillä on rajoitettu voimassaoloaika; jos se on vanhentunut, napsauta tilillä ”Hae uusi linkki”.
Automaattisen määrityksen jälkeen web-palvelin on Apache + PHP-FPM, ja tietoturvatyökalut sekä cron-tehtävät on jo asennettu ja toimivat heti käyttövalmiina.

3) Lue tuloste lopusta — siinä kerrotaan, mikä jää sinun tehtäväksesi. Skripti päättää työnsä tarkistuslohkoon ja luetteloon ”Seuraavaksi — paneelin asennus”. Osan vaiheista se jättää tarkoituksella tekemättä: mitkä täsmälleen, riippuu valitusta profiilista ja siitä, mitä se löysi palvelimelta. Vertaa alla olevaan luetteloon — sinun on tehtävä vain ne kohdat, joiden rivit ilmestyivät omaan tulosteeseesi.

  • Control panel detected (…) — sivusto luodaan itse hostingpaneelin työkaluilla, vhostia skripti ei tee. Vaihe 03, haara ”Palvelin, jossa on hostingpaneeli”.
  • No vhost created (no domain given) — profiili ”Määritetty palvelin” ilman domainia: nimetön vhost olisi muuttunut oletussivustoksi ja kaapannut omat sivustosi, joten sitä ei luotu. Vaihe 03, haara ”Luo vhost käsin”.
  • sudo rules NOT written — skripti ei pystynyt päättelemään, millä tunnuksella paneeli toimii. Tämä on tavallinen tilanne: paneelin tiedostot ladataan vasta automaattimäärityksen jälkeen, joten päättelyyn ei vielä ollut mitään. Ilman näitä sääntöjä moduulit eivät näe järjestelmätietoja. Vaihe 04, lohko ”sudo-oikeudet verkkopalvelimelle”.
  • ! Nginx does not read .htaccess — Apachen edessä on Nginx, eikä eston kirjaaminen sen konfiguraatioon onnistunut automaattisesti. Tee tämä ehdottomasti: muuten data/, keys/, database/ ja config.php tarjoillaan ulos .htaccess-tiedoston ohi. Vaihe 03, lohko ”Jos Apachen edessä on Nginx”.
  • UFW installed but inactive — palomuuri on asennettu, mutta pois päältä: määritetyllä palvelimella skripti ei kytke sitä itse päälle, jottei katkaisisi pääsyäsi. Kytke se itse ja salli ehdottomasti oma SSH-porttisi:
    sudo ufw allow OpenSSH # epästandardi SSH-portti: sudo ufw allow 2222/tcp sudo ufw allow 80,443/tcp sudo ufw enable
  • Fail2ban installed but not running — käynnistä: sudo systemctl enable --now fail2ban.
  • Database server present … but not running — käynnistä tietokantapalvelin ennen vaihetta 04: sudo systemctl enable --now mariadb (tai mysql — sen mukaan, kumpi on asennettu).
  • Certbot skipped — issue SSL in … — varmenne myönnetään hostingpaneelin Let's Encrypt -kytkimellä; vaihetta 06 et tarvitse.
Jos tarkistuslohkossa kaikki on kunnossa, viimeinen rivi on All checks passed. Kohdat, joissa on !, vaativat huomiota; tarkemmat tiedot kirjataan lokiin, jonka polun skripti tulostaa aivan lopuksi (Log: …).

02. Verkkotunnus ja DNS

Jotta paneelin voi avata osoitteesta kuten monitor.example.com ja saada maksuttoman SSL:n, verkkotunnuksen on osoitettava palvelimeen. Luo DNS:n hallintapaneelissa (rekisteröijällä tai hostaajalla) A-tietue:

Tyyppi: A Nimi: monitor (aliverkkotunnus → monitor.example.com) tai @ (juuriverkkotunnus → example.com) Arvo: 203.0.113.10 ← palvelimesi IP TTL: 3600

Muutaman minuutin kuluttua (joskus jopa tunnin) tarkista, että verkkotunnus osoittaa palvelimeen:

dig +short monitor.example.com # pitäisi palauttaa IP:si # tai, jos dig puuttuu: getent hosts monitor.example.com
SSL-varmenne (vaihe 06) myönnetään vain verkkotunnukselle — siksi DNS:n on osoitettava palvelimeen ennen varmenteen myöntämistä.

03. Lataa paneelin tiedostot

Tavallinen tapaus (tuore VPS). Automaattiasennus on jo luonut paneelin hakemiston /var/www/monitor ja määrittänyt Apache-sivuston (DocumentRoot paneelin juureen, PHP-FPM, AllowOverride tiedostolle .htaccess). Skriptin tulosteessa tämä on rivi vhost … → DocumentRoot …. Hakemistoa ja vhostia ei tarvitse luoda erikseen — lataa vain tiedostot ja aseta oikeudet.
Kaksi tapausta, joissa vhostia EI luotu — skripti kertoo siitä suoraan työnsä lopuksi. Tee silloin ensin alla oleva sopiva haara, ja lataa tiedostot vasta sen jälkeen.

Haara ”Palvelin, jossa on hostingpaneeli” (tulosteessa: Control panel detected (…)). Tällaisella palvelimella sivustoista huolehtii paneeli, eikä skripti luo omaa vhostia tarkoituksella — se pyyhkiytyisi heti, kun paneeli kokoaa konfiguraationsa uudelleen. Etene näin:

  1. Luo verkkodomain hostingpaneelissa (HestiaCP jne.) — sen DocumentRoot jää ennalleen.
  2. Lataa jakelupaketti kokonaisuudessaan tämän domainin public_html-hakemistoon: tiedostojen index.php, api/, assets/ rinnalla on oltava myös palvelutiedostot config.php, includes/, data/, tmp/, logs/, keys/, cron/, database/. Mitään ei tarvitse siirtää verkkojuuren yläpuolelle: palvelukansiot on suojattu jakelupaketin .htaccess-tiedostolla ja Nginxin alla estolla, jonka skripti kirjasi domainin konfiguraatioon.
  3. SSL otetaan käyttöön itse paneelin Let's Encrypt -kytkimellä — ohita vaihe 06.
  4. Seuraavaksi oikeudet (alempana tässä vaiheessa), tietokanta (vaihe 04) ja config.php (vaihe 05). Korvaa komentojen polut muotoon /home/tili/web/domain/public_html ja omistaja tämän domainin käyttäjällä www-data:n sijaan.

Haara ”Luo vhost käsin” (tulosteessa: No vhost created (no domain given)). Näin käy vain profiililla ”Määritetty palvelin”, kun domainia ei annettu. Helpointa on yksinkertaisesti ajaa tilin komento uudelleen ja antaa domain:

curl -fsSL "https://my.arciveo.com/install.php?token=YOUR_TOKEN&profile=existing" | sudo bash -s -- monitor.example.com

Uudelleenajo on turvallista: jo tehtyä ei monisteta. Jos vhost on kuitenkin luotava käsin — tässä on sama konfiguraatio, jonka asennusohjelma kirjoittaa:

sudo mkdir -p /var/www/monitor # PHP-FPM-soketti tunnistetaan automaattisesti — PHP:n versio vaihtelee palvelimittain. PHPSOCK=$(ls -1 /run/php/php*-fpm.sock 2>/dev/null | head -1) sudo tee /etc/apache2/sites-available/arciveo-monitor.conf > /dev/null <<'EOF' <VirtualHost *:80> ServerName monitor.example.com DocumentRoot /var/www/monitor <Directory /var/www/monitor> Options -Indexes +FollowSymLinks AllowOverride All Require all granted </Directory> <FilesMatch "\.php$"> SetHandler "proxy:unix:__PHPSOCK__|fcgi://localhost" </FilesMatch> ErrorLog ${APACHE_LOG_DIR}/arciveo-monitor_error.log CustomLog ${APACHE_LOG_DIR}/arciveo-monitor_requests.log combined </VirtualHost> EOF sudo sed -i "s#__PHPSOCK__#${PHPSOCK}#" /etc/apache2/sites-available/arciveo-monitor.conf sudo a2ensite arciveo-monitor.conf sudo apache2ctl configtest sudo systemctl reload apache2
ServerName on tässä pakollinen. Nimetön vhost muuttuu Apachen oletussivustoksi ja alkaa vastata samalla palvelimella olevien muiden domainien puolesta. Samasta syystä älä poista käytöstä 000-default.conf-tiedostoa määritetyllä palvelimella: se sivusto on voitu muokata jonkun toimivaksi sivustoksi — tuoreella VPS:llä asennusohjelma poistaa sen itse, tässä sitä ei pidä tehdä.
Jos Apachen edessä on Nginx (tulosteessa: ! Nginx does not read .htaccess). Nginx tarjoilee staattiset tiedostot suoraan levyltä eikä lue .htaccess-tiedostoa — palvelukansiot jäävät auki ulospäin, vaikka Apache sulkee ne oikein. Skripti on valmistellut estotiedoston etukäteen; se on liitettävä sivustosi server{}-lohkoon ja Nginx käynnistettävä uudelleen:
include /etc/nginx/snippets/arciveo-deny.conf;
sudo nginx -t && sudo systemctl reload nginx # Tarkistus: pitäisi palauttaa 403 eikä tiedoston sisältöä curl -sI https://monitor.example.com/config.php | head -1
Paneelin tiedostot (jakelupaketin arkisto) ladataan oston jälkeen tilillä my.arciveo.com → ”Lataukset”. Pura arkisto ennen palvelimelle siirtoa.

Lataa jakelupaketin sisältö hakemistoon /var/www/monitor (niin että sen sisällä ovat public/, assets/, config.php jne.) — SFTP:llä/SCP:llä (FileZilla / WinSCP) tai scp-komennolla paikalliselta tietokoneelta:

scp -r ./monitor/* deploy@203.0.113.10:/var/www/monitor/
Jotta vhostiin kirjautuu heti oma domainisi (ServerName), se välitetään automaattiasennuksen komennolle jo vaiheessa 01: … | sudo bash -s -- monitor.example.com (tai domain annetaan tilin kentässä ”Paneelin domain”). Jos domainia ei välitetty, paneeli vastaa mihin tahansa hostiin ja IP-osoitteeseen, ja ServerName kirjataan certbotilla SSL:n myöntämisen yhteydessä (vaihe 06); mitään ei tarvitse asentaa uudelleen.
Aseta tiedostojen oikeudet — tämä on pakollinen vaihe. Jos lataus tehtiin root-tunnuksella tai SFTP:llä, tiedostot kuuluvat root-käyttäjälle, eikä palvelin (www-data) pysty lukemaan niitä — paneeli avautuu tyhjänä tai 403-virheellä (lokissa: .htaccess unreadable / directory not executable). Alla oleva komento korjaa tämän:
# Normalisoidaan koko webrootin oikeudet: rootin luoma hakemisto ei ole # palvelimen (www-data) käytettävissä — ilman tätä paneeli antaa tyhjän sivun tai 403. cd /var/www/monitor # Työhakemistot luodaan ENNEN chown-komentoa — muuten uudet hakemistot jäävät root:root- # omistukseen ja chmod 750:n jälkeen palvelin (www-data) ei voi kirjoittaa niihin. 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

Avaa itsellesi tiedostojen lataus SFTP:llä. Yllä olevan komennon jälkeen kaikki tiedostot kuuluvat www-data-käyttäjälle, kun taas FileZilla / WinSCP yhdistävät omalla käyttäjätunnuksellasi — lataus epäonnistuu silloin virheeseen SSH_FX_PERMISSION_DENIED (Permission denied). Valitse toinen kahdesta vaihtoehdosta.

Vaihtoehto A — ACL vain omalle käyttäjällesi (suositeltava). Kirjoitusoikeuden saat vain sinä; verkkopalvelin ei edelleenkään voi korvata paneelin koodia:

sudo apt install -y acl # Kirjoitusoikeus käyttäjällesi koko paneelihakemistoon: sudo setfacl -R -m u:deploy:rwX /var/www/monitor # Sama sääntö oletuksena — myöhemmin luotaville tiedostoille ja kansioille: sudo setfacl -R -d -m u:deploy:rwX /var/www/monitor

Vaihtoehto B — www-data-ryhmän kautta. Yksinkertaisempi, mutta kirjoitusoikeuden paneelin tiedostoihin saa myös verkkopalvelin: PHP:n haavoittuvuuden yhteydessä koodi voitaisiin korvata. Komentojen järjestyksellä on merkitystä — config.php ja työkansiot suljetaan viimeisenä:

sudo usermod -aG www-data deploy # Kirjoitusoikeus ryhmälle + setgid (bitti 2): SFTP:llä ladatut tiedostot # pysyvät www-data-ryhmässä — muuten paneeli ei pysty korvaamaan niitä. 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
Vaihtoehdon B jälkeen yhdistä FileZillassa uudelleen (Palvelin → Katkaise yhteys, kirjaudu sitten uudelleen) — uusi ryhmä tulee voimaan vasta uudella kirjautumisella, sitä ennen oikeuksia ei vieläkään ole. Tarkistus: id deploy — ryhmäluettelossa pitää näkyä www-data; ls -ld /var/www/monitor — oikeudet drwxrwsr-x, kirjain s merkin x tilalla tarkoittaa, että setgid on asetettu.

04. Tietokanta

Luo tietokanta ja käyttäjä, tuo sitten skeema. Tietokantalohko liitetään terminaaliin kokonaisuudessaan (sudo mysql kirjautuu root-tunnuksella unix-socketin kautta — root-salasanaa ei tarvita). monitor_db ja monitor_user ovat esimerkkinimiä, voit antaa mitä tahansa omia; muista tietokannan nimi, käyttäjä ja salasana — kirjaat ne config.php-tiedostoon seuraavassa vaiheessa:

# 1. Tietokanta. Tietokannan nimi, käyttäjä ja salasana asetetaan KERRAN alla ja sijoitetaan kaikkiin riveihin. # Lohko liitetään terminaaliin KOKONAISUUDESSAAN; sudo mysql kirjautuu root-tunnuksella unix-socketin kautta # (root-salasanaa ei tarvita). ÄLÄ käytä interaktiivista `sudo mysql -u root -p` # kopioimalla — liitettäessä SQL-rivit menevät salasanakyselyyn ja katoavat. DBNAME='monitor_db' # ← tietokannan nimi, voi jättää ennalleen DBUSER='monitor_user' # ← tietokannan käyttäjä, voi jättää ennalleen DBPASS='CHOOSE_A_PASSWORD' # ← salasana, aseta oma sudo mysql <<SQL CREATE DATABASE IF NOT EXISTS $DBNAME CHARACTER SET utf8mb4; CREATE USER IF NOT EXISTS '$DBUSER'@'localhost' IDENTIFIED BY '$DBPASS'; GRANT ALL ON $DBNAME.* TO '$DBUSER'@'localhost'; FLUSH PRIVILEGES; SQL # Tarkistus (pitäisi näyttää $DBNAME): mysql -u "$DBUSER" -p"$DBPASS" -e "SHOW DATABASES;" # Kirjaa samat kolme arvoa config.php-tiedostoon → DB_NAME, DB_USER, DB_PASS.
Yleensä skeemaa ei tarvitse tuoda — paneeli luo itse taulut ja admin-tunnuksen ensimmäisellä selainkäynnillä (tiedostosta database/db.sql), jos tietokanta on tyhjä.

Jos taulut eivät syntyneet (paneeli näyttää tietokantayhteyden virheen tai tyhjän ruudun kirjautumislomakkeen sijaan) — tuo skeema käsin. Komento suoritetaan paneelin juuressa, ja arvot otetaan yllä olevasta lohkosta:

# Skeeman tuonti: cd /var/www/monitor && mysql -u "$DBUSER" -p"$DBPASS" "$DBNAME" < database/db.sql # Tarkistus — taulujen luettelon pitäisi ilmestyä: mysql -u "$DBUSER" -p"$DBPASS" "$DBNAME" -e "SHOW TABLES;"
Jos muuttujat $DBNAME / $DBUSER / $DBPASS ovat jo ”unohtuneet” (uusi terminaali-istunto) — sijoita arvot komentoon käsin tai aseta ne uudelleen samoilla kolmella rivillä yllä olevasta lohkosta.
sudo-oikeudet verkkopalvelimelle. Yleensä säännöt on jo kirjattu automaattimäärityksessä, ja moduulit näkevät järjestelmätiedot heti. Mutta jos skriptin tulosteessa oli rivi sudo rules NOT written — paneelin tunnusta ei ollut mistä päätellä (tiedostoja ei ollut vielä ladattu), eikä sääntöjä luotu. Ilman niitä osiot kuten palomuuri, Fail2ban ja CrowdSec jäävät tyhjiksi. Nyt kun tiedostot ovat paikallaan, aja tilin komento uudelleen ja nimeä tunnus suoraan:
curl -fsSL "https://my.arciveo.com/install.php?token=YOUR_TOKEN&profile=existing" | sudo ARCIVEO_USER=www-data bash -s -- monitor.example.com
Korvaa www-data sillä käyttäjällä, jolla sivustosi PHP toimii (hostingpaneelissa se on yleensä domainin omistaja). Sen voi katsoa näin:
ps -o user= -C php-fpm8.3 | sort -u # aseta oma versiosi # tai: ps aux | grep -m3 '[p]hp-fpm'
Tarkistus uudelleenajon jälkeen: tiedosto /etc/sudoers.d/monitor on olemassa ja siinä on rivejä sinun käyttäjälläsi.

05. config.php-tiedoston määritys

config.php paneelin juuressa (/var/www/monitor/config.php) on ainoa tiedosto, jota täytyy muokata käsin. Kaikki paneelin asetukset on määritetty siinä define()-vakioina. Avaa se editorissa:

sudo nano /var/www/monitor/config.php

Syötä omat arvosi korostettuihin kohtiin; jätä muut ennalleen:

// --- Tietokanta (vaiheesta 04) --- define('DB_HOST', 'localhost'); // jätä ennalleen define('DB_NAME', 'db_name'); // vaiheessa 04 luotu define('DB_USER', 'user'); // vaiheessa 04 luotu define('DB_PASS', 'db_password'); // vaiheessa 04 asetettu define('DB_CHARSET', 'utf8mb4'); // jätä ennalleen // --- Sovellus --- define('APP_URL', 'https://monitor.example.com'); // paneelin osoite, ilman kauttaviivaa lopussa define('TIMEZONE', 'Europe/Helsinki'); // aikavyöhykkeesi // --- Istunnon kesto --- define('SESSION_LIFETIME', 28800); // jouten uudelleen kirjautumiseen, s (28800 = 8 t)

Mitä muuttaa:

  • DB_NAME, DB_USER, DB_PASS — täsmälleen sama tietokannan nimi, käyttäjä ja salasana, jotka asetit tietokantaa luodessasi vaiheessa 04 (jos jätit esimerkit — monitor_db / monitor_user). Älä koske DB_HOST- ja DB_CHARSET-arvoihin.
  • APP_URL — paneelin täydellinen osoite https://-etuliitteellä, ilman kauttaviivaa lopussa ja ilman www. Sen täytyy vastata verkkotunnusta, jolle aktivoit lisenssin (vaihe 07), muuten avain hylätään.
  • TIMEZONE — aikavyöhykkeesi (luettelo — timedatectl list-timezones). Vaikuttaa vain siihen, miten paneeli näyttää päivämäärät; cron-tehtävien käynnistysaikaan se ei vaikuta (siinä pätee järjestelmän aikavyöhyke).
  • SESSION_LIFETIME — kuinka monen sekunnin jouten olon jälkeen paneeli pyytää kirjautumaan uudelleen (oletuksena 8 tuntia). Esim. 3600 = 1 tunti, 86400 = vuorokausi.
  • Virheiden lokituksen lohko (display_errors, log_errors, error_log) — jätä oletusarvoihin.

Tallenna tiedosto (Ctrl+O, Enter, sitten Ctrl+X) ja käynnistä PHP-FPM uudelleen — muuten muutokset eivät tule voimaan OPcachen takia:

sudo systemctl restart php*-fpm
config.php on salainen tiedosto (siinä on tietokannan salasana). Se sijaitsee paneelin juuressa, joka on samalla verkkojuuri, mutta se on suojattu: oikeudet 640 (asetettu vaiheessa 03) ja nimenomainen esto juuren .htaccess-tiedostossa. Älä julkaise sitä julkisiin repositorioihin äläkä lähetä sitä tukeen todellisella salasanalla.
Kaikkien parametrien tarkka läpikäynti — FAQ:ssa: ”config.php-tiedosto — kaikki paneelin asetukset”.

06. Ota käyttöön SSL (HTTPS)

Hallintapaneeli toimii vain HTTPS:n kautta. Kirjautumisistunto käyttää suojattua evästettä, ja WebAuthn (2FA) toimii standardin mukaan vain HTTPS:llä. Osoitteella http:// et pysty kirjautumaan.
Palvelimella, jossa on hostingpaneeli, tätä vaihetta ei tarvita (skriptin tulosteessa: Certbot skipped — issue SSL in …). Varmenne myönnetään itse paneelissa verkkodomainin Let's Encrypt -kytkimellä — näin myös sen uusinnasta huolehtii paneeli.

certbot ja Apache-lisäosa on jo asennettu automaattiasennuksessa. Toimialueen DNS:n tulee jo osoittaa palvelimeen (vaihe 02). Käyttöönotto yhdellä komennolla:

sudo certbot --apache -d monitor.example.com

Jos paneelin on avauduttava myös www.-etuliitteellä — luettele molemmat nimet samassa komennossa, muuten selain näyttää toisessa osoitteessa varmennevaroituksen:

sudo certbot --apache -d monitor.example.com -d www.monitor.example.com
Lisää toinen nimi vain jos sillekin on A-tietue, joka osoittaa tähän palvelimeen (vaihe 02). Muuten Let's Encrypt ei pysty tarkistamaan sitä eikä myönnä varmennetta lainkaan — ei myöskään päädomainille.
Mitä certbot kysyy:
  1. Enter email address — sähköpostisi (sinne tulevat ilmoitukset varmenteen vanhenemisesta).
  2. Terms of Service … (Y)es/(N)o — Y.
  3. Share email with the EFF … (Y)es/(N)o — oman harkintasi mukaan.
Sen jälkeen certbot ottaa itse varmenteen käyttöön, lisää <VirtualHost *:443>, määrittää uudelleenohjauksen http→https ja automaattisen uusinnan. Lopuksi näet Successfully enabled HTTPS.
Jos käyttöönotto epäonnistuu — tarkista, että dig +short monitor.example.com palauttaa palvelimen IP-osoitteen ja portit 80/443 ovat auki (sudo ufw allow 80,443/tcp).

Käyttöönoton jälkeen: https://monitor.example.com avautuu lukolla, ja http:// ohjautuu osoitteeseen https://.

07. Kirjautuminen ja alkuasetukset

Avaa https://monitor.example.com, kirjaudu admin / useradmin ja käy läpi tarkistuslista:

  1. Vaihda admin-salasana — valikon kohta ”Käyttäjät”.
  2. Ota WebAuthn (2FA) käyttöön — ”WebAuthn-avaimet” → rekisteröi avain/passkey (vaatii HTTPS:n). Rekisteröi heti kaksi: jos ainoa avain katoaa, sillä ei voi enää kirjautua. Lue lisää.
  3. Rajaa pääsy IP:n mukaan — ”Asetukset” → ”IP-pohjainen pääsynrajoitus” (lisää oma IP ennen käyttöönottoa, muuten suljet pääsyn itseltäsi).
  4. Syötä lisenssi — aktivoi tilin aktivointikoodi ARCIVEO-… omalle domainillesi ja liitä avain kohtaan ”Asetukset” → ”Lisenssi”. Lue lisää.
  5. Määritä ilmoitukset — Telegram ja/tai sähköposti kohdassa ”Asetukset”. Lue lisää.
  6. Poista asennusohjelma public/start_db.php, jos se on jäänyt: se sallii tietokannan uudelleenluonnin ilman kirjautumista. Niin kauan kuin tiedosto on paneelin juuressa tai kansiossa public/, paneeli varoittaa siitä punaisella bannerilla.
  7. Käynnistä ensimmäiset tarkistukset käsin — muuten osa osioista on tyhjä yöhön asti (katso lohko alla).
Miksi ”Lynis-auditointi” ja ”Logwatch” ovat aluksi tyhjiä. Automaattiasennus asensi työkalut ja loi cron-tehtävät, mutta ei ajanut itse tarkistuksia — ne käynnistyvät aikataulun mukaan: Lynis klo 03:00, Logwatch klo 06:00, debsums klo 04:30, ClamAV klo 01:30. Siihen asti osiot näyttävät rehellisesti, ettei raportteja vielä ole. Jotta et joudu odottamaan vuorokautta, aja ne kerran käsin:
# Lynis-auditointi — ensimmäinen raportti (muutama minuutti): sudo /usr/local/bin/lynis-scan.sh # Logwatch-raportti vuorokaudelta: sudo /usr/local/bin/logwatch_daily.sh # Pakettien eheys (debsums) — isolla palvelimella kestää kauan: sudo /usr/local/bin/debsums-scan.sh
Lynisin voi käynnistää myös suoraan paneelista — painike ”Käynnistä auditointi” sivulla ”Lynis-auditointi”: se ajaa saman skriptin taustalla ja päivittää raportin itse. Sen jälkeen kaikki etenee aikataulun mukaan, eikä käsin tarvitse enää käynnistää mitään.
Ensimmäinen virustarkistus (sudo /usr/local/bin/clamav-scan.sh) kuormittaa levyä ja prosessoria voimakkaasti ja voi kestää tunnin tai enemmän — toimivalla palvelimella on parempi odottaa yöllistä ajoa klo 01:30. Osiot ”Levyt (SMART)”, ”Suorituskyky” ja ”Tietoturvapäivitykset” täyttyvät itsestään: 30 minuutin, 5 minuutin ja tunnin välein.
Valmista. Kunkin työkalun opas löytyy FAQ:sta.
Jos tälle palvelimelle tarvitaan vielä yksi sivusto omalla verkkotunnuksella — katso FAQ: ”Toinen sivusto tällä palvelimella (vielä yksi verkkotunnus)”.