Tämä on Arcivéo Monitorin asennus-, määritys- ja ylläpito-opas. Osiot on ryhmitelty: yleiskatsaus, hallintapaneelin käyttöönotto, tietoturvatyökalujen liittäminen, sisäänrakennetut moduulit ja vianmääritys. Komennot voi kopioida oikealla olevalla painikkeella.
Paneelin asennus on omilla vaiheittaisilla sivuillaan. Valitse tapa:
Arcivéo Monitor on palvelimen tietoturvapaneeli. Se kerää tiedot asennetuista työkaluista (Fail2ban, UFW, Lynis, ModSecurity, AIDE, ClamAV, Auditd, CrowdSec, Suricata, Falco ym.) ja näyttää ne yhtenäisessä käyttöliittymässä koontinäytön, hyökkäyskartan ja kunkin työkalun yksityiskohtaisten sivujen kera.
Monitor ei ole aktiivinen suojauskeino — se ei estä hyökkäyksiä itse. Sen tehtävä on koota tiedot jo toimivista työkaluista ja esittää ne selkeässä muodossa.
Monitori toimii vain paikallisesti — se on asennettava samalle palvelimelle, jota se valvoo. SSH:ta tai etä-API:a ei käytetä.
Kaikki komennot (fail2ban-client, ufw status, ipset list jne.) paneeli suorittaa web-palvelimen käyttäjänä (yleensä www-data, hosting-paneeleissa sivuston tili) suppealla oikeusjoukolla sudo — vain tietyille työkaluille, ilman yleistä root-oikeutta. Tulokset jäsennetään ja näytetään selaimessa.
Arvosana alkaa maksimista ja laskee jokaisesta havaitusta ongelmasta:
PermitRootLogin yes) — −20Tulos: 80+ = Suojattu, 60–79 = Huomio, <60 = Uhattuna.
WebAuthn on salasanaton tunnistautumisstandardi laitteistoavaimella. Tukee YubiKeytä, Touch ID:tä, Face ID:tä, Windows Helloa ja Passkeytä.
Salasanalla kirjautumisen jälkeen järjestelmä pyytää vahvistusta rekisteröidyllä avaimella. Vaikka salasana vuotaisi, ilman fyysistä avainta tai biometriikkaa kirjautuminen ei onnistu.
Ota käyttöön avaamalla sivuvalikosta WebAuthn-avaimet ja napsauttamalla ”Rekisteröi avain”. Rekisteröi heti kaksi avainta: jos ainoa avain katoaa tai rikkoutuu, kirjautuminen paneeliin sillä ei ole mahdollista.
Paneeli voi lähettää tietoturvaraportin Telegramiin ja sähköpostiin (painikkeella ja aikataulun mukaan). Määritetään kohdassa ”Asetukset”.
Telegram. Tarvitset botin tunnisteen ja chat id:n:
@BotFather → /newbot → saat tunnisteen muotoa 123456:ABC....@userinfobot tai avaa https://api.telegram.org/bot<TOKEN>/getUpdates ja etsi "chat":{"id":...}.Sähköposti. Kaksi tapaa valittavana kohdassa ”Asetukset” → Sähköposti:
re_...) ja vahvistettu lähettäjän verkkotunnus.Raportin tila: ”HUOMIO” tai ”OK”. Otsikoksi tulee ”HUOMIO” vain todellisen ongelman tai odottavan toimenpiteen yhteydessä: ClamAV löysi uhan, AIDE havaitsi tiedostomuutoksia, kriittisiä Falco-tapahtumia (Emergency/Alert/Critical viimeisen 24 h aikana), Monitissa kaatunut palvelu, uudelleenkäynnistys tarvitaan, SSL vanhenee (≤14 päivää) tai tietoturvapäivitykset odottavat. Taustakohina — bottien SSH-arvausyritykset, fail2banin estämät IP-osoitteet, Suricatan hälytykset, Lynisin varoitukset ja jo torjutut ModSecurity-pyynnöt — ei nosta tilaa, joten tällaiset luvut raportissa eivät itsessään tarkoita ”HUOMIO”-tilaa.
Yksityiskohtaiset valvontamoduulit (Lynis, UFW, ModSecurity, hyökkäyskartta, AIDE, ClamAV ym.) avautuvat, kun sinulla on voimassa oleva lisenssi. Ilman sitä koontinäyttö, asetukset ja tili toimivat, mutta moduulit näyttävät kortin ”Lisenssi vaaditaan”.
Oston jälkeen tililtä löytyy aktivointikoodi muodossa ARCIVEO-XXXX-XXXX-XXXX-XXXX. Se on ”aktivoitava” paneelisi verkkotunnukselle — tämä muuntaa koodin allekirjoitetuksi lisenssitiedostoksi (lohko [license]), jonka liität paneeliin.
Näin aktivoit (3 vaihetta):
my.arciveo.com → osio ”Lisenssit” / ”Lisenssin aktivointi” — kopioi koodi ARCIVEO-….monitor.example.com). Napsauta aktivoi — järjestelmä luo tähän verkkotunnukseen sidotun lisenssitiedoston ja näyttää sen kentässä, jossa on painike ”Kopioi”.Paneeli tarkistaa avaimen kryptografisesti: allekirjoituksen, verkkotunnussidoksen ja voimassaoloajan.
APP_URL tiedostosta config.php ja syötä vain isäntänimi — ilman https:// ja ilman www-etuliitettä. Aktivointi on kertaluonteinen: koodi muuttuu syötetyn verkkotunnuksen lisenssiksi eikä aktivoidu uudelleen — jos verkkotunnuksessa on virhe, avain ei sovi paneeliisi ja koodi on käytetty. Syötä siis verkkotunnus huolellisesti.
Kaikki paneelin perusasetukset on määritetty yhdessä config.php-tiedostossa juuressa (public/-kansion vieressä) tavallisilla define()-vakioilla. Tiedosto luodaan asennuksen yhteydessä; sitä tarvitsee harvoin muokata käsin — lähinnä verkkotunnusta vaihdettaessa, siirrettäessä tai toiseen tietokantaan kytkettäessä. Jokaisen muokkauksen jälkeen käynnistä PHP-FPM uudelleen (muuten muutokset eivät tule voimaan OPcachen takia).
Korvaa korostetut kohdat omilla arvoillasi; jätä muut ennalleen:
Tietokanta. MySQL/MariaDB-yhteyden tiedot:
DB_HOST — tietokantapalvelimen isäntä, lähes aina localhost;DB_NAME — paneelin tietokannan nimi;DB_USER — tietokannan käyttäjä (pääsy vain omaan tietokantaan);DB_PASS — tämän käyttäjän salasana;DB_CHARSET — yhteyden merkistö, jätä utf8mb4.Sovellus.
APP_URL — paneelin täysi osoite (esim. https://monitor.example.com). Sen on vastattava verkkotunnusta, jolle lisenssi on aktivoitu — muuten avain hylätään (ks. kohta ”Lisenssi”);TIMEZONE — PHP:n aikavyöhyke: vaikuttaa vain siihen, miten paneeli näyttää päivämäärät ja kellonajat. Cron-tehtävien ajoitukseen se ei vaikuta — siinä käytetään järjestelmän vyöhykettä (ks. ”Kaikki cron-tehtävät”).Istunnon kesto. SESSION_LIFETIME — istunnon joutenoloaika sekunteina (liukuva: päivittyy toiminnan yhteydessä). Oletusarvo 28800 = 8 tuntia; tämän joutenoloajan jälkeen paneeli pyytää kirjautumaan uudelleen. Esimerkiksi 3600 = 1 tunti, 86400 = vuorokausi.
Virheiden kirjaus. Virheitä ei koskaan näytetä kävijöille, vaan ne kirjoitetaan tiedostoon logs/php_errors.log — ne näkyvät sivulla ”Sovelluksen lokit”. Näitä rivejä (display_errors=0, log_errors=1, error_log-polku) ei yleensä tarvitse muuttaa — asetukset on määritetty suoraan tiedostossa eivätkä ne riipu php.ini-tiedostosta.
public/-kansion vieressä), ja tämän paneelin verkkojuuri (DocumentRoot) on nimenomaan paneelin juuri, ei public/. Itse tiedosto ei ”vuoda”: juuren .htaccess-tiedostossa on sille nimenomainen esto (Require all denied) — palvelin palauttaa 403. Ilman tätä sääntöäkään lähdekoodi ei vuotaisi: tämä on PHP — palvelin suorittaa sen eikä palauta tekstinä. Varmuuden vuoksi: älä julkaise sitä julkisissa repositorioissa äläkä lähetä sitä tukeen todellinen salasana mukana. Tiedoston oikeudet — 640.
UFW (Uncomplicated Firewall) on yksinkertainen käyttöliittymä nftables/iptables-työkaluihin. Se sulkee kaikki saapuvat portit paitsi nimenomaisesti sallitut. Sivu ”UFW-palomuuri” näyttää tilan ja säännöt.
ufw allow OpenSSH) ehdottomasti ennen ufw enable -komentoa, muuten menetät pääsyn palvelimelle.
deny-säännöllä suljettua porttia ei lasketa ulkoa saavutettavaksi.
Skipping adding existing rule ei ole virhe. UFW ilmoittaa näin, että täsmälleen sama sääntö on jo olemassa eikä sitä lisätä uudelleen. Kun automaattiasetus ajetaan uudelleen (se on idempotentti), tämä on normaali viesti — mihinkään ei tarvitse reagoida.
Estää IP-osoitteen automaattisesti, kun epäonnistuneiden kirjautumisyritysten määrä ylittyy. Analysoi SSH:n, nginxin, Apachen ja muiden palveluiden lokit.
Perusasennus on yllä. Tässä on toimiva kokoonpano, joka tuottaa kymmeniä aktiivisia jaileja ja tuhansia estoja: yleisasetukset, keskeiset jailit ja haitallisten IP-osoitteiden automaattinen esto ipsum-listasta.
Tiedosto /etc/fail2ban/jail.local — yleisasetukset ja tärkeimmät jailit:
ignoreip-kohtaan ehdottomasti oma IP-osoitteesi ja luotetut verkot, muuten voit estää itsesi. Muokkausten jälkeen: sudo fail2ban-client reload.
ipsum-estolistan automaattilataus root-cronissa (sudo crontab -e): level 1 (yli 100 000 IP-osoitetta) ladataan ipsum-joukkoon, joka torjutaan palomuurissa (lisätietoja osiossa ”IPset-estolista”):
ipsum — juuri sitä dashboard lukee (kortti ”IPset ipsum”). Tasot: levels/1.txt — maksimikattavuus, levels/3.txt — tarkempi (3+ lähdettä).
Miksi ”Tietoturvamonitori” on jaettu kahteen vyöhykkeeseen. Suojaus toimii kahdella tasolla, eikä dashboard sekoita niitä keskenään:
sshd, apache-*, nginx-* jne.) ja pahantahtoiset rikoksenuusijat (jail recidive — ne, jotka on jo estetty useita kertoja). Nämä ovat IP-osoitteita, jotka oikeasti yrittivät murtautua sisään — ne näkyvät hyökkäyskartalla ja ”Aikajanalla”.ipset ipsum, joka torjutaan palomuurissa DROP-säännöllä. Nämä osoitteet eivät useimmiten koskeneet palvelimeesi lainkaan — ne katkaistaan ennalta; laskuri ”IPset ipsum” näyttää, kuinka monta on torjuttu ennakoivasti.Ero on yksinkertainen: reaktiivinen — ”nämä hyökkäsivät ja saivat eston”, ennakoiva — ”nämä estettiin jo ennen yritystä”. Aiemmin recidiveen ajettiin keinotekoisesti ipsumin list-3 (tästä vanha jako ”listamaiset recidive”); nyt recidive sisältää vain todelliset rikoksenuusijat, ja ennakoiva esto on kokonaan palomuurissa.
ipsum on julkinen luettelo haitallisista IP-osoitteista, joka päivittyy päivittäin. Monitor näyttää ladattujen osoitteiden määrän hallintapaneelissa ja hyökkäyskartalla sekä huomioi sen turvallisuusarviossa (−10, jos joukkoa ei ole ladattu).
Minimaalinen vaihtoehto ilman fail2bania — erillinen ipsum-joukko ja estot iptablesin kautta:
@reboot-ajastukseen. Samalla komento create … -exist asettaa rajan maxelem 300000 (oletus 65536 — level 1 ei mahdu, tulee ”Hash is full”):
ipsum-joukkoon ja, jos palomuuria hallitsee asennusohjelma (tuore VPS — profiilit ”Täysi”/”Kevyt”), liittää joukon UFW:hen DROP-säännöllä — näiden IP-osoitteiden liikenne estetään todella. Sääntö on jälkeen ESTABLISHED,RELATED, joten nykyiset yhteydet (ml. oma SSH:si) eivät katkea — vain uudet yhteydet luettelosta estetään. Joukko palautetaan palvelun ipsum-load.service latauksen yhteydessä ennen palomuuria (muuten UFW ei nousisi), ja se päivitetään cronilla klo 04:00. Jo valmiiksi määritellyllä palvelimella (paneeli, oma palomuuri) asennusohjelma ei koske palomuuriin — siellä ipsum jää luetteloksi hallintapaneelia ja hyökkäyskarttaa varten, ja DROP-sääntö lisätään halutessa käsin (minimaalinen vaihtoehto iptables … --match-set ipsum … -j DROP — yllä). Automaattiasennuksessa ei tarvitse tehdä mitään käsin.
Nykyaikainen korvaaja Fail2banille kollektiivisella threat intelligence -tiedolla: yhteisön estot sekä omat säännöt. Vaatii erillisen bouncerin estojen soveltamiseksi palomuuriin.
systemctl is-active crowdsec). Käynnistys: sudo systemctl enable --now crowdsec; kaatumisen sattuessa katso sudo journalctl -u crowdsec -n 30. Sama sääntö koskee mitä tahansa palvelua tilassa ”Ei käynnissä” (Suricata, Falco, Monit, MySQL).
stream halted / estoja ei sovelleta. Kyseessä on orpo api-avain: bouncer poistettiin listalta cscli bouncers list, mutta sen vanha avain jäi tiedostoon /etc/crowdsec/bouncers/*.yaml. Rekisteröi bouncer uudelleen ja kirjaa tuore avain:
AIDE (Advanced Intrusion Detection Environment) ottaa tilannekuvan tiedostojärjestelmästä ja ilmoittaa jokaisessa tarkistuksessa muutoksista hakemistoissa /etc, /bin, /usr. Asennuksen jälkeen tietokanta on pakko alustaa (aideinit).
aideinit aikana pääte seisoo 5–15 minuuttia rivillä Running aide --init... — se on normaalia (koko tiedostojärjestelmän tiivistys, kuormittaa levyä). Älä keskeytä Ctrl+C:llä. Jos prosessi näyttää ”jumittuneen”, mutta ei kirjoita mitään — se saattaa odottaa vastausta piilotettuun kysymykseen Overwrite existing aide.db.new [Yn]? (paina Y). Tarkista aktiivisuus toisesta istunnosta: pgrep -af aide.
aideinit: ”21_aide_spamassassin … printf: invalid number” (return code 20) — tunnettu AIDE:n konfiguraatiokatkelman vika Ubuntu 22.04:ssä. Tietokantaa ei luoda. Siirrä rikkinäinen katkelma pois ja yritä uudelleen:
aideinit ei ole ajettu, tai (Ubuntu 24.04) hakemisto /var/lib/aide on luotu tilassa 700 eikä ole käyttäjän www-data saatavilla — korjautuu komennolla sudo chmod 755 /var/lib/aide (katso lohko yllä). ”Ei tarkistuksia” = tietokanta on olemassa, mutta tarkistusta ei ole vielä suoritettu — tämä ei ole virhe. Monitor lukee tulokset tiedostosta /var/log/aide/aide.log.
/etc/cron.daily/aide ei uusissa Ubuntu/Debian-versioissa välttämättä kirjoita tiedostoa /var/log/aide/aide.log oikeassa muodossa (eikä aide.wrapper ole niissä enää). Luotettavampaa on lisätä oma cron nimenomaisella --config-valinnalla — se kirjoittaa lokin rootina tilassa 644, ja monitor lukee sen ilman lisäryhmiä:
chmod 755 /var/lib/aide ja tarkistuscron klo 02:00 — mitään ei tarvitse tehdä käsin.
sudo aideinit && sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db.
Virustorjuntaskanneri Linuxille. Erityisen hyödyllinen /var/www-hakemiston tarkistamiseen PHP-shellien ja haitallisen koodin varalta.
enable --now jälkeen? Kolme tyypillistä syytä:
1. Asetustiedostoon on jäänyt rivi Example — clamd kieltäytyy käynnistymästä niin kauan kuin se on siellä:
2. Tunnistetietokantaa ei ole ladattu — clamd ei käynnisty ilman sitä:
3. Se vain latautuu — clamd lataa ~8 milj. tunnistetta muistiin 30–60 sekunnissa. Odota ja tarkista: systemctl is-active clamav-daemon (tila activating → lataus vielä käynnissä).
sudo journalctl -u clamav-daemon -n 30 --no-pager.
clamd pitää tunnisteet vain muistissa, se ei itse skannaa mitään aikataulun mukaan. Paneeli näyttää ajastetun skannauksen tulokset, joten tarvitaan cron, joka skannaa ja kirjoittaa lokia. Automaattiasennus asentaa kääreen /usr/local/bin/clamav-scan.sh ja cronin klo 01:30 — ensimmäisen ajon jälkeen kentät ”Tiedostoja tarkistettu” ja ”Viimeisin skannaus” täyttyvät. Käynnistä heti aikataulua odottamatta: sudo /usr/local/bin/clamav-scan.sh.
Linux Malware Detect (LMD) — haittaohjelmien skanneri verkkouhkiin: PHP-shellit, verkkotakaovet, latausohjelmat. Käyttää ClamAV-moottoria ja täydentää sitä omilla tunnisteillaan.
maldet --report.
update-rc.d: error: unable to read /etc/init.d/maldet — se on vaaraton. maldet ei käytä init.d:tä, tunnisteiden päivitys ja skannaukset käynnistyvät kautta /etc/cron.daily/maldet. Jos alempana näkyy installation completed — kaikki asentui.
apt, vaan hakemistoon /usr/local/maldetect, ja kun open_basedir on käytössä, sen olemassaolo tarkistetaan shellin kautta — katso kohta ”Sivu on tyhjä, vaikka palvelimella on tietoja”.
Verkkotason tunkeutumisen havaitsemisjärjestelmä: analysoi liikennettä pakettitasolla ja tuntee tuhansia hyökkäysten allekirjoituksia. Täydentää ModSecurityä (joka toimii HTTP-tasolla, Suricata TCP/IP-tasolla).
/var/log/suricata/eve.json rootina, ja hakemistolla on oikeudet 750, joten verkkopalvelin (www-data) ei voi lukea sitä. Avaa hakemisto läpikulkua varten — sisällä olevat tiedostot pysyvät suojattuina:
Sieppaa järjestelmäkutsut eBPF/kernel-moduulin kautta ja havaitsee poikkeamat reaaliajassa: shell nginxistä, /etc/passwd-tiedoston lukeminen web-prosessilla, kirjoitus /bin-hakemistoon jne.
journalctl -u falco (ilman sudoa — systemd-journal-ryhmän kautta). Varmista, että www-data kuuluu tähän ryhmään — ks. ”sudo-asetukset” (kohta 2) manuaalisen asennuksen sivulla.
/etc/passwd-tiedoston lukeminen, kirjoitus järjestelmähakemistoihin). Nolla kriittistä vuorokaudessa rauhallisella palvelimella on terve tila.
journalctl vaatii oikeudet lokiin; jotta paneeli näkee tapahtumat vakaasti, automaattiasennus ottaa Falcossa käyttöön file_output → /var/log/falco/falco.log ja asettaa palvelulle UMask=0022 (web-palvelin lukee lokin). Uudessa asennuksessa tätä ei tarvitse määrittää käsin.
ModSecurity — verkkopalomuuri (WAF) Apachelle tai Nginxille. Estää sovellustason hyökkäykset: SQL-injektiot, XSS, polunohituksen, skannerit.
IncludeOptional /etc/modsecurity/*.conf, mutta paketti asentaa vain tiedoston modsecurity.conf-recommended — se ei osu maskiin *.conf. Jos sitä ei kopioida tiedostoon modsecurity.conf, SecRuleEngine pysyy tilassa Off: moduuli on ladattu, CRS-säännöt on ladattu, mutta liikennettä ei tarkisteta eikä auditointilokia luoda. Välitila DetectionOnly vain kirjaa tapahtumat lokiin estämättä pyyntöjä — dashboard näyttää sen keltaisena.
Dashboardin pääsy auditointilokiin. Loki /var/log/apache2/modsec_audit.log kuuluu rootille (oikeudet 640), verkkokäyttäjä ei voi lukea sitä. Dashboard hakee tiedot kääreen kautta — luo se:
SecRuleEngine-direktiivin: sisennetyt rivit ovat lohkojen <LocationMatch>/<Directory> sisällä (esimerkiksi WAF:n poiskytkentä phpMyAdminia varten) eivätkä määritä globaalia tilaa.www-data, HestiaCP:ssä sivuston pool toimii sivuston omistajan alla (esimerkiksi admin) — tarkista grep -E '^user' /etc/php/*/fpm/pool.d/monitor.example.com.conf.X-Forwarded-For. Tilastoihin päätyvät vain transaktiot, joissa sääntö laukesi: direktiivi SecAuditLogRelevantStatus kirjaa auditointilokiin kaikki 4xx/5xx-vastaukset, joten sinne päätyvät myös tavalliset 403/500 — dashboard ei laske niitä WAF-tapahtumiksi.---RULES--- tarvitaan osiossa ”Kaikki aktiiviset säännöt” — dashboard näyttää paitsi lauenneet, myös kaikki ladatut CRS-säännöt + mukautetut. Kolme polkua silmukassa for f in … ovat tyypillisiä paikkoja CRS-säännöille ja paikallisille lisäyksille; jos sinulla on toinen sijoittelu (paketti asentaa tiedostot omaan hakemistoonsa tai mukautetut säännöt eivät ole tiedostossa /etc/modsecurity/custom-rules.conf), etsi todelliset polut komennolla sudo grep -rl 'IncludeOptional\|^Include ' /etc/apache2/mods-enabled/security2.conf /etc/apache2/conf-enabled/*.conf 2>/dev/null ja lisää ne luetteloon. Jos kääre on vanha (ilman tätä osiota) — osio näyttää vain varoituksen ”ei saatavilla”, sivun muu osa toimii kuten ennenkin.
Auditd (Linux Audit Daemon) tallentaa järjestelmäkutsut ytimen tasolla: sisään- ja uloskirjautumiset, sudo-komennot, epäonnistuneet todennusyritykset ja tiedostomuutokset. Monitor näyttää tämän päivän kirjautumiset, epäonnistuneet yritykset ja sudo-komennot.
ausearch-komennolla (/usr/sbin/ausearch) ja tarvittaessa tiedostosta /var/log/audit/audit.log tail-komennolla. Molempien on oltava sudoers-tiedostossa.
Valvoo palveluita (nginx, php-fpm, mysql jne.) ja käynnistää ne uudelleen kaatuessaan. Voi lähettää hälytyksiä sähköpostiin.
monit status. Tiedostossa /etc/monit/monitrc on oltava käytössä HTTP-liittymä (lohko set httpd, jossa allow localhost), muuten monit status palauttaa virheen.
monitrc rivi set httpd on kommentoitu (oletuksena se on muodossa # set httpd port 2812 …). Poista lohkon kommentointi ja salli localhost. (2) Pelkkä käytössä oleva httpd ei valvo mitään — Monit laskee vain sen, mikä on määritetty check-lohkoilla; ilman niitä luettelo on tyhjä, vaikka liittymä toimisi. Minimaalinen toimiva konfiguraatio:
conf.d-tiedoston, jossa httpd on portissa 2812 ja tarkistukset määritetty — uudessa asennuksessa ei tarvitse säätää käsin.
PSAD analysoi iptablesin lokia ja havaitsee porttiskannaukset ja verkkohyökkäykset antaen jokaiselle lähteelle uhkatason (1–5). Täydentää fail2bania ja Suricataa.
psad --Status (tarvitaan sudoers-tiedostossa). Ilman iptablesin lokitusta sivu on tyhjä — se on normaalia, kunnes skannauksia on tapahtunut.
Mandatory Access Control rajoittaa, mihin tiedostoihin ja resursseihin ohjelma pääsee, vaikka se olisi murrettu. Ubuntussa/Debianissa käytetään oletuksena AppArmoria (yleensä jo asennettu ja käytössä).
aa-status (tarvitaan sudoers-tiedostossa). Näyttää enforce/complain-tilassa olevien profiilien määrän ja ilman profiilia olevat prosessit.
”Profiileja ladattu” on enemmän kuin enforce + complain — se on normaalia. AppArmor 4.x:ssä (Ubuntu 24.04 ja uudemmat) tuli tila unconfined: profiili on ladattu ytimeen, mutta se ei rajoita mitään. Ubuntu merkitsee näin kymmeniä profiileja ohjelmille, jotka käyttävät user namespaces -ominaisuutta (selaimet, torrent-asiakkaat ja vastaavat). Kun tällaisia profiileja on, kortti ”Profiileja ladattu” muuttuu keltaiseksi ja näyttää niiden määrän — esimerkiksi unconfined: 90, kun ladattuja on 120 ja enforce-tilassa 26. Todellisen suojan antavat vain enforce-tilan profiilit; Ubuntu 22.04:ssä (AppArmor 3.x) tätä tilaa ei ole ja luvut täsmäävät aina.
unconfined-tilaan jättämiä profiileja kannattaa siirtää enforce-tilaan vain harkiten: ne eivät ole poissa käytöstä vahingossa, vaan siksi että muuten ohjelmien oma toiminta rikkoutuu. complain-tilan profiilit ovat toinen asia: niiden säännöt on jo kirjoitettu, mutta niitä ei vain sovelleta.
debsums tarkistaa, että asennettujen pakettien tiedostot vastaavat repositoryn tarkistussummia — paljastaa vaihdetut järjestelmäbinaarit (täydentää AIDE:a). Täysi tarkistus kestää 1–2 minuuttia, joten se ajetaan cronilla, ja paneeli lukee tuloksen tiedostosta data/debsums/debsums.log ja luokittelee sen itse (tärkeitä ovat vain binaarit ja kirjastot).
Tehtävä lisätään root-croniin (sudo crontab -e). Valmis kääre debsums-scan.sh sijoitetaan hakemistoon /usr/local/bin/ (chmod +x; ks. cron-tehtävien yhteenveto) ja kirjoittaa raportin itse paneelin hakemistoon data/debsums/.
Kääre debsums-scan.sh löytää paneelin data/-hakemiston itse — polkua ei tarvitse määrittää.
/etc/ (konfiguraatiot) ja /usr/share/ (resurssit) ovat palvelimella yleensä normaaleja — paneeli merkitsee ne omalla värillään. Hälyttäviä ovat binaarien ja kirjastojen muutokset (/bin, /sbin, /usr/lib jne.) — kortti ”Binaarit / kirjastot” näyttää juuri ne.
Lynis käynnistetään manuaalisesti tai cronilla. Raportti tulee tallentaa projektin kansioon data/lynis/ — monitori lukee tiedoston lynis-report.dat.
lynis-scan.sh-skriptin taustalla suoraan paneelista (odottamatta cronia): näyttää ”Skannataan…” ja päivittää raportin itse valmistuttuaan. Tätä varten web-käyttäjä tarvitsee sudoers-rivin skriptin ajamiseen — asennusohjelma lisää sen automaattisesti tiedostoon /etc/sudoers.d/monitor. Jos paneeli on asennettu manuaalisesti tai aiemmin, lisää rivi samalla käyttäjällä, joka on jo mainittu tiedostossa:
Logwatchin tulee tallentaa päivittäiset raportit projektin kansioon data/logwatch/ muodossa .txt. Monitor näyttää viimeisimmän raportin ja arkiston.
Verkkomonitori ei vaadi asennusta — se on sisäänrakennettu paneelin sivu. Se näyttää palvelimen verkkotilan paikallisista lähteistä:
/proc/net/dev;ip;ss;journalctl -k.Kolme ensimmäistä lähdettä toimivat ilman sudoa, joten liitännät, liikenne, yhteydet ja portit näkyvät heti. Lohko ”Ytimen tapahtumat” käyttää komentoa journalctl -k — se luetaan ryhmän systemd-journal kautta (”sudon määritys”, kohta 2), sudoa ei tarvita. Tarkista, että kaikki on verkkokäyttäjän saatavilla:
UFW BLOCK -merkinnät eivät päädy tänne — ne ovat sivuilla ”UFW-palomuuri” ja ”Hyökkäyskartta”. Tyhjä lohko vihreällä merkillä = vuorokauden aikana ei ollut verkkohäiriöitä.
Sisäänrakennettu sivu näyttää kolme asiaa:
df); mittari muuttuu punaiseksi, kun ≥90 %;lsblk), vain todelliset (loop/snap piilotettu);smartctl).Tila ja laiteluettelo toimivat heti ilman määrityksiä. SMART vaatii paketin smartmontools. Web-prosessilla ei ole suoraa pääsyä levylaitteisiin, joten SMART luetaan cronilla tiedostoon data/disk/smart.txt, ja paneeli lukee sen.
Ajastus tehdään root-croniin (sudo crontab -e). Valmis kääre smart-scan.sh sijoitetaan hakemistoon /usr/local/bin/ (chmod +x; ks. cron-tehtävien yhteenveto) ja kirjoittaa itse paneelin hakemistoon data/disk/.
Kääre smart-scan.sh löytää itse paneelin data/-hakemiston — polkua ei tarvitse määrittää. Sisäisesti lsblk -e7,11 jättää pois loop/cdrom.
Sivu näyttää palvelimen kuormitushistorian viimeisten 24 tunnin ajalta — Load Average, CPU:n käyttöasteen ja I/O-odotuksen, RAM/Swap, verkkoliikenteen (vastaanotto/lähetys), levyn I/O (luku/kirjoitus), levyn ja inodejen täyttöasteen, avoimet tiedostokahvat ja MySQL-yhteydet sekä nykyisen TCP-yhteyksien ja prosessien määrän.
Tiedot kerää cron/collect_metrics.php — se kirjoittaa 5 minuutin välein yhden ”raa'an” laskurien tilannekuvan (/proc/loadavg, /proc/meminfo, /proc/stat, /proc/net/dev, /proc/diskstats, df/df -i, /proc/sys/fs/file-nr, SHOW GLOBAL STATUS LIKE 'Threads_connected') tietokantatauluun system_metrics; prosentit ja nopeudet sivu laskee itse peräkkäisten tilannekuvien erotuksesta (levyn/inodejen/kahvojen täyttöaste ja MySQL-yhteydet ovat hetkellisiä arvoja, ilman uudelleenlaskentaa). Sudoa ei tarvita — lähteet luetaan ilman root-oikeuksia. Yli 24 tuntia vanhat pisteet poistetaan automaattisesti jokaisen kirjoituksen yhteydessä.
Kääre collect-metrics-all.sh (ks. cron-tehtävien yhteenveto) löytää itse kaikki palvelimelle asennetut paneelin instanssit ja käynnistää kunkin cron/collect_metrics.php:n sivuston omistajan nimissä.
Kuormitushälytykset (kohta ”Asetukset” → ”Kuormitushälytykset”) — kun CPU:n/RAM:n/levyn/inodejen kynnysarvo ylittyy, paneeli lähettää ilmoituksen Telegramiin/sähköpostiin (samat kanavat kuin päivittäisessä raportissa — niitä ei tarvitse erikseen ottaa käyttöön hälytyksiä varten) ja vielä yhden, kun metriikka palaa normaaliksi. Kynnyksen ollessa ylitettynä ilmoituksia ei toisteta: seuraava ilmoitus tulee vasta syklin ”palautui → ylittyi uudelleen” jälkeen.
collect_metrics.php jokaisella ajolla (viiden minuutin välein) — erillistä cronia ei tarvita. Tila ”jo ilmoitettu / ei vielä” säilytetään tiedostossa data/alerts_state.json, kynnysarvot paneelin asetuksissa.
”Hyökkäyskartta”-sivu tunnistaa maan IP-osoitteesta komennolla geoiplookup. Ilman GeoIP-pakettia maita ei tunnisteta eivätkä pisteet ilmesty kartalle:
/usr/share/GeoIP/GeoIP.dat voivat lukea kaikki, ja tulokset tallennetaan välimuistiin tiedostoon tmp/geoip_cache.json. Itse kartta (Leaflet + OpenStreetMap-ruudut) ladataan selaimessa — internet tarvitaan tietokoneella, jossa dashboard on avattuna.
Kaksi sisäänrakennettua dashboard-korttia, jotka eivät näytä työkalun ”päällä/pois” -tilaa vaan palvelimen todellista suojaustasoa. Eivät vaadi asennusta, luetaan paikallisesti ilman sudoa.
Ulkoinen näkyvyys — kuinka moni palvelu kuuntelee kaikkia rajapintoja (0.0.0.0/[::]) ja on saavutettavissa ulkoa. Korostaa punaisella, jos ulos näkyvät tietokannat tai välimuisti (MySQL, PostgreSQL, Redis, MongoDB, Memcached, Elasticsearch) — se on suora aukko (−10 turvallisuusarvioon). Lähde: ss -tuln.
127.0.0.1 (bind-address MySQL:n/PostgreSQL:n konfiguraatiossa, bind 127.0.0.1 Redisissä) tai sulje portti UFW:ssä.
127.0.0.1 (loopback), näkyy vain itse palvelimelle — sinne ei pääse ulkoa, vaikka portti olisi ”avoin”. Siksi loopbackiin sidottu Postfix portissa 25 on turvallinen: automaattiasetus asettaa inet_interfaces = loopback-only (sekä neutraalin smtpd_banner — sulkee Lynisin huomautuksen MAIL-8818 versiotietojen paljastumisesta). ”Ulkoinen näkyvyys” -kortti laskee ulospäin vain sen, mikä kuuntelee osoitetta 0.0.0.0/[::]; loopback-palvelut eivät sinne kuulu.
/etc/postfix/main.cf aseta smtpd_banner = $myhostname ESMTP (ilman versiota ja käyttöjärjestelmää) sekä inet_interfaces = loopback-only, sitten sudo systemctl restart postfix.
Tietoturvapäivitykset — kuinka monta tietoturvakorjausta odottaa asennusta ja tarvitaanko ytimen päivityksen jälkeen uudelleenkäynnistys (−5 turvallisuusarvioon, jos korjauksia on). Lähde: /usr/lib/update-notifier/apt-check, tiedosto /var/run/reboot-required. Yksityiskohtainen luettelo — sivulla ”Tietoturvapäivitykset”.
update-notifier-common). Jos apt-check puuttuu — monitori laskee korjaukset komennolla apt-get -s upgrade.
Automaattiset tietoturvapäivitykset (unattended-upgrades) — sivulla ”Tietoturvapäivitykset” erillinen kortti näyttää, onko tietoturvakorjausten automaattinen asennus käytössä ja milloin se viimeksi ajettiin. Sudoa ei tarvita — tila luetaan komennolla apt-config dump.
Varmuuskopio on tärkein turva: tietojen menetys on pahempaa kuin mikään murto. Tarvitaan kaksi asiaa — palvelimen/sivustojen varmuuskopio ja erikseen hallintapaneelin tietokannan varmuuskopio (siellä ovat käyttäjät, WebAuthn-avaimet, asetukset ja lisenssi).
Vaihtoehto A — HestiaCP: käyttäjän Backup-välilehti → varmuuskopion luontipainike (tai ajastettuna palvelimen asetuksissa). Varmuuskopio sisältää sivustot ja niiden tietokannat.
Vaihtoehto B — käsin (cron): tietokannan dump + paneelin data/-hakemiston arkisto:
Päivitys uuteen versioon. Tee ensin varmuuskopio. Lataa sitten koodiedostot uudelleen ja säilytä omat tietosi:
public/, includes/, assets/, cron/, database/ sekä juuritason .htaccess (etuohjain — reititystä ei saa jättää vanhasta versiosta), manifest.json, sw.js;config.php (tietokannan tiedot), data/ (raportit), logs/, tmp/ (istunnot ja välimuisti).SSH_FX_PERMISSION_DENIED — Permission denied. Paneelin tiedostot kuuluvat www-data-käyttäjälle (näin ne asetettiin asennuksessa), kun taas SFTP-asiakas yhdistää omalla käyttäjätunnuksellasi, jolla ei ole kirjoitusoikeutta. Koko paneelin antaminen www-data-käyttäjälle ”jotta toimisi” on juuri se, mikä aiheuttaa tämän virheen; alla kolme tapaa, joista mikä tahansa ratkaisee ongelman.
data/ (raportit), tmp/ (istunnot ja välimuisti), logs/; ne jäävät www-data-käyttäjälle. Loput on koodia, ja verkkopalvelin tarvitsee siihen vain lukuoikeuden, jonka antaa www-data-ryhmä oikeuksilla 644. Sivuhyöty: PHP-haavoittuvuuden yhteydessä paneelin tiedostoja ei voi enää korvata. Hosting-paneeleissa (HestiaCP ja vastaavat) vaihtoehtoa A ei tarvita: siellä sivuston tiedostot kuuluvat jo tilille, jolla kirjaudut SFTP:llä, ja verkkopalvelin lukee ne ryhmän kautta.
chmod tiedostoihin nollaa ACL-maskin, ja pääsy katoaa huomaamatta. Jos ”oikeuksien siivoamisen” jälkeen lataus törmää taas Permission denied -virheeseen — toista molemmat setfacl-komennot.
2 vaihtoehdossa C on setgid: SFTP:llä ladatut tiedostot pysyvät www-data-ryhmässä, muuten paneeli ei pysty korvaamaan niitä. Vaihtoehdon C jälkeen yhdistä FileZillassa uudelleen — uusi ryhmä tulee voimaan vasta uudella kirjautumisella. Tarkistus: id deploy (ryhmän www-data pitää näkyä) ja ls -ld /path/to/monitor (drwxrwsr-x — kirjain s tarkoittaa, että setgid on asetettu).
Siirto toiselle palvelimelle:
config.php- ja data/-hakemistojen kanssa.mysqldump vanhalla → tuonti uudella; korjaa tietokannan tiedot config.php-tiedostoon.adm-ryhmän jäsenyys, cron-tehtävät.Jos et pääse kirjautumaan sisään — kaikki korjataan suoraan tietokannassa palvelimelta. Avaa tietokanta (nimi — tiedostosta config.php):
WebAuthn-avain kadonnut (toinen tekijä ei mene läpi) — poista 2FA käytöstä, kirjaudu salasanalla ja rekisteröi uusi avain:
Unohdit salasanan — aseta uusi tiiviste (luo se palvelimella ja lisää se tähän):
Estit itsesi IP-suodattimella — poista rajoitus käytöstä:
sudo mysql palvelimella tai phpMyAdmin / hosting-paneelin tietokantaosio. Palautuksen jälkeen ota WebAuthn ja IP-suodatin uudelleen käyttöön.
Tehtävien yhteenveto — palvelimen root-cronissa (lisätään komennolla sudo crontab -e). Jätä vain niiden työkalujen rivit, joita käytät; korjaa polut oman palvelimesi mukaisiksi.
sudo crontab -l ja että cron-palvelu on aktiivinen.
config.php-tiedoston TIMEZONE. Vakio TIMEZONE vaikuttaa vain PHP:hen (miten paneeli näyttää päivämäärät), mutta cron-demoni käynnistää tehtävät käyttöjärjestelmän kellonajan mukaan. Jos palvelimen vyöhyke ei täsmää omaasi, ”08:00”-raportti tulee väärään aikaan. Esimerkki: palvelin on eri vyöhykkeellä (Europe/Berlin, UTC+2) ja sinä Helsingissä (UTC+3) → ”08:00”-raportti tulee sinun aikaasi klo 09:00. Tarkista ja tarvittaessa aseta järjestelmän vyöhyke omaksesi:
0 8 * * * laukeaa klo 08:00 paikallista aikaa. Muuten cronia itseään pitäisi siirtää, mutta talvi-/kesäaikaan vaihdettaessa siirtymä menisi taas pieleen — siksi on oikeampaa asettaa järjestelmän vyöhyke.
crontab.txt) ovat kansiossa system/ projektin vieressä, ulkopuolella public_html. Tämä ei ole osa sivustoa — niitä ei tarvitse ladata web-juureen; sijoita ne palvelimelle järjestelmäpolkuihin (kuten crontabissa yllä):
lynis-scan.sh → /usr/local/bin/ (chmod +x) — ajaa lynis audit system, asettaa skannauksen ajaksi lipun /tmp/lynis-running ja kopioi lynis-report.dat paneelin kansioon data/lynis/;logwatch_daily.sh → /usr/local/bin/ (chmod +x) — muodostaa päivittäisen Logwatch-raportin (sshd, fail2ban, sudo, postfix) kansioon data/logwatch/;smart-scan.sh → /usr/local/bin/ (chmod +x) — tallentaa levyjen tilan (smartctl) kansioon data/disk/;debsums-scan.sh → /usr/local/bin/ (chmod +x) — tarkistaa pakettien eheyden (debsums) kansioon data/debsums/;clamav-scan.sh → /usr/local/bin/ (chmod +x) — ClamAV-virustorjuntaskannaus vaarallisilla poluilla (web, home, temp); kirjoittaa yhteenvedon tiedostoon /var/log/clamav/scan.log, josta ClamAV-sivu lukee sen (rivi 01:30 crontabissa yllä);load-ipsum.sh → /usr/local/bin/ (chmod +x) — päivittää ipset-joukon ipsum (level 1) paikallaan rikkomatta voimassa olevia palomuurisääntöjä (rivi 04:00 crontabissa yllä);daily-report-all.sh → /usr/local/bin/ (chmod +x) — ajaa paneelin raportin cron/daily_report.php (rivi 08:00 crontabissa yllä);daily_report.php — sisältyy jo paneeliin (cron/daily_report.php), ajetaan skriptin daily-report-all.sh kautta, sitä ei tarvitse asentaa erikseen;collect-metrics-all.sh → /usr/local/bin/ (chmod +x) — ajaa paneelin skriptin cron/collect_metrics.php (”Suorituskyky”-sivu, rivi */5 crontabissa yllä); collect_metrics.php sisältyy jo paneeliin, sitä ei tarvitse asentaa erikseen;crontab.txt (system/cron/) — tehtävämalli; lisää tarvittavat rivit komennolla sudo crontab -e./usr/local/bin/. Suoraan FileZillasta sinne ei voi kirjoittaa — kansio kuuluu käyttäjälle root, ja SFTP-asiakas saa vastaukseksi SSH_FX_PERMISSION_DENIED. Järjestys on tämä: lataa tiedosto ensin kansioon /tmp (johon kaikki voivat kirjoittaa), siirrä se sitten paikalleen yhdellä komennolla:
/tmp palvelimen juuressa — ei /var/tmp eikä tmp/ itse paneelin sisällä (viimeksi mainittu kuuluu käyttäjälle www-data ja on suljettu käyttäjältäsi). FileZillan puussa /tmp on ylimmän tason haara, kansion var vieressä, ei sen sisällä.
/usr/local/bin/, loki — /var/log/arciveo-cron.log) — käsin ei tarvitse tehdä mitään.
/home/*/web/*/public_html ja /var/www/*, ja tallentavat raportit niiden kansioon data/. Jos paneeli on toisessa polussa — lisää se skriptien riville for app in …, muuten Lynis-/SMART-/debsums-/Logwatch-raportit eivät päädy paneeliin.
logs/cron.log luo ensimmäisenä root-cron — se kuuluu käyttäjälle root, eikä paneelin ”Cron-loki”-välilehti pysty lukemaan eikä tyhjentämään sitä. Luo tiedosto etukäteen web-käyttäjän nimissä (sivustokansion omistaja; HestiaCP:ssä tämä on tili, esim. admin) — silloin root-cron vain lisää loppuun muuttamatta omistajaa:
stat -c %U /path/to/monitor.
sudo crontab -e), muuten se suoritetaan kahdesti.
sudo crontab -komentoa (se olisi suora eskalointi root-oikeuksiin kenelle tahansa, joka pääsee paneelin istuntoon), vaan suppean skriptin kahdella komennolla (list/set), joka koskee vain omaa lohkoaan huoltokommenttien välissä. Asenna kerran:
www-data — tarkista, minkä käyttäjän alaisuudessa sivuston PHP-FPM-pooli toimii (ps -o user= -C php-fpm), ja korvaa se sudoers-riville.
public/crontab_monitor.php on ladattu FTP:llä/SFTP:llä eri järjestelmäkäyttäjän alaisuudessa (esimerkiksi root) kuin sivuston muut tiedostot, web-palvelin ei pysty lukemaan sitä. Vertaa omistajaa ja oikeuksia viereisen tiedoston kanssa ja korjaa ne vastaamaan:
Monitor tunnistaa työkalut dpkg-query-komennolla APT:n pakettitietokannasta. Jos työkalua ei ole asennettu apt-komennolla (käsin, snap-paketista tai lähdekoodista), dpkg ei näe sitä.
Virhe 500 — tarkista PHP:n, nginx:n ja itse monitorin lokit:
www-data, vaan käyttäjän tilillä (esimerkiksi admin — sivuston hakemiston omistaja). Kaikki sudo-säännöt ja ryhmäjäsenyydet (adm, systemd-journal) on määritettävä tälle käyttäjälle, muuten moduulit näyttävät ”Ei aktiivinen / 0”, vaikka palvelut ovat käynnissä. Selvitä PHP:n todellinen käyttäjä: ps -o user= -C php-fpm | sort -u tai sivuston hakemiston omistaja stat -c '%U' /path/to/monitor. Korvaa jatkossa kaikissa alla olevissa komennoissa www-data sillä. Automaattiasennus tunnistaa web-käyttäjän itse ja määrittää sudoersin sille.
Tiedot eivät näy — lähes aina kyse on määrittämättömistä sudo-oikeuksista. Tarkista tietty komento web-käyttäjän nimissä (korvaa www-data omallasi). Lippu -n = ilman salasanaa, kuten PHP:llä — jos komento pyytää salasanaa, sääntöä ei ole sudoersissa:
sudo aa-status näyttää päätteessä profiilit, mutta ”AppArmor”-sivu näyttää ”Ei aktiivinen”). Syy: web-käyttäjällä ei ole sudo-oikeutta tämän moduulin komentoon. Tarkista se yllä olevasta listasta: jos komento pyytää salasanaa — lisää puuttuva rivi tiedostoon /etc/sudoers.d/monitor (”Sudon määritys”). Yleiset ”uudet” komennot: /usr/sbin/aa-status (MAC), /usr/sbin/psad --Status (PSAD).
apache2ctl, ausearch, aa-status tai ss, tai web-käyttäjä ei ole ryhmissä adm/systemd-journal (sieltä luetaan fail2ban/auth/modsec-lokit ja journalctl — Falco ja ytimen tapahtumat).
Oire: palvelimella on tietoja (näkyvät shellissä), mutta sivu näyttää tekstin ”ei tietoja” tai virheellisen tilan — esimerkiksi AIDE ilmoittaa ”Ei alustettu”, vaikka tietokanta on luotu.
Syynä on open_basedir: monet paneelit ja webhotellit rajoittavat PHP-FPM-poolin domainin hakemistoon, joten PHP-funktiot file_exists(), file_get_contents() ja filemtime() estetään järjestelmäpoluissa (/var/lib/aide, /var/log, /proc…). Monitor kiertää tämän lukemalla tällaiset polut vakiona olevilla järjestelmäkomennoilla (cat, test, stat).
open_basedir. Oikea ratkaisu on lukeminen järjestelmäkomennoilla (jo tehty AIDE:lle ja Verkkomonitorille). Ei ole tarpeen laajentaa open_basedir-asetusta poluille /var, /proc, ja se on myös vähemmän turvallista.
Monitor tarkistaa varmenteet ottamalla yhteyden verkkotunnuksiin suoraan portin 443 kautta. Jos verkkotunnus ei ole tavoitettavissa itse palvelimelta tai portti on suljettu palomuurilla, tarkistus epäonnistuu.
/etc/nginx/sites-enabled/, /etc/nginx/conf.d/) ja Apachen (/etc/apache2/sites-enabled/) konfiguraatioista sekä nykyisen isännän kohteesta HTTP_HOST.
Monitor muodostaa yhteyden MySQL:ään config.php-tiedoston käyttäjällä, jolla on pääsy vain omaan tietokantaansa. MySQL näyttää information_schema-taulussa vain ne tietokannat, joihin on oikeudet — siksi muut eivät näy.
Jotta monitor näkisi kaikki tietokannat, myönnä tälle käyttäjälle vain lukuoikeus (kerran rootina; korvaa käyttäjänimi config.php-tiedostosta):
sudo mysql -komentoa: tietokantaluettelo haetaan sen omalla PDO-yhteydellä.
PostgreSQL vaatii postgres-käyttäjän tason oikeudet, joita panelin verkkokäyttäjällä ei ole. Laajan sudo psql-oikeuden avaaminen PHP:stä on turvatonta — sen sijaan paneli kutsuu kapeaa parametritonta kääreskriptiä, joka tulostaa vain version, yhteyksien määrän ja tietokantojen listan kokoineen. Luo se:
monitor-pgstat-rivi sudoers-tiedostosta (manuaalisen asennuksen vaihe 13) äläkä luo itse skriptiä: PostgreSQL-kortti jää vain passiiviseksi.
Panel näyttää, mitä tapahtuu; alla on kerrottu, mitä tehdä tavallisimmissa tilanteissa. Yleisperiaate: älä panikoi, vertaa laillisen toiminnan kanssa (omat toimesi, päivitykset, varmuuskopiot) ja reagoi vakavuuden mukaan.
ignoreip-listalla./etc-hakemiston ja /usr/share-hakemiston ulkopuolella) — mahdollinen väärennös. Tarkista paketti: debsums PACKAGE_NAME, ja jos epäilet, asenna se uudelleen (apt install --reinstall).127.0.0.1 tai sulje portti UFW:ssä. Tämä on todellinen aukko.certbot renew tai asetukset panelissa).sudo apt update && sudo apt upgrade; ytimen päivityksen jälkeen käynnistä palvelin uudelleen.