Palvelin asennetaan kerran, ja sen jälkeen se elää omillaan. Kuukautta myöhemmin osa paketeista odottaa päivitystä, varmenne on liukunut kolmen viikon päähän vanhenemisesta, jonkin ulkopuolisen asennuksen jäljiltä SSH-asetuksiin on ilmestynyt ylimääräinen rivi, ja jail, jonka pitäisi vahtia kirjautumisia, on pysähtynyt kenenkään huomaamatta. Mikään näistä ei huuda. Kaikki vain lakkaa hiljaa olemasta totta.
Alla kaksitoista asiaa, jotka kannattaa tarkistaa säännöllisesti, komentoineen. Kierros vie vartin. Järjestys kulkee siitä, mistä sisään tullaan, siihen, mikä hajoaa itsestään.
SSH: viisi riviä
Katsottava kohde ei ole tiedosto vaan voimassa oleva kokoonpano: se muodostuu tiedostosta /etc/ssh/sshd_config, koko hakemistosta sshd_config.d ja käännöksen oletusarvoista.
sudo sshd -T | grep -iE 'permitrootlogin|passwordauthentication|permitemptypasswords|maxauthtries|x11forwarding'
Haluamme nähdä: permitrootlogin no, passwordauthentication no, permitemptypasswords no, maxauthtries arvossa 3–4 ja x11forwarding no. Kolme ensimmäistä ovat ovi, kaksi viimeistä sen saranat — katto yhteyskohtaisille yrityksille ja grafiikan välitys, jolle palvelimella ei ole käyttöä.
Kaksi varausta, molemmat helppoja tapoja lukita itsensä ulos. Ensinnäkin: älä sulje salasanakirjautumista äläkä root-kirjautumista ennen kuin olet varmistanut, että avaimesi toimii — erillisessä istunnossa, nykyistä sulkematta. Jos luet tätä kirjautuneena rootina salasanalla, juuri nuo kaksi riviä sulkevat ulos sinut.
Toiseksi tiedostojen järjestys. OpenSSH ottaa ensimmäisen kohtaamansa arvon parametrille, ja hakemiston sshd_config.d tiedostot luetaan aakkosjärjestyksessä. Pilvikuvat jättävät sinne yleensä tiedoston 50-cloud-init.conf, ja se voittaa oman tiedostosi, jos nimesit sen vaikkapa muotoon 90-hardening.conf. Omat asetukset kuuluvat pienemmän numeron alle — 00- tai 10-. Ja tulos tarkistetaan komennolla sshd -T, ei tiedostoa lukemalla.
Palomuuri: yksi tarkistus
sudo ufw status verbose
Tässä kannattaa muistaa, että tuloste näyttää aikomuksia, ei tuloksia. Sääntö voi olla listassa sulkematta mitään: UFW itse on pois päältä, porttia palvelee jokin Dockerin julkaisema (se kirjoittaa omat sääntönsä iptablesiin UFW:n alapuolelle), tai liikenne saavuttaa palvelimen toista reittiä. Siksi kannattaa verrata sääntölistaa siihen, mikä todella kuuntelee ulospäin:
sudo ss -tulpn | grep -v '127.0.0.1\|::1'
fail2ban: kaksi tarkistusta
Ei riitä, että palvelu on käynnissä — tarvitaan myös toimiva jail SSH:ta varten.
sudo fail2ban-client status
sudo fail2ban-client status sshd
Yleisin harmi tässä on vaitelias jail. Debian 12:ssa ja uusissa Ubuntuissa tiedostoa /var/log/auth.log ei välttämättä ole lainkaan: rsyslogia ei ole asennettu ja merkinnät elävät vain journaldissa. Oletusarvoisella logpath-asetuksella varustettu jail käynnistyy silloin, ilmoittautuu aktiiviseksi eikä estä koskaan ketään. Hoito on osoittaa se systemd-lokiin:
printf '[sshd]\nenabled = true\nbackend = systemd\n' | sudo tee /etc/fail2ban/jail.d/sshd-systemd.local
sudo systemctl restart fail2ban
Merkki, josta tämän tunnistaa ilman asetusten penkomista: komennon fail2ban-client status sshd rivit ”Currently failed” ja ”Total failed” ovat nollassa, vaikka lokissa on selvästi epäonnistuneita kirjautumisia.
Päivitykset: kolme tarkistusta
Erikseen: montako pakettia odottaa kaikkiaan, montako niistä koskee tietoturvaa ja pyytääkö järjestelmä uudelleenkäynnistystä ytimen päivityksen jälkeen.
sudo apt update
apt list --upgradable 2>/dev/null | grep -c -- '-security'
ls /var/run/reboot-required 2>/dev/null && echo 'uudelleenkäynnistys tarpeen'
Kolmas tarkistus on, ovatko automaattiset tietoturvapäivitykset päällä, jotta kahdesta ensimmäisestä ei tule kuukausittaista rituaalia:
systemctl status unattended-upgrades --no-pager
cat /etc/apt/apt.conf.d/20auto-upgrades
Tiedostossa pitää olla ykkönen molemmilla riveillä. Jos paketti puuttuu: sudo apt install unattended-upgrades && sudo dpkg-reconfigure -plow unattended-upgrades.
Varmenteet: yksi tarkistus
Let's Encryptin varmenne elää yhdeksänkymmentä päivää, ja uusiminen toimii itsestään täsmälleen siihen päivään asti, jona se lakkaa toimimasta. Katsottava kohde ei ole rekisterinpitäjän paneeli vaan se, mitä palvelin oikeasti tarjoilee:
echo | openssl s_client -connect localhost:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddate
sudo certbot renew --dry-run
Ensimmäinen komento kertoo kyseiselle nimelle tarjoiltavan varmenteen päättymispäivän, toinen varmistaa uusimisen onnistuvan odottamatta todellista määräaikaa. Kannattaa käydä läpi kaikki nimet, joita palvelin palvelee, ei vain päädomainia: unohtuva on yleensä myöhemmin lisätty aliverkkotunnus.
Levy: yksi tarkistus
df -h
df -i
Kaksi komentoa, koska tila ja tiedostomerkinnät loppuvat toisistaan riippumatta. Useimmilla palvelimilla jälkimmäinen osuu kattoon ensin — miljoonat pikkutiedostot PHP-istunnoissa tai sovelluksen välimuistissa nostavat IUse%-arvon sataan, vaikka gigatavuja on vapaana. Molemmista tapauksista meillä on erillinen teksti.
Mikä tässä listassa mättää
Lista on oikea, mutta siinä on yksi ominaisuus: se vaatii, että joku muistaa sen. Vartti viikossa ei ole paljon, kunhan palvelimia on yksi ja kunhan on syy. Kahden rauhallisen kuukauden jälkeen kierros jää väliin, ja tiedon jailin pysähtymisestä saa jonkun toisen lokeista.
Siksi kokosimme juuri nämä kaksitoista tarkistusta erilliseen ilmaiseen paneeliin — Arcivéo FREE. Se asennetaan yhdellä komennolla, toimii omalla palvelimellasi, ei lähetä meille mitään eikä vaadi rekisteröitymistä. Kerääjä käynnistyy cronista viiden minuutin välein ja kirjoittaa saman paikalliseen tietokantaan: SSH-kirjautumiset ja torjutut yhteydet, UFW:n ja fail2banin tilan, odottavat tietoturvapäivitykset, varmenteiden määräajat, levytilan. Historia kattaa seitsemän päivää, käyttöliittymä on 34 kielellä. Hinta on nolla, myös työpalvelimella: lisenssi sallii paneelin asentamisen omiin koneisiin, yrityksen koneet mukaan lukien, eikä salli sen jälleenmyyntiä tai tarjoamista palveluna muiden palvelimille.
Ilmaisversion pino on vaatimaton: se asentaa ja ottaa käyttöön UFW:n ja fail2banin ja näyttää sen jälkeen tilan. ModSecurityä, Suricataa, AIDEa ja muita moduuleja siinä ei ole, ne kuuluvat maksulliseen. Mutta siihen, ettei viikoittaista kierrosta tarvitse kantaa päässään, se riittää. Miltä samat tiedot näyttävät täydessä paneelissa, esittävät alla olevat demosivut.