Fail2ban umožňuje blokovat přístup k serveru nebo spuštěným službám na základě analýzy přístupových protokolů a připojení. Fail2Ban může automaticky vytvořit pravidla brány firewall pro blokování konkrétních IP adres, pokud jsou akce z této IP detekovány jako podezřelé. Fail2Ban tedy může chránit váš server před hádáním hesel pomocí SSH, útoků DDoS, zneužití pokusů o zneužití a provádění zakázaných akcí.
Každá serverová služba, jejíž porty jsou otevřené pro vnější svět, je potenciálně zranitelná. Porty některých služeb lze uzavřít, ale ne všechny to dokáží. Pokud například chcete, aby vaše poštovní služba SMTP fungovala plně, nemůžete ji zakázat nebo blokovat port na bráně firewall a čas od času uvidíte protokoly v protokolech o pokusu o výběr hesla pro účet. To se děje s jinými službami..
Obvykle na všech mých serverech uzavírám přístup SSH zvnějšku, protože Připojuji se ke svým serverům ze své statické IP adresy nebo prostřednictvím připojení OpenVPN. To však není vždy možné. Výměna standardních portů přichází k záchraně nebo konfiguraci na servisním serveru fail2ban. V tomto příkladu vám ukážeme, jak nainstalovat a používat fail2ban na CentOS, tuto instrukci však můžete použít i pro další distribuce Linuxu..
Obsah:
- Instalace a počáteční nastavení Fail2Ban v CentOS 8/7
- Použití Fail2Ban k ochraně SSH před zkouškou pomocí hesla
- Protokoly Fail2Ban
- Zabezpečení Apache pomocí Fail2Ban
- Konfigurace balíčků Fail2Ban a Nginx
- Zabezpečení MySQL pomocí Fail2Ban
- Fail2Ban Rules for Exim
- Fail2Ban IP Whitelist, odblokování IP
Instalace a počáteční nastavení Fail2Ban v CentOS 8/7
Balíček pro instalaci fail2ban je v úložišti Epel, připojíme jej:
# yum install epel-release -y
Po připojení úložiště můžete nainstalovat fail2ban pomocí yum nebo dnf (na CentOS 8):
# yum install fail2ban -y
Jako každá jiná služba, fail2ban je třeba přidat do spuštění, aby se automaticky spustil při restartování systému:
[root @ server ~] # systemctl povolit fail2ban
Vytvořeno symlink /etc/systemd/system/multi-user.target.wants/fail2ban.service → /usr/lib/systemd/system/fail2ban.service.
Služba fail2ban ukládá konfigurační soubory do adresáře / etc / fail2ban. Hlavní konfigurační soubor - /etc/fail2ban/jail.conf. Protože tento soubor lze při aktualizaci služby přepsat, je třeba soubor vytvořit vězení. Soubory také v adresáři /etc/fail2ban/jail.d/ lze použít k přepsání nastavení ve výše uvedených souborech. Soubory se používají v tomto pořadí:
- /etc/fail2ban/jail.conf
- /etc/fail2ban/jail.d/*.conf
- /etc/fail2ban/jail.local
- /etc/fail2ban/jail.d/*.local
Použití Fail2Ban k ochraně SSH před zkouškou pomocí hesla
Vytvořte soubor a proveďte nastavení:
# nano /etc/fail2ban/jail.local
A k tomu přidejte obsah:
[VÝCHOZÍ] # Ban hostitelé na jednu hodinu: bantime = 3600 # Přepsat /etc/fail2ban/jail.d/00-firewalld.conf: banaction = iptables-multiport [sshd] enabled = true
Tato konfigurace nastavuje nový čas pro blokování IP adres pro všechny služby, nastavuje použití iptables pro zámky a ochrana pro sshd je povolena.
Chcete-li použít filtr firewall, zadejte:
banaction = firewallcmd-ipset
Po změně nastavení restartujte službu:
# systemctl restart fail2ban
Chcete-li zobrazit stav fail2ban a zkontrolovat seznam chráněných služeb, spusťte příkaz:
[root @ server ~] # fail2ban-client status
Status | - Počet vězení: 1 '- Seznam vězení: sshd
Můžete požádat o aktuální stav zámku fail2ban pro konkrétní službu:
# fail2ban-client status sshd
V souboru vězení může popsat obecné parametry, které nebudou přepsány vězení.
Odemkněte řádek:
ignoreip = 127.0.0.1/8
Změňte následující hodnoty:bantime = 10m
- čas, po který bude IP blokovánafindtime = 10m
- čas, během kterého budou neúspěšné autorizační pokusy započítány.maxretry = 3
- počet pokusů před blokováním
Chcete-li dostávat e-mailová upozornění, musíte nakonfigurovat následující možnosti:destemail = [email protected]
-příjemcesender = [email protected]
- odesílatelmta = postfix
- Služba SMTP, jejímž prostřednictvím se odesílá
Chcete-li nakonfigurovat blokování pro jednotlivé služby, v souboru /etc/fail2ban/jail.local po bloku [VÝCHOZÍ] se vytvoří blok pro požadovanou službu, například jako sshd. Přidejte do něj některá nastavení:
[sshd] enabled = true port = ssh logpath =% (sshd_log) s
Uvedli jsme, který port blokovat a kam zapisovat blokovací protokoly. Věnujte pozornost adresáři /etc/fail2ban/filter.d, tam jsou popsány filtry, pomocí kterých se budou analyzovat záznamy v protokolu a zkontrolovat, zda tato nebo ta položka indikuje neúspěšnou autentizaci. Pokud soubory uvedete v adresáři, najdete pravidla pro nejoblíbenější služby fail2ban:# ls /etc/fail2ban/filter.d
Soubory jsou popsány velmi podrobně a můžete studovat, co potřebujete, abyste pochopili, jak probíhá kontrola protokolu..
Protokoly Fail2Ban
Chcete-li zkontrolovat protokol fail2ban, spusťte příkaz:
# journalctl -b -u fail2ban
Záznamy můžete také zkontrolovat v reálném čase:
# tail -F /var/log/fail2ban.log
Výstup protokolu:
2019-12-05 12: 13: 26,914 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 222.186.180.17 2019-12-05 12: 13: 26,930 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 222.186 .180.223 2019-12-05 12: 13: 26,944 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 36.72.82.10 2019-12-05 12: 13: 26,958 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 40.117.135.57 2019-12-05 12: 13: 26,973 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 45.55.155.224 2019-12-05 12: 13: 26,988 fail2ban.actions [9750]: NOTICE [sshd ] Obnovit zákaz 67.205.135.127 2019-12-05 12: 13: 27,003 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 83.171.107.216 2019-12-05 12: 13: 43,362 fail2ban.filter [9750]: INFO [sshd] Nalezeno 183.87.134.98 - 2019-12-05 12:13:42 2019-12-05 12: 13: 45,571 fail2ban.filter [9750]: INFO [sshd] Nalezeno 183,87.134.98 - 2019-12-05 12 : 13: 45 2019-12-05 12: 15: 46,109 fail2ban.filter [9750]: INFO [sshd] Nalezeno 112.64.170.178 - 2019-12-05 12:15:45 2019-12-05 12: 17: 05,317 fail2ban.actions [9750]: UPOZORNĚNÍ [sshd] Unba n 222,186,75,216
Jak vidíte, fail2ban funguje a periodicky blokuje nebo odstraňuje blokování IP adres.
Chcete-li zkontrolovat, které adresy IP jsou blokovány v iptables pomocí fail2ban, proveďte následující kroky:
# iptables -L
Jak vidíte, s ssh otevřeným ven, občas se někdo pokusí získat heslo a přihlásit se. Pokud statistiku zkontrolujete po nějaké době, uvidíte, že počet blokovaných IP roste.
Zabezpečení Apache pomocí Fail2Ban
Pokud chcete přizpůsobit fail2ban pro svůj apache (httpd) přidejte následující nastavení do vězení:
# detekovat neúspěšné pokusy o heslo [apache] enabled = true port = http, https filter = apache-auth logpath = / var / log / httpd / error_log maxretry = 3 # blokuje adresy IP, které přímo přistupují ke skriptům s příponou php, asp, exe, pl, cgi, scgi [apache-noscript] enabled = true port = http, https filter = apache-noscript logpath = / var / log / httpd / error_log maxretry = 3 # detekovat pokusy o přetečení Apache [apache-overflows] enabled = true port = http, https filter = apache-overflows logpath = / var / log / httpd / error_log maxretry = 2 # detekovat neúspěšné pokusy o vyhledávání v domovském adresáři na serveru [apache-nohome] enabled = true port = http, https filter = apache -nohome logpath = / var / log / httpd / * error_log maxretry = 2
Po změně konfiguračního souboru restartujeme službu a zkontrolujeme stav:
[root @ server ~] # fail2ban-client status apache
Stav vězení: apache | - Filtr | - Aktuálně selhalo: 0 | - Celkem selhalo: 0 | '- Seznam souborů: / var / log / httpd / error_log' - Akce | - Aktuálně zakázáno: 0 | - Celkem zakázáno: 0 '- Seznam zakázaných IP:
Pro test jsem nainstaloval na server Joomla, poté jsem se pokusil otevřít neexistující soubor a fail2ban zablokoval mě:
[root @ server httpd] # fail2ban-client status apache-noscript
Stav vězení: apache-noscript | - Filtr | - Aktuálně selhalo: 1 | - Celkem selhalo: 6 | '- Seznam souborů: / var / log / httpd / error_log' - Akce | - Aktuálně zakázáno: 1 | - Celkem zakázáno: 1 '- Seznam zakázaných IP: *. *. *. *
Konfigurace balíčků Fail2Ban a Nginx
Pokud jste webový server nginx a web obsahuje oddíly vyžadující autorizaci, můžete mít také problémy s pokusem o výčet hesel. Pro fail2ban můžeme určit použití souboru nginx-http-auth.conf, Ve výchozím nastavení je již popsáno v konfiguračním souboru. /etc/fail2ban/jail.conf:
[root @ server ~] # cat /etc/fail2ban/jail.conf | grep nginx
[nginx-http-auth] logpath =% (nginx_error_log) s # Chcete-li použít vězení 'nginx-limit-req', měli byste mít 'ngx_http_limit_req_module' # a definovat 'limit_req' a 'limit_req_zone', jak je popsáno v dokumentaci nginx # http: / /nginx.org/en/docs/http/ngx_http_limit_req_module.html # nebo například viz 'config / filter.d / nginx-limit-req.conf' [nginx-limit-req] logpath =% (nginx_error_log) s [ nginx-botsearch] logpath =% (nginx_error_log) s logpath =% (nginx_access_log) s
Musíme ji zahrnout do konfiguračního souboru /etc/fail2ban/jail.local přidáním:
[nginx-http-auth] enabled = true
Po všech nastaveních nezapomeňte restartovat službu:
# systemctl restart fail2ban
Zabezpečení MySQL pomocí Fail2Ban
Chcete-li chránit MySQL, musíte do konfiguračního souboru přidat samostatný blok vězení:
[mysqld-auth] enabled = true filter = mysqld-auth port = 3306 logpath = /var/log/mysql/error.log
Toto nastavení vás ochrání před heslem pro uživatele mysql (jedná se o velmi častou hrubou sílu).
Fail2Ban Rules for Exim
Chcete-li nakonfigurovat zabezpečení poštovní služby Exim, proveďte následující konfiguraci:
[exim] enabled = true filter = exim action = iptables-multiport [name = exim, port = "25,465,587"] logpath = / var / log / exim / mainlog
Takže si můžete přizpůsobit fail2ban pracovat s téměř všemi populárními službami a váš server bude co nejbezpečnější.
Fail2Ban IP Whitelist, odblokování IP
Odemknutí blokované adresy IP fail2ban, použijte příkaz:
# fail2ban-client set SECTION unbanip IP
- kde SECTION je název sekce v konfiguračním souboru, podle pravidel, která byla zablokována vaše IP adresa. Například:
# fail2ban-client set apache-noscript unbanip 185. *. *. *
K výjimkám fail2ban (whitelist) můžete přidat konkrétní adresy IP. To provedete v konfiguračním souboru vězení do řádku zadejte IP:
ignoreip = 185. *. *. *
Přidáním mé IP adresy k výjimkám jsem provedl několik útoků jako ten předchozí a blokování se nestalo.
Jak vidíte, nastavení fai2ban je poměrně jednoduché, ale je to docela účinný prostředek další ochrany vašeho serveru před vetřelci. U Windows bohužel nevidím bezplatné programy s podobnou funkčností (můžete zkusit blokovat IP adresy pomocí PowerShell - viz článek Ochrana RDP před kontrolou heslem).