Hlavní navigace

Blokujte SSH útoky pomocí DenyHosts

Petr Krčmář 1. 9. 2009

Pokud vlastníte či prostě jen jen spravujete nějaký ten server, pravděpodobně na něm provozujete také SSH. Pokud občas nakouknete do logů, zřejmě se zděsíte, kolikrát denně se k vám pokouší dostat někdo cizí. Dle přísloví "na hrubý pytel hrubá záplata" si jednu takovou pořádnou záplatu ukážeme.

Ú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.

Našli jste v článku chybu?

1. 9. 2009 2:54

Ja misto DenyHosts pouzivam samotne iptables s recent modulem. V kazdem 300 sekundovem je povoleno jen 5 spojeni od jedne IP adresy:

iptables -A INPUT -p tcp --dport 22 -m recent --name SSH --set
iptables -A INPUT -p tcp --dport 22 -m recent --name SSH \
   --update --seconds 300 --hitcount 5 -j DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Takze robot si zkusi 5 hesel a pak ma na 5 minut utrum. Funguje to bezvadne, v nejnovejsich jadrech i s IPv6.

8. 4. 2013 12:35

t (neregistrovaný)

osX je *NIX based takze to pujde ;)

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: Slevové šílenství je tu. Kde nakoupit na Black Friday?

Slevové šílenství je tu. Kde nakoupit na Black Friday?

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Podnikatel.cz: Prodává přes internet. Kdy platí zdravotko?

Prodává přes internet. Kdy platí zdravotko?

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Lupa.cz: Babiš: E-shopů se EET možná nebude týkat

Babiš: E-shopů se EET možná nebude týkat

Lupa.cz: Avast po spojení s AVG propustí 700 lidí

Avast po spojení s AVG propustí 700 lidí

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Lupa.cz: UX přestává pro firmy být magie

UX přestává pro firmy být magie

Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU