Zabezpečení serveru
Zabezpečení serveru
Základní opatření, která mají skutečný efekt, a poznámka o těch, která ho nemají.
Předpoklad je, že máš vyřešený firewall — bez toho zbytek nedává smysl.
SSH
Zdaleka nejdůležitější položka, protože je to jediná cesta dovnitř.
Tady je nutné minimum. Protokol, certifikáty, tunely, hardwarové klíče a omezení v authorized_keys jsou v SSH do hloubky.
Klíče místo hesel
# na klientovi
ssh-keygen -t ed25519 -C "martin@notebook"
ssh-copy-id -i ~/.ssh/id_ed25519.pub server
ed25519 je dnes výchozí volba. RSA jen tam, kde protistrana neumí nic novějšího, a pak minimálně 4096 bitů.
Ověř si, že se přihlásíš klíčem, než vypneš hesla. Otevři si druhé SSH spojení a nech ho běžet, dokud si nejsi jistý.
Konfigurace
/etc/ssh/sshd_config.d/99-vlastni.conf:
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password
PubkeyAuthentication yes
AllowUsers martin
ClientAliveInterval 300
ClientAliveCountMax 2
MaxAuthTries 3
sshd -t # kontrola syntaxe
systemctl reload sshd
PasswordAuthentication no je jediné opatření, které z devadesáti procent řeší problém hrubé síly. Bez hesel nemá útočník co zkoušet.
AllowUsers je podceňovaná drobnost — omezí přihlášení na konkrétní účty bez ohledu na to, kolik jich na stroji je.
Změna portu
Port 2222
Neposkytuje skutečnou bezpečnost. Kdo tě cíleně skenuje, port najde za pár vteřin.
Radikálně ale zmenší množství záznamů v logu, protože plošné skenování jde na port 22. To má hodnotu samo o sobě: v čistém logu si všimneš skutečného pokusu.
Nejlepší varianta
Nevystavovat SSH do internetu vůbec a chodit přes WireGuard. Když se dá, dělej to takhle.
Druhá nejlepší je klíč, který se nedá zkopírovat — FIDO2 token s vyžadovaným dotekem. Viz SSH do hloubky.
Aktualizace
apt install unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades
/etc/apt/apt.conf.d/50unattended-upgrades:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::Automatic-Reboot "false";
Unattended-Upgrade::Mail "ty@example.cz";
Bezpečnostní aktualizace automaticky, restart ne. Automatický restart serveru uprostřed noci je způsob, jak se ráno divit.
Restart po aktualizaci jádra ale potřebuješ. needrestart ti to připomene:
apt install needrestart
Kontejnery
unattended-upgrades neaktualizuje obrazy v Dockeru. Na to potřebuješ vlastní postup — buď Watchtower pro automatiku, nebo pravidelné ruční:
docker compose pull && docker compose up -d
Automatická aktualizace kontejnerů je dvojsečná: opraví díry, ale taky ti může rozbít funkční službu. U databází ji nedoporučuju vůbec.
Uživatelé a oprávnění
adduser martin
usermod -aG sudo martin
passwd -l root # zamkne přímé přihlášení jako root
Pracuj pod běžným účtem, sudo používej na jednotlivé příkazy. sudo -i na celou relaci jen když opravdu musíš.
Docker znamená root
Zásadní věc, kterou hodně lidí nezná: kdo je ve skupině docker, je fakticky root. Může připojit kořenový systém do kontejneru a udělat cokoliv.
docker run -v /:/host -it alpine chroot /host
Přidání uživatele do skupiny docker tedy není „drobné zjednodušení", je to udělení plných práv. Kdo to bere vážně, používá rootless Docker nebo Podman.
Sledování
journalctl -u ssh -f
lastb | head -20 # neúspěšná přihlášení
last | head -20 # úspěšná
ss -tulpn # co poslouchá
Ten lastb stojí za občasné spuštění. Řekne ti, jestli tě někdo zkouší, a last jestli se někomu povedlo.
Pravidelnou ochranu proti hrubé síle řeší fail2ban.
Zmenšování plochy
Vypni, co nepotřebuješ. Podívej se na ss -tulpn a zeptej se u každé položky, proč tam je.
Publikuj na loopback. Všechno, co nemá být veřejné, poslouchá na 127.0.0.1 a ven jde přes reverse proxy. Pro Docker viz Docker a firewall.
Odděl sítě. Služby vystavené do internetu dej do vlastní VLANy s pravidlem, které jim zakazuje iniciovat spojení dovnitř.
Nesdílej hesla mezi službami. Správce hesel a náhodné heslo na každou věc.
Zálohy
Zálohy jsou bezpečnostní opatření, ne provozní. Proti ransomwaru je to jediná skutečná obrana.
Pravidlo 3-2-1: tři kopie, dvě různá média, jedna mimo dům.
Zásadní je offline nebo neměnná kopie. Záloha na připojený síťový disk, do kterého má server zapisovací přístup, ti při ransomwaru nepomůže — zašifruje se s tím zbytkem.
Kopie mimo dům musí být šifrovaná u tebe, ne až v cíli. Jak na to je v šifrování disků a souborů.
A hlavně: zkus obnovu. Nevyzkoušená záloha je jen naděje.
Co nepomáhá
Věci, které se doporučují a jejichž přínos je zanedbatelný:
Skrývání SSID a filtrování MAC adres — viz WiFi.
Přesun SSH na jiný port jako jediné opatření — zmenší log, nezastaví útočníka.
Zakázání ping — znemožní ti diagnostiku a útočníka nezastaví. V IPv6 navíc zablokování ICMPv6 rozbije síť.
Antivirus na Linuxu — smysl má na souborovém serveru pro sdílení s Windows, jinak ne.
Čas investovaný do klíčů, aktualizací a záloh má stonásobně větší návratnost.