Obsah

Ochrana servera pomocou Fail2Ban: Kompletný sprievodca

Zistite, ako zvýšiť bezpečnosť svojho servera pomocou výkonného softvéru na prevenciu vniknutia Fail2Ban. Zistite, ako ho nastaviť a nakonfigurovať na zabezpečenie servera proti pokusom o neoprávnený prístup.

Akonáhle spustíte server, okamžite skočí do oceánu botnetov, ktoré sa snažia prihlásiť pomocou bežných prihlasovacích údajov. A ak má váš server niečo užitočné, skôr či neskôr sa môže stať cieľom script kiddies alebo ešte pokročilejších ľudí s výkonnými počítačmi a najnovšími technológiami vrátane umelej inteligencie.

Pomocou nástroja Fail2ban môžete svoj server zachrániť pred botnetmi a hackerom trochu skomplikovať život.

Čo je Fail2ban (F2B)

Fail2Ban je IPF - Intrusion Prevention Framework, ktorý chráni servery pred externými útokmi. Vytvoril ho Cyril Jaquier (Švajčiarsko) v roku 2004 a odvtedy ho aktívne vyvíja rastúca komunita.

F2B funguje tak, že monitoruje logovacie súbory, napr. auth.log, logy prístupu k apache alebo nginx, a podniká kroky na IP adresy s príliš veľkým počtom nežiaducich aktivít v rámci vopred definovaného času.

Možné akcie zahŕňajú:

  • aktualizácia pravidiel brány firewall,
  • odosielanie e-mailových oznámení,
  • nahlasovanie zlých IP adries špeciálnym službám,
  • akákoľvek iná akcia, ktorú možno vykonať pomocou skriptu Python.

Štandardná konfigurácia už obsahuje filtre pre rôzne služby, napr. sshd, postfix a mnohé ďalšie. Každý filter je navrhnutý tak, aby identifikoval zlyhania pre danú službu pomocou zložitých regulárnych výrazov. Tieto vzory regulárnych výrazov definuje do premennej s názvom failregex. Kombinácia filtra a preddefinovaných akcií sa nazýva “väzenie”.

Keď už hovoríme o slabinách F2B, musíte vedieť, že nefunguje veľmi dobre proti distribuovaným útokom hrubou silou. Dôvodom je, že monitorované súbory denníka sa preskenujú približne raz za sekundu. Vo väčšine prípadov by to malo byť v poriadku, napriek tomu je možné získať viac zlyhaní prihlásenia, ako je uvedené v parametri “maxretry”.

Tu musím spomenúť voliteľný, ale odporúčaný softvér - Gamin, File Alteration Monitor od Daniel Veillard. (Aktualizácia z roku 2022: odkaz na knižnicu bol mŕtvy, preto vám poskytujem odkaz na domovskú stránku autora a v prípade potreby môžete skúsiť tento softvér vyhľadať aj sami). Ak je nainštalovaný Gamin a backend v súbore jail.conf je nastavený na auto alebo gamin, potom už nie je potrebné aktívne dotazovanie súborov denníka. Akcie by sa spúšťali hneď, ako by sa zmenili súbory denníka.

F2B systémové požiadavky sú pomerne nízke. Pri konfigurácii len s sshd a recidive jails potrebuje F2B približne 500 Mb pamäte a zaťažuje 1 jadro CPU v priemere na menej ako 0,2 %.

Odkazy:

Ak chcete pomôcť s vývojom F2B a/alebo hlbšie pochopiť filtre, potom ste vítaní na:

Dva spôsoby inštalácie

Najprv vykonajte štandardnú aktualizáciu repozitárov a balíkov pomocou:

1
sudo apt update && sudo apt upgrade -y

Potom máte dva spôsoby inštalácie softvéru.

Jednoduché so stabilnou verziou

Ak dávate prednosť rýchlejšiemu spôsobu, balíku spravovanému systémom a stabilnému vydaniu, potom stačí použiť tento príkaz:

1
sudo apt install fail2ban -y

Techy s najnovšou verziou

Ak dávate prednosť najnovšiemu a najlepšiemu, nainštalujte si ho z GitHubu. Majte na pamäti, že to bude vyžadovať trochu viac tancovania. Najprv sa uistite, že máte v systéme nainštalovaný Python alebo Python 3. Ja budem používať Python 3, takže skontrolujme, či máte nainštalovaný Python 3 s:

1
python3 --version

Ak sa vám v dôsledku tohto príkazu zobrazí správa: “Príkaz ‘python3’ nebol nájdený, ale môže byť nainštalovaný pomocou… “, potom:

1
2
sudo apt install python3
sudo apt install python3-setuptools

A pre istotu:

1
sudo apt install git

Potom si stiahnite verziu z oficiálneho úložiska F2B:

1
2
3
4
cd ~
git clone https://github.com/fail2ban/fail2ban.git
cd fail2ban
sudo python3 setup.py install

Dúfajme, že ste nedostali žiadne chyby, ale ak áno, vyhľadajte riešenie v Googli, pretože je mimo rozsahu tohto príspevku.

Tento ďalší príkaz vám umožní pohodlnejšiu prácu a automatické dokončovanie príkazov súvisiacich s F2B, ako napríklad fail2ban-client, fail2ban-server, fail2ban-regex, stlačením tabulátora v konzole:

1
sudo cp files/bash-completion /etc/bash_completion.d/fail2ban

Ak sa na vašom serveri deje veľa vecí, je dobré nastaviť rotáciu protokolov. Keď log dosiahne určitú veľkosť, bude archivovaný a F2B začne zapisovať do nového súboru. Nastavenie rotácie protokolov F2B:

1
sudo wget -O /etc/logrotate.d/fail2ban https://raw.githubusercontent.com/fail2ban/fail2ban/debian/debian/fail2ban.logrotate

Teraz je potrebné povoliť službu F2B.

1
2
3
sudo cp ~/fail2ban/build/fail2ban.service /lib/systemd/system/
cd /etc/systemd/system/
sudo ln /lib/systemd/system/fail2ban.service fail2ban.service

Výsledkom bude táto správa:

Created symlink /etc/systemd/system/multi-user.target.wants/fail2ban.service → /etc/systemd/system/fail2ban.service.

Teraz začnime F2B:

1
sudo systemctl start fail2ban

A skontrolujte stav služby:

1
sudo systemctl status fail2ban

Skontrolujte verziu:

1
sudo fail2ban-client version

Od novembra 2021 je najnovšia a stabilná verzia 0.11.2. Najnovšiu verziu si môžete pozrieť tu.

Povoľte službu fail2ban, aby sa spustila po reštarte:

1
sudo systemctl enable fail2ban.service

Reštartujte aj službu rsyslog:

1
sudo service rsyslog restart

Hotovo.

Základná konfigurácia

Fail2Ban konfigurujete pomocou súborov v /etc/fail2ban.

Najdôležitejším súborom je jail.conf, ktorý neodporúčam priamo upravovať, pretože sa po každej aktualizácii F2B prepíše. Bežnou praxou je robiť všetky úpravy v súbore jail.local. Pri spustení F2B najprv načíta súbory *.conf a potom verzie *.local, ak existujú. Nastavenia v druhom z nich sa prevezmú.

Vo všetkých nasledujúcich príkazoch môžete nahradiť vim svojím obľúbeným editorom, napríklad nano. Teraz vytvoríme nový súbor jail.local:

1
sudo vim /etc/fail2ban/jail.local

V tomto novom súbore môžete nastaviť parametre pre všetky väzenia, ktoré definujete v časti DEFAULT:

1
2
3
4
5
[DEFAULT]

bantime  = 3h
findtime = 10m
maxretry = 5

Tieto nastavenia zakážu akúkoľvek IP adresu na tri hodiny {bantime = 3h}, ak sa v rámci intervalu 10 minút {findtime = 10m} zistí 5 {maxretry = 5} neúspešných pokusov o pripojenie z tejto konkrétnej IP.

Rovnaké parametre, nastavené v rámci ktoréhokoľvek individuálneho väzenia, budú mať prednosť pred všeobecnými nastaveniami, čo vám umožní doladiť nastavenia pre každé väzenie zvlášť.

Ak sa na server neustále pripájate zo statických IP adries, je dobré ich zaradiť na bielu listinu, aby nikdy neboli zakázané. Na bielych zoznamoch môžete uviesť niekoľko IP adries tak, že ich oddelíte bielymi znakmi. Localhost je predvolene zaradený na biely zoznam.

1
ignoreip = 127.0.0.1 x.x.x.x y.y.y.y

Teraz povieme F2B, aby povolil väzenie sshd:

1
2
[sshd]
enabled = true

Kompletná verzia veľmi jednoduchého súboru jail.local teraz vyzerá takto:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Fail2Ban LOCAL configuration file.

[DEFAULT]

bantime  = 3h
findtime = 10m
maxretry = 5

ignoreip = 127.0.0.1

# JAILS

[sshd]
enabled = true

Formáty skratiek času

Časové údaje v konfigurácii F2B (ako findtime alebo bantime) môžu byť uvedené ako celé číslo v sekundách alebo ako reťazec s použitím špeciálneho formátu skratiek, napr. 600 je to isté ako 10m (10 minút).

Prípustné skratky:

1
2
3
4
5
6
7
years?, yea?, yy?
months?, mon?
weeks?, wee?, ww?
days?, da, dd?
hours?, hou?, hh?
minutes?, min?, mm?
seconds?, sec?, ss?

Za nepovinným znakom nasleduje otáznik (?), takže ak chcete nastaviť čas v dňoch, môžete použiť dni alebo deň, da, dd alebo d. Môžete kombinovať viacero znakov vo formáte oddelených medzerou, resp. bez oddeľovača, napr: 1r 6m alebo 1d12h30m.

Upozorňujeme, že tokeny m aj mm znamenajú minúty, pre mesiac použite skratku mo alebo mesiac.

Formát časových skratiek môžete previesť na sekundy pomocou fail2ban-client s možnosťou --str2sec:

1
2
> fail2ban-client --str2sec 1d12h
129600

Server je možné konfigurovať aj pomocou príkazov odoslaných cez fail2ban-client. Dostupné príkazy sú popísané v fail2ban-client(1) manpage.

Majte na pamäti, že príkaz fail2ban-client set aktualizuje hodnoty len pre spustený F2B server, takže ak majú byť trvalé, nezabudnite zodpovedajúcim spôsobom aktualizovať konfiguračný súbor!

Ďalšie odkazy nájdete aj v manuálových stránkach fail2ban(1) a jail.conf(5):

Rozšírená konfigurácia

Veľmi jednoduchým spôsobom, ako zvýšiť bezpečnosť, je pridanie väzenia recidive. Štandardné väzenie zakáže a po uplynutí vopred definovaného času odblokuje IP adresu, takže nič nebráni tejto IP adrese opakovať pokusy o pripojenie. Pridajme špeciálne väzenie pre takýchto recidivistov. Toto skopírujte a vložte do súboru jail.local:

1
2
3
4
[recidive]
enabled   = true
bantime   = 9w
findtime  = 3d

Rozdiel je v tom, že [recidive] jail ukazuje na samotný log F2B v /var/log/fail2ban.log. Ak sa v ňom objaví rovnaká IP adresa v rámci časového úseku findtime (tu 3 dni), potom bude zakázaná na časový úsek bantime uvedený v tomto väzení, v tomto prípade 9 týždňov.

Teraz nastavíme sofistikovanejší systém banovania, ktorý bude pri každom pokuse predlžovať dobu banovania o náhodný čas, aby skomplikoval život “šikovným” botnetom. Pridajte túto informáciu do súboru jail.local:

1
2
3
4
5
6
7
8
[DEFAULT]

bantime.increment    = true
bantime.rndtime      = 30m
bantime.maxtime      = 60d
bantime.factor       = 2
bantime.formula      = ban.Time * math.exp(float(ban.Count+1)*banFactor)/math.exp(1*banFactor)
bantime.overalljails = true

Preskúmame každý parameter jeden po druhom.

  • bantime.increment umožňuje použiť databázu na vyhľadávanie predtým zakázaných IP adát na zvýšenie predvoleného času zákazu pomocou špeciálneho vzorca, ktorý je štandardne banTime 1, 2, 4, 8, 16, 32…*
  • bantime.rndtime je maximálny počet sekúnd, ktorý sa používa na miešanie s náhodným časom, aby sa zabránilo “šikovným” botnetom vypočítať presný čas, po ktorom môže byť IP adresa opäť odbanovaná.
  • bantime.maxtime je maximálny počet sekúnd, ktoré môže čas banu dosiahnuť (ďalej nerastie)
  • bantime.factor je koeficient pre vzorec na výpočet exponenciálneho rastu alebo bežný násobok. Predvolená hodnota je 1 a s ňou čas banu rastie o 1, 2, 4, 8, 16…
  • bantime.formula sa štandardne používa na výpočet ďalšej hodnoty času zákazu, štandardná hodnota je uvedená nižšie. Rovnaký nárast času zákazu dosiahne násobiteľ 1, 2, 4, 8, 16, 32…

Príklad predvoleného vzorca:

1
bantime.formula = ban.Time * (1<<(ban.Count if ban.Count<20 else 20)) * banFactor

Agresívnejší príklad vzorca, má rovnaké hodnoty len s koeficientom “2,0 / 2,885385”:

1
bantime.formula = ban.Time * math.exp(float(ban.Count+1)*banFactor)/math.exp(1*banFactor)

Vzhľadom na naše predchádzajúce nastavenia a tieto pokročilejšie nastavenia bude teraz F2B robiť nasledovné:

  • Zakáže akúkoľvek IP adresu na 3 hodiny, ak vykoná 5 neúspešných pokusov o pripojenie v intervale 10 minút
  • Uložiť túto IP adresu do svojej internej databázy
  • Zrušiť zákaz po 3 hodinách
  • Ak táto IP adresa uskutoční ďalší neúspešný pokus o pripojenie, F2B vypočíta nový časový limit podľa vzorca
  • Zakáže túto IP adresu na tento nový, zvýšený a náhodný čas.
  • Čas bantime sa bude náhodne a exponenciálne zvyšovať pri každom novom pokuse, ale nesmie prekročiť 60 dní.
  • Ak bude táto IP zablokovaná 5-krát v priebehu 3 dní, potom bude zabanovaná na 9 týždňov (umiestnená do recidívneho väzenia).

Existuje veľký priestor na úpravu týchto nastavení podľa konkrétnej situácie, čo môže zahŕňať preskúmanie a analýzu protokolov. Ako sa hovorí, bezpečnosť je proces, nie jednorazový postup.

Ochrana iných služieb

V predvolenom nastavení sú všetky väzenia vypnuté. Jaily relevantné pre vaše nastavenie musíte povoliť v súbore jail.local pridaním enabled = true pod názov jailu. Ak máte napríklad nainštalovaný webový server Apache, môžete ho pridať do súboru jail.local:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[apache-auth]
# Zákaz hostiteľov so zlyhaním overovania hesla
enabled  = true
port     = http,https
logpath  = %(apache_error_log)s

[apache-badbots]
# Zákaz spamovacích robotov prehľadávajúcich web a hľadajúcich e-mailové adresy
port     = http,https
logpath  = %(apache_access_log)s
bantime  = 172800
maxretry = 1

[apache-noscript]
# Zákaz hostiteľov, ktorí na webovej lokalite hľadajú skripty na spustenie a zneužitie
enabled  = true
port     = http,https
logpath  = %(apache_error_log)s
maxretry = 6

[apache-overflows]
# Zakázanie hostiteľov, ktorí sa pokúšajú vyžiadať neobvykle dlhé a podozrivé adresy URL.
enabled  = true
port     = http,https
logpath  = %(apache_error_log)s
maxretry = 2

[apache-nohome]
# Ak neposkytujete prístup k webovému obsahu v domovských adresároch používateľov
enabled  = true
port     = http,https
logpath  = %(apache_error_log)s
maxretry = 2

Pre exim pridajte

1
2
[exim]
enabled = true

a voliteľne

1
2
[exim-spam]
enabled = true

Pre postfix pridajte

1
2
[postfix]
enabled = true

a tak ďalej. Kompletný zoznam všetkých predkonfigurovaných žalárov nájdete v súbore /etc/fail2ban/jail.conf.

Pre mnohé iné služby existujú rôzne riešenia. Napríklad WordPress má špeciálny plugin. Po inštalácii tohto doplnku z panela administrátora musíte skopírovať filter

1
sudo cp /var/www/html/wp-content/plugins/wp-fail2ban/filters.d/wordpress-hard.conf /etc/fail2ban/filter.d/

A umožniť toto väzenie v jail.local:

1
2
3
4
5
6
7
[wordpress-hard]
enabled  = true
port     = http,https
filter   = wordpress-hard
logpath  = /var/log/auth.log
bantime  = 1h
maxretry = 1

Vo všeobecnosti, ak nemáte filter pre vašu aplikáciu/službu a nemôžete ho nájsť na internete, môžete si napísať vlastný pridaním zoznamu regexov do súboru /etc/fail2ban/filter.d/non-standard.conf. Potom môžete povoliť svoj neštandardný žalár pridaním do súboru jail.local:

1
2
3
4
[non-standard]
enabled = true
port    = port your app/service uses
logpath = where its log file is located

Ak teraz poznáte všeobecné princípy F2B, môžete nájsť, nakonfigurovať a upraviť akékoľvek nastavenia pre akúkoľvek službu.

Pridanie vlastných regexov

Ako už viete, F2B sleduje protokoly, ktoré ste mu prikázali sledovať, a vyhľadáva v nich záznamy pomocou regulárnych výrazov. Napríklad regexy v súbore /etc/fail2ban/filter.d/postfix.conf pre protokol Postfix vyzerajú takto:

1
2
3
4
failregex = ^%(__prefix_line)sNOQUEUE: reject: RCPT from \S+\[<HOST>\]: 554 5\.7\.1 .*$
            ^%(__prefix_line)sNOQUEUE: reject: RCPT from \S+\[<HOST>\]: 450 4\.7\.1 : Helo command rejected: Host not found; from=<> to=<> proto=ESMTP helo= *$
            ^%(__prefix_line)sNOQUEUE: reject: VRFY from \S+\[<HOST>\]: 550 5\.1\.1 .*$
            ^%(__prefix_line)simproper command pipelining after \S+ from [^[]*\[<HOST>\]:?$

Napriek tomu sa stáva, že štandardné filtre môžu prehliadnuť niektoré záznamy v protokoloch, pretože sú neobvyklé. Preto by ste mohli z času na čas skontrolovať túto situáciu a pridať vlastné regexy na zvýšenie bezpečnosti. Ako na to?

F2B má na to špeciálnu utilitu s názvom fail2ban-regex, ktorá testuje regulárne výrazy. Všeobecné použitie je takéto:

fail2ban-regex [OPTIONS] LOG FILTER [IGNOREREGEX]

  • [OPTIONS] - skontrolujte kompletný zoznam možností príkazu fail2ban-regex -h.
  • LOG je reťazec záznamu protokolu alebo cesta k súboru protokolu.
  • REGEX je reťazec (skutočný regex) alebo cesta k súboru filtra, t. j. zoznamu regexov.
  • [IGNOREREGEX] je to isté, reťazec alebo cesta k súboru.

Najprv identifikujte, pre aký log a pre akú službu ho chcete testovať, napr. auth.log a sshd.conf. Inými slovami, chcete zistiť, aká štandardná sada filtrov v sshd.conf chýba v auth.log. Potom do konzoly zadajte tento príkaz:

1
fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf --print-all-missed > /home/user_name/missed.txt

Kľúčové je použiť možnosť --print-all-missed. V predvolenom nastavení sa všetko vypíše na stdout, t. j. na konzolu, ale možno budete chcieť presmerovať výstup do textového súboru (napr. missed.txt) na ďalšie skúmanie a spracovanie. Poďme preskúmať výsledok:

Snímka obrazovky s vynechanými regexmi
Snímka obrazovky s vynechanými regexmi

Toto je skutočný výstup vyššie uvedeného príkazu pre súbor auth.log spracovaný štandardným súborom sshd.conf a vlastnou sadou regexov v súbore sshd.local (mierne upravený na odstránenie citlivých informácií). Aj v tomto prípade filtre vynechali, ako môžete vidieť, niektoré záznamy v súbore denníka. Pozrime sa bližšie na dôležité body, označené červenými šípkami:

  1. V súbore auth.log je 812 záznamov, ktoré vyhovovali failregexes. Číslo v hranatých zátvorkách na začiatku každého regexu ukazuje, koľkokrát fungoval.
  2. Je tu 2959 záznamov, ktoré zodpovedali ignoreregex, t. j. záznamom, ktoré som systému povedal, aby ignoroval.
  3. A nakoniec, ako môžete vidieť, 35 riadkov bolo vynechaných. Čo znamená, že IP adresy 146.52.214.41 a 37.135.222.203 preskočili ďalšie spracovanie systémom F2B.

Ako to? Nuž, vynechané riadky sa objavujú v dôsledku žiadneho regexu alebo zle napísaného regexu. Takže musíte vytvoriť / test vlastný regex, ktorý zachytí vynechané riadky, a potom ho pridať do /etc/fail2ban/filter.d/sshd.local. Pre ďalšie podrobnosti odporúčam preštudovať príslušnú časť dokumentácie pre vývojárov.

Toto je skrátená verzia môjho súboru /etc/fail2ban/filter.d/sshd.local:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Fail2Ban filter for openssh - local additions

[Definition]

cmnfailre = ^Bad protocol version identification .* from <HOST>%(__on_port_opt)s$
            ^Connection closed by ((authenticating|invalid)? user \S+ )?<HOST>%(__on_port_opt)s%(__suff)s$
            ^Connection reset by <HOST>%(__on_port_opt)s%(__suff)s$
            ^Did not receive identification string from <HOST>%(__on_port_opt)s$
            ^Disconnected from ((?:authenticating|invalid) user \S+ )?<HOST>%(__on_port_opt)s%(__suff)s$
            ^Invalid user \S* from <HOST>%(__on_port_opt)s$
            ^message repeated \d+ times: \[ Failed password for root from <HOST>%(__on_port_opt)s ssh2\]$
            ^pam_unix\(sshd:auth\):\s+authentication failure;\s*logname=\S*\s*uid=\d*\s*euid=\d*\s*tty=\S*\s*ruser=<F-USER>\S*</F-USER>\
            ^PAM \d more authentication failure(s)?; logname= uid=0 euid=0 tty=ssh ruser= rhost=<HOST>(  user=root)?$
            ^Received disconnect from <HOST>%(__on_port_opt)s:.*\s%(__suff)s$
            ^Unable to negotiate with <HOST>%(__on_port_opt)s:\s.*\s%(__suff)s$
            ^User \S+ from <HOST> not allowed because not listed in AllowUsers$
            ^Disconnecting invalid user \S* <HOST>%(__on_port_opt)s:
            ^(error: )?maximum authentication attempts exceeded for .* from <HOST>(?: port \d*)?(?: ssh\d*)? \[preauth\]$

ignoreregex = pam_unix\((cron|sshd|sudo|systemd-user):session\): session (open|clos)ed for user (root|USER_NAME)( by \(uid=0\))?$
              pam_unix\(sudo:session\): session opened for user root by USER_NAME\(uid=0\)$
              pam_unix\(sshd:auth\): check pass\; user unknown$
              New session \d+ of user USER_NAME\.$
              Removed session \d+\.$
              User child is on pid \d+$
              Timeout, client not responding\.$
              \s+USER_NAME \: TTY=pts\/\d \; PWD=\/home\/USER_NAME(\/.*)? \; USER=root \; COMMAND=.*$
              Disconnected from user USER_NAME <HOST>%(__on_port_opt)s$

Ak ho chcete skopírovať na svoj server, nahraďte USER_NAME vo vyššie uvedenom texte svojím skutočným používateľským menom.

Pridal som aj úlohu crontab, ktorá sa spúšťa každý deň o 08:00 s:

1
/usr/local/bin/fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf --print-all-missed > /home/USER_NAME/missed.txt

a potom jednoducho cat missed.txt, aby ste skontrolovali, či filtre F2B sshd neprehliadli niečo nevyriešené.

Takto môžete skontrolovať aj iné logy a iné filtre a pridať svoje regexy.

Oznámenie poštou

Ak si želáte dostávať e-mailové oznámenia vždy, keď dôjde k zákazu, môžete povoliť e-mailové oznámenia. Ak to chcete urobiť, musíte najprv na svojom serveri nastaviť MTA (Mail Transfer Agent), aby mohol odosielať e-maily. Ak sa chcete dozvedieť, ako na túto úlohu použiť Postfix, postupujte podľa tejto príručky. Kľudne môžete použiť akýkoľvek iný MTA a podľa toho zmeniť nižšie uvedené nastavenia.

Po nastavení MTA musíte upraviť nastavenia v časti DEFAULT v súbore jail.local. Začnite nastavením smernice mta. Ak ste nastavili Postfix, ako ukazuje vyššie uvedený návod, nastavte túto hodnotu:

1
2
[DEFAULT]
mta = postfix

Teraz musíte pridať e-maily a niektoré ďalšie polia:

  • destemail: E-mailová adresa, na ktorú chcete dostávať e-maily.
  • sender: E-mailová adresa, z ktorej bude F2B odosielať e-maily (pozri sprievodcu vyššie).
  • sendername: Text v poli “Sender” (Odosielateľ) v notifikačných e-mailoch.
1
2
3
4
5
[DEFAULT]
mta        = postfix
destemail  = [email protected]
sender     = [email protected]
sendername = Fail2BanAlert

Činnosti

Teraz je potrebné upraviť nastavenie akcie. Len pre krátku pripomienku, v jazyku F2B je “akcia” postup, ktorý sa použije, keď klient zlyhá príliš veľa krát.

  • Predvolené nastavenie %(action_)s zakazuje iba hostiteľa.
  • %(action_mw)s zakáže a odošle e-mail so správou WHOIS o IP adrese, ktorá sa previnila.
  • %(action_mwl)s zakáže, odošle e-mail so správou WHOIS a všetky príslušné riadky v súbore protokolu.

Vyberte úroveň detalizácie, ktorá vám viac vyhovuje, a nastavte ju:

1
2
[DEFAULT]
action = %(action_mwl)s

Túto možnosť je možné zmeniť aj pre jednotlivé väznice (pod názvom väznice), takže pre rôzne väznice sa zobrazia rôzne údaje.

Na záver tejto kapitoly uvádzame poučný príbeh Kena Tossela týkajúci sa e-mailových oznámení.

“…až do júla 2011 bola v predvolenom konfiguračnom súbore Fail2Ban uvedená adresa From: [email protected] a adresa To: [email protected], ktoré sú umiestnené u poskytovateľa freemailu Mail.com. Hádam osoba, ktorá to nastavila, predpokladala, že mail.com je neplatný. [email protected] je buď rezervovaný, alebo naplnený do posledného miesta, takže keď Fail2Ban zistí útok na nesprávne nakonfigurovaný server, jeho správa sa vráti späť odosielateľovi, [email protected]. Túto adresu som zaregistroval v roku 2010…”

V júli 2014 Ken analyzoval všetkých 500 000 hlásení a vytvoril grafy, ktoré si môžete pozrieť na jeho stránke: https://ken.tossell.net/ftb/.

Nahlasovanie zlých IP adries

Ak chcete podporiť komunitu nahlásením urážlivých IP adries, aby z týchto informácií mohli mať prospech aj ostatní, existuje niekoľko služieb, ktoré vám to umožnia. Jednu z nich si preberieme podrobnejšie a ďalšie budú spomenuté na konci tejto časti.

AbuseIPDB

Ak chcete, aby F2B hlásil IP adresy, pridajte do súboru jail.local nižšie uvedené príkazy. Tieto príkazy pridajte do svojich žalárov jednotlivo, aby ste mohli prispôsobiť kategórie hlásení AbuseIPDB a spresniť svoje hlásenia. Napríklad, ak chcete nahlásiť IP adresy pre sshd brute forcing, pridajte toto pod [sshd] jail:

1
2
3
4
[sshd]
action_abuseipdb = abuseipdb
action = %(action_)s
         %(action_abuseipdb)s[abuseipdb_apikey="YOUR.API.KEY", abuseipdb_category="18,22"

Najpopulárnejšie kategórie správ AbuseIPDB:

Name #
FTP Brute-Force 5
Port Scan 14
Hacking 15
Brute-Force 18
Bad Web Bot 19
SSH 22
Web App Attack 21

Úplný zoznam všetkých kategórií nájdete tu: https://www.abuseipdb.com/categories

Voliteľne môžete správu prispôsobiť úpravou súboru /etc/fail2ban/action.d/abuseipdb.conf:

1
2
3
4
5
6
actionban = curl --tlsv1.0 --fail 'https://api.abuseipdb.com/api/v2/report' \
    -H 'Accept: application/json' \
    -H 'Key: <abuseipdb_apikey>' \
    --data-urlencode 'ip=<ip>' \
    --data-urlencode 'comment=F2B blocked SSH BF' \
    --data 'categories=<abuseipdb_category>'

Potom budú vaše správy na stránke AbuseIPDB vyzerať takto: /images/2020/f2b-screen-abuseipdb.jpg

Komentár F2B blocked SSH BF môžete nahradiť vlastným.

Viac informácií a riešenie problémov nájdete na oficiálnej stránke: https://www.abuseipdb.com/fail2ban.html

Ďalšie online služby na nahlasovanie IP adries

Ručné zrušenie zakázaných IP adries

Toto je veľmi jednoduchý príkaz:

1
sudo fail2ban-client set JAIL_NAME unbanip IP_ADDRESS

Ak IP_ADDRESS nie je blokovaná týmto konkrétnym väzením, na výstupe sa zobrazí 0, inak 1.

Párkrát sa mi podarilo zablokovať vlastnú IP adresu :) pracujem z rôznych geografických lokalít. V takom prípade sa jednoducho znovu pripojte k serveru cez ľubovoľný proxy server a odblokujte svoju aktuálnu IP pomocou vyššie uvedeného príkazu.

Obnovenie protokolov a databázy F2B

Všetky zakázané IP adresy sú uložené v tomto súbore: /var/lib/fail2ban/fail2ban.sqlite3.

Aj keď vymažete všetky protokoly, F2B po každom reštarte služby znovu vytvorí všetky zakázané IP adresy z databázy, kým nevyprší čas zákazu pre IP adresu. Ak chcete vymazať celý protokol F2B a každú zakázanú IP z databázy, vykonajte nasledujúce kroky. Je to dobrá metóda na resetovanie F2B do bodu nula, čím sa resetuje každá zakázaná IP.

1
2
3
4
sudo fail2ban-client stop
sudo truncate -s 0 /var/log/fail2ban.log
sudo rm /var/lib/fail2ban/fail2ban.sqlite3
sudo fail2ban-client restart

Nemajte obavy - F2B po reštartovaní služby znovu vytvorí súbor fail2ban.sqlite3

IP adresu môžete z databázy odstrániť aj ručne bez toho, aby ste prišli o všetky ostatné zakázané IP adresy, a ak nechcete používať whitelisting:

  1. Stiahnite si prehliadač DB pre SQLite z adresy https://sqlitebrowser.org/.
  2. Nainštalujte prehliadač DB Browser do svojho lokálneho počítača
  3. Stiahnite si súbor fail2ban.sqlite3 z adresy /var/lib/fail2ban/fail2ban.sqlite3.
  4. Spustite DB Browser a otvorte súbor fail2ban.sqlite3
  5. Vyhľadajte v databáze zakázanú IP adresu
  6. Vyberte ju a kliknite na “odstrániť riadok”
  7. Uložte súbor fail2ban.sqlite3 a zatvorte program
  8. Pripojte sa k serveru pomocou ssh a zadajte service fail2ban stop
  9. Zadajte truncate -s 0 /var/log/fail2ban.log
  10. Nahrajte upravený súbor fail2ban.sqlite3 späť do súboru /var/lib/fail2ban/fail2ban.sqlite3.
  11. Vráťte sa späť k svojmu ssh pripojeniu a zadajte service fail2ban restart

Jednou z ďalších možností je upraviť túto databázu priamo na serveri pomocou nástroja sqlite3 pre príkazový riadok. https://manpages.ubuntu.com/manpages/bionic/en/man1/sqlite3.1.html

Ako odinštalovať službu Fail2ban

Ak chcete odstrániť len balík F2B, zastavte službu a odstráňte balík:

1
2
sudo fail2ban-client stop
sudo apt remove fail2ban

Odstránenie balíka F2B a všetkých ďalších závislých balíkov:

1
sudo apt remove --auto-remove fail2ban

Ak chcete odstrániť aj konfiguračné a/alebo dátové súbory F2B:

1
sudo apt purge fail2ban

Vymazanie konfiguračných a/alebo dátových súborov F2B a jeho závislostí:

1
sudo apt purge --auto-remove fail2ban

Záver

Nastavenie F2B na ochranu servera je v najjednoduchších prípadoch pomerne jednoduché. F2B však poskytuje veľkú flexibilitu pri vytváraní politík, ktoré budú vyhovovať vašim špecifickým bezpečnostným potrebám. Nájdete tu mnoho prvkov, ktoré môžete upravovať a meniť podľa toho, ako sa budú vyvíjať vaše potreby. Ak sa naučíte základy ochrany servera pomocou F2B, môžete si s minimálnym úsilím zabezpečiť veľkú mieru bezpečnosti.

Dúfam, že vám tieto informácie, založené na mojich poznámkach, starostlivo zozbieraných a overených v praxi počas mnohých rokov, pomôžu začať/konfigurovať ochranu vášho servera.