Fail2Ban je nástroj pro analýzu protokolů, který skenuje soubory protokolů různých procesů a zakazuje adresy IP, které způsobují příliš mnoho selhání hesla. Když je nalezen pokus o přihlášení, Fail2Ban přidá do iptables nové pravidlo, které zablokuje IP adresu útočníka, ať už dočasně nebo trvale. Může vás na to také upozornit e-mailem.
Primárně se zaměřuje na detekci narušení prostřednictvím SSH, ale lze jej nakonfigurovat tak, aby fungoval s jakoukoli službou, která používá soubory protokolu.
Předpoklady
-
Server Fedora 33 nebo CentOS 8 s uživatelem bez oprávnění root s právy sudo.
-
Nainstalujte si Nano editor, protože to je to, co budeme používat.
$ sudo dnf install nano -y
Instalovat Fail2Ban
Chcete-li nainstalovat Fail2Ban na CentOS 8, musíte nejprve nainstalovat úložiště EPEL Yum.
$ sudo dnf install epel-release
Fedora 33 se dodává s Fail2Ban.
Spusťte následující příkaz a nainstalujte Fail2Ban na Fedora 33 i CentOS 8.
$ sudo dnf install fail2ban
Po instalaci musíme službu povolit.
$ sudo systemctl enable fail2ban
Dále spusťte službu fail2ban.
$ sudo systemctl start fail2ban
Nyní můžete zkontrolovat stav služby a zjistit, zda funguje správně.
$ sudo systemctl status fail2ban
? fail2ban.service - Fail2Ban Service
Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2020-11-02 21:15:59 UTC; 5s ago
Docs: man:fail2ban(1)
Process: 19031 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
Main PID: 19032 (f2b/server)
Tasks: 3 (limit: 1125)
Memory: 11.0M
CPU: 96ms
CGroup: /system.slice/fail2ban.service
??19032 /usr/bin/python3 -s /usr/bin/fail2ban-server -xf start
Nov 02 21:15:59 howtoforge-tutorial systemd[1]: Starting Fail2Ban Service...
Nov 02 21:15:59 howtoforge-tutorial systemd[1]: Started Fail2Ban Service.
Nov 02 21:15:59 howtoforge-tutorial fail2ban-server[19032]: Server ready
Nakonfigurujte Fail2Ban
Služba Fail2Ban uchovává své konfigurační soubory v /etc/fail2ban
adresář. Narazíte na soubor jail.conf
v něm. Tento soubor je obvykle během upgradu balíčku přepsán, takže by neměl být upravován.
Místo toho by měly být všechny konfigurace provedeny v novém souboru, který budeme nazývat jail.local
. Nastavení v těchto 2 souborech lze dále přepsat pomocí souborů z /etc/fail2ban/jail.d/
adresář.
Konfigurace se použijí v následujícím pořadí:
/etc/fail2ban/jail.conf
etc/fail2ban/jail.d/*.conf
, Abecedně/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/*.local
, Abecedně
jail.conf
obsahuje [DEFAULT]
sekce následovaná sekcemi pro jednotlivé služby. Kteroukoli z těchto sekcí lze přepsat jejich definováním v .local
soubory.
Nakonfigurujte jail.local
Vytvoříme nový jail.local
soubor.
$ sudo nano /etc/fail2ban/jail.local
Vložte do něj následující kód.
[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override backend=auto in /etc/fail2ban/jail.conf
backend = systemd
[sshd]
enabled = true
Stiskněte Ctrl + X zavřete editor a stiskněte Y po zobrazení výzvy k uložení souboru. Tím se nastaví nový výchozí bantime
pro všechny služby změní backend na systemd
a povolí `sshd
vězení.
Chcete-li implementovat nové změny, restartujte Fail2ban.
$ sudo systemctl restart fail2ban
Nově použitá nastavení můžeme potvrdit pomocí fail2ban-client
utility.
$ sudo fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
Můžeme také získat podrobný stav každého vězení konkrétně následujícím způsobem.
$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
Další nastavení
jail.conf
poskytuje mnohem více nastavení, která lze upravit pomocí /jail.local
soubor. Dále si projdeme některá nastavení.
Adresa IP na seznamu povolených
Pomocí následujícího kódu můžete IP adresy zablokovat/ignorovat na seznam povolených/ignorovat
[DEFAULT]
ignoreip = 127.0.0.1/8 123.45.67.89
Pokud chcete přidat na seznam povolených IP adres pouze pro určité věznice, můžete tak učinit prostřednictvím fail2ban-client
.
$ sudo fail2ban-client set JAIL addignoreip 123.45.67.89
Nahraďte JAIL
ve výše uvedeném příkazu s názvem vězení, pro které chcete upravit nastavení.
Čas zákazu a částka opakování
Existují 3 nastavení, která mohou nastavit čas a počet opakování pro zákaz.
bantime
- je doba v sekundách, po kterou je IP zakázána. Chcete-li nastavit trvalý zákaz, nastavte tuto hodnotu na záporné číslo. Výchozí hodnota je 10 minut nebo 600 sekund.
findtime
- je doba mezi pokusy o přihlášení, než je nastaven zákaz. Tato hodnota je vždy počet sekund. Pokud je například Fail2ban nastaven tak, aby zablokoval IP adresu po 5 neúspěšných pokusech o přihlášení, těchto 5 pokusů musí proběhnout během nastavených 10 minut bantime
limit.
maxretry
- je počet opakování z jedné IP adresy před uložením zákazu. Výchozí hodnota je 3.
Chcete-li tato nastavení přizpůsobit, vložte následující řádky do \etc\fail2ban\jail.local
soubor pod [DEFAULT]
sekce.
bantime = 3600
findtime = 300
maxretry = 4
E-mailová upozornění
Chcete-li zasílat e-mailová upozornění, budete si muset nejprve nainstalovat Mail Transfer Agent (MTA). Pro náš účel nainstalujeme sendmail
.
$ sudo dnf install sendmail
Chcete-li obdržet e-mail, přidejte následující kód do \etc\fail2ban\jail.local
soubor pod [DEFAULT]
sekce.
destemail = [email protected]
sendername = Fail2Ban
mta = sendmail
action = %(action_mw)s
destemail
odkazuje na ID cílového e-mailu, což je ID, na které chcete dostávat e-maily, sendername
odkazuje na jméno odesílatele, takže pro něj používáme Fail2Ban. mta
odkazuje na používaného agenta pro přenos pošty, což je sendmail
tady. Pokud používáte Postfix
, pak použijte hodnotu mail
pro mta
proměnná.
action
odkazuje na výchozí akci, která se provede po zjištění narušení. Výchozí hodnota je %(action_)s
který pouze zakáže uživatele. %(action_mw)s
zakáže a odešle e-mail se zprávou Whois; zatímco %(action_mwl)s
zakáže a odešle e-mail se zprávou Whois spolu s informacemi z příslušných souborů protokolu. Toto lze také změnit na základě konkrétního vězení.
Nastavení pro jednotlivá vězení
Jak již víme, [DEFAULT]
sekce platí pro všechny věznice, je čas podívat se na některá konkrétní vězení a jejich nastavení.
Vězení SSHD
Již jsme definovali [sshd]
dříve v našem jail.local
soubor. Pomocí následujícího kódu jej můžeme trochu více přizpůsobit.
[sshd]
enabled = true
port = ssh
logpath = %(ssh_log)s
V tomto případě používáme předdefinovanou proměnnou ssh
pro port, který je výchozím portem SSH. Pokud používáte jiný port SSH, měli byste jej změnit. logpath
odkazuje na umístění souboru protokolu, který se má monitorovat. %(ssh_log)s
používá hodnotu definovanou ve standardním konfiguračním souboru Fail2ban (/etc/fail2ban/paths-common.conf
).
Vězení Nginx
Nginx má několik vězení, které lze použít ve Fail2Ban. Pokud je například opakovaně napadena část vašeho webu chráněná heslem, můžete použít sekci [nginx-http-auth]
v jail.local
soubor pro to.
[nginx-http-auth]
enabled = true
Můžeme také přidat sekci nazvanou [nginx-botsearch]
k zastavení požadavků na složky nebo umístění, která neexistují.
[nginx-badbots]
enabled = true
Existují také další věznice Nginx, ale nejsou předem nakonfigurované s Fail2Ban. Je třeba je vytvořit ručně a většina z nich může být založena na těch Apache, se kterými se dodává Fail2Ban.
Fail2Ban Filters a Failregexs
V konfiguraci Fail2Ban je další nastavení, které se nazývá filtry. Filtry rozhodují, zda řádek v souboru protokolu označuje neúspěšné ověření.
Hodnota filtru v konfiguračním souboru je odkaz na soubor umístěný v /etc/fail2ban/filter.d
adresář s jeho .conf
rozšíření odstraněno.
Chcete-li zjistit, jaké druhy filtrů jsou k dispozici, zkontrolujte adresář.
$ ls /etc/fail2ban/filter.d
Uvidíte v něm 2 soubory protokolu pro Nginx; nginx-badbots.conf
a nginx-http-auth.conf
.
Tyto konfigurační soubory používají k analýze souborů protokolu regulární výrazy (regex). Tyto se nazývají Failregexs. Můžete si přizpůsobit nebo vytvořit nové filtry napsáním vlastních regulárních výrazů. Těmito regulárními výrazy se nebudeme podrobně zabývat, protože jsou mimo rozsah tohoto tutoriálu.
Sledování protokolů Fail2Ban a brány firewall
Stav Fail2Ban můžete zkontrolovat pomocí systemctl
jak bylo uvedeno dříve.
$ sudo systemctl status fail2ban
Chcete-li získat trochu více podrobností, můžete použít journalctl
příkaz.
$ sudo journalctl -b -u fail2ban
Můžete také použít fail2ban-client
pro dotaz na stav fail2ban-server
nebo individuální vězení.
$ sudo fail2ban-client status
$ sudo fail2ban-client status jail_name
Můžete se také dotazovat na soubor protokolu Fail2ban.
$ sudo tail -F /var/log/fail2ban.log
Můžete vypsat aktuální pravidla nakonfigurovaná pro iptables.
$ sudo iptables -L
Můžete také uvést pravidla iptables ve formátu, který odráží příkazy nezbytné k aktivaci těchto pravidel.
$ sudo iptables -S
Závěr
Tímto končí náš tutoriál o instalaci a konfiguraci Fail2Ban na serveru založeném na Fedora 33 nebo CentOS 8. Pokud máte nějaké dotazy, napište je do komentářů níže.