Útoků na otevřený SSH port je na internetu skutečně hodně a zkušený admin se jimi obvykle ani nezabývá. Existuje několik různých způsobů, jak je možné se proti nim bránit. Jedním z nich je sofistikovaný nástroj DenyHosts, který dokáže automaticky bránit vaše hradby.
Co to přesně je?
Jedná se o skript, který automaticky sleduje záznamy v /var/log/secure
(v Debianu /var/log/auth.log
obecně ale kdekoliv) a hlídá neúspěšné pokusy o přihlášení do SSH. Pokud skript po analýze zjistí, že se mu požadavky z některého počítače zdají být dostatečně podezřelé, uloží záznam do /etc/hosts.deny
, čímž do budoucna znemožní další připojování konkrétního stroje k SSH.
Program automaticky sleduje několik různých údajů jako je počet neúspěšných pokusů o přihlášení, pokusy o přihlašování k neexistujícím uživatelům, snahy o přihlášení pod uživatelem root a další. Zároveň jsou například sledovány podezřelé úspěšné pokusy o přihlášení, tedy takové, kterým předcházelo větší množství neúspěšných pokusů.
Zároveň si DenyHosts udržuje vlastní záznamy o neúspěšných pokusech o přihlášení, o nejčastěji zkoušených uživatelských jménech a podobně. Ty program sám později znovu využívá při svých analýzách nebo je možné je využít k nasazení dalších obranných řešení například pro nejčastěji napadaného uživatele.
Jak to můžu používat?
Pokud používáte unixový systém, v používání vám nic nebrání. Oficiálně DenyHosts podporuje linuxové systémy, FreeBSD, OpenBSD a Mac OS X. Obecně by ale měl běžet kdekoliv, kde je k dispozici standardní log a OpenSSH server.
Samotný skript je napsán v Pythonu, což je také jediná jeho závislost. Stáhnout jej můžete z domovské stránky projektu nebo jej najdete ve své distribuci. Je velmi pravděpodobné, že tam bude. V opačném případě stačí nainstalovat Python, stáhnout archiv s programem a spustit instalaci. Balíček má každopádně jen okolo 60 KB.
DenyHosts je možné spouštět buďto ručně, pravidelně pomocí Cronu nebo jej můžete nechat běžet jako démona. Ve všech případech si udržuje informaci o tom, kde naposledy v logu skončil a analyzuje vždy jen novější záznamy.
Každopádně budete potřebovat celý proces nastavit. To se provádí v konfiguračním souboru /etc/denyhosts.conf
. Obsah je velmi jednoduchý a přehledná. První volbou SECURE_LOG
určíte cestu k logu, který má být sledován a analyzován. Stejně tak je možnost nastavit konfigurační soubor pro blokaci přístupů pomocí nastavení HOSTS_DENY
. Obvykle je to /etc/hosts.deny
, v některých systémech se ale také můžete setkat s /etc/hosts.evil
a jinými odlišnostmi.
Volba PURGE_DENY
umožňuje nastavit, zda má zablokovaný host po určité době dostat amnestii. Pokud je volba prázdná, milost se neuděluje a host je blokován trvale. Můžete ovšem vložit časový údaj v podobě čísla a přípony m, h, d, w, y (minut, hodin, dní, týdnů a let), například 2w
. Za dva týdny bude blokovanému hostu opět umožněn přístup k vašemu SSH.
K předchozí volbě se váže také položka PURGE_THRESHOLD
, která umožňuje zatočit s recidivisty. Udává vlastně maximální počet amnestií, které může dostat. Pokud se opakují další nekalosti, je host blokován trvale.
Položka BLOCK_SERVICE
určuje název služby, který bude uveden v /etc/hosts.deny
pro blokaci. Obvykle chcete nezbednému protějšku zablokovat sshd
, ale pokud chcete být přísní, můžete mu zablokovat přístup ke všem službám na vašem serveru pomocí ALL
.
Dostáváme se k volbám samotné blokace. Důležitá položka DENY_THRESHOLD_INVALID
určuje, v kolika pokusech o přihlášení musí konkrétní host selhat, aby byl blokován. Jedná se o pokusy, kdy je vyplňováno už neexistující jméno uživatele. Standardně je doporučována hodnota okolo pětky. Podobně hodnota DENY_THRESHOLD_VALID
určuje maximální počet neúspěšných pokusů, ale s existujícím uživatelem. Výjimkou je uživatel root. Pro toho existuje speciální hranice v položce DENY_THRESHOLD_ROOT
a je obvykle nastavena na pouhý jeden pokus.
Konfigurační soubor dále pokračuje například volbami pro e-mailové reporty, které je možno automaticky zasílat administrátorovi, možnost resetovat počítadlo neúspěšných pokusů hosta při úspěšném přihlášení a volbami specifickými pro běh v režimu démona (například časový interval analýzy – obvykle 30 sekund).
Velmi užitečná je také možnost zvolit konkrétní hosty, kteří nebudou nikdy blokováni. To se hodí zejména v případě, že znáte konkrétní IP adresy strojů, ze kterých se vždy přihlašují regulérní uživatelé. Ty vepište do souboru allowed-hosts
, který je v pracovním adresáři programu (konfigurační volba WORK_DIR
) – obvykle /var/lib/denyhosts/
. Zapisuje se jedna IP adresa na jeden řádek souboru.
Synchronizace zjištěných údajů
Za normálních okolností program funguje na lokální úrovni, sleduje dění na svém SSH serveru a blokuje lokálně pokusy o napadení a hádání hesel. Vývojáře ovšem později napadlo (přidáno od verze 2.0), že by nebylo špatné tyto informace sdílet mezi servery a zlepšit tak schopnosti blokace hostů, kteří už se o útok pokoušeli na jiném místě na světě. Proto vznikla možnost synchronizace zjištěných dat mezi různými instalacemi DenyHosts.
Tato volba je standardně vypnutá a pokud ji chcete začít používat, odkomentujte v konfiguračním souboru volbu SYNC_SERVER
, která obsahuje odkaz na synchronizační server. Na ten jsou automaticky odesílána naměřená data a váš démon naopak může stahovat to, co už zjistili a zablokovali ostatní. Odesílání či přijímání dat je možné v konfiguračních volbách SYNC_UPLOAD
a SYNC_DOWNLOAD
zakázat.
Démon se pak periodicky připojuje a stahuje či posílá jen data, která se změnila. Odesíláte informace o všech blokovaných hostech na své straně. Naopak jste informováni o všech blokacích od ostatních uživatelů DenyHosts. Celkem je do tohoto projektu připojeno téměř 85 000 uživatelů a společně blokují přes čtvrt milionu unikátních hostů. Můžete si prohlédnout aktuální statistiky.
Závěrem
Utilita DenyHosts je velmi užitečný způsob, jak se vyhnout problémům s internetovými útoky na SSH servery. Díky synchronizaci umožňuje velmi rychle získat přehled o počítačích, které se pokoušejí automaticky hádat hesla a dostat se do vašeho systému. Pokud používáte SSH, může DenyHosts výrazně ulehčit vašemu serveru.