Ochrana SSH démona proti útokům (4)

Způsobů jak ochránit SSH démona proti útokům je mnoho. Jednou z dalších možností jak zabránit "brute force" útokům je využití modulů PAM (Pluggable Authentication Modules), konkrétně pak "auto blacklist" modulu pam_abl.

Jak to funguje?

Jednoduše řečeno - PAM je systém knihoven, které jednotlivé programy (např. login, su, ...) volají v případě, když je potřeba autentizovat (ověřit totožnost) uživatele. Jak už napovídá název, PAM (Pluggable Authentication Modules) je vytvořen tak, že jej lze snadno konfigurovat, takže je na správci jak si jej přizpůsobí k obrazu svému.

My tedy do procesu autentizace jednoduše vložíme ještě výše zmíněný modul pam_abl, který poskytuje možnost automaticky přidat do black listu ty počítače (IP adresy nebo jejich názvy) a uživatele, kteří se opakovaně neúspěšně pokusili o přihlášení (jinak řečeno překročili limit neúspěšných přihlášení uvedený v konfiguračním souboru) do systému přes SSH protokol.

Tento způsob funguje trochu jinak než blokování s využitím iptables (např. pomocí sshdfilteru). Uživateli nezamezíme přístup k ssh démonu, ale veškeré jeho další pokusy o přihlášení do systému přes SSH protokol budou neúspěšné i kdyby zadal správné uživatelské jméno a heslo. Toto někomu nemusí vyhovovat, každopádně je to stejně účinná ochrana jako blokování přístupu s využítím IP filtru iptables. Můžeme nastavit i dobu po jejímž uplynutí bude záznam z black list databáze automaticky odstraněn, stejně jako tomu je i u sshdfilteru.

Modul pam_abl lze použít pro jakýkoliv program využívající pro autentizaci uživatele PAM, tzn. kromě SSH démona jej můžeme využít např. pro FTP démona vsftpd, pro blokování lokálně přihlašovaných uživatelů a podobně.

Nastavení

Dag Wieers nám opět ušetřil práci, takže instalace modulu pam_abl bude velice jednoduchá a pokud máte nastaven jeho repozitář RPMForge, tak vám pro instalaci bude stačit následující příkaz:

yum install pam_abl

Nejprve přidáme modul pam_abl do konfiguračního souboru, který využívá SSH démon pro PAM autentizaci. Tento soubor se v CentOSu nazývá /etc/pam.d/sshd. Po jednoduché úpravě spočívající v přidání druhého řádku týkajícího se modulu pam_abl bude tento soubor vypadat následovně:

#%PAM-1.0
auth       required     pam_abl.so config=/etc/security/pam_abl.conf
auth       include      system-auth
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth
session    optional     pam_keyinit.so force revoke
session    include      system-auth
session    required     pam_loginuid.so

Konfigurační soubor modulu pam_abl, který leží v souboru /etc/security/pam_abl.conf je součástí RPM balíčku a jeho obsah vypadá následovně:

# /etc/security/pam_abl.conf
# debug
host_db=/var/lib/abl/hosts.db
host_purge=2d
host_rule=*:10/1h,30/1d
user_db=/var/lib/abl/users.db
user_purge=2d
user_rule=!ondra:10/1h,30/1d

Direktiva host_db a user_db udává cestu k Berkeley DB se seznamem blokovaných počítačů a uživatelů. Direktivou host_purge a user_purge se nastavuje doba po kterou se daný počítač nebo uživatel bude blokovat. V tomto případě je blokování nastaveno na dva dny. Direktivou host_rule a user_rule se nastavují pravidla, kdy se začně počítač nebo uživatel blokovat.

host_rule=*:10/1h,30/1d

Výše uvedené pravidlo začne blokovat přihlášení z počítače ze kterého bude 10 neúspěšných pokusů o přihlášení v průběhu jedné hodiny nebo 30 neúspěšných pokusů v průběhu jednoho dne.

user_rule=!ondra:10/1h,30/1d

Výše uvedené pravidlo začne blokovat přihlášení jakéhokoliv uživatele (kromě uživatele ondra) na něhož bude 10 neúspěšných pokusů o přihlášení v průběhu jedné hodiny nebo 30 neúspěšných pokusů v průběhu jednoho dne.

Podrobnější popis pravidel, jejich syntaxi a další příklady pravidel naleznete v dokumentaci k modulu pam_abl.

Pokud máte vše správně nastavené, tak by se vám při překročení zadaného počtu neúspěšných pokusů o přihlášení přes SSH protokol za danou časovou jednotku měl v logu /var/log/secure objevit záznam podobný níže uvedenému:

Dec 15 18:23:54 tachecn pam_abl[8892]: Blocking access from www.tachec.org to service sshd, user ondra

Součástí RPM balíčku pam_abl je i stejnojmenný nástroj, který slouží k výpisu blokovaných počítačů z databáze a případně ke smazání počítačů či užavatelů (tedy ke zrušení blokování) z této databáze.

pam_abl -v

Reading config from /etc/security/pam_abl.conf
Failed users:
    ondra (1)
        Sat Dec 15 19:13:10 2007
Failed hosts:
    www.tachec.org (1)
        Sat Dec 15 19:13:10 2007

Vypíše seznam neúspěšných přihlášení včetne data a času, kdy k neúspěšnému přihlášení došlo.

Pokud bych chtěl zrušit blokování například pro celou doménu tachec.org, tak to s pomocí příkazu pam_abl provedu následovně:

pam_abl -v --okhost=*.tachec.org

Reading config from /etc/security/pam_abl.conf
Deleted 1 item
Naposledy změněno: 15.12.2007 19:20