Projdete kontrolní seznam, který z nové VPS udělá bezpečný server: aktualizace, silná hesla, vlastní uživatel, SSH klíč, firewall, fail2ban a automatické bezpečnostní záplaty. U každého kroku vysvětlíme, proč ho dělat a co přesně nastavujete.
Co budete potřebovat
- Nová VPS u StormHostu s Ubuntu 24.04 nebo Debianem 13
- Připojení přes SSH jako root (návod)
- Správce hesel nebo bezpečné místo pro uložení hesel
- Asi 30 minut
Proč hned po založení#
Každá veřejná IP adresa je vidět z celého internetu. Automatizovaní boti procházejí adresy a zkoušejí se přihlásit přes SSH běžnými jmény a hesly. Na nové VPS uvidíte první pokusy často už během několika minut. Zkuste si to:
journalctl -u ssh --since "1 hour ago" | grep -E "Failed password|Invalid user"journalctl -u ssh– vypíše záznamy služby SSH.--since "1 hour ago"– jen za poslední hodinu.grep -E "…"– nechá jen řádky s neúspěšným přihlášením nebo neexistujícím uživatelem.
Na síti blokujeme známé skenery internetu, ale všechny pokusy to nezastaví. Proti zbytku vás ochrání silné heslo, SSH klíč a fail2ban.
Kontrolní seznam#
| Krok | Proč | Kde |
|---|---|---|
| Aktualizovat systém | Opraví známé bezpečnostní chyby. | Tento návod |
| Změnit root heslo | Původní heslo prošlo e-mailem nebo obrazovkou. | Změna root hesla |
| Vytvořit uživatele se sudo | Běžná práce bez neomezených práv roota. | Tento návod |
| Nastavit SSH klíč a vypnout heslo | Klíč nejde uhodnout. | SSH klíč |
| Zakázat přihlášení roota | Útočník musí znát i jméno uživatele. | Tento návod |
| Zapnout firewall | Zvenku bude dostupné jen to, co chcete. | Firewall v zákaznické zóně, UFW |
| Nainstalovat fail2ban | Zablokuje IP adresy, které zkoušejí hesla. | Fail2ban |
| Zapnout automatické aktualizace | Bezpečnostní záplaty se nainstalují samy. | Automatické aktualizace |
| Nastavit časové pásmo | Časy v logech budou odpovídat vašemu času. | Tento návod |
Zabezpečení a zákaznická zóna#
Záložky Soubory a Databáze v zákaznické zóně se k VPS připojují přes SSH, a to uživatelem a heslem (ve výchozím stavu root a heslo z doby založení). Některé kroky v tomto návodu je proto ovlivní:
| Co změníte | Co se stane se záložkami Soubory a Databáze | Co udělat |
|---|---|---|
Root heslo (passwd) | Přestanou se přihlašovat. | V Soubory › Změnit přihlašovací údaje zadejte nové heslo. |
| Port SSH | Přestanou se připojovat. | V Soubory › Změnit přihlašovací údaje zadejte nový port. |
| Zákaz přihlášení roota | Nepřihlásí se jako root. | Zadejte tam jiného uživatele a jeho heslo. Soubory uvidíte s jeho právy. Instalace a automatické připojení v záložce Databáze pak vyžadují, aby měl sudo bez zadávání hesla. |
| Vypnutí přihlašování heslem | Přestanou fungovat úplně. | Soubory spravujte SFTP klientem s klíčem, databáze přes SSH tunel. |
| SSH povolené jen z vaší IP | Přestanou fungovat (připojují se z našich serverů). | Totéž jako výše. |
Přihlašovací údaje v záložce Soubory může měnit jen vlastník služby. Konzole a záložky Síť, Firewall, Zálohy a Změna balíčku fungují vždy, nastavení VPS je neovlivní. Rozhodněte se, co je pro vás důležitější. Nejvyšší bezpečnost dává vypnuté přihlašování heslem. Pokud záložky Soubory a Databáze používáte, nechte heslo zapnuté, ale silné, a nainstalujte fail2ban.
Aktualizace systému#
Stáhněte seznam dostupných aktualizací:
bash apt updateapt update– načte z repozitářů seznam nových verzí balíčků. Sám nic neinstaluje.
Nainstalujte všechny aktualizace:
bash apt full-upgrade -yapt full-upgrade– aktualizuje balíčky a smí kvůli tomu přidat nebo odebrat závislosti (například nové jádro).-y– automaticky odpovědět „ano“ na potvrzení.
Pokud se během instalace objeví dotaz na konfigurační soubor (například
/etc/ssh/sshd_config„has been locally modified“), zvolte keep the local version currently installed. Ponecháte tím současné nastavení, se kterým VPS funguje.Zjistěte, jestli je potřeba restart:
bash ls /var/run/reboot-requiredKdyž příkaz soubor najde, restartujte. Na Debianu bez balíčku
unattended-upgradesse soubor vytvořit nemusí, proto tam po aktualizaci jádra (balíček začínajícílinux-image) restartujte vždy.Restartujte VPS:
bash rebootSSH spojení se ukončí. Po zhruba minutě se připojte znovu.
Změna root hesla#
Heslo z doby založení jste viděli v zákaznické zóně, případně v e-mailu. Nastavte si nové, které znáte jen vy.
Vygenerujte silné heslo, například v generátoru hesel (aspoň 20 znaků), a uložte ho do správce hesel.
Spusťte změnu hesla:
bash passwdpasswd– bez dalšího parametru změní heslo uživatele, který příkaz spouští (tedy roota).
Na výzvu
New password:vložte nové heslo a stiskněte Enter. Heslo se nezobrazuje.Na výzvu
Retype new password:ho vložte znovu. Uvidítepasswd: password updated successfully.Nezavírejte současné okno. Otevřete nové a vyzkoušejte přihlášení novým heslem.
V zákaznické zóně otevřete záložku Soubory, klikněte na Změnit přihlašovací údaje, vyplňte Uživatel
root, Port22a nové Heslo a klikněte na Ověřit a uložit.
Heslo v zákaznické zóně zůstane staré
Zákaznická zóna nové heslo nezná. V záložce Konzole bude řádek Heslo po kliknutí na Zobrazit dál ukazovat heslo z doby založení, které už neplatí. Platné heslo máte jen ve svém správci hesel.
Nový uživatel se sudo#
Pod rootem každý překlep v příkazu zasáhne celý systém. Pro běžnou práci si vytvořte vlastního uživatele, který si práva správce vyžádá jen příkazem sudo. Jako příklad použijeme jméno jan.
Vytvořte uživatele:
bash adduser janadduser– vytvoří uživatele, jeho domovskou složku/home/jana zeptá se na heslo.
Zadejte dvakrát heslo (jiné než root heslo). Dotazy na jméno, telefon a další údaje přeskočte klávesou Enter a na konci potvrďte
Y.Přidejte uživatele do skupiny
sudo:bash usermod -aG sudo janusermod– mění vlastnosti uživatele.-aG sudo– přidá (-a) uživatele do další skupiny (-G)sudo. Bez-aby uživatel ze všech ostatních skupin vypadl.- Členové skupiny
sudosmí spouštět příkazy jako root.
Pokud už máte SSH klíč u roota, zkopírujte ho i novému uživateli:
bash install -d -m 700 -o jan -g jan /home/jan/.ssh install -m 600 -o jan -g jan /root/.ssh/authorized_keys /home/jan/.ssh/authorized_keysinstall -d– vytvoří složku.ssh.-m 700/-m 600– práva: složka jen pro vlastníka, soubor čtení a zápis jen pro vlastníka. SSH jiná práva odmítne.-o jan -g jan– vlastníkem bude uživateljan.
V novém okně se přihlaste jako nový uživatel a vyzkoušejte sudo:
bash ssh [email protected] sudo whoamisudo whoami– spustí příkazwhoamijako root. Po zadání hesla uživatelejanmusí vypsatroot.
Pokud příkaz adduser nebo sudo chybí (minimální instalace Debianu), doinstalujte je: apt install adduser sudo.
SSH klíč a vypnutí přihlašování heslem#
Tohle je nejdůležitější krok. Heslo jde uhodnout, SSH klíč prakticky ne. Postup pro Windows, macOS i Linux najdete v samostatném návodu SSH klíč: přihlášení bez hesla, včetně bezpečného vypnutí přihlašování heslem.
Zákaz přihlášení roota#
Když root nesmí přes SSH, útočník musí znát i jméno vašeho uživatele. Udělejte to až ve chvíli, kdy se přihlásíte jako nový uživatel a funguje vám sudo.
Otevřete (nebo vytvořte) vlastní konfigurační soubor SSH serveru:
bash nano /etc/ssh/sshd_config.d/00-zabezpeceni.confPřidejte řádek:
/etc/ ssh/ inisshd_config.d/ 00-zabezpeceni.conf PermitRootLogin noNastavení Co dělá Doporučená hodnota Kdy změnit PermitRootLoginJestli se root smí přihlásit přes SSH. no= vůbec,prohibit-password= jen klíčem,yes= i heslem.noprohibit-password, pokud potřebujete root přístup klíčem (například pro zálohovací skript).Soubor má na začátku názvu
00, aby se načetl jako první. SSH server totiž používá první nalezenou hodnotu každého nastavení.Zkontrolujte konfiguraci a platnou hodnotu:
bash sshd -t && sshd -T | grep -i permitrootloginsshd -t– kontrola syntaxe. Při chybě vypíše soubor a řádek.&&– další příkaz se spustí jen tehdy, když předchozí skončil bez chyby.sshd -T– vypíše výslednou platnou konfiguraci. Musí obsahovatpermitrootlogin no.
Restartujte SSH server:
bash systemctl restart sshSoučasné spojení zůstane otevřené.
V novém okně ověřte, že se
ssh [email protected]už nepřihlásí assh [email protected]ano.
Jako root pak pracujete přes sudo -i (otevře rootovský příkazový řádek po zadání hesla uživatele jan).
Změna portu SSH#
Přesun SSH z portu 22 na jiný port není skutečné zabezpečení, útočník nový port najde. Výrazně ale ubude pokusů botů v logu.
Pro:
- Méně automatických pokusů o přihlášení a čistší logy.
Proti:
- Při každém připojení musíte zadat port (
ssh -p 2222 …). - Některé firemní a veřejné sítě nestandardní porty blokují.
- Port musíte upravit ve firewallu, ve fail2banu i v zákaznické zóně (Soubory).
Pokud se pro změnu rozhodnete, zvolte port nad 1024, který nepoužívá jiná aplikace (vyhněte se například portu 2022, který používají některé herní panely pro SFTP). V příkladu použijeme 2222.
Povolte nový port ve firewallu dřív, než SSH přesunete: v záložce Firewall přidejte pravidlo Příchozí, Povolit, TCP, port
2222(nutné v režimu Blokovat vše kromě povoleného, v režimu Povolit vše neuškodí) a pokud používáte UFW, spusťteufw allow 2222/tcp.Do souboru
/etc/přidejte dva řádky. Starý port zatím ponecháte, aby vás změna neodřízla:ssh/ sshd_ config. d/ 00-zabezpeceni. conf /etc/ ssh/ inisshd_config.d/ 00-zabezpeceni.conf Port 22 Port 2222Port– port, na kterém SSH server poslouchá. ŘádkůPortmůže být víc, server pak poslouchá na všech.
Zkontrolujte konfiguraci:
sshd -t.Zjistěte, jak se SSH na vaší VPS spouští:
bash systemctl is-active ssh.socketVýsledek
activeznamená, že SSH spouští systemd přes socket (výchozí stav na Ubuntu 24.04). Výsledekinactiveznamená běžnou službu (obvykle Debian 13).
Podle výsledku použijte nový port:
Socket aktivní
systemctl daemon-reload
systemctl restart ssh.socketsystemctl daemon-reload– nechá systemd znovu přečíst konfiguraci. Na Ubuntu 24.04 při tom zvláštní generátor převezme porty z konfigurace SSH do nastavení socketu. Bez tohoto kroku by SSH zůstalo na portu 22.systemctl restart ssh.socket– začne poslouchat na nových portech.
Socket neaktivní
systemctl restart sshsystemctl restart ssh– restartuje SSH server, který si porty přečte z konfigurace.
- Ověřte, že SSH poslouchá na obou portech:
ss -tlnp | grep -E ':22 |:2222 '. - V novém okně se připojte přes nový port:
ssh -p 2222 [email protected]. - Když připojení přes nový port funguje, smažte v konfiguraci řádek
Port 22. - Zkontrolujte konfiguraci:
sshd -t. - Změnu načtěte stejným příkazem jako výše (podle toho, jestli je socket aktivní).
- V zákaznické zóně otevřete Soubory › Změnit přihlašovací údaje a zadejte port
2222. Záložky Soubory a Databáze se k VPS připojují přes SSH a bez nového portu by přestaly fungovat. - Upravte port v jailu
sshdve fail2banu (viz Fail2ban). - Ve firewallu smažte pravidlo pro port 22.
Firewall a fail2ban#
- Firewall v zákaznické zóně filtruje provoz ještě před VPS a nastavíte ho klikáním: Firewall v zákaznické zóně.
- UFW je firewall přímo ve VPS: Firewall UFW.
- Fail2ban hlídá neúspěšná přihlášení a útočníky blokuje: Fail2ban.
Stačí jeden z firewallů. Pro začátečníky doporučujeme firewall v zákaznické zóně, protože ho opravíte i tehdy, když se odříznete.
Automatické bezpečnostní aktualizace#
Balíček unattended-upgrades jednou denně nainstaluje bezpečnostní aktualizace. Na Ubuntu je nainstalovaný a zapnutý, na Debianu ho zapnete.
Ubuntu 24.04
Ověřte, že jsou automatické aktualizace zapnuté:
bash cat /etc/apt/apt.conf.d/20auto-upgradesVýstup musí obsahovat:
Výstuptext APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1";Update-Package-Lists "1"– každý den (1 = každý 1 den) stáhnout seznam aktualizací.Unattended-Upgrade "1"– každý den nainstalovat povolené aktualizace.
Pokud soubor chybí, spusťte
dpkg-reconfigure -plow unattended-upgradesa odpovězte Yes.
Debian 13
Nainstalujte balíčky:
bash apt install unattended-upgrades apt-listchangesunattended-upgrades– automatická instalace aktualizací.apt-listchanges– umí posílat přehled změn v aktualizovaných balíčcích.
Zapněte automatické aktualizace:
bash dpkg-reconfigure -plow unattended-upgradesdpkg-reconfigure– znovu spustí nastavení balíčku.-plow– ukáže i méně důležité otázky.
Na otázku, jestli automaticky stahovat a instalovat stabilní aktualizace, odpovězte Yes. Vytvoří se soubor
/etc/.apt/ apt. conf. d/ 20auto-upgrades
Ve výchozím stavu se na Ubuntu instalují jen bezpečnostní aktualizace, na Debianu bezpečnostní aktualizace a opravy z bodových vydání stabilní verze (například 13.1, 13.2). VPS se sama nerestartuje. Chování upravíte ve vlastním souboru, který přebije výchozí 50unattended-upgrades (ten neupravujte, aktualizace balíčku by ho mohla přepsat):
nano /etc/apt/apt.conf.d/52unattended-upgrades-localUnattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";
Unattended-Upgrade::Remove-Unused-Dependencies "true";| Nastavení | Co dělá | Doporučená hodnota | Kdy změnit |
|---|---|---|---|
Automatic-Reboot | Restartuje VPS, když to aktualizace vyžaduje (typicky nové jádro). Výchozí je false. | true | Nechte false, pokud vaše aplikace po restartu samy nenaběhnou (nejsou nastavené jako služba). Pak restartujte ručně jednou týdně. |
Automatic-Reboot-Time | Kdy se restart provede, například "04:00". Bez nastavení proběhne ihned po aktualizaci. | "04:00" | Zvolte čas, kdy je na serveru nejmenší provoz. |
Remove-Unused-Dependencies | Smaže balíčky, které po aktualizaci už nic nepotřebuje. | true | false, pokud si nepřejete, aby se cokoli odinstalovalo samo. |
Nastavení vyzkoušejte nanečisto:
unattended-upgrade --dry-run --debug--dry-run– jen simulace, nic se nenainstaluje.--debug– podrobný výpis, včetně načtených nastavení a balíčků, které by se aktualizovaly.
Záznamy o skutečných aktualizacích najdete ve složce /var/.
Časové pásmo a název serveru#
Nastavte české časové pásmo, aby časy v logech odpovídaly:
bash timedatectl set-timezone Europe/Praguetimedatectl– nastavuje čas a časové pásmo systému.set-timezone Europe/Prague– středoevropský čas včetně letního.
Ověřte výsledek příkazem
timedatectl. ŘádekTime zonemusí ukazovatEurope/PragueaSystem clock synchronized: yes.Volitelně změňte název serveru (hostname):
bash hostnamectl set-hostname vps1hostnamectl set-hostname vps1– nastaví název VPS navps1. Používejte malá písmena, číslice a pomlčky.
Nový název se ukáže v příkazovém řádku po dalším přihlášení. Pokud
sudozačne vypisovatunable to resolve host vps1, doplňte název do/etc/hostsna řádek127.0.1.1. Když soubor v hlavičce uvádí, že se generuje automaticky, řiďte se pokyny z hlavičky.
Co dál#
- Zálohy: celou VPS zálohujeme my a obnovíte ji v záložce Zálohy. Důležitá data si zálohujte i mimo VPS, viz Zálohy VPS.
- Přehled: jednou za čas zkontrolujte místo na disku (
df -h), běžící služby (systemctl --failed) a záznamy fail2banu. - Jen potřebné služby: co nepotřebujete, neinstalujte. Každý otevřený port je další možný vstup.
Ověření#
apt updatepo aktualizaci vypíšeAll packages are up to date.- Nové root heslo funguje a záložka Soubory se přihlásí.
- Uživatel
janse přihlásí přes SSH asudo whoamivypíšeroot. sshd -T | grep -E "^(ukazuje hodnoty, které jste nastavili.permitrootlogin| passwordauthentication| port) " unattended-upgrade --dry-run --debugproběhne bez chyby.
Když něco nefunguje#
Odřízli jste se od SSH#
Použijte konzoli v prohlížeči. Přihlásíte se root heslem (i když máte root přes SSH zakázaný) a chybu opravíte, například smažete soubor /etc/ a restartujete SSH příkazem systemctl restart ssh.
sudo: jan is not in the sudoers file#
Uživatel není ve skupině sudo. Jako root spusťte usermod -aG sudo jan a uživatel se musí odhlásit a znovu přihlásit, aby se skupina projevila.
Záložka Soubory hlásí, že se přihlášení k VPS nezdařilo#
Zákaznická zóna používá staré údaje. Otevřete Soubory › Změnit přihlašovací údaje a zadejte aktuálního uživatele, port a heslo. Pokud máte vypnuté přihlašování heslem nebo SSH povolené jen z vaší IP adresy, záložka fungovat nebude (viz tabulka v sekci Zabezpečení a zákaznická zóna).
sshd -T ukazuje jinou hodnotu, než jste nastavili#
Stejné nastavení je v jiném souboru, který se načítá dřív (SSH server bere první nalezenou hodnotu). Najděte ho:
grep -rni "permitrootlogin" /etc/ssh/sshd_config /etc/ssh/sshd_config.d/grep -rni– hledá text ve všech souborech složky (-r), bez ohledu na velikost písmen (-i) a vypíše číslo řádku (-n).
Řádek v cizím souboru zakomentujte (napište na jeho začátek #), nebo hodnotu změňte přímo tam. Pak znovu spusťte sshd -t && sshd -T | grep -i permitrootlogin a SSH restartujte.
SSH po změně portu dál poslouchá jen na portu 22#
Na Ubuntu 24.04 jste nejspíš vynechali systemctl daemon-reload. Spusťte ho a pak systemctl restart ssh.socket.
E: Could not get lock /var/lib/dpkg/lock-frontend #
Na pozadí právě běží jiná instalace, typicky automatické aktualizace (u nové VPS po prvním startu). Počkejte pár minut a příkaz zopakujte. Proces nenásilně neukončujte.
Shrnutí
- Aktualizujte systém (
apt update,apt full-upgrade) a po novém jádře restartujte. - Změňte root heslo příkazem
passwda nové heslo zadejte i v záložce Soubory. - Pracujte pod vlastním uživatelem se
sudo, root přes SSH zakažte až po otestování. - Nastavte SSH klíč, firewall a fail2ban podle samostatných návodů.
- Automatické bezpečnostní aktualizace řídí
unattended-upgrades, úpravy patří do52unattended-upgrades-local. - Vypnutí hesla nebo omezení SSH na vaši IP vypne záložky Soubory a Databáze, konzole funguje vždy.