Ako nainštalovať a nakonfigurovať Fail2Ban na bezpečný server Linux


Táto podrobná príručka vás naučí, čo je Fail2Ban, ako ho nakonfigurovať a ako ho použiť na poskytnutie ďalšej vrstvy zabezpečenia vo vašom systéme Linux.

Čo je Fail2Ban?

Ak ste povolili SSH, skontrolujte históriu prihlásenia vášho servera Linux. Budete prekvapení, keď uvidíte obrovské množstvo IP adries, ktoré sa pokúšajú prihlásiť na váš server cez SSH.

Ak nemáte zavedený žiadny mechanizmus na odradenie od týchto pokusov o prihlásenie, váš systém je náchylný na útoky hrubou silou. Skript/bot sa bude v zásade naďalej pokúšať o pripojenie SSH k vášmu systému skúšaním rôznych kombinácií používateľského mena a hesiel.

Tu prichádza do úvahy nástroj ako Fail2Ban. Fail2Ban je bezplatný softvér s otvoreným zdrojovým kódom, ktorý pomáha pri zabezpečení vášho servera Linux pred škodlivými prihláseniami. Fail2Ban zakáže IP (na určitý čas), ak dôjde k určitému počtu neúspešných pokusov o prihlásenie.

Fail2Ban funguje hneď po vybalení so základnými nastaveniami, ale je tiež mimoriadne konfigurovateľný. Môžete si ho vyladiť podľa svojich predstáv a vytvoriť si filtre a pravidlá podľa svojich potrieb.

Znie to zaujímavo? Prečo neotestovať Fail2Ban? Prečítajte si a sledujte zvyšok článku a vyskúšajte Fail2Ban sami.

Inštalácia Fail2Ban v systéme Linux

Popularitu Fail2Ban môžete uhádnuť zo skutočnosti, že je k dispozícii v oficiálnych úložiskách všetkých hlavných distribúcií Linuxu. Vďaka tomu je inštalácia Fail2Ban jednoduchou úlohou.

Nainštalujte Fail2Ban na CentOS a Red Hat

Na inštaláciu nového softvéru do systému musíte byť používateľom root alebo sudo.

Musíte sa uistiť, že váš systém je aktuálny a máte nainštalované úložisko EPEL.

sudo yum update && sudo yum install epel-release

Teraz môžete nainštalovať Fail2Ban pomocou nasledujúceho príkazu:

sudo yum install fail2ban

Nainštalujte Fail2Ban na Ubuntu a Debian

Najprv sa uistite, že je váš systém aktualizovaný:

sudo apt update && sudo apt upgrade -y

Teraz nainštalujte Fail2Ban pomocou tohto príkazu:

sudo apt install fail2ban

Pochopenie konfiguračného súboru Fail2Ban

Vo Fail2Ban sú dva hlavné konfiguračné súbory: /etc/fail2ban/fail2ban.conf a /etc/fail2ban/jail.conf. Dovoľte mi vysvetliť, čo robia.

/etc/fail2ban/fail2ban.conf: Toto je konfiguračný súbor pre prevádzkové nastavenia démona Fail2Ban. Tu sú definované nastavenia ako loglevel, log file, socket a pid file.

/etc/fail2ban/jail.conf: Tu sa odohráva všetka mágia. Toto je súbor, v ktorom môžete nakonfigurovať veci ako predvolený čas zákazu, počet opakovaní pred zakázaním IP, pridanie IP adries, odosielanie informácií atď. V podstate z tohto súboru ovládate správanie Fail2Ban.

Teraz predtým, ako pôjdete zmeniť tieto súbory, Fail2Ban odporúča vytvoriť kópiu s .local súborom pre tieto súbory conf. Je to preto, že predvolené súbory conf môžu byť prepísané v aktualizáciách a stratíte všetky svoje nastavenia.

sudo cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Teraz pochopme súbor jail.conf. Ak na čítanie tohto veľkého súboru použijete príkaz less, môže sa to zdať dosť mätúce. Súbor conf sa snaží všetko vysvetliť príliš veľkým množstvom komentárov. Dovoľte mi teda, aby som vám to zjednodušil.

Súbor jail.conf je rozdelený na služby. Existuje sekcia [Predvolené] a vzťahuje sa na všetky služby. A potom môžete vidieť rôzne služby s ich príslušnými nastaveniami (ak existujú). Všetky tieto služby sú v zátvorkách. Zobrazia sa sekcie ako [sshd], [apache-auth], [squid] atď.

Ak odstránim komentáre, predvolená sekcia bude vyzerať takto:

[DEFAULT]
ignorecommand =
bantime = 10m
findtime = 10m
maxretry = 5
backend = auto
usedns = warn
logencoding = auto
enabled = false
mode = normal
filter = %(name)s[mode=%(mode)s]
destemail = root@localhost
sender = root@
mta = sendmail
protocol = tcp
chain =
port = 0:65535
fail2ban_agent = Fail2Ban/%(fail2ban_version)s
banaction = iptables-multiport
banaction_allports = iptables-allports
action_abuseipdb = abuseipdb
action = %(action_)s

Poviem vám význam niektorých z týchto parametrov.

  • bantime: Nastavte dĺžku zákazu. Predvolená hodnota je 10 minút.

  • findtime: Okno, v ktorom sa vykoná akcia na IP. Predvolená hodnota je 10 minút. Predpokladajme, že sa určitá IP pokúsila o zlé prihlásenie o 10:30. Ak rovnaká IP dosiahne maximálny počet opakovaní pred 10:40, bude zakázaná. V opačnom prípade sa ďalší neúspešný pokus po 10:40 bude počítať ako prvý neúspešný pokus.

  • maxretry: Počet neúspešných pokusov pred vykonaním akcie

  • usedns: Nastavenie „warn“ sa pokúša použiť reverzné DNS na vyhľadanie názvu hostiteľa a zakázanie jeho používania. Nastavením na nie zakážete adresy IP, nie názov hostiteľa.

  • destemail: E-mailová adresa, na ktorú sa budú odosielať upozornenia (treba nakonfigurovať)

  • odosielateľ: meno odosielateľa v e-maile s upozornením

  • mta: Mail Transfer Agent používaný pre e-mail s upozornením

  • banaction: Tento parameter používa súbor /etc/fail2ban/action.d/iptables-multiport.conf na nastavenie akcie po maximálnom počte neúspešných pokusov

  • protokol: Typ prevádzky, ktorá bude po zákaze zrušená

Ak chcete v ktoromkoľvek väzení (alebo pre celé väzenie) vykonať nejaké zmeny, napríklad maximálny počet opakovaní, čas zákazu, čas nájmu atď., mali by ste upraviť súbor jail.local.

Ako používať Fail2Ban na zabezpečenie Linuxového servera

Dovoľte mi ukázať vám niekoľko spôsobov, ako môžete použiť Fail2Ban na posilnenie bezpečnosti Linuxu.

Upozorňujeme, že na spustenie príkazov fail2ban musíte byť užívateľom root alebo mať sudo prístup.

Povoľte Fail2Ban na svojom serveri a skontrolujte všetky spustené väzenia

Na spustenie a povolenie Fail2Ban na vašom serveri Linux môžete použiť príkazy systemd:

systemctl start fail2ban
systemctl enable fail2ban

Keď je Fail2Ban povolený, môžete vidieť stav a aktívne väzenia pomocou príkazu fail2ban-client:

fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd

V prípade, že by vás zaujímalo, väzenie sshd je predvolene povolené.

Pozrite si denník Fail2Ban

Protokol Fail2Ban sa nachádza na /var/log/fail2ban.log. Súbory denníka sú v nasledujúcom formáte:

2019-03-25 07:09:08,004 fail2ban.filter [25630]: INFO [sshd] Found 139.59.69.76 – 2019-03-25 07:09:07
2019-03-25 07:09:36,756 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36
2019-03-25 07:09:36,757 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36
2019-03-25 07:09:36,774 fail2ban.actions [25630]: NOTICE [sshd] Ban 159.89.205.213
2019-03-25 07:09:36,956 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36
2019-03-25 07:09:36,957 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36
2019-03-25 07:09:36,981 fail2ban.actions [25630]: NOTICE [sshd] Ban 182.70.253.202
2019-03-25 07:09:37,247 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37
2019-03-25 07:09:37,248 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37
2019-03-25 07:09:37,589 fail2ban.actions [25630]: NOTICE [sshd] Ban 112.64.214.90

Môžete vidieť, že identifikuje adresy IP a zakáže ich, keď prekročia prah maximálneho opakovania.

Pozrite si zakázané adresy IP od Fail2Ban

Jedným zo spôsobov je skontrolovať stav určitého väzenia. Na tento účel môžete použiť klienta Fail2Ban.

fail2ban-client status <jail_name>

Napríklad, ak musíte vidieť všetky zlé ssh prihlásenia zakázané pomocou Fail2Ban, môžete ho použiť nasledujúcim spôsobom. Výstup by ukázal celkový počet neúspešných pokusov a celkový počet zakázaných IP adries.

root@test-server:~# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 14
| |- Total failed: 715
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 7
|- Total banned: 17
`- Banned IP list: 177.47.115.67 118.130.133.110 68.183.62.73 202.65.154.110 106.12.102.114 61.184.247.3 218.92.1.150

Systém, ktorý sa pokúša prihlásiť cez SSH z neúspešného prihlásenia, by mal dostať takúto chybu

ssh: connect to host 93.233.73.133 port 22: Connection refused

Ako natrvalo zakázať IP pomocou Fail2Ban

Teraz už viete, že zákaz uložený na IP prostredníctvom Fail2Ban je dočasný. V predvolenom nastavení je to 10 minút a útočník sa môže pokúsiť znova prihlásiť po 10 minútach.

Predstavuje to bezpečnostné riziko, pretože útočníci by mohli použiť skript, ktorý sa pokúsi prihlásiť po intervale 10 minút.

Ako teda zakážete pomocou Fail2Ban trvalý zákaz? Na to neexistuje jednoznačná odpoveď.

Od verzie Fail2Ban 0.11 sa automaticky vypočíta čas zákazu a trvalým adresám IP sa čas zákazu exponenciálne zvýši.

Ak však skontrolujete svoju verziu Fail2Ban, pravdepodobne používate verziu 0.10.

fail2ban-server --version 
Fail2Ban v0.10.2
Copyright (c) 2004-2008 Cyril Jaquier, 2008- Fail2Ban Contributors
Copyright of modifications held by their respective authors.
Licensed under the GNU General Public License v2 (GPL).

V predchádzajúcich verziách ste mohli použiť záporný bantime (bantime=-1), čo by bolo ekvivalentom trvalého banu, ale ak vyskúšate túto metódu, pravdepodobne sa vám zobrazí chyba ako 'Spustenie fail2ban: ERROR NOK: (' obraz disku databázy je chybný',)'.

Jedným nie tak čistým riešením by bolo zvýšiť bantime na niečo ako 1 deň, 1 týždeň, 1 mesiac alebo 1 rok. To by mohlo problém obísť, kým nebude vo vašom systéme dostupná nová verzia.

Ako odblokovať IP blokovanú pomocou Fail2Ban

Najprv skontrolujte, či je IP blokovaná alebo nie. Keďže Fail2Ban funguje na iptables, môžete sa pozrieť do iptable a zobraziť adresy IP, ktoré váš server zakazuje:

iptables -n -L

Možno budete musieť použiť príkaz grep, ak je zakázaných príliš veľa adries IP.

Ak vo výstupe nájdete zadanú IP adresu, bude zakázaná:

Takže ďalším krokom je zistiť, ktoré „väzenie“ zakazuje uvedenú IP. Tu budete musieť použiť príkaz Grep s protokolmi fail2ban.

Ako môžete vidieť vo výstupe nižšie, IP je zakázaná väzením sshd.

root@test-server:~# grep -E ‘Ban.*61.184.247.3’ /var/log/fail2ban.log
2019-03-14 13:09:25,029 fail2ban.actions [25630]: NOTICE [sshd] Ban 61.184.247.3
2019-03-14 13:52:56,745 fail2ban.actions [25630]: NOTICE [sshd] Ban 61.184.247.3

Teraz, keď poznáte názov väzenia blokujúceho IP, môžete zrušiť zákaz IP pomocou fail2ban-client:

fail2ban-client set <jail_name> unbanip <ip_address>

Ako pridať IP na bielu listinu v Fail2Ban

Nebude dobré, ak sa zakážete, však? Ak chcete ignorovať zakázanie IP adresy aktuálnou reláciou Fail2Ban, môžete IP adresu pridať na bielu listinu pomocou príkazu, ako je tento:

fail2ban-client set <JAIL_NAME> addignoreip <IP_Address>

Svoju IP adresu v Linuxe nájdete jednoducho. V mojom prípade to tak bolo

sudo fail2ban-client set sshd addignoreip 203.93.83.113
These IP addresses/networks are ignored:
`- 203.93.83.113

Ak chcete natrvalo pridať IP na bielu listinu, mali by ste upraviť konfiguračný súbor väzenia. Prejdite do uvedenej sekcie väzenia a pridajte riadok ignoreip takto:

ignoreip = 127.0.0.1/8 <IP_TO_BE_WHITELISTED>

Ak chcete pridať IP na bielu listinu zo všetkých väzení vo vašom systéme, bolo by lepšie upraviť súbor /etc/fail2ban/jail.local a pridať riadok pod sekciu DEFAULT, ako sme videli vyššie.

Aby sa táto zmena prejavila, budete musieť reštartovať Fail2Ban.

Ako zobraziť bielu listinu IP vo väzení

Pomocou tohto príkazu môžete vidieť všetky adresy IP zaradené do väzenia:

fail2ban-client get <JAIL_NAME> ignoreip

Malo by sa zobraziť všetky adresy IP, ktoré Fail2Ban pre toto väzenie ignoruje:

sudo fail2ban-client set sshd addignoreip 203.93.83.113
These IP addresses/networks are ignored:
|- 127.0.0.0/8
|- ::1
`- 203.93.83.113

Ako odstrániť IP z Fail2Ban whitelistu

Ak odstraňujete IP z určitého zoznamu povolených väzieb, môžete použiť tento príkaz:

fail2ban-client set <JAIL_NAME> delignoreip <IP_Address>

Ak chcete IP adresu natrvalo odstrániť, mali by ste upraviť súbor /etc/fail2ban/jail.local.

Čo ešte?

S Fail2Ban môžete robiť oveľa viac vecí. Táto príručka vám poskytne základy, ako začať s Fail2Ban. Nedotkol som sa tém, ako sú akcie, e-mailové upozornenia, filtre atď.

Keď sa zoznámite so základmi Fail2Ban, môžete ich začať skúmať viac. Zatiaľ sa s tým hrajte a pridajte ďalšiu vrstvu zabezpečenia k SSH na vašom Linuxovom serveri.