ťařina
Obsah Soubory
markdown

Zabezpeceni-serveru.md

5.8 kB 169 řádků Změněno Zobrazit na GitHubu Stáhnout
markdown
# 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](Linux-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](SSH). ### Klíče místo hesel ```bash# na klientovissh-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 noKbdInteractiveAuthentication noPermitRootLogin prohibit-passwordPubkeyAuthentication yes AllowUsers martin ClientAliveInterval 300ClientAliveCountMax 2MaxAuthTries 3``` ```bashsshd -t                     # kontrola syntaxesystemctl 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](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](SSH#hardwarové-klíče). ## Aktualizace ```bashapt install unattended-upgradesdpkg-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: ```bashapt install needrestart``` ### Kontejnery `unattended-upgrades` neaktualizuje obrazy v Dockeru. Na to potřebuješ vlastní postup — buď [Watchtower](https://containrrr.dev/watchtower/) pro automatiku, nebo pravidelné ruční: ```bashdocker 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í ```bashadduser martinusermod -aG sudo martinpasswd -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. ```bashdocker 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í ```bashjournalctl -u ssh -flastb | 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](Fail2ban-a-CrowdSec). ## 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](Reverse-proxy). Pro Docker viz [Docker a firewall](Docker-a-firewall). **Odděl sítě.** Služby vystavené do internetu dej do vlastní [VLANy](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ů](Sifrovani-disku-a-souboru#zálohy). 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](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](Jak-funguje-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.