Jak provést základní zabezpečení vašeho linuxového serveru? Ukážeme si několik verzí firewallů, ze kterých si můžete vybrat ten nejvhodnější. Podíváme se na rozdíly mezi přihlašováním pomocí SSH a běžným heslem. Ukážeme si nástroje k odhalení průniku na server. A nakonec se dozvíte 6 základních tipů k bezpečnosti vašeho serveru.

Převzít kontrolu nad vlastním serverem Linuxu je příležitost vyzkoušet si nové věci i jak působí síla a flexibilita skvělé platformy. Má-li ale být server Linuxu dobře chráněný a bezpečný, musejí být jeho administrátoři stejně obezřelí a podnikat stejná patřičná opatření, jako u jakéhokoli jiného stroje připojeného na síť.

Existuje mnoho všelijakých bezpečnostních témat, která spadají do obecné kategorie „bezpečnost Linuxu“ a mnozí ji chápou v tom smyslu, jaká je patřičná úroveň zabezpečení pro server Linuxu.

To hlavní, co byste si měli odnést z těchto slov, je konstatování, že vy sami budete muset rozhodnout, jaké bezpečnostní ochrany jsou nezbytné. Než tak učiníte, měli byste si být vědomi rizik a kompromisů, abyste svými rozhodnutími docílili smysluplné vyváženosti mezi použitelností a bezpečností.

Článek je míněn tak, aby pomohl orientovat se v některých nejběžnějších bezpečnostních opatřeních, která se podnikají v prostředí serveru Linuxu. Není to jejich vyčerpávající seznam, ani se zde neprobírají doporučené konfigurace, článek poskytuje odkazy na důkladnější zdroje a diskutuje se v něm, proč jsou zmiňované komponenty důležitou součástí mnoha systémů.

ZonerCloud

Překlad článku vznikl za podpory virtuálních serverů od ZonerCloud.cz

Blokování přístupu s firewally

Jedním z nejsnazších kroků, který se doporučuje všem uživatelům, je zapnout a nakonfigurovat nějakou protipožární zeď, neboli firewall. Firewally fungují jako bariéra mezi všeobecným internetovým provozem a vaším strojem. Prohlížejí provoz směřující do a ven z vašeho serveru a rozhodují, zda mají povolit doručení těchto informací.

Dělají to tak, že kontrolují provoz, který přichází v úvahu pro, či proti jisté sadě pravidel, kterou nakonfiguruje uživatel. Server bude obvykle pro legitimizaci služeb používat jen několik specifických portů. Zbytek portů se nepoužívá a rozhodně měly by být bezpečně chráněné za firewallem. Ten bude odmítat veškerý provoz určený pro tato umístění.

To umožňuje odhazovat data, která neočekáváte, a v některých případech dokonce podmiňovat použití skutečných služeb. Zdravá firewallová pravidla poskytují solidní základy pro zabezpečení sítě.

Je dostupných docela dost firewallových řešení. Některé z nejoblíbenějších si teď stručně projdeme.

UFW

UFW je akronym pro uncomplicated firewall neboli nekomplikovanou protipožární zeď. Jeho cílem je poskytovat dobrou ochranu bez komplikované syntaxe jiných řešení.

UFW, stejně jako většina firewallů Linuxu, je ve skutečnosti front-end, který má řídit firewall netfilter dodávaný s kernelem Linuxu. Je to obvykle jednoduchý firewall pro lidi, kteří ještě nejsou dobře obeznámeni s firewallovými řešeními Linuxu. Obvykle je to dobrá volba.

IPTables

Patrně nejlépe dobře známé řešení firewallu Linuxu je iptables. IPTables je další komponenta, která se používá k administraci firewallu netfilter, který je zařazený v kernelu Linuxu. Je mezi námi už hodně dlouho a podstoupil intenzívní bezpečnostní audity, aby bylo jisté, že se na něj dá spolehnout. Existuje verze iptables s názvem ip6tables určená pro vytváření restrikcí IPv6.

Během doby, po které administrujete Linux servery, jste už patrně narazili na iptables. Pochopit syntax nemusí být z počátku zrovna lehké, je to však neuvěřitelně mocný nástroj, který lze konfigurovat s velmi flexibilní sadou pravidel.

IP6Tables

Jak bylo zmíněno výše, pomocí iptables se manipuluje s tabulkami obsahujícími pravidla IPv4. Pokud máte na serveru zapnutý IPv6, bude třeba, abyste také věnovali pozornost ekvivalentu IPv6: ip6tables.

Firewall netfilter, který je zařazený do kernelu Linuxu, udržuje provozy IPv4 a IPv6 zcela odděleně. Jsou uložené v různých tabulkách. Pravidla, která diktují definitivní osud nějakého paketu, jsou determinována právě používanou verzí protokolu.

Pro administraci serveru to znamená, že pokud je zapnutá verze 6, musí se udržovat separátní sada pravidel. Příkaz ip6tables sdílí stejnou syntaxi s příkazem iptables, takže implementace stejné sady restrikcí ve verzi 6 bývá obvykle bezproblémová. Aby vše fungovalo korektně, musíte však zajistit, aby byl odpovídající provoz směrován na vaše IPv6 adresy.

NFTables

Přestože je iptables v prostředí Linuxu už dlouhou dobu pro firewally standardem, nedávno byl do kernelu Linuxu přidán nový firewall s názvem nftables. Je to projekt od stejného týmu, který vyrábí iptables, a jeho záměrem je iptables nahradit.

Firewall nftables se pokouší implementovat čitelnější syntax, než jaká je v jeho předchůdci iptables, a implementuje podporu IPv4 a IPv6 do téhož nástroje. Přestože se v současné době většina verzí Linuxu nedodává s tak dostatečně novým kernelem, aby mohl implementovat nftables, brzy bude zcela běžným, proto byste se měli seznámit s jeho používáním.

Zabezpečené vzdálené přihlášení pomocí SSH

Když administrujete server, kde nemáte lokální přístup, bude potřeba, abyste se přihlašovali vzdáleně. Standardní, bezpečný způsob, jak to provést na nějakém systému Linux, je dělat to prostřednictvím protokolu bezpečného shellu, známého pod zkratkou SSH (secure shell).

SSH poskytuje šifrování od začátku až do konce, způsobilost tunelovat nezabezpečený provoz přes zabezpečené připojení, X-přeposílání (X-forwarding, grafické uživatelské rozhraní přes nějaké síťové připojení), a mnoho dalších věcí. V zásadě, pokud nemáte přístup ani k lokálnímu připojení, ani out-of-band management (nějaký dedikovaný kanál ke správě síťových zařízení), měl by SSH být primární způsob interakce s vaším serverem.

Přestože je samotný protokol velmi bezpečný a byl podroben rozsáhlému bádání a revizi kódu, mohou konfigurační volby buď napomáhat, nebo překážet bezpečnosti služby. Několik voleb teď probereme.

Přihlašování heslem versus přihlašování SSH klíčem

SSH má flexibilní autentizační model, který umožňuje přihlašovat se několika různými metodami. Dvě nejoblíbenější volby jsou autentizace heslem a autentizace SSH klíčem.

Přestože je autentizace heslem pro většinu uživatelů patrně nejpřirozenější model, je z těchto dvou voleb ta méně bezpečná. Přihlašování heslem umožňuje potenciálnímu vetřelci nepřetržitě se snažit uhádnout heslo, dokud nenajde úspěšnou kombinaci. Říká se tomu útok hrubou silou a ti, kdo by se rádi stali profesionálními útočníky, mohou takové útoky s pomocí moderních nástrojů snadno automatizovat.

Naproti tomu SSH klíče operují tak, že vygenerují bezpečnou dvojici klíčů. Veřejný klíč slouží jako typ testu k identifikaci uživatele. Může se bez potíží veřejně sdílet a nemůže se použít k ničemu jinému než k identifikaci uživatele, a umožňuje se přihlašovat tomu uživateli, který vlastní odpovídající privátní klíč. Privátní klíč se musí držet na tajném místě a používá se k otestování s ním sdruženého veřejného klíče.

V zásadě tedy můžete na server dodat veřejný SSH klíč, což pak umožňuje přihlašovat se pomocí odpovídajícího privátního klíče. Tyto klíče jsou natolik složité, že útok hrubou silou není proveditelný. Navíc můžete ke svému klíči volitelně dodat dlouhou heslovou frázi (passphrase), čím zabezpečení ještě zvýšíte.

Klikněte na následujícím odkazu, chcete-li se dozvědět víc o tom, jak se používá SSH a na další odkaz přejděte, chcete-li se dozvědět, jak na serveru připravíte SSH klíče.

Implementujte fail2ban, abyste zakázali zákeřné IP adresy

Krok, který všeobecně pomáhá přispět k lepšímu zabezpečení SSH konfigurace, je implementovat nějaké takové řešení, jaké nabízí fail2ban. Fail2ban je služba, která monitoruje autentizační logy, aby mohla určit, že nějaký vzdálený systém pravděpodobně není legitimní uživatel, a pak dočasně zakázat budoucí provoz od sdružené IP adresy.

Když pro fail2ban připravíte správné zásady, budete moci „označit vlaječkou“ počítače, které se nepřetržitě snaží neúspěšně přihlásit, a přidat firewallová pravidla, která budou provoz od nich po nastavenou dobu odhazovat. Je to snadný způsob, jak se bránit proti často používaným metodám útoku hrubou silou, protože si budou muset dát na nějakou dobu pauzu, když jsou zakázané. Obvykle to stačí a odradí to od dalších pokusů o útoky hrubou silou.

Implementace systému odhalení průniku k detekci neautorizovaného vstupu

Jedním z důležitých aspektů, který je třeba mít také na zřeteli, je vývoj nějaké strategie pro detekci neautorizovaného používání. Možná už máte v činnosti nějaká preventivní opatření, potřebujete však také vědět, zda uspěla nebo ne.

Systém odhalení průniku (intrusion detection system), známý pod zkratkou IDS, katalogizuje konfiguraci a podrobnosti o souborech v době, kdy se ví, že jsou v dobrém stavu. Pak spouští porovnání s těmito zaznamenanými stavy, aby zjistil, zda se soubory změnily nebo byla modifikována nějaká nastavení.

Existuje poměrně dost systémů pro odhalení průniku. Na několik z nich se teď podíváme.

Tripwire

Jednou z nejlépe známých implementací IDS je tripwire. Tripwire sestaví databázi systémových souborů a chrání jejich konfigurační soubory a spustitelné soubory sadou klíčů. Poté, co byly zvoleny podrobnosti konfigurace a definovány výjimky, následné běhy oznamují jakékoli úpravy v souborech, které tento systém monitoruje.

Model zásad je velmi flexibilní, umožňuje formovat jeho vlastnosti podle konkrétního prostředí. Můžete pak konfigurovat běhy tripwire přes nějakou práci cron, nebo pro případy neobvyklé aktivity dokonce implementovat emailové notifikace.

Aide

Jinou volbou pro IDS může být Aide. Podobá se tripwire, také sestaví databázi a porovnává aktuální stav systému s hodnotami, které má uložené, a o nichž ví, že jsou v dobrém stavu. Když se objeví nějaká nesrovnalost, může zjištěný problém oznámit administrátorovi.

Aide a tripwire nabízejí obdobné řešení téhož problému. Projděte si dokumentaci a vyzkoušejte obě řešení, abyste zjistili, které vám vyhovuje lépe.

Psad

Nástroj psad se týká jiné části systému, než nástroje uvedené výše. Nemonitoruje systémové soubory, ale pečlivě sleduje logy firewallu, aby odhalil zákeřné aktivity.

Pokud se například nějaký uživatel pokouší sondovat zranitelnosti skenováním portů, psad umí detekovat tuto činnost a dynamicky měnit firewallová pravidla, aby před pachatelem takovýchto nepravostí zabouchl dveře. Umí registrovat různé úrovně ohrožení a založit svou reakci podle závažnosti problému. Může také volitelně emailovat administrátorovi.

Bro

Jinou volbou síťově založeného IDS je Bro. Bro je ve skutečnosti síťový monitorovací framework a může se používat jako síťový IDS, nebo pro jiné účely, třeba pro sběr statistik o používání, pro prošetřování problémů nebo detekování vzorů.

Systém Bro je rozdělený do dvou vrstev. První vrstva monitoruje aktivity a generuje to, co považuje za události. Druhá vrstva spouští generované události prostřednictvím zásad frameworku, které diktují, co se má udělat s provozem, pokud se má něco udělat. Může generovat upozornění, vykonávat systémové příkazy, nebo jen protokolovat výskyty do logu, nebo podnikat jiná opatření.

RKHunter

I když rkhunter vlastně není systém odhalení průniku, operuje na mnoha stejných principech jako systémy odhalení průniku založené na houstu, aby detekoval rootkity a známý zákeřný software.

Přestože se ve světě Linuxu viry vyskytují jen výjimečně, už nějakou dobu existují malware a rootkity, které mohou napadat váš box nebo pokračovat v přístupu po úspěšném exploiterovi. RKHunter stáhne seznam známých exploitů, a pak proti této databázi prověří váš systém. Vydá také upozornění, pokud v některých běžných aplikacích detekuje nastavení, která nejsou bezpečná.

Všeobecná bezpečnostní doporučení

Výše uvedené nástroje a konfigurace sice mohou pomoci zabezpečit části systému, dobré zabezpečení ale nezískáte tím, že jen implementujete nějaký nástroj, a pak na něj zapomenete. Dobré zabezpečení manifestuje samo sebe určitým postojem a dosahuje se ho pílí, pečlivými prohlídkami, a tím, že zabezpečení chápete jako proces, v němž se angažujete.

Existují jistá všeobecná pravidla, která pomáhají vydat se správným směrem, jejich cílem je používat systém bezpečně.

1. Věnujte pozornost aktualizacím a aktualizujte pravidelně

Softwarové zranitelnosti se vyskytují neustále a najdete je v téměř jakémkoli druhu softwaru, který můžete mít na systému. Udržovatelé distribucí obvykle pracují dobře, drží krok s nejnovějšími bezpečnostními záplatami a dávají tyto aktualizace do svých repositářů.

To, že jsou bezpečnostní aktualizace k dispozici v repositáři, však serveru nijak nepomůže, pokud tyto aktualizace nestahujete a neinstalujete. I když mnohé servery těží z toho, že se spoléhají na stabilní, dobře otestované verze systémového softwaru, bezpečnostní záplaty by se neměly odkládat, měly by se považovat za kritické aktualizace.

Většina distribucí poskytuje mailing listy a separuje bezpečnostní repositáře, aby se stahovaly a instalovaly pouze bezpečnostní záplaty.

2. Buďte opatrní, pokud něco stahujete vně oficiálních kanálů

Většina uživatelů se spokojuje se softwarem, který je dostupný z oficiálních repositářů, a většina distribucí nabízí signované balíky. Uživatelé obvykle mohou důvěřovat udržovatelům distribucí a soustředit svou pozornost ohledně zabezpečení jen na software získávaný vně oficiálních kanálů.

Můžete se sice rozhodnout, že budete důvěřovat balíkům z vaší distribuce, či softwaru, který je k dispozici na oficiálním webu projektu, uvědomte si ale, že pokud sami neprovedete audit každého dílku softwaru, postupujete jisté riziko. Většina uživatelů považuje takovou úroveň rizika za akceptovatelnou.

Naproti tomu software získaný z náhodně zvolených repositářů nebo archivů osobních balíků (PPA, Personal Package Archive) lidí či organizací, o nichž nic nevíte, může představovat obrovité bezpečnostní riziko. Obecně nejde stanovit nějaká pravidla a většina neoficiálních zdrojů softwaru bude pravděpodobně zcela bezpečných, uvědomte si však, že kdykoli důvěřujete nějaké třetí straně, podstupujete riziko.

Přesvědčte se, že dokážete sami sobě vysvětlit, proč tomu či onomu zdroji důvěřujete. A pokud to udělat nemůžete, považujte bezpečnostní riziko, které podstupujete, za závažnější faktor, než pohodlí, které získáváte.

3. Poznejte služby a omezte je jen na nezbytně nutné

Přestože hlavním smyslem provozování serveru je patrně poskytovat služby, k nimž můžete přistupovat, omezte služby běžící na vašem stroji jen na ty, které používáte a potřebujete. Každou zapnutou službu považujte za případnou možnou hrozbu a snažte se eliminovat co nejvíc takových hrozeb, bez nichž se dokážete obejít, aniž by to ovlivnilo jádro vaší funkcionality.

To znamená, že pokud provozujete nějaký „bezhlavý“ server (není připojený žádný monitor) a neprovozujete žádné grafické (newebové) programy, měli byste vypnout a patrně i odinstalovat váš X display server. Obdobná opatření lze podniknout i v jiných oblastech. Žádná tiskárna? Vypněte službu „lp“. Žádné síťové sdílení Windows? Vypněte službu „samba“.

4. Nepoužívejte FTP; používejte místo něho SFTP

Pro mnoho lidí bude možná obtížné se vyrovnat s tím, že FTP je inherentně nezabezpečený protokol. Veškerá autentizace se posílá jako čistý text, což znamená, že detaily přihlášení uvidí kdokoliv, kdo monitoruje připojení mezi serverem a lokálním strojem.

Existuje jen málo instancí, kde je patrně v pořádku implementovat FTP. Pokud provozujete nějaké anonymní, veřejné stahovací zrcadlo určené jen ke čtení, je FTP slušná volba. Jiným případem, kdy je volba FTP v pořádku, je situace, kdy prostě jen přenášíte soubory mezi dvěma počítači, které jsou za firewallem se zapnutým překladem síťových adres (NAT), a zároveň věříte, že je vaše síť bezpečná.

V téměř všech ostatních případech byste měli používat nějakou bezpečnější alternativu. Svita SSH nabízí kompletní alternativní protokol s názvem SFTP, který má obdobné vzezření a funguje podobným způsobem, je však založen na stejném zabezpečení jako protokol SSH.

Umožňuje to přenášet informace na server i z něho ven stejným způsobem, jak byste to dělali tradičně s FTP, ale bez rizika. Většina moderních FTP klientů může také komunikovat s SFTP servery.

5. Implementujte citlivé uživatelské bezpečnostní zásady

Když administrujete uživatele, existuje celá řada kroků, které můžete učinit, abyste systém lépe zabezpečili.

Jedním z doporučení je vypnout přihlašování jako root. Protože uživatel root je přítomen na všech systémech à la POSIX a jedná se o účet, který může všechno, je pro mnohé útočníky atraktivním cílem. Vypnout přihlašování jako root je často dobrý nápad, jakmile jste nakonfigurovali přístup sudo, nebo pokud se dobře vyznáte v příkazu su. Mnozí lidé s tímto doporučením nesouhlasí, alespoň však prozkoumejte, zda právě pro vás tohle náhodou není ta správná volba.

Vypnout vzdálené přihlášení jako root je možné zevnitř SSH démona, nebo vypnout lokální přihlašování, restrikce nastavíte v souboru /etc/securetty. Můžete také nastavit shell uživatele root na non-shell, abyste vypnuli přístup root k shellu, a připravte pravidla PAM (Pozn. př. Pluggable Authentication Modules, knihovny, které na systému zpracovávají autentizační úlohy.), abyste zároveň omezili přihlašování jako root. Skvělý článek o tom, jak vypnout přihlašování jako root, má RedHat.

Jinou dobrou zásadou, která by se měla implementovat u uživatelských účtů, je vytvořit jedinečné účty pro každého uživatele a každou službu, a udělit jim jen holé minimum oprávnění, jen taková, která nezbytně potřebují ke své práci. Uzamkněte vše, k čemu nepotřebují mít přístup, a odeberte jim všechna oprávnění, která je nepoškozují.

Je to důležitá zásada, protože pokud se podaří průlom do jednoho uživatele nebo jedné služby, nepovede to k dominovému efektu, který by útočníkovi umožnil přístup k mnohem větší části systému. Princip rozškatulkování pomáhá izolovat problémy podobně, jako u lodi zajišťuje systém přepážek a vodotěsných dveří, že se nepotopí, když bude mít díru v trupu.

V obdobném duchu, v jakém jsme mluvili o zásadách služeb výše, měli byste také pečlivě vypínat všechny uživatelské účty, které už nejsou potřebné. To může nastat, pokud odinstalujete nějaký software, nebo když nějaký uživatel už nadále nemá mít k systému přístup.

6. Dávejte pozor na nastavení týkající se oprávnění

Přístupová oprávnění k souboru bývají u mnohých uživatelů obrovitým zdrojem frustrací. Najít patřičnou vyváženost u oprávnění, která udělíte, aby se mohlo dělat to, co potřebujete, aniž byste se přitom vystavili riziku, že budete nějak poškozeni, může být obtížná úloha vyžadující v každém scénáři pečlivou pozornost a spoustu přemýšlení.

Cesta k přípravě zdravé zásady umask (vlastnost určující výchozí oprávnění pro nové soubory a adresáře) může být dlouhá, než se podaří vytvořit opravdu dobré výchozí hodnoty. Zde se dozvíte, jak fungují oprávnění a jak upravit hodnotu umask.

Všeobecně řečeno, měli byste si dvakrát rozmyslet, než nastavíte cokoliv tak, že do toho může zapisovat celý svět, a to zejména tehdy, pokud je to nějakým způsobem přístupné internetu. To by mohlo mít velmi závažné konsekvence. Kromě toho byste neměli nastavovat oprávnění SGID nebo SUID bit, pokud zcela přesně nevíte, co tím činíte. Dále také překontrolujte, zda má každý soubor nějakého vlastníka a skupinu.

Souborová oprávnění se budou velmi lišit podle specifiky používání, vždy byste se však měli pokoušet zjišťovat, zda by se nedalo vyjít s méně oprávněními. Je to jedna z věcí, která se velmi snadno dá dělat špatně, i oblast, pro kterou po internetu poletuje spousta špatných rad.

Jak zabezpečit specifický software, který používáte

Přestože tento průvodce není dost dlouhý na to, abychom v něm mohli projít specifika zabezpečení všech druhů služeb a aplikací, existuje hodně dostupných návodů a směrnic online. U každého projektu, který zamýšlíte na systému implementovat, byste si měli přečíst, jaká doporučuje bezpečnostní opatření.

Dále, oblíbený serverový software, mezi něž patří webové servery nebo systémy pro správu databází, mají problematice zabezpečení věnovány celé weby. Obecně se dá říci, že než dáte nějakou službu online, měli byste si pročíst partie o její bezpečnosti a odpovídajícím způsobem ji předem zabezpečit.

V naší sekci o zabezpečení najdete konkrétnější rady pro software, který používáte.

Závěr

Nyní byste měli mít slušné povědomí o obvyklých zabezpečovacích postupech, které můžete implementovat na serveru Linuxu. Přestože jsme se hodně snažili zmínit co nejvíc oblastí s vysokou důležitostí, na konci dne budete muset učinit mnoho svých vlastních rozhodnutí. Když administrujete nějaký server, musíte převzít zodpovědnost za jeho bezpečnost.

To ale není něco, co se dá nakonfigurovat a sprovodit ze světa v jedné rychlé pařbě, je to proces průběžného procvičování auditu systému, implementace řešení, vyhodnocování logů a upozornění, přehodnocování potřeb atd. Při ochraně systému musíte být ostražití a vždy vyhodnocovat a monitorovat výsledky vašich řešení.

Napsal: Justin Elingwood
Přeložil RNDr. Jan Pokorný
Znění původního článku najdete zde.

Creative Commons License

 

Žádný příspěvek v diskuzi

Odpovědět