Konfigurace Fail2Ban v systému Linux k ochraně SSH, Apache, MySQL, Exim

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ána
findtime = 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říjemce
sender = [email protected] - odesílatel
mta = 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).