A Fail2ban bemutatása

A Fail2ban bemutatása

A fail2ban szolgáltatás tűzfalszabályok frissítésére lett megalkotva, hogy a segítségével a logok elemzésével a támadási, túlterhelési kísérletek, illetve a jogosulatlan hozzáférések megakadályozását segítse elő. Működése során a fail2ban a konfigurációs szabályainak megfelelően megkeresi a káros vagy valamilyen alkalmazás hiba kihasználását célzó támadásokat. Azoknak a megfelelő számú kísérlet esetén egy iptables tűzfal szabállyal automatikusan egy időre tiltsa az adott IP címről való elérést.

A fail2ban védelme, mire használható

A fail2ban szolgáltatás telepítésével már rögtön kész szabályokat kapunk, amelyek engedélyezését követően biztonságosabbá tehetjük a szerverünket. A legalapvetőbb szabályok a webszerver elleni támadások (apache, nginx, varnish, lighthttp), a levelezésből adódó támadások (sendmail, postfix, exim), illetve a távoli hozzáféréshez szükséges szolgáltatások (ssh, ftp, openvpn) főként túlterheléses, dos, jelszó feltörés, bruteforce támadási károk enyhítésére használhatjuk hatékonyan.

Mint megannyi eszköz, ezt is lehet a legkülönbözőbb alkalmazások, speciális szolgáltatások, weboldalak, webservicek védelmére is alkalmazni. Az iptables mellett, iptables-new, iptables-multiport, shorewall akciókat is használhatunk, illetve természetesen saját reakciókat is programozhatunk.

A fentiekből következik, hogy az alapcsomag tartalmazza az ssh, xinetd, apache, ftp server, postfix, smtp, sasl, dns szerver elleni védelmeket. Ezen szabályok megismerésével, könnyedén írhatunk saját védelmeket.

Az alapvető működés, a fail2ban rendszer elemei

Debian rendszeren a /etc/fail2ban könyvtár tartalmazza a beállításokat és a konfigurációs fájlokat.

A fail2ban.conf a szolgáltatás alapvető konfigurációs fájlja. Nem részleteznék minden opciót, úgy is verziónként változhat, de szokás szerint itt beállíthatjuk a a logolás részletességét, a logfájl helyét és nevét, socket fájlt.

A filter.d könyvtárral folytatnám, itt fogja keresni a programunk, a beállítás szerinti szűrő feltételeket. Ha belenézünk egy konfigurációs fájlban, itt az [INCLUDES] részben becsatolhatjuk egy külső fájlból ismétlődő prefixeket. A [Definition] rész a legfontosabb, itt lesz a failregex paraméter, gyakrolatilag az a regex függvény, amely a logfájl alapján megkeresi az illeszkedést és a HOST paraméterben pedig megkapjuk az IP címet, ami majd a tiltáshoz kell. Az ignoreregex is opcionálisan kitölthető, ha a failregex szabály hatóköréből valamit ki szeretnénk hagyni.

Az action.d könyvtárban lévő konfigurációs fájlokkal sok időt lehetne tölteni, röviden itt vannak azok a fájlok, amiben megváltoztathatjuk, hogyan és milyen leveletek kapjuk, hogyan és milyen iptables paracsokat futtasson a szolgáltatásunk.

Végül a jail.conf és jail.local fájlok a fő konfigurációs fájlok a szabályok konfigurációjával. A két fájl azért van, mert van, aki valamilyen automatizmuson keresztül kezeli a fail2ban konfigurálását is, így az általános szabályokat akár központilag lehet a jail.conf-ban cserélni, míg a helyi szabályokat külön lehet ettől szedni jail.local csoportba. De jól lehet a jail.local fájl arra is használni, ha a saját magunk által készített szűréseket külön kezelnénk.

Röviden a legegyszerűbb szabály konfigurációja a jail.conf fájlban.

A jail.conf elején az általános paramétereket állíthatjuk be, így az ignoreip egy IP whitelist, akiket soha ne tiltson a fail2ban, jellemzően pl. monitorozó szerver hozzáférés, illetve a szerver elérésének biztosítását egy IP címről vagy tartományból. A bantime alap értéke 600s, a maxretry pedig 3, végül a destemail az elsődleges email cím, ahová a rendszer értesítést küld a működéséről. Lássuk a jail beállítások részt egy példán keresztül:

[courierauth]

enabled = true
port = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s
filter = courierlogin
logpath = /var/log/mail.log
findtime = 84400
bantime = 72000
maxretry = 3
#action   = iptables[name=COURIERAUTH, port=smtp, protocol=tcp]

A szűrés elnevezése a courierauth, ezt fogjuk látni a fail2ban levelekben és a logokban is. A port szekcióban felsorolhatjuk, hogy tiltáskor milyen portokat tiltson a tűzfalon, természetesen van lehetőség, hogy mindent. A filter paraméter, ahogy fentebb is jeleztem, a filter.d/courierlogin.conf-t fogja keresni, ez gyakorlatilag a szűrőfeltétel. A logpath az a fájl, amelyikre a szűrést végezze. A findtime az az idő másodpercben, amíg a szolgáltatás visszamenőleg tárolja/figyelje a filter szerinti egyezést. A bantime az az idő, amennyi időre kitiltsunk az adott IP címet. Végük a maxretry az a szám, hogy hány “hiba” esetén kezdeményezzük a tiltást. Most megjegyzésként szerepel még az action paraméter, ezt most egy példaként szerepeltetem, a jelentése, hogy az action.d/iptables.conf fájl fogja keresni a felsorolt paraméterekkel, esetünkben, hogy mi a kitiltás elnevezése (oka), milyen portot tiltson és milyen protocol szerint.

A szűrőink tesztelése a fail2ban hibák feltárása

Hibás konfigurációval a fail2ban nem indul el, így mielőtt üzembe helyezünk egy új saját szűrést, vagy egy módosítást beállítanánk, célszerű ellenőrizni, tesztelni. Az egyik hibafeltárási mód természetesen, hogy a fail2ban logolásán állíthatunk, ha nem tudunk meg elegendőt a pl. /var/log/fail2ban.log fájlból az okokról.

A fontosabb és jobb tesztelés, ha elkészítjük a megfelelő filter.d könyvátrba a fájlt és a jail.conf-ba a szabályt. Majd parancssorból tesztelhetjük a fail2ban-regex szkripttel az alábbi formában:

fail2ban-regex /var/log/mail.log /etc/fail2ban/filter.d/amavis.conf

Kézzel is megadhatjuk a regex szabályt, de célszerű a fájlban módosítani, így elkerülhetjük, hogy a beíráskor újra hibázunk. A fenti részlettel azt kérjük, hogy a /var/log/mail.log fájl ellenőrizze végig és illessze az amavis.conf fájlban található failregex mintát és listázza a találatokat. Itt most nem adtunk meg findtime paramétert, így ne ijedjünk meg, ez nagy log fájl esetén sokáig futhat. Ha rendben kapunk illeszkedő IP cím listát időpontokkal, és az elvárt listát, akkor helyes a regex, tehát a fil2ban újraindításával érvényre juttathatjuk.

 

A szolgáltatások, a fail2ban filter működésének ellenőrzése

Amennyiben szeretnénk tudni, hogy áll a szolgáltatásaink védelme, akkor a fail2ban-client paraccsal kérhetünk le információkat a futó szervertől, pl. az ssh filter-ünk állapota “fail2ban-client status ssh” parancs hatására az alábbihoz hasonló választ kaphatjuk:

server1:/etc/fail2ban# fail2ban-client status ssh
Status for the jail: ssh
|- filter
|  |- File list:	/var/log/auth.log 
|  |- Currently failed:	0
|  `- Total failed:	0
`- action
   |- Currently banned:	0
   |  `- IP list:	
   `- Total banned:	0
server1:/etc/fail2ban#

De lekérdezhetjük az aktuális paramétereket is “fail2ban-client get ssh bantime”:

server1:/etc/fail2ban# fail2ban-client get ssh bantime
14400
server1:/etc/fail2ban#

 

 

 

 

 

No Comments.

Leave a Reply