Zabezpečení linuxového serveru pomocí fail2ban

Fail2ban je daemon, který slouží k blokaci IP adres, ze kterých dochází k pokusu o neoprávněný přístup na server. Typicky dochází ke snahám uhádnout hesla pro získání přístupu přes SSH a FTP (pokud služba na serveru běží a je přístupná - viz. příspěvek Omezení přístupu přes SSH na VPS). K tomuto skenování dochází nepřetržitě a hromadně. Kromě jiného spotřebovává prostředky přidělené každému serveru.

Ve fail2ban lze nastavit, po kolika neúspěšných pokusech se přidá pravidlo na firewall, a na jak dlouho se IP adresa zablokuje. Dále lze nastavit mailové upozornění na výskyt pokusu o napadení.

Instalace:

Před jakoukoliv instalací si přečtěte velmi důležitý příspěvek popisující možné problémy jakékoliv instalace na VPS: Instalace softwaru všeobecně
  • V případě, že je na serveru yum a přidali repozitář RPMForge, stačí napsat
    yum install fail2ban
    a yum vyřeší potřebné závislosti.
     
  • Pokud nemáte yum, je nutné nejprve stáhnout rpm balíčky (lze použít vyhledávač http://rpm.pbone.net/, nebo balíčky stáhnout z repozitáře RPMForge http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/ (tento zdroj je lepší - fail2ban neobsahuje závislost na balíčku shorewall) + potřebné závislosti (gamin-python + gamin).
    Instalace pak probíhá standardně, jak je popsáno v příspěvku Instalace softwaru všeobecně
     
  • Můžete použít i námi připravené balíčky (ke stažení - archiv fail2ban.zip), u kterých byla upravena konfigurace tak, že okamžitě po startu daemona bude funkční kontrola FTP i SSH (konfigurace byla upravena speciálně pro naše VPS). Jediné, co je po nainstalování potřeba je daemon nastartovat a zajistit jeho automatické startování Postup je popsán o něco níže v tomto příspěvku.
    POZOR: Naše balíčky jsou testovány pouze pro CentOS 5.5. U jiných verzí je nutné instalovat podle jednoho z předchozích 2 bodů.

Konfigurace:

Pokud nepoužijete naše balíčky, je nutné provést několik úprav v následujících souborech:

1. /etc/fail2ban/filter.d/proftpd.conf nahradit původní failregex (=maska, na základě které se kontrolují neúspěšné pokusy - původní není funkční) na:
 
failregex = ^(.)+proftpd(.)+[<HOST>](.)*no such user found from (.)* to (.)*$
        ^(.)+proftpd(.)+[<HOST>](.)*USER(.)*Login failed(.)*Incorrect password(.)*$
        ^(.)+proftpd(.)+[<HOST>](.)*SECURITY VIOLATION:(.)*login attempted(.)*$
        ^(.)+proftpd(.)+[<HOST>](.)*Maximum login attempts(.)*exceeded(.)*$
 

2. /etc/fail2ban/jail.conf nastavit pro proftp-iptables a ssh-iptables toto:
 
[ssh-iptables]
 
enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
logpath  = /var/log/secure
maxretry = 3
 
[proftpd-iptables]
 
enabled  = false
filter   = proftpd
action   = iptables[name=ProFTPD, port=ftp, protocol=tcp]
logpath  = /var/log/secure
maxretry = 5
 
v tomto případě dojde k zablokování IP adresy po 3 neúspěšných pokusech pro SSH a 5 pokusech u FTP.
 
Na začátku řádku v definici jailu (například [ssh-iptables]) NESMÍ být před hranatou závorkou mezera!

Start, autostart a kontrola funkčnosti:

služba se nastartuje příkazem
 
/etc/init.d/fail2ban start

automatické spouštění se zajistí přidáním do startovacích skriptů (spustíte následující příkazy)
 
chkconfig --add fail2ban
chkconfig fail2ban on
 
správnou funkci vyzkoušejte například několikerým úmyslným špatným zadáním hesla v FTP klientu - po nastaveném počtu špatných přístupů bude Vaše IP adresa dočasně zablokována. K odblokování dojde po nastaveném čase - podle /etc/fail2ban/jail.conf je to standardně 10 minut (bantime  = 600). Podle toho, kam je nastaveno logování najdete informace o činnosti daemona buď v systémovém logu (/var/log/messages), nebo /var/log/fail2ban.log. (nastavuje se v /etc/fail2ban/fail2ban.conf - položka logtarget)

Upozorňování:

program umožňuje zasílání informací o své činnost mailem (stop, start, zablokování adresy...). K tomu je potřeba přidat do sekce pro příslušný filtr ([ssh-iptables] nebo [proftpd-iptables]) v action následující řádek:
 
sendmail[name=SSH, dest=EMAIL_PRIJEMCE, sender=fail2ban@VASEDOMENA]
 
POZOR! je nutné nastavit existující příjemce a adresu odesílatele

Sekce pro SSH pak může vypadat takto
 
[ssh-iptables]
 
enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
        sendmail[name=SSH, dest=admin@domena.cz, sender=fail2ban@mujvps.cz]
logpath  = /var/log/secure
maxretry = 3
 
Fail2ban může kontrolovat mnohem více logů - je nutné je povolit v jail.conf. Důležité je nastavit správnou masku (regexp) v /etc/fail2ban/filter.d/* a cestu k logu. Bližší informace najdete v dokumentaci.