Server se podesi jednom, a dalje živi sam. Mesec dana kasnije deo paketa čeka na ažuriranje, sertifikat se približio na tri nedelje do isteka, posle instalacije nečega sa strane u SSH konfiguraciji se pojavio suvišan red, a jail koji treba da prati prijave zaustavio se i niko za to nije saznao. Ništa od toga ne viče. Sve prosto tiho prestaje da bude istina.
Ispod je dvanaest stvari koje vredi redovno proveravati, zajedno sa komandama. Obilazak traje petnaestak minuta. Redosled ide od onoga kroz šta se ulazi ka onome što se kvari samo.
SSH: pet redova
Gleda se ne fajl, nego konačna konfiguracija: ona se sastavlja od /etc/ssh/sshd_config, celog direktorijuma sshd_config.d i podrazumevanih vrednosti iz prevođenja.
sudo sshd -T | grep -iE 'permitrootlogin|passwordauthentication|permitemptypasswords|maxauthtries|x11forwarding'
Ono što želimo da vidimo: permitrootlogin no, passwordauthentication no, permitemptypasswords no, maxauthtries na 3–4 i x11forwarding no. Prva tri su vrata, poslednja dva njihove šarke — granica pokušaja po vezi i prosleđivanje grafike od kojeg server nema nikakve koristi.
Dve ograde, obe lak način da se zaključate napolju. Prvo: nemojte isključivati prijavu lozinkom i prijavu pod root-om pre nego što proverite da ključ radi — u zasebnoj sesiji, ne zatvarajući tekuću. Ako ovo čitate prijavljeni kao root lozinkom, upravo ta dva reda zaključaće napolju vas.
Drugo: redosled fajlova. OpenSSH uzima vrednost parametra na koju naiđe prvu, a fajlovi iz sshd_config.d čitaju se po azbučnom redu. Oblak-imidži tamo obično ostave 50-cloud-init.conf, i on će nadjačati vaš fajl ako ste ga nazvali nekako kao 90-hardening.conf. Sopstvena podešavanja idu pod manji broj — 00- ili 10-. A rezultat se proverava komandom sshd -T, ne čitanjem fajla.
Zaštitni zid: jedna provera
sudo ufw status verbose
Vredi zapamtiti da ovaj ispis pokazuje namere, a ne rezultat. Pravilo može stajati na spisku i ne zatvarati ništa: sam UFW je isključen, port opslužuje nešto što je objavio Docker (upisuje sopstvena pravila u iptables ispod UFW-a), ili saobraćaj do servera stiže drugim putem. Zato se isplati uporediti spisak pravila sa onim što zaista sluša ka spolja:
sudo ss -tulpn | grep -v '127.0.0.1\|::1'
fail2ban: dve provere
Nije dovoljno da servis radi — potreban je i ispravan jail za SSH.
sudo fail2ban-client status
sudo fail2ban-client status sshd
Najčešća nevolja ovde je nemi jail. Na Debianu 12 i novijim Ubuntu izdanjima fajl /var/log/auth.log možda uopšte ne postoji: rsyslog nije instaliran, a zapisi žive samo u journald-u. Jail sa fabričkim logpath-om tada se pokrene, javlja se kao aktivan i nikada nikoga ne blokira. Leči se usmeravanjem na systemd žurnal:
printf '[sshd]\nenabled = true\nbackend = systemd\n' | sudo tee /etc/fail2ban/jail.d/sshd-systemd.local
sudo systemctl restart fail2ban
Znak po kojem se to hvata bez kopanja po konfiguracijama: u fail2ban-client status sshd stavke „Currently failed" i „Total failed" stoje na nuli, dok u žurnalu neuspešnih prijava ima napretek.
Ažuriranja: tri provere
Posebno: koliko paketa čeka ukupno, koliko se njih tiče bezbednosti i da li sistem traži ponovno pokretanje posle ažuriranja jezgra.
sudo apt update
apt list --upgradable 2>/dev/null | grep -c -- '-security'
ls /var/run/reboot-required 2>/dev/null && echo 'potrebno je ponovno pokretanje'
Treća provera je da li su uključena automatska bezbednosna ažuriranja, da prve dve ne bi postale mesečni ritual:
systemctl status unattended-upgrades --no-pager
cat /etc/apt/apt.conf.d/20auto-upgrades
U tom fajlu u oba reda treba da stoji jedinica. Ako paketa nema: sudo apt install unattended-upgrades && sudo dpkg-reconfigure -plow unattended-upgrades.
Sertifikati: jedna provera
Sertifikat Let's Encrypt živi devedeset dana, a obnova radi sama tačno do dana kada prestane. Gleda se ne panel registrara, nego ono što server zaista servira:
echo | openssl s_client -connect localhost:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddate
sudo certbot renew --dry-run
Prva komanda daje datum isteka sertifikata koji se servira za to ime; druga proverava da će obnova proći, bez čekanja pravog roka. Isplati se proći kroz sva imena koja server opslužuje, ne samo glavni domen: zaboravlja se po pravilu poddomen dodat kasnije.
Disk: jedna provera
df -h
df -i
Dve komande, jer prostor i zapisi o fajlovima se troše nezavisno jedno od drugog. Na većini servera druga udari u plafon ranije — milioni sitnih fajlova u PHP sesijama ili u kešu aplikacije daju IUse% jednak 100 uz slobodne gigabajte. O oba slučaja imamo zaseban tekst.
Šta nije u redu sa ovim spiskom
Spisak je ispravan, ali ima jedno svojstvo: zahteva da ga se neko seti. Petnaest minuta nedeljno nije mnogo, dok je server jedan i dok postoji povod. Posle dva mirna meseca obilazak otpadne, a da se jail zaustavio saznaje se iz tuđih dnevnika.
Zato smo tačno ovih dvanaest provera sakupili u zaseban besplatan panel — Arcivéo FREE. Instalira se jednom komandom, radi na vašem serveru, ništa nam ne šalje i ne traži registraciju. Sakupljač se pokreće iz cron-a svakih pet minuta i upisuje isto to u lokalnu bazu: SSH prijave i odbijene veze, stanje UFW-a i fail2ban-a, bezbednosna ažuriranja na čekanju, rokove sertifikata, prostor na disku. Istorija obuhvata sedam dana, sučelje postoji na 34 jezika. Cena je nula, i na radnom serveru: licenca dozvoljava instaliranje panela na sopstvene mašine, uključujući firmine, a ne dozvoljava preprodaju niti rad kao usluga za tuđe servere.
Stek besplatnog izdanja je skroman: instalira i uključi UFW i fail2ban, a odatle dalje pokazuje stanje. ModSecurity, Suricata, AIDE i ostali moduli u njemu ne postoje, oni pripadaju plaćenom. Ali da biste prestali da nosite nedeljni obilazak u glavi, dovoljan je. Kako isti podaci izgledaju na punom panelu, pokazuju demo stranice ispod.