Zabezpečení přístupu k Ubuntu krok za krokem

Vyberte, jak se k systému budete připojovat, a kapitola ukáže kroky ve správném pořadí, od správcovského účtu a SSH přes firewall po Tailscale, 2FA a Fail2Ban. Způsobů připojení můžete zvolit víc; kroky, které nepotřebují, se přeskočí. Platí pro Ubuntu Server i pro Ubuntu Desktop, které má zároveň sloužit jako server.

Vladimír NeporAutorIng. Vladimír Nepor
Publikováno

Vaše volba

Volby se uloží jen ve vašem prohlížeči a podle nich se upraví i lišta „další krok“ v jednotlivých návodech.

Typ systému
Jak se k systému budete připojovat?

Vzdálené způsoby B, C a D můžete kombinovat. Kapitola ukáže kroky pro všechny zvolené. A (jen lokálně) se s nimi vylučuje.

Bez volby jsou vidět všechny kroky. Po výběru se kroky, které nepotřebujete, zašednou.

Ubuntu Desktop jako server

Desktop se ve výchozím stavu uspává. Aby běžel nepřetržitě, vypněte uspání a hibernaci:

sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

Vrácení: sudo systemctl unmask … se stejnými jednotkami.

Vaše údaje: příkazy v návodu se podle nich doplní. Ukládají se jen ve vašem prohlížeči a použijí je i další návody Ubuntu.

Váš správcovský účet (se sudo), zadaný při instalaci Ubuntu. Ne root a ne běžná jména jako admin, ubuntu nebo user. Ta roboti zkoušejí jako první.

Neplatná hodnota, v příkazech zůstane zástupná.

IP adresa v lokální síti (najdete ji v routeru nebo příkazem ip -4 addr na serveru), případně adresa z Tailscale nebo doménové jméno.

Neplatná hodnota, v příkazech zůstane zástupná.

Volitelná změna výchozího portu 22. Sníží šum v logu, skutečnou ochranu dává přihlášení klíčem a firewall. Rozsah 1024 až 49151.

Neplatná hodnota, v příkazech zůstane zástupná.

Rozsah adres zařízení připojených ke stejnému routeru jako server. Např. 192.168.1.0/24 znamená všechny adresy 192.168.1.1 až 192.168.1.254. Doplní se sám z adresy serveru. Vyplňte jen, když je váš rozsah jiný.

Neplatná hodnota, v příkazech zůstane zástupná.

Kroky

Přihlášení

  1. Nejste přihlášeni jako root

    Způsoby: A vždy · B vždy · C vždy · D vždy

    Podívejte se na příkazový řádek po přihlášení. Začíná vaším jménem a končí $ (<ADMIN_USER>@…:~$)? Pak je vše v pořádku a pokračujte dalším krokem. Jste-li přihlášeni jako root (root@…:~#), rozbalte postup níže.

    Jsem přihlášen jako root (typicky server od poskytovatele)

    Vytvořte si vlastní účet s právem sudo a dál pracujte jen pod ním. Jméno volte neobvyklé, roboti zkoušejí hlavně admin, ubuntu nebo user.

    adduser <ADMIN_USER>
    usermod -aG sudo <ADMIN_USER>

    Odhlaste se a přihlaste jako nový uživatel. Přihlášení roota přes SSH pak vypne krok SSH; do roota se v případě potřeby přepnete příkazem sudo -i.

    Proč ne root: účet root má každý Linux, útočníkovi tak stačí uhodnout heslo. U vlastního neobvyklého jména musí hádat i jméno, a každé sudo se navíc zapíše do logu i s uživatelem.

  2. Vypnutí SSH serveru

    Způsoby: A ano · B ne · C ne · D ne

    Bez vzdáleného přístupu SSH server nepotřebujete. Co neběží, nejde napadnout. Na Ubuntu Desktop ve výchozím stavu není; pokud which sshd nic nevypíše, nic dalšího nedělejte. Jinak ho vypněte:

    sudo systemctl disable --now ssh.socket ssh     # Ubuntu 24.04 a novější
    sudo systemctl disable --now ssh                # Ubuntu 22.04

    Případně balíček odinstalujte: sudo apt purge openssh-server. Ověření: výstup musí být prázdný: sudo ss -tlnp | grep -E 'sshd|:22 '

  3. Instalace SSH serveru

    Způsoby: A ne · B ano · C ano · D ano

    Přímo na serveru (monitor a klávesnice) ověřte, že je SSH server nainstalovaný. Ubuntu Server ho má, pokud jste při instalaci zaškrtli Install OpenSSH server; Ubuntu Desktop ve výchozím stavu ne.

    which sshd

    Vypíše-li cestu (/usr/sbin/sshd), je nainstalovaný. Prázdný výstup znamená, že chybí. Nainstalujte ho:

    sudo apt update && sudo apt install openssh-server
    Balíčky SSH
    • openssh-server: aby se šlo připojit k tomuto stroji (potřebuje server).
    • openssh-client: aby se šlo z tohoto stroje připojit jinam (příkaz ssh); bývá předinstalovaný.
    • ssh: nainstaluje obojí.

    Ověření, že SSH poslouchá (ve výpisu je :22): sudo ss -tlnp | grep -E 'sshd|systemd'. Adresu serveru pro pole Adresa serveru ukáže ip -4 addr (řádek inet síťového rozhraní, ne 127.0.0.1).

  4. Přihlášení klíčem a zabezpečení SSH

    Způsoby: A ne · B ano · C ano · D ano

    Přihlášení jen klíčem, bez hesla a bez roota. Nastavení v samostatném souboru /etc/ssh/sshd_config.d/00-hardening.conf, volitelně jiný port. Klíč je jen tak bezpečný jako počítač, na kterém leží, viz ochrana klíče a počítače.

    Otevřít návod: Přihlášení klíčem a zabezpečení SSH →

  5. Dvoufaktorové ověření (2FA)

    Způsoby: A ne · B volitelné · C volitelné · D doporučeno

    Ke klíči přidá jednorázový kód z mobilu. Největší smysl má u serveru dostupného z internetu (D) nebo pro sudo. Při SSH jen přes Tailscale je přínos menší.

    Otevřít návod: Dvoufaktorové ověření (2FA) →

Síťový přístup

  1. Firewall (UFW)

    Způsoby: A vždy · B vždy · C vždy · D vždy

    Firewall UFW je v Ubuntu nainstalovaný, ale vypnutý a nic nefiltruje. Ze sítě je pak dostupné vše, co na serveru poslouchá; na čerstvém Ubuntu je to prakticky jen SSH (přehled ukáže sudo ss -tulpn, řádky s 127.0.0.x jsou jen místní). Firewall proto zapněte dřív, než přidáte další služby (databázi, web, Docker). Na serveru s veřejnou IP je SSH vidět z internetu hned po instalaci. Tam nejdřív dokončete krok Přihlášení klíčem.

    Zakážeme veškerý příchozí provoz a povolíme jen to, co zvolené způsoby připojení potřebují. Pravidlo pro SSH přidejte před ufw enable, jinak se odpojíte.

    sudo ufw default deny incoming
    sudo ufw default allow outgoing

    Pro A

    Žádné pravidlo pro SSH, rovnou zapněte firewall.

    Pro B, C

    SSH povolíme jen ze zařízení ve vaší domácí síti: z počítačů a telefonů připojených ke stejnému routeru jako server. Síť se zapisuje jako rozsah adres (<LAN_SUBNET>); doplní se sám z adresy serveru.

    Jak rozsah ověřit na serveru
    ip -4 route show proto kernel

    Rozsah je první údaj na řádku, kde je za slovem src adresa serveru (např. řádek … dev enp86s0 proto kernel scope link src …). Řádky s docker0 nebo tailscale0 nepatří k domácí síti. Pokud se rozsah liší od toho v příkazu níže, zadejte ho do pole Domácí síť.

    Pro B

    Trvale povolte SSH z domácí sítě:

    sudo ufw allow from <LAN_SUBNET> to any port 22 proto tcp comment 'SSH z LAN'

    Pro C (jen bez B)

    Tailscale budete nastavovat z domácí sítě, proto SSH z ní povolte zatím dočasně. Krok Tailscale toto pravidlo po ověření odebere:

    sudo ufw allow from <LAN_SUBNET> to any port 22 proto tcp comment 'SSH z LAN (dočasně)'

    Pro C

    Krok Tailscale přidá pravidlo pro rozhraní tailscale0.

    Pro D

    SSH odkudkoli, s omezením počtu pokusů (limit = nejvýš 6 spojení za 30 s z jedné adresy):

    sudo ufw limit 22/tcp comment 'SSH'

    Zapnutí a kontrola:

    sudo ufw enable
    sudo ufw status verbose

    Pozor na Docker: porty publikované kontejnerem UFW obchází, viz Docker na Ubuntu Serveru.

  2. SSH přes Tailscale

    Způsoby: A ne · B ne · C ano · D ne

    Privátní síť mezi vašimi zařízeními. SSH pak povolíte jen na rozhraní tailscale0 a z internetu ho úplně zavřete, bez otevřených portů na routeru. Spojení v lokální síti jde napřímo, nic nezpomaluje.

    Otevřít návod: SSH přes Tailscale →

  3. Ochrana proti útokům hrubou silou (Fail2Ban)

    Způsoby: A ne · B volitelné · C volitelné · D ano

    Dočasně blokuje adresy, ze kterých přichází opakované neúspěšné pokusy o přihlášení. Nutný je u SSH dostupného z internetu. Když je SSH jen v lokální síti nebo přes Tailscale, útoky hrubou silou k serveru skoro nedojdou.

    Otevřít návod: Ochrana proti útokům hrubou silou (Fail2Ban) →

Potřebujete bezpečně nastavit server?

Navrhneme, zabezpečíme a zdokumentujeme sítě i servery.

Servery a sítě