Server sa nastaví raz a potom si žije sám. O mesiac neskôr časť balíkov čaká na aktualizáciu, certifikát sa priblížil na tri týždne k vypršaniu, po inštalácii niečoho cudzieho pribudol v konfigurácii SSH riadok navyše a jail, ktorý mal strážiť prihlásenia, sa zastavil bez toho, aby si to niekto všimol. Nič z toho nekričí. Všetko len ticho prestáva byť pravda.

Nižšie je dvanásť vecí, ktoré sa oplatí kontrolovať pravidelne, aj s príkazmi. Obchôdzka zaberie štvrťhodinu. Poradie vedie od toho, čím sa dnu vchádza, k tomu, čo sa pokazí samo.

SSH: päť riadkov

Pozerať sa netreba na súbor, ale na výslednú konfiguráciu: skladá sa z /etc/ssh/sshd_config, celého adresára sshd_config.d a predvolených hodnôt zostavenia.

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

Čo chceme vidieť: permitrootlogin no, passwordauthentication no, permitemptypasswords no, maxauthtries na 3–4 a x11forwarding no. Prvé tri sú dvere, posledné dve ich pánty — strop pre počet pokusov na spojenie a presmerovanie grafiky, ktoré server na nič nepotrebuje.

Dve výhrady, obe ľahký spôsob, ako sa zamknúť vonku. Po prvé: nevypínajte prihlásenie heslom ani prihlásenie pod rootom skôr, než si overíte, že kľúč funguje — v samostatnej relácii, bez zatvorenia tej súčasnej. Ak toto čítate prihlásení ako root heslom, zamknú vonku práve vás.

Po druhé: poradie súborov. OpenSSH berie prvú hodnotu parametra, na ktorú narazí, a súbory v sshd_config.d sa čítajú abecedne. Cloudové obrazy tam zvyčajne nechávajú 50-cloud-init.conf, a ten prebije váš vlastný súbor, ak ste ho nazvali napríklad 90-hardening.conf. Vlastné nastavenia patria pod nižšie číslo — 00- alebo 10-. A výsledok sa overuje príkazom sshd -T, nie čítaním súboru.

Firewall: jedna kontrola

sudo ufw status verbose

Treba pamätať, že tento výpis ukazuje zámery, nie výsledky. Pravidlo môže byť v zozname a nič nezatvárať: samotný UFW je vypnutý, port obsluhuje niečo, čo publikoval Docker (zapisuje si vlastné pravidlá do iptables pod UFW), alebo sa prevádzka k serveru dostáva inou cestou. Oplatí sa teda porovnať zoznam pravidiel s tým, čo naozaj počúva von:

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

fail2ban: dve kontroly

Nestačí, že služba beží — musí existovať aj funkčný jail pre SSH.

sudo fail2ban-client status
sudo fail2ban-client status sshd

Najčastejšou nepríjemnosťou je tu mlčiaci jail. Na Debiane 12 a novších Ubuntu nemusí súbor /var/log/auth.log existovať vôbec: rsyslog nie je nainštalovaný a záznamy žijú len v journalde. Jail s predvoleným logpath sa potom spustí, hlási sa ako aktívny a nikoho nikdy nezablokuje. Lieči sa presmerovaním na žurnál systemd:

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

Znak, podľa ktorého sa to spozná bez hrabania sa v konfiguráciách: v fail2ban-client status sshd stoja „Currently failed“ aj „Total failed“ na nule, hoci v žurnáli sú neúspešné prihlásenia až príliš zreteľné.

Aktualizácie: tri kontroly

Osobitne: koľko balíkov čaká celkovo, koľko z nich sa týka bezpečnosti a či systém po aktualizácii jadra nežiada reštart.

sudo apt update
apt list --upgradable 2>/dev/null | grep -c -- '-security'
ls /var/run/reboot-required 2>/dev/null && echo 'je potrebný reštart'

Tretia kontrola je, či sú zapnuté automatické bezpečnostné aktualizácie, aby sa z prvých dvoch nestal mesačný rituál:

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

V tom súbore má na oboch riadkoch stáť jednotka. Ak balík chýba: sudo apt install unattended-upgrades && sudo dpkg-reconfigure -plow unattended-upgrades.

Certifikáty: jedna kontrola

Certifikát Let's Encrypt žije deväťdesiat dní a obnova beží sama presne do dňa, keď prestane. Pozerať sa netreba do panela registrátora, ale na to, čo server naozaj vydáva:

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

Prvý príkaz udá dátum konca certifikátu vydávaného pre to meno, druhý overí, že obnova prejde, bez čakania na skutočnú lehotu. Oplatí sa prejsť všetky mená, ktoré server obsluhuje, nielen hlavnú doménu: zabúda sa spravidla na subdoménu pridanú neskôr.

Disk: jedna kontrola

df -h
df -i

Dva príkazy, pretože miesto a záznamy o súboroch sa míňajú nezávisle od seba. Na väčšine serverov narazí na strop skôr ten druhý — milióny drobných súborov v reláciách PHP alebo vo vyrovnávacej pamäti aplikácie dajú IUse% rovné 100 pri voľných gigabajtoch. K obom prípadom máme samostatný text.

Čo je na tomto zozname zle

Zoznam je správny, ale má jednu vlastnosť: vyžaduje, aby si naň niekto spomenul. Štvrťhodina týždenne nie je veľa, kým je server jeden a kým je dôvod. Po dvoch pokojných mesiacoch obchôdzka vypadne a o tom, že sa jail zastavil, sa človek dozvie z cudzích logov.

Preto sme presne týchto dvanásť kontrol zhrnuli do samostatného bezplatného panela — Arcivéo FREE. Inštaluje sa jedným príkazom, beží na vašom serveri, nič nám neposiela a nevyžaduje registráciu. Zberač sa spúšťa z cronu každých päť minút a zapisuje to isté do miestnej databázy: prihlásenia cez SSH a odmietnuté spojenia, stav UFW a fail2banu, čakajúce bezpečnostné aktualizácie, lehoty certifikátov, miesto na disku. História pokrýva sedem dní, rozhranie je v 34 jazykoch. Cena je nulová, aj na pracovnom serveri: licencia dovoľuje inštalovať panel na vlastné stroje vrátane firemných a nedovoľuje ho ďalej predávať ani prevádzkovať ako službu pre cudzie servery.

Stack bezplatnej edície je skromný: nainštaluje a zapne UFW a fail2ban a ďalej ukazuje stav. ModSecurity, Suricata, AIDE a ostatné moduly v nej nie sú, tie patria k platenej. Ale na to, aby ste si týždennú obchôdzku prestali držať v hlave, stačí. Ako tie isté údaje vyzerajú na plnom paneli, ukazujú ukážkové stránky nižšie.