Zabezpečení VPS: SSH klíče a Fail2Ban

💡
Pro postupování dle návodu je potřeba disponovat základními znalostmi ovládání VPS, včetně práce se soubory v UNIXovém prostředí.

Když si pořídíte VPS pro svůj Minecraft server nebo jiný herní projekt, získáte plnou kontrolu nad celým systémem. To s sebou nese obrovské výhody, ale také jedno velké riziko. Jakmile je vaše VPS viditelné v ostrém internetu, začnou ho skenovat boti (nejčastěji na SSH portu 22) a útočníci z celého světa, kteří zkoušejí náhodná a známá hesla.

Pokud chcete mít jistotu dobře zabezpečeného VPS, čekají vás dva základní kroky: vyměnit klasické heslo za SSH klíče a nasadit nástroj Fail2Ban. V tomto návodu si ukážeme, jak na to.

SSH klíče: Bezpečnější než sebelepší heslo

Klasické přihlašování heslem je sice pohodlné, ale zranitelné vůči tzv. brute-force útokům (automatizovanému hádání tisíců hesel). Na rozdíl od hesel představují SSH klíče prakticky neprolomitelné zabezpečení. Vygenerujete si dvojici klíčů: veřejný (který nahrajete na VPS) a soukromý (který si necháte bezpečně uložený u sebe v počítači). Bez soukromého klíče se na server nikdo nedostane, ani kdyby znal vaše původní heslo.

Krok 1: Vygenerování klíčů na vašem PC

Pokud používáte systém Windows 10/11 (PowerShell / Příkazový řádek) nebo macOS/Linux, otevřete si terminál a zadejte následující příkaz:

ssh-keygen -t ed25519
💡
Systém se vás zeptá, kam klíč uložit (výchozí umístění stačí potvrdit klávesou Enter) a zda chcete klíč zaheslovat (tzv. passphrase). Zaheslování doporučujeme – přidáváte tím další faktor autentizace pro případ, že by vám někdo odcizil soubor se soukromým klíčem.

Krok 2: Nahrání veřejného klíče na VPS

Nyní musíte svůj veřejný klíč (soubor s příponou .pub, ve výchozím stavu ~/.ssh/id_ed25519.pub) dostat na server do souboru ~/.ssh/authorized_keys. V zásadě máte dvě možnosti:

  • Ruční cesta (Windows / PuTTY): Otevřete vygenerovaný soubor .pub v textovém editoru (např. Poznámkový blok), zkopírujte jeho obsah (začíná textem ssh-ed25519 ...), přihlaste se na VPS a vložte jej na nový řádek do souboru ~/.ssh/authorized_keys. Pokud složka ~/.ssh na serveru ještě neexistuje, vytvořte ji a nastavte jí správná oprávnění příkazem mkdir -p ~/.ssh && chmod 700 ~/.ssh.
  • Nejjednodušší cesta (Linux / macOS): Použijte vestavěný příkaz, který složku, oprávnění i nahrání klíče vyřeší automaticky za vás:
ssh-copy-id root@IP_VASEHO_SERVERU

Krok 3: Vypnutí přihlašování heslem

❗
POZOR: Než uděláte tento krok, ujistěte se, že vám přihlášení pomocí klíče reálně funguje! Nezavírejte stávající spojení, dokud si to neověříte – otevřete si druhé okno terminálu a zkuste se na server připojit znovu. Pokud vás server přihlásí pomocí klíče, máte vyhráno.

Jakmile vám přihlašování klíčem funguje, zakážeme přihlašování heslem úplně. Na serveru otevřete konfigurační soubor SSH démona:

nano /etc/ssh/sshd_config

Najděte následující řádky (pokud mají na začátku komentář v podobě mřížky #, smažte ji) a upravte je takto:

PasswordAuthentication no
PubkeyAuthentication yes

U novějších systémů (např. Ubuntu 22.04 a 24.04) ještě zkontrolujte, zda přihlašování heslem nepovoluje dodatečný konfigurační soubor ve složce /etc/ssh/sshd_config.d/ (často např. 50-cloud-init.conf). Pokud v něm najdete řádek PasswordAuthentication yes, přepište jej rovněž na no.

Uložte soubor (v editoru Nano zkratkou CTRL+O, potvrďte Enter a editor ukončete pomocí CTRL+X) a restartujte SSH službu:

systemctl restart ssh

Od této chvíle je vaše VPS vůči běžnému hádání hesel imunní.

💡
Do souboru ~/.ssh/authorized_keys můžete přidat více veřejných klíčů (každý na samostatný řádek), pokud se k serveru připojujete z více různých zařízení.

Fail2Ban: Hlídací pes

I když máte zapnuté SSH klíče, boti se budou na váš server stále pokoušet připojovat a zbytečně tím zatěžovat síť i procesor. Fail2Ban je šikovný nástroj, který neustále sleduje logy serveru. Pokud zjistí, že se z určité IP adresy někdo opakovaně neúspěšně pokouší přihlásit (např. 3× za sebou), automaticky tuto IP adresu na zvolený čas zablokuje ve firewallu.

Krok 1: Instalace Fail2Ban

Instalace na systémech založených na Debianu či Ubuntu je otázkou jednoho příkazu:

apt update && apt install fail2ban -y

Krok 2: Základní nastavení

Výchozí soubor jail.conf se při aktualizacích balíčku přepisuje, proto si vytvoříme vlastní lokální soubor jail.local, ve kterém definujeme pravidla pro SSH:

nano /etc/fail2ban/jail.local

Do souboru vložte následující základní konfiguraci:

[sshd]
enabled  = true
port     = ssh
filter   = sshd
backend  = systemd
maxretry = 3
bantime  = 1h
findtime = 10m

Co jednotlivé parametry znamenají?

  • backend = systemd: Čte záznamy přímo ze systémového žurnálu (funguje spolehlivě i na novějších systémech Debian 12 a Ubuntu 24.04, kde již chybí klasický soubor /var/log/auth.log).
  • maxretry = 3: Po 3 neúspěšných pokusech o přihlášení následuje zablokování IP adresy.
  • findtime = 10m: Počítají se neúspěšné pokusy v časovém okně posledních 10 minut.
  • bantime = 1h: Útočník dostane ban na 1 hodinu. Pokud chcete udělit trvalý (permanentní) ban, nastavte hodnotu -1.

Soubor uložte, povolte automatické spouštění po startu systému a službu restartujte:

systemctl enable --now fail2ban && systemctl restart fail2ban

Zda služba v pořádku běží, si můžete ověřit příkazem systemctl status fail2ban (ve výpisu byste měli vidět zelený stav active (running)).

Krok 3: Jak zkontrolovat, zda to funguje?

Statistiku a seznam zablokovaných útočníků zobrazíte příkazem:

fail2ban-client status sshd

Uvidíte přehledný výpis včetně počtu a seznamu aktuálně zabanovaných IP adres. Pokud byste náhodou zabanovali sami sebe (např. při testování z jiného počítače), můžete svou IP adresu odbanovat příkazem:

fail2ban-client set sshd unbanip VASE_IP_ADRESA

Shrnutí

Základní zabezpečení VPS není složitá záležitost a zabere jen několik minut. Kombinace SSH klíčů a nástroje Fail2Ban společně se správně nastaveným firewallem UFW zajistí vašemu serveru spolehlivou ochranu.

Je návod nejasný nebo potřebuješ další pomoc?

Hostuješ u FakaHeda.eu? Využij náš Discord technické podpory!