Jak zpevnit OpenSSH na Ubuntu 20.04

Linuxové servery jsou často spravovány vzdáleně pomocí SSH připojením k serveru OpenSSH , což je výchozí serverový software SSH používaný v Ubuntu, Debian, CentOS, FreeBSD a většině ostatních systémů založených na Linuxu/BSD.

OpenSSH server je serverová strana SSH, známá také jako SSH démon nebo sshd. K serveru OpenSSH se můžete připojit pomocí klienta OpenSSH, konkrétně spuštěním ssh příkaz. Více o modelu klient-server SSH se můžete dozvědět v SSH Essentials: Práce se SSH servery, klienty a klíči . Správné zabezpečení vašeho OpenSSH serveru je velmi důležité, protože funguje jako vstupní dveře nebo vstupní bod do vašeho serveru.

V tomto tutoriálu posílíte svůj OpenSSH server pomocí různých možností konfigurace, abyste zajistili, že vzdálený přístup k vašemu serveru bude co nejbezpečnější.

Předpoklady 

K dokončení tohoto tutoriálu budete potřebovat:

Jakmile to budete mít připravené, přihlaste se na svůj server jako uživatel bez oprávnění root a začněte.

Krok 1 — Obecné kalení 

V tomto prvním kroku implementujete některé počáteční konfigurace zesílení, abyste zlepšili celkovou bezpečnost vašeho serveru SSH.

Přesná konfigurace zesílení, která je nejvhodnější pro váš vlastní server, do značné míry závisí na vašem vlastním modelu hrozby a prahu rizika . Konfigurace, kterou v tomto kroku použijete, je však obecná zabezpečená konfigurace, která bude vyhovovat většině serverů.

Budete upravovat hlavní konfigurační soubor OpenSSH v /etc/ssh/sshd_config nastavit většinu možností kalení v tomto tutoriálu. Než budete pokračovat, je dobré vytvořit zálohu vašeho stávajícího konfiguračního souboru, abyste jej mohli obnovit v nepravděpodobném případě, že se něco pokazí.

Vytvořte zálohu souboru pomocí následujícího cp příkaz:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Tím se uloží záložní kopie souboru do /etc/ssh/sshd_config.bak.

Dále si prohlédněte aktuální výchozí možnosti konfigurace OpenSSH, které odpovídají nastavení v /etc/ssh/sshd_config. Chcete-li to provést, spusťte následující příkaz:

sudo sshd -T

Tím se spustí OpenSSH server v rozšířeném testovacím režimu, který ověří úplný konfigurační soubor a vytiskne efektivní konfigurační hodnoty.

Nyní můžete otevřít konfigurační soubor pomocí nano nebo váš oblíbený textový editor a začněte implementovat počáteční opatření pro zpevnění:

sudo nano /etc/ssh/sshd_config

Poznámka: Konfigurační soubor serveru OpenSSH, který je nainstalován s Ubuntu 20.04, obsahuje mnoho výchozích možností a konfigurací. V závislosti na vaší stávající konfiguraci serveru mohou být některé z doporučených možností zesílení již nastaveny.

Při úpravě konfiguračního souboru mohou být některé možnosti ve výchozím nastavení zakomentovány pomocí jediného hash znaku ( #) na začátku řádku. Chcete-li tyto možnosti upravit nebo tuto možnost povolit, budete je muset odkomentovat odstraněním hash.

První možností zesílení je zakázat přihlašování přes SSH jako uživatel root . Nastavte PermitRootLogin možnost no zrušením komentáře nebo úpravou řádku:

sshd_config
PermitRootLogin no

Tato možnost zabrání potenciálnímu útočníkovi přihlásit se na váš server přímo jako root. Podporuje také dobré provozní bezpečnostní postupy z vaší strany, jako je provozování jako neprivilegovaný uživatel a používání sudo eskalovat privilegia pouze tehdy, když je to nezbytně nutné.

Dále můžete omezit maximální počet pokusů o ověření pro konkrétní relaci přihlášení konfigurací MaxAuthTries volba:

sshd_config
MaxAuthTries 3

Standardní hodnota 3 je přijatelné pro většinu nastavení, ale možná budete chtít nastavit vyšší nebo nižší v závislosti na vašem vlastním prahu rizika.

V případě potřeby můžete také nastavit zkrácenou dobu odkladu přihlášení, což je doba, kterou má uživatel na dokončení ověření po prvním připojení k vašemu serveru SSH:

sshd_config
LoginGraceTime 20

Konfigurační soubor specifikuje tuto hodnotu v sekundách.

Nastavení na nižší hodnotu pomáhá předcházet určitým útokům typu denial-of-service , kdy je po delší dobu otevřeno více relací ověřování.

Pokud jste nakonfigurovali klíče SSH pro autentizaci, místo používání hesel deaktivujte ověřování heslem SSH, abyste zabránili úniku hesel uživatelů, aby umožnili útočníkovi přihlášení:

sshd_config
PasswordAuthentication no

Jako další zpřísňující opatření týkající se hesel můžete také zakázat ověřování pomocí prázdných hesel. To zabrání přihlášení, pokud je heslo uživatele nastaveno na prázdnou nebo prázdnou hodnotu:

sshd_config
PermitEmptyPasswords no

Ve většině případů použití bude SSH nakonfigurováno s ověřováním pomocí veřejného klíče jako jedinou používanou metodou ověřování. OpenSSH server však také podporuje mnoho dalších metod ověřování, z nichž některé jsou ve výchozím nastavení povoleny. Pokud tyto nejsou vyžadovány, můžete je deaktivovat, abyste dále snížili plochu útoku vašeho serveru SSH:

sshd_config
ChallengeResponseAuthentication no
KerberosAuthentication no
GSSAPIAuthentication no

Pokud se chcete dozvědět více o některých dalších metodách ověřování dostupných v rámci SSH, můžete si prostudovat tyto zdroje:

X11 forwarding umožňuje zobrazení vzdálených grafických aplikací přes SSH připojení, ale to se v praxi používá jen zřídka. Pokud na svém serveru nepoužíváte grafické prostředí, vypněte jej:

sshd_config
X11Forwarding no

OpenSSH server umožňuje připojení klientů k předávání vlastních proměnných prostředí. Klient se může například pokusit nastavit vlastní $PATH nebo pro konfiguraci nastavení terminálu. Nicméně, stejně jako přesměrování X11, nejsou běžně používány, takže ve většině případů můžete tuto možnost zakázat:

sshd_config
PermitUserEnvironment no

Pokud se rozhodnete omezit tuto možnost nastavením na no, pak byste se měli také ujistit, že zakomentujete všechny odkazy v konfiguračním souboru na AcceptEnv přidáním hashe ( #) na začátek libovolného řádku, který určuje tuto možnost.

Dále můžete zakázat několik různých možností souvisejících s tunelováním a předáváním, pokud je na svém serveru nebudete používat:

sshd_config
AllowAgentForwarding no
AllowTcpForwarding no
PermitTunnel no

Nakonec můžete zakázat podrobný banner SSH, který je ve výchozím nastavení povolen, protože zobrazuje různé informace o vašem systému, například verzi operačního systému:

sshd_config
DebianBanner no

Všimněte si, že tato možnost s největší pravděpodobností již nebude přítomna v konfiguračním souboru, takže ji možná budete muset přidat ručně. Uložte a ukončete soubor, jakmile budete hotovi. Pokud používáte nano stiskněte CTRL+O pro uložení souboru a stiskněte ENTER po zobrazení výzvy s názvem souboru. Poté stiskněte CTRL+X pro ukončení editoru.

Nyní ověřte syntaxi vaší nové konfigurace spuštěním sshd v testovacím režimu s -t vlajka:

sudo sshd -t

Pokud má váš konfigurační soubor platnou syntaxi, nebude k dispozici žádný výstup. V případě syntaktické chyby bude výstup popisující problém.

Jakmile budete s konfiguračním souborem spokojeni, můžete jej znovu načíst sshd pomocí systemd pro použití nových nastavení:

sudo systemctl reload sshd.service

V tomto kroku jste dokončili některé obecné posílení konfiguračního souboru serveru OpenSSH. Dále implementujete seznam povolených IP adres, abyste dále omezili, kdo se může přihlásit k vašemu serveru.

Krok 2 — Implementace seznamu povolených IP adres 

Seznamy povolených adres IP můžete použít k omezení uživatelů, kteří mají oprávnění k přihlášení k vašemu serveru na základě adresy IP. V tomto kroku nakonfigurujete seznam povolených IP pro váš server OpenSSH.

V mnoha případech se budete k serveru přihlašovat pouze z malého počtu známých, důvěryhodných IP adres. Například vaše domácí připojení k internetu, podnikové zařízení VPN nebo statický skokový box nebo bašta hostitele v datovém centru.

Zavedením seznamu povolených IP adres můžete zajistit, že se lidé budou moci přihlásit pouze z jedné z předem schválených IP adres, což výrazně snižuje riziko narušení v případě úniku vašich soukromých klíčů a/nebo hesel.

Poznámka: Při identifikaci správných IP adres, které chcete přidat do svého seznamu povolených, dejte pozor a zajistěte, aby se nejednalo o vyhrazené nebo dynamické adresy, které se mohou pravidelně měnit, jak je například často vidět u spotřebitelských poskytovatelů internetových služeb.

IP adresu, se kterou se aktuálně připojujete k serveru, můžete identifikovat pomocí w příkaz:

w

Výsledkem bude něco podobného následujícímu:

Output

14:11:48 up 2 days, 12:25, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
your_username pts/0 203.0.113.1 12:24 1.00s 0.20s 0.00s w

Najděte svůj uživatelský účet v seznamu a poznamenejte si připojovací IP adresu. Zde použijeme příklad IP 203.0.113.1

Abyste mohli začít implementovat svůj seznam povolených IP adres, otevřete konfigurační soubor serveru OpenSSH v nano nebo váš preferovaný textový editor:

sudo nano /etc/ssh/sshd_config

Seznam povolených IP adres můžete implementovat pomocí AllowUsers konfigurační direktiva, která omezuje autentizaci uživatelů na základě uživatelského jména a/nebo IP adresy.

Vaše vlastní nastavení systému a požadavky určí, která konkrétní konfigurace je nejvhodnější. Následující příklady vám pomohou vybrat ten nejvhodnější:

  • Omezit všechny uživatele na konkrétní IP adresu:
AllowUsers *@203.0.113.1
AllowUsers *@203.0.113.0/24
  • Omezit všechny uživatele na konkrétní rozsah IP adres (pomocí zástupných znaků):
AllowUsers *@203.0.113.*
  • Omezit všechny uživatele na více konkrétních IP adres a rozsahů:
AllowUsers *@203.0.113.1 *@203.0.113.2 *@192.0.2.0/24 *@172.16.*.1
  • Zakázat všechny uživatele kromě pojmenovaných uživatelů z konkrétních IP adres:
AllowUsers sammy@203.0.113.1alex@203.0.113.2
  • Omezit konkrétního uživatele na konkrétní IP adresu a zároveň umožnit všem ostatním uživatelům se přihlásit bez omezení:
Match User ashley
  AllowUsers ashley@203.0.113.1

Upozornění: V rámci konfiguračního souboru OpenSSH jsou všechny konfigurace pod a Match blok se použije pouze na připojení, která splňují kritéria, bez ohledu na odsazení nebo zalomení řádků. To znamená, že musíte být opatrní a zajistit, aby konfigurace určené pro globální použití nebyly náhodně vloženy do a Match blok. Doporučuje se dát vše Match bloky ve spodní části/konci vašeho konfiguračního souboru, abyste tomu zabránili.

Jakmile dokončíte konfiguraci, přidejte ji na konec konfiguračního souboru serveru OpenSSH:

sshd_config
AllowUsers *@203.0.113.1

Uložte a zavřete soubor a poté pokračujte v testování syntaxe konfigurace:

  1. sudo sshd -t
Pokud nejsou hlášeny žádné chyby, můžete znovu načíst server OpenSSH a použít konfiguraci:
  1. sudo systemctl reload sshd.service

V tomto kroku jste implementovali seznam povolených IP adres na vašem serveru OpenSSH. Dále omezíte shell uživatele, abyste omezili příkazy, které smí používat.

Krok 3 — Omezení prostředí uživatele 

V tomto kroku prozkoumáte různé možnosti omezení shellu uživatele SSH.

Kromě vzdáleného přístupu k shellu je SSH také skvělý pro přenos souborů a dalších dat, například přes SFTP. Možná však nebudete vždy chtít udělit uživatelům plný přístup k shellu, když potřebují být schopni provádět pouze přenosy souborů.

V rámci serveru OpenSSH existuje několik konfigurací, které můžete použít k omezení prostředí shellu konkrétních uživatelů. Například v tomto tutoriálu je použijeme k vytvoření uživatelů pouze SFTP.

Za prvé, můžete použít /usr/sbin/nologin shell k deaktivaci interaktivních přihlášení pro určité uživatelské účty a zároveň umožňuje fungování neinteraktivních relací, jako jsou přenosy souborů, tunelování a tak dále.

Chcete-li vytvořit nového uživatele pomocí nologin shell, použijte následující příkaz:

sudo adduser –shell /usr/sbin/nologin alex

Případně můžete změnit shell stávajícího uživatele nologin:

sudo usermod –shell /usr/sbin/nologin sammy

Pokud se poté pokusíte interaktivně přihlásit jako jeden z těchto uživatelů, požadavek bude zamítnut:

sudo su alex

Výsledkem bude něco podobného jako následující zpráva:

Output

This account is currently not available.

I přes zprávu o odmítnutí interaktivního přihlášení budou další akce, jako je přenos souborů, stále povoleny.
Dále byste měli kombinovat použití nologin shell s některými dalšími možnostmi konfigurace pro další omezení příslušných uživatelských účtů.
Začněte otevřením konfiguračního souboru serveru OpenSSH v nano nebo znovu váš preferovaný editor:

sudo nano /etc/ssh/sshd_config

 

Existují dvě možnosti konfigurace, které můžete implementovat společně a vytvořit tak přísně omezený uživatelský účet pouze SFTP: ForceCommand internal-sftp a ChrootDirectory.

The ForceCommand volba v rámci serveru OpenSSH nutí uživatele, aby po přihlášení provedl konkrétní příkaz. To může být užitečné pro určitou komunikaci mezi stroji nebo pro násilné spuštění určitého programu.

Nicméně, v tomto případě, internal-sftp Příkaz je obzvláště užitečný. Jedná se o speciální funkci OpenSSH serveru, která spouští místního SFTP démona, který nevyžaduje žádné podpůrné systémové soubory nebo konfiguraci.

To by mělo být ideálně kombinováno s ChrootDirectory volba, která přepíše/změní vnímaný domovský adresář pro konkrétního uživatele, v podstatě jej omezí na konkrétní adresář v systému.

Za tímto účelem přidejte do konfiguračního souboru serveru OpenSSH následující sekci konfigurace:

sshd_config
Match User alex
  ForceCommand internal-sftp
  ChrootDirectory /home/alex/

Upozornění: Jak je uvedeno v kroku 2, v konfiguračním souboru OpenSSH jsou všechny konfigurace pod a Match blok se použije pouze na připojení, která splňují kritéria, bez ohledu na odsazení nebo zalomení řádků. To znamená, že musíte být opatrní a zajistit, aby konfigurace určené pro globální použití nebyly náhodně vloženy do a Match blok. Doporučuje se dát vše Match bloky ve spodní části/konci vašeho konfiguračního souboru, abyste tomu zabránili.

Uložte a zavřete konfigurační soubor a poté konfiguraci znovu otestujte:

sudo sshd -t

Pokud nejsou žádné chyby, můžete použít konfiguraci:

sudo systemctl reload sshd.service

Tím byla vytvořena robustní konfigurace pro alex uživatel, kde jsou zakázána interaktivní přihlášení a veškerá aktivita SFTP je omezena na domovský adresář uživatele. Z pohledu uživatele je kořen systému, tj. /, je jejich domovský adresář a nebudou moci procházet systémem souborů a přistupovat do jiných oblastí.

Implementovali jste nologin shell pro uživatele a poté vytvořil konfiguraci pro omezení přístupu SFTP ke konkrétnímu adresáři.

Krok 4 — Pokročilé kalení 

V tomto posledním kroku implementujete různá dodatečná zpřísňující opatření, aby byl přístup k vašemu serveru SSH co nejbezpečnější.

Server OpenSSH může ukládat omezení na základě jednotlivých klíčů. Konkrétně lze omezení omezení použít na jakékoli veřejné klíče, které jsou přítomny v .ssh/authorized_keys soubor. Tato schopnost je zvláště užitečná pro řízení přístupu pro relace mezi stroji a také poskytuje možnost uživatelům, kteří nejsou sudo, ovládat omezení pro svůj vlastní uživatelský účet.

I když většinu těchto omezení můžete použít na systémové nebo uživatelské úrovni pomocí /etc/ssh/sshd_configuration může být výhodné implementovat je také na úrovni klíče, aby byla zajištěna ochrana do hloubky a další zabezpečení proti selhání v případě náhodných chyb konfigurace celého systému.

Poznámka: Tyto dodatečné konfigurace zabezpečení můžete implementovat pouze v případě, že používáte ověřování pomocí veřejného klíče SSH. Pokud používáte pouze ověřování heslem nebo máte složitější nastavení, jako je certifikační autorita SSH, tyto možnosti nebudou použitelné.

Začněte otevřením svého .ssh/authorized_keys soubor v nano nebo váš preferovaný editor:

nano ~/.ssh/authorized_keys

Poznámka: Protože tyto konfigurace platí pro jednotlivé klíče, budete muset upravit každý jednotlivý klíč v každém jednotlivci authorized_keys soubor, na který se mají vztahovat, pro všechny uživatele ve vašem systému. Obvykle budete potřebovat upravit pouze jeden klíč/soubor, ale to stojí za zvážení, pokud máte složitý systém pro více uživatelů.

Jakmile otevřete svůj authorized_keys soubor, uvidíte, že každý řádek obsahuje veřejný klíč SSH, který bude s největší pravděpodobností začínat něčím jako ssh-rsa AAAB.... Na začátek řádku lze přidat další možnosti konfigurace, které se budou vztahovat pouze na úspěšnou autentizaci proti tomuto konkrétnímu veřejnému klíči.

K dispozici jsou následující možnosti omezení:

  • no-agent-forwarding: Zakažte přesměrování agenta SSH.
  • no-port-forwarding: Zakázat přesměrování portů SSH.
  • no-pty: Zakáže možnost alokovat tty (tj. spustit shell).
  • no-user-rc: Zabránit spuštění ~/.ssh/rc soubor.
  • no-X11-forwarding: Deaktivuje přesměrování displeje X11.

Můžete je použít k deaktivaci konkrétních funkcí SSH pro konkrétní klíče. Chcete-li například zakázat předávání agenta a předávání X11 pro klíč, použijte následující konfiguraci:

~/.ssh/authorized_keys
no-agent-forwarding,no-X11-forwarding ssh-rsa AAAB...

Ve výchozím nastavení tyto konfigurace fungují pomocí metodologie „ve výchozím nastavení povolit, blokovat výjimkou“; je však také možné použít „blokovat ve výchozím nastavení, povolit výjimkou“, což je obecně výhodnější pro zajištění bezpečnosti.

Můžete to udělat pomocí restrict možnost, která implicitně zakáže všechny funkce SSH pro konkrétní klíč, což vyžaduje, aby byly explicitně znovu povoleny pouze tam, kde je to nezbytně nutné. Funkce můžete znovu povolit pomocí stejných možností konfigurace popsaných dříve v tomto kurzu, ale bez no- předpona.

Chcete-li například zakázat všechny funkce SSH pro konkrétní klíč, kromě předávání zobrazení X11, můžete použít následující konfiguraci:

~/.ssh/authorized_keys
restrict,X11-forwarding ssh-rsa AAAB...

Můžete také zvážit použití command možnost, která je velmi podobná ForceCommand možnost popsaná v kroku 3. Pokud již používáte, neposkytuje to přímou výhodu ForceCommand, ale je dobré mít ji na místě, ale je dobré ji mít na místě, jen pro nepravděpodobný případ, že by byl váš hlavní konfigurační soubor OpenSSH serveru přepsán, upraven a tak dále.

Chcete-li například přinutit uživatele, aby se autentizovali pomocí konkrétního klíče, aby po přihlášení provedli konkrétní příkaz, můžete přidat následující konfiguraci:

~/.ssh/authorized_keys
command="top" ssh-rsa AAAB...

Upozornění: The command konfigurační volba funguje čistě jako metoda ochrany do hloubky a neměla by se spoléhat pouze na omezení aktivit uživatele SSH, protože v závislosti na vašem prostředí existují potenciálně způsoby, jak ji přepsat nebo obejít. Místo toho byste měli použít konfiguraci v tandemu s ostatními ovládacími prvky popsanými v tomto článku.

A konečně, chcete-li co nejlépe využít omezení na klíč pro uživatele pouze SFTP, které jste vytvořili v kroku 3, můžete použít následující konfiguraci:

~/.ssh/authorized_keys
restrict,command="false" ssh-rsa AAAB...

The restrict volba zakáže veškerý interaktivní přístup a command="false" opce funguje jako druhá obranná linie v případě, že ForceCommand možnost nebo nologin shell selhal.

Chcete-li použít konfiguraci, uložte a zavřete soubor. Toto se projeví okamžitě pro všechna nová přihlášení, takže OpenSSH nemusíte znovu načítat ručně. Před odpojením aktuální relace SSH nezapomeňte otestovat příkazy, které hodláte použít.

V tomto posledním kroku jste implementovali některá další pokročilá opatření k posílení pro server OpenSSH pomocí vlastních možností ve vašem .ssh/authorized_keys soubor(y).

Závěr 

V tomto článku jste zkontrolovali konfiguraci serveru OpenSSH a implementovali různá zpřísňující opatření, která vám pomohou zabezpečit váš server.

Možnosti, které jste nakonfigurovali, snížily celkovou plochu útoku vašeho serveru tím, že zakázaly nepoužívané funkce a zablokovaly přístup konkrétních uživatelů.

Možná si budete chtít prohlédnout manuálové stránky pro OpenSSH server a jeho přidružený konfigurační soubor , abyste zjistili případné další úpravy, které chcete provést.

Zdroj: https://www.digitalocean.com/community/tutorials/how-to-harden-openssh-on-ubuntu-20-04