Un server se configurează o dată și apoi trăiește singur mai departe. O lună mai târziu, o parte dintre pachete așteaptă actualizarea, certificatul s-a apropiat la trei săptămâni de expirare, după instalarea a ceva străin a apărut un rând în plus în configurația SSH, iar jail-ul care ar fi trebuit să supravegheze autentificările s-a oprit fără ca nimeni să observe. Nimic din toate acestea nu strigă. Totul doar încetează, în tăcere, să mai fie adevărat.

Mai jos sunt douăsprezece lucruri care merită verificate cu regularitate, cu tot cu comenzi. Rondul ia un sfert de oră. Ordinea merge de la ceea ce prin care se intră la ceea ce se strică de la sine.

SSH: cinci rânduri

De privit nu este fișierul, ci configurația efectivă: ea se compune din /etc/ssh/sshd_config, din tot directorul sshd_config.d și din valorile implicite ale compilării.

sudo sshd -T | grep -iE 'permitrootlogin|passwordauthentication|permitemptypasswords|maxauthtries|x11forwarding'

Ce vrem să vedem: permitrootlogin no, passwordauthentication no, permitemptypasswords no, maxauthtries la 3–4 și x11forwarding no. Primele trei sunt ușa, ultimele două balamalele ei — o limită a încercărilor pe conexiune și o redirecționare grafică de care un server nu are nicio nevoie.

Două rezerve, ambele moduri ușoare de a te încuia pe dinafară. Întâi: nu dezactivați autentificarea cu parolă și autentificarea root înainte de a verifica faptul că cheia funcționează — într-o sesiune separată, fără a o închide pe cea curentă. Dacă citiți asta conectat ca root cu parolă, exact acele două rânduri vă vor lăsa afară pe dumneavoastră.

Apoi: ordinea fișierelor. OpenSSH ia prima valoare întâlnită pentru un parametru, iar fișierele din sshd_config.d se citesc alfabetic. Imaginile de cloud lasă acolo de obicei un 50-cloud-init.conf, care va învinge fișierul dumneavoastră dacă l-ați numit, de pildă, 90-hardening.conf. Setările proprii merg sub un număr mai mic — 00- sau 10-. Iar rezultatul se verifică cu sshd -T, nu citind fișierul.

Paravan de protecție: o verificare

sudo ufw status verbose

Merită ținut minte că această ieșire arată intenții, nu rezultate. O regulă poate sta în listă fără să închidă nimic: UFW însuși este oprit, portul este servit de ceva publicat de Docker (care își scrie propriile reguli în iptables, sub UFW), sau traficul ajunge la server pe alt drum. De aceea merită confruntată lista regulilor cu ceea ce ascultă cu adevărat spre exterior:

sudo ss -tulpn | grep -v '127.0.0.1\|::1'

fail2ban: două verificări

Nu e de ajuns ca serviciul să ruleze — e nevoie și de un jail funcțional pentru SSH.

sudo fail2ban-client status
sudo fail2ban-client status sshd

Cel mai frecvent necaz aici este un jail mut. Pe Debian 12 și pe versiunile recente de Ubuntu, fișierul /var/log/auth.log poate să nu existe deloc: rsyslog nu este instalat, iar înregistrările trăiesc doar în journald. Un jail cu logpath-ul din fabrică pornește atunci, se declară activ și nu blochează niciodată pe nimeni. Se tratează îndreptându-l către jurnalul systemd:

printf '[sshd]\nenabled = true\nbackend = systemd\n' | sudo tee /etc/fail2ban/jail.d/sshd-systemd.local
sudo systemctl restart fail2ban

Semnul după care se prinde asta fără scotocit prin configurații: în fail2ban-client status sshd, „Currently failed” și „Total failed” stau la zero, deși jurnalul conține limpede autentificări eșuate.

Actualizări: trei verificări

Separat: câte pachete așteaptă în total, câte dintre ele țin de securitate și dacă sistemul cere repornire după o actualizare de nucleu.

sudo apt update
apt list --upgradable 2>/dev/null | grep -c -- '-security'
ls /var/run/reboot-required 2>/dev/null && echo 'este necesară repornirea'

A treia verificare este dacă actualizările automate de securitate sunt pornite, ca primele două să nu devină un ritual lunar:

systemctl status unattended-upgrades --no-pager
cat /etc/apt/apt.conf.d/20auto-upgrades

În acel fișier trebuie să stea un 1 pe ambele rânduri. Dacă pachetul lipsește: sudo apt install unattended-upgrades && sudo dpkg-reconfigure -plow unattended-upgrades.

Certificate: o verificare

Un certificat Let's Encrypt trăiește nouăzeci de zile, iar reînnoirea merge de la sine exact până în ziua în care nu mai merge. De privit nu este panoul registrarului, ci ceea ce servește cu adevărat serverul:

echo | openssl s_client -connect localhost:443 -servername example.com 2>/dev/null | openssl x509 -noout -enddate
sudo certbot renew --dry-run

Prima comandă dă data de final a certificatului servit pentru acel nume; a doua verifică faptul că reînnoirea va trece, fără a aștepta termenul real. Merită parcurse toate numele pe care le servește serverul, nu doar domeniul principal: cel uitat este, de regulă, subdomeniul adăugat mai târziu.

Disc: o verificare

df -h
df -i

Două comenzi, pentru că spațiul și înregistrările de fișiere se termină independent unul de celălalt. Pe majoritatea serverelor, a doua atinge plafonul prima — milioane de fișiere mărunte în sesiunile PHP sau în cache-ul aplicației dau un IUse% de 100 cu gigaocteți încă liberi. Despre ambele cazuri avem un text separat.

Ce nu e în regulă cu această listă

Lista este corectă, dar are o proprietate: cere ca cineva să își amintească de ea. Un sfert de oră pe săptămână nu e mult, atâta vreme cât serverul este unul singur și atâta vreme cât există un motiv. După două luni liniștite rondul sare, iar faptul că jail-ul s-a oprit se află din jurnalele altcuiva.

De aceea am strâns exact aceste douăsprezece verificări într-un panou gratuit separat — Arcivéo FREE. Se instalează cu o singură comandă, rulează pe serverul dumneavoastră, nu ne trimite nimic și nu cere înregistrare. Un colector pornește din cron la fiecare cinci minute și scrie aceleași lucruri într-o bază de date locală: autentificări SSH și conexiuni refuzate, starea UFW și a fail2ban, actualizări de securitate în așteptare, termenele certificatelor, spațiul pe disc. Istoricul acoperă șapte zile, interfața există în 34 de limbi. Prețul este zero, inclusiv pe un server de lucru: licența permite instalarea panoului pe mașini proprii, inclusiv ale firmei, și nu permite revânzarea lui ori exploatarea ca serviciu pentru serverele altora.

Stiva ediției gratuite este modestă: instalează și pornește UFW și fail2ban, iar de acolo înainte arată starea. ModSecurity, Suricata, AIDE și celelalte module nu sunt în ea, acelea țin de versiunea plătită. Dar pentru a înceta să purtați rondul săptămânal în minte, este de ajuns. Cum arată aceleași date pe panoul complet se vede pe paginile demonstrative de mai jos.