Inštalácia a používanie Fail2ban na Debian 12


Na tejto stránke

  1. Ako to funguje
  2. Nastavenie Fail2ban

    1. Umožnenie väzenia
    2. Postupujte podľa denníkov
    3. Riešenie problémov
    4. Pridávanie vlastných IP adries na bielu listinu
    5. Manuálny zákaz
    6. Ručné zrušenie zákazu
    7. Záver

Fail2ban monitoruje v protokolových súboroch zlyhania prihlásenia a dočasne zakáže zdrojovej IP adrese náchylnej na zlyhanie prístup k hostiteľovi. Toto je obrana proti útokom hrubou silou na uhádnutie hesla. Je veľmi užitočné mať fail2ban na hostiteľoch vystavených internetu.

Verzia fail2ban na Debiane 12 je 1.0.2.

root@posti:~# fail2ban-client version
1.0.2

Ak chcete zistiť, či práve beží fail2ban, pošlite na server príkaz ping s fail2ban-client. Server Fail2ban odpovedá „pong“, ak je spustený.

root@posti:/etc/fail2ban# fail2ban-client ping
Server replied: pong
root@posti:/etc/fail2ban#

Ako to funguje

Fail2ban zhromažďuje filtre, akcie a monitorované súbory do väzenia. S distribúciou prichádza niekoľko väzníc. Aby mohli začať pracovať, musia byť povolené. filter určuje, ako zistiť zlyhania autentifikácie. akcia definuje, ako dôjde k zákazu a zrušeniu zákazu.

Pokusy o narušenie spustia zákaz, ak sa počas findtime zistia minimálne zlyhania prihlásenia maxretry z rovnakého IP-čísla. Potom je IP zakázaná na bantime sekúnd. Po bantime sekundách bantime sa ban zruší a IP môže opäť pristupovať k hostiteľovi. Fail2ban zvládne IPv4 aj IPv6.

Viac informácií je možné vyčítať zo súborov v adresári /usr/share/doc/fail2ban/.

Nastavenie Fail2ban

Na systémoch Debian GNU/Linux štandardne nainštaluje fail2ban so zapnutým väzením sshd s primeranými nastaveniami. Urobíte to v súbore /etc/fail2ban/jail.d/defaults-debian.conf. Toto je jediné štandardne fungujúce väzenie. Ostatné väzenia musí povoliť správca systému.

Ak teda chcete monitorovať iba prihlásenia cez ssh a zakázať nevhodne sa správajúcich votrelcov, nie je potrebná žiadna ďalšia konfigurácia.

Bohužiaľ, na Debiane 12 nemusí fail2ban fungovať s predvolenými nastaveniami. Debian 12 označil balík rsyslog ako voliteľný, čo znamená, že nemusí byť nainštalovaný, takže protokoly sa zbierajú iba do journald [wiki.debian.org/Rsyslog].

Na systémoch ISPConfig fail2ban funguje, pretože autoinštalátor ISPConfig nainštaluje rsyslog a návod na server ISPConfig Perfect nariaďuje inštaláciu rsyslog.

S rsyslog sa protokolové súbory objavia v /var/log/ -adresári, takže predvolená konfigurácia fail2ban nájde protokolové súbory. Ak rsyslog nie je nainštalovaný, konfigurácia fail2ban sa musí upraviť tak, aby čítala protokoly zo systemd journal. Pridajte do predvolenej sekcie jail.local backend=systemd, podobne

[DEFAULT]
backend = systemd

Umožnenie väzenia

Dokumentácia odporúča vložiť všetky vlastné úpravy do súborov .local. Vyhnete sa tak problémom, keď sú súbory poskytované distribúciou aktualizované alebo upravené správcom [Prečítajte si súbor /usr/share/doc/fail2ban/README.Debian.gz].

Ako príklad, povolenie čistého ftpd väzenia sa vykonáva pridaním riadkov do súboru /etc/fail2ban/jail.local (vytvorte súbor, ak ešte neexistuje)

[pure-ftpd]
enabled = true

Názov väzenia v hranatých zátvorkách začína sekciu pre nastavenia daného väzenia.

Po dokončení úprav vynútite opätovné načítanie konfiguračných súborov pomocou príkazu

systemctl reload fail2ban

Väzenie by teraz malo bežať, čo je možné overiť pomocou fail2ban-client:

root@posti:/etc/fail2ban# fail2ban-client status pure-ftpd
Status for the jail: pure-ftpd
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	106
|  `- File list:	/var/log/syslog
`- Actions
   |- Currently banned:	0
   |- Total banned:	4
   `- Banned IP list:	
root@posti:/etc/fail2ban# 

Keďže jail.local má pre toto väzenie iba nastavenie „povolené“, všetky ostatné nastavenia sú predvolené nastavenia z distribúcie. Zvyčajne majú dobré hodnoty, takže ďalšia konfigurácia nie je potrebná. V prípade potreby môže sekcia jail.local pre toto väzenie obsahovať nastavenia, ktoré prepíšu to, čo bolo nastavené v súboroch .conf.

Tento príklad mení findtime, maxretry a bantime pre čisté ftpd väzenie:

[pure-ftpd]
enabled = true
findtime = 2h
maxretry = 6
bantime = 1d

Fail2ban-client zobrazuje časy v sekundách, ale časy je možné zadať do konfiguračných súborov v jednoduchšom formáte, napríklad 10h namiesto 36000 sekúnd. man jail.conf v kapitole "FORMÁT ČASOVEJ SKRATKY" vysvetľuje užívateľsky prívetivé formáty zadávania času.

fail2ban-client má možnosť previesť z užívateľsky prívetivého formátu času na sekundy.

# fail2ban-client --str2sec 1d3h7m
97620

Postupujte podľa denníkov

Ak chcete určiť, ktoré väzenia by sa mali aktivovať, postupujte podľa protokolov vytvorených službami spustenými na hostiteľovi. Užitočný je nástroj, ktorý vytvára súhrny protokolov, ako napríklad logwatch alebo pflogsumm. Čítanie surových denníkov je časovo náročné a únavné.

Skontrolujte, či je pre službu spustenú na hostiteľovi k dispozícii väzenie, možno si prečítajte súbor jail.conf.

Akonáhle záznamy ukazujú niečo zaujímavé alebo znepokojujúce, je čas to preskúmať. Napríklad pflogsumm odoslal zhrnutie e-mailu s riadkami ako je tento:

136   unknown[91.224.92.40]: SASL LOGIN authentication failed: UGFzc3...
136   hostname srv-91-224-92-40.serveroffer.net does not resolve to a...
123   unknown[193.32.162.23]: SASL LOGIN authentication failed: UGFzc...
123   hostname mail.whatami.co does not resolve to address 193.32.162.23

To ukazuje, že IP 91.224.92.40 zlyhalo pri prihlásení do e-mailu 136-krát a ďalší podobný prípad. Fail2ban mal zabrániť toľkým pokusom. Ak chcete zistiť, prečo sa tak nestalo, preskúmajte protokol fail2ban.

root@posti:/etc/apt/apt.conf.d# grep 91.224.92.40 /var/log/fail2ban.log | head
2024-02-18 00:01:38,718 fail2ban.filter         [996]: INFO    [postfix-sasl] Found 91.224.92.40 - 2024-02-18 00:01:38
2024-02-18 00:11:50,261 fail2ban.filter         [996]: INFO    [postfix-sasl] Found 91.224.92.40 - 2024-02-18 00:11:50
2024-02-18 00:21:54,337 fail2ban.filter         [996]: INFO    [postfix-sasl] Found 91.224.92.40 - 2024-02-18 00:21:54
2024-02-18 00:32:14,232 fail2ban.filter         [996]: INFO    [postfix-sasl] Found 91.224.92.40 - 2024-02-18 00:32:14
2024-02-18 00:42:37,921 fail2ban.filter         [996]: INFO    [postfix-sasl] Found 91.224.92.40 - 2024-02-18 00:42:37
2024-02-18 00:53:06,796 fail2ban.filter         [996]: INFO    [postfix-sasl] Found 91.224.92.40 - 2024-02-18 00:53:06
2024-02-18 01:03:35,293 fail2ban.filter         [996]: INFO    [postfix-sasl] Found 91.224.92.40 - 2024-02-18 01:03:35
2024-02-18 01:14:03,765 fail2ban.filter         [996]: INFO    [postfix-sasl] Found 91.224.92.40 - 2024-02-18 01:14:03
2024-02-18 01:24:24,628 fail2ban.filter         [996]: INFO    [postfix-sasl] Found 91.224.92.40 - 2024-02-18 01:24:24
2024-02-18 01:34:43,876 fail2ban.filter         [996]: INFO    [postfix-sasl] Found 91.224.92.40 - 2024-02-18 01:34:43
root@posti:/etc/apt/apt.conf.d#

Táto IP sa pokúša v približne 10-minútových intervaloch pripojiť a fail2ban väzenie postfix-sasl to zistí.

Je dobré zistiť, či táto IP nemusí patriť legitímnemu používateľovi hostiteľa, ktorý má len staré heslo v smartfóne alebo inom zariadení, ktoré sa pokúša v pravidelných intervaloch pripojiť. Používam geoiplookup, ukazuje, z akej krajiny je IP adresa. Moji používatelia pochádzajú z mojej krajiny, takže zahraniční používatelia sú zvyčajne zlí. geoiplookup pochádza z balíkov Debianu geoip-database a geoip-bin.

$ geoiplookup 91.224.92.40
GeoIP Country Edition: LT, Lithuania

Ak chcete zistiť, prečo IP nebola zakázaná, preskúmajte čas hľadania tohto väzenia:

root@posti:/etc/apt/apt.conf.d# fail2ban-client get postfix-sasl findtime
600
root@posti:/etc/apt/apt.conf.d#

Nedávno som videl tieto pomalé útoky, páchateľ vie, že čas na nájdenie je 10 minút, takže sa snaží vyhnúť zakázaniu tým, že sa pokúša prihlasovať v dlhších intervaloch. V tomto prípade to fungovalo. Aby neúspešné prihlásenia spôsobili zákazy, zvýšte čas na nájdenie vo väzení, napríklad na 10 hodín. Pridať do súboru jail.local v sekcii [postfix-sasl]:

findtime = 10h

Potom po opätovnom načítaní systemctl fail2ban má väzenie dlhší čas na nájdenie:

root@posti:/etc/fail2ban# fail2ban-client get postfix-sasl findtime
36000
root@posti:/etc/fail2ban#

Ďalším spôsobom, ako sa votrelci snažia preniknúť, je vytrvalosť. Aj keď je votrelec zakázaný, počkajte, kým zákaz skončí, a pokračujte v hádaní hesla. Bantime by sa mohlo predĺžiť, ale to spôsobuje problémy legitímnym používateľom, ktorí môžu nesprávne zadať heslo a potom nemajú prístup k svojmu účtu, kým sa bantime neskončí. Pre recidivistov existuje väzenie, ktoré sa nazýva recidíva. Funguje to tak, že sa hľadajú opakované bany pre IP v fail2ban log a potom sa banujú na dlhú dobu, napríklad týždeň.

Nasledujúci zoznam je zo správy logwatch:

--------------------- pam_unix Begin ------------------------ 

 sshd:

    Authentication Failures:

       unknown (212.70.149.150): 59 Time(s)

Vyhľadaním tejto adresy IP v súbore denníka sa zobrazí:

2024-02-21 03:42:39,121 fail2ban.filter         [895]: INFO    [sshd] Found 212.70.149.150 - 2024-02-21 03:42:38
2024-02-21 03:42:39,508 fail2ban.actions        [895]: NOTICE  [sshd] Ban 212.70.149.150
2024-02-21 03:52:38,386 fail2ban.actions        [895]: NOTICE  [sshd] Unban 212.70.149.150
2024-02-21 03:54:33,560 fail2ban.filter         [895]: INFO    [sshd] Found 212.70.149.150 - 2024-02-21 03:54:33
2024-02-21 03:54:35,364 fail2ban.filter         [895]: INFO    [sshd] Found 212.70.149.150 - 2024-02-21 03:54:35
2024-02-21 04:00:37,017 fail2ban.filter         [895]: INFO    [sshd] Found 212.70.149.150 - 2024-02-21 04:00:36
2024-02-21 04:00:39,021 fail2ban.filter         [895]: INFO    [sshd] Found 212.70.149.150 - 2024-02-21 04:00:38
2024-02-21 04:06:43,036 fail2ban.filter         [895]: INFO    [sshd] Found 212.70.149.150 - 2024-02-21 04:06:42
2024-02-21 04:06:45,039 fail2ban.filter         [895]: INFO    [sshd] Found 212.70.149.150 - 2024-02-21 04:06:44
2024-02-21 04:06:45,426 fail2ban.actions        [895]: NOTICE  [sshd] Ban 212.70.149.150
2024-02-21 04:16:44,302 fail2ban.actions        [895]: NOTICE  [sshd] Unban 212.70.149.150
2024-02-21 04:19:04,868 fail2ban.filter         [895]: INFO    [sshd] Found 212.70.149.150 - 2024-02-21 04:19:04

Fail2ban funguje podľa plánu, nájde nesprávne prihlásenia a vydá ban na 10 minút. Počas tohto zákazu sa páchateľovi zabráni v prístupe k tomuto hostiteľovi, ale pokračuje aj po zrušení zákazu. Zdá sa, že ide o prípad vážneho pokusu o vlámanie. Nápravou je umožniť opakované uväznenie s nízkym maximálnym počtom pokusov a dlhým bantime.

Rád používam krátky úvodný zákaz, povedzme 10 minút. Ak bol zakázaný skutočný používateľ, čaká sa len na tento čas, dúfajme, že tento čas využije na nájdenie správneho hesla a potom to skúsi znova. Tí, ktorí dostanú ban v ten istý deň, dostanú ban na týždeň. Predvolené hodnoty recidive jail nájdete v súbore jail.conf, tam je bantime 1 týždeň a findtime 1 deň, tie sa mi zdajú OK. Ale nastavil som maxretry na 2, previnilci sú zakázaní rýchlejšie. Do súboru jail.local som pridal:

[recidive]
enabled = true
maxretry = 2

Dlhšie ako 1 týždeň bany sa podľa mňa neoplatí. Nakoniec je stará IP adresa všade zakázaná alebo na čiernej listine, takže páchateľ dostane novú IP. Stará IP je pridelená nejakému nevinnému novému používateľovi internetu, ktorý by nemal byť potrestaný za zlé veci, ktorými sa previnil predchádzajúci vlastník tejto IP.

Riešenie problémov

Po nabootovaní OS alebo reštarte sa stav fail2ban obnoví, takže zákazy pokračujú až do uplynutia bantime. Testovanie a riešenie problémov teda môžu zahŕňať reštarty.

Ak chcete otestovať konfiguráciu, existuje možnosť testu:

fail2ban-server --test

Ak chcete zistiť, či je IP zakázaná, môžu to urobiť najnovšie verzie fail2ban

# fail2ban-client banned 43.131.9.186
[['recidive']]

Príkaz zobrazí zoznam väzení, kde je daná IP momentálne zakázaná.

Staršie verzie fail2ban tento príkaz nemajú. Testovanie každého väzenia jeden po druhom možno vykonať takto:

# fail2ban-client status recidive | tr " " "\n" | grep 43.163.219.232
43.163.219.232

Ak výstup zobrazuje IP, potom bola v zozname zakázaných IP čísel. Príkaz tr slúži na rozdelenie zoznamu zakázaných IP-čísel (je to jeden dlhý riadok) na jednu IP na riadok.

Ak chcete vidieť, čo sa stalo s danou IP, vyhľadajte ju v fail2ban.log:

root@posti:/etc/mysql# grep 43.131.9.186 /var/log/fail2ban.log | cut --characters=-80

2024-03-06 09:00:40,295 fail2ban.filter  [3574846]: INFO    [sshd] Found
2024-03-06 09:02:53,954 fail2ban.filter  [3574846]: INFO    [sshd] Found
2024-03-06 09:02:55,958 fail2ban.filter  [3574846]: INFO    [sshd] Found
2024-03-06 09:04:34,193 fail2ban.filter  [3574846]: INFO    [sshd] Found
2024-03-06 09:04:36,195 fail2ban.filter  [3574846]: INFO    [sshd] Found
2024-03-06 09:04:36,388 fail2ban.actions [3574846]: NOTICE  [sshd] Ban 43
2024-03-06 09:04:36,626 fail2ban.filter  [3574846]: INFO    [recidive] Fo
2024-03-06 09:14:35,180 fail2ban.actions [3574846]: NOTICE  [sshd] Unban
2024-03-06 09:15:10,073 fail2ban.filter  [3574846]: INFO    [sshd] Found
2024-03-06 09:16:55,919 fail2ban.filter  [3574846]: INFO    [sshd] Found
2024-03-06 09:16:58,522 fail2ban.filter  [3574846]: INFO    [sshd] Found
2024-03-06 09:18:44,972 fail2ban.filter  [3574846]: INFO    [sshd] Found
2024-03-06 09:20:30,018 fail2ban.filter  [3574846]: INFO    [sshd] Found
2024-03-06 09:20:30,499 fail2ban.actions [3574846]: NOTICE  [sshd] Ban 43
2024-03-06 09:20:30,620 fail2ban.filter  [3574846]: INFO    [recidive] Fo
2024-03-06 09:20:30,899 fail2ban.actions [3574846]: NOTICE  [recidive] Ba
2024-03-06 09:20:32,021 fail2ban.filter  [3574846]: INFO    [sshd] Found
2024-03-06 09:30:29,289 fail2ban.actions [3574846]: NOTICE  [sshd] Unban

Podrobný výpis konfigurácie fail2ban zobrazuje nastavenia na preskúmanie:

# fail2ban-client -vvv -d

Pridávanie vlastných IP adries na bielu listinu

Možno budú zakázaní vaši vlastní hostitelia alebo sa chcete uistiť, že niektorí zahraniční hostitelia nikdy nebudú zakázaní, aj keď sa správajú zle. Tieto ip-čísla možno pridať na bielu listinu. V predvolenom nastavení nie je na bielej listine nič, môžete si to overiť pomocou:

root@posti:~# fail2ban-client get sshd ignoreip
No IP address/network is ignored
root@posti:~

Nastavenie ignoreip je možné nastaviť v každej sekcii väzení, ale toto nastavenie by malo ovplyvniť všetky väzenia, takže je lepšie ho nastaviť v sekcii DEFAULT. Možno bude najlepšie nastaviť ignorovanie pre internú podsieť, aby sa všetci vaši vlastní hostitelia vyhli zákazom. Toto je od začiatku jail.local:

[DEFAULT]
ignoreip = 92.237.123.96/27

Predvolená sekcia môže mať ďalšie nastavenia, ktoré ovplyvňujú všetky väzenia. Dalo by sa tam pridať napríklad findtime=10h.

Manuálny zákaz

Ak chcete otestovať, čo sa stane pri zakazovaní, nastavte zákaz manuálne. Najprv otestujte väzenie s krátkym časom bantime, aby ste sa nakoniec vrátili, ak sa omylom zabanujete. Napríklad

# fail2ban-client set sshd banip 8.8.4.4</>

Ak sa nejaká IP správa zle, ale nedokážete ju zistiť pomocou fail2ban a vydávať bane, nastavením manuálneho zákazu v recidívnom väzení sa tejto IP na týždeň zbavíte.

# fail2ban-client set recidive banip 8.8.4.4

Zakázanie podsiete funguje pomocou notácie CIDR:

fail2ban-client set recidive banip 5.188.87.0/24

Ručné zrušenie zákazu

Odstránenie zákazu je možné, ale vezmite do úvahy, že ak bude zlé správanie pokračovať, IP bude opäť zakázaná. Mali by ste teda zistiť, čo sa deje (napríklad čítaním protokolov) a napraviť zlé správanie.

# fail2ban-client set recidive unbanip 8.8.4.4

IP môže byť zakázané v niekoľkých väzeniach. Ak chcete zrušiť zákaz IP vo všetkých väzeniach, použite

# fail2ban-client unban 8.8.4.4

Málokedy to však musím robiť. Mám 10 minútový bantime, okrem recidívneho väzenia má 1 týždeň, takže som odblokoval len z recidívneho väzenia, ostatné väzenia už vypršali. Ak nepoužívate opakované väzenie, IP môže byť zakázané vo viacerých väzeniach súčasne, takže je to užitočné.

Ak chcete zrušiť zákaz všetkých IP adries zo všetkých väzení, urobte to

fail2ban-client unban --all

Záver

Fail2ban sťažuje hádanie hesiel, ale úplne nezabráni crackerom v pokuse o prístup k hostiteľovi. V prípade SSH ponúka vynútenie používania kľúčov SSH väčšiu ochranu tým, že bráni prihláseniu pomocou hesla. Pri iných službách viacfaktorová autentifikácia bráni prihláseniu, ak je známe iba heslo.