Fail2ban je nejnovější bezpečnostní nástroj pro zabezpečení vašeho serveru před útokem hrubou silou. Automaticky chrání server před hackery. Funguje tak, že monitoruje prostřednictvím souborů protokolu a reaguje na problematické akce, jako jsou opakované neúspěšné pokusy o přihlášení. Proces spočívá v přidání nového pravidla do řetězce brány firewall a odeslání upozornění e-mailem. Fail2ban můžete snadno nainstalovat a nakonfigurovat pomocí tohoto jednoduchého dokumentu.
Než přistoupíme k instalaci, musíme se ujistit, že náš systém splňuje všechny softwarové požadavky pro kompilaci a instalaci aplikace. A také by měl být nakonfigurován se statickou IP adresou. V prvním kroku aktualizujte svá systémová úložiště a softwarové balíčky vydáním níže uvedených příkazů na CentOS.
# yum update
Instalace Fail2ban na CentOS
Chcete-li nainstalovat Fail2Ban na server CentOS 7, budeme muset nejprve nainstalovat úložiště EPEL (Extra Packages for Enterprise Linux). EPEL obsahuje další balíčky pro všechny verze CentOS. Můžeme spustit tento následující příkaz z kořenového adresáře a nainstalovat tento balíček.
# yum install epel-release -y
# yum install fail2ban fail2ban-systemd
Fail2ban vyžaduje určité závislosti. Automaticky je stáhne z úložiště.
fail2ban-firewalld
fail2ban-sendmail
fail2ban-server
systemd-python
Konfigurace nastavení pro Fail2ban na CentOS
Výchozí konfigurační soubor fail2ban se nachází na /etc/fail2ban/jail.conf
Všechny konfigurace fail2ban je třeba provést v místním souboru. Musíte zkopírovat /etc/fail2ban/jail.conf
do /etc/fail2ban/jail.local
# cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Po zkopírování budeme muset nakonfigurovat a přizpůsobit software pomocí jail.local
konfigurační soubor. Soubor jail.local má přednost před souborem jail.conf a používá se k zabezpečení aktualizace vlastní konfigurace.
Hlavní konfigurace ve výchozím nastavení jail.local
Kód souboru se může skládat z mnoha řádků kódů, které se spouštějí k whitelistu nebo zabanování jedné nebo více IP adres, nastavení doby trvání bantime, počtu pokusů o selhání atd. Pro aktivaci služby můžete nastavit povolený stav od false do true. Potřebujete znát některé termíny používané v konfiguračním souboru.
ignoreip
:Může to být adresa IP, maska CIDR nebo hostitel DNS. Přidáním do tohoto seznamu můžete libovolnou IP adresu přidat na seznam povolených. Pomocí oddělovače mezer lze definovat několik adres.bantime
:Je to počet sekund, po které je hostitel zakázán.Findtime
:Je to parametr, který se používá ke kontrole, zda hostitel musí být zakázán nebo ne. Když hostitel vygeneruje maxretry ve svém posledním vyhledávacím čase, je zakázán.Maxretry
:Je to parametr používaný k nastavení limitu pro počet opakování hostitelem, při překročení tohoto limitu je hostitel zakázán.
Na serveru CentOS 7 budete muset změnit možnost backendu v jail.local z auto na systemd.
# "backend" specifies the backend used to get files modification.
# Available options are "pyinotify", "gamin", "polling", "systemd" and "auto".
# This option can be overridden in each jail as well.
#
# pyinotify: requires pyinotify (a file alteration monitor) to be installed.
# If pyinotify is not installed, Fail2ban will use auto.
# gamin: requires Gamin (a file alteration monitor) to be installed.
# If Gamin is not installed, Fail2ban will use auto.
# polling: uses a polling algorithm which does not require external libraries.
# systemd: uses systemd python library to access the systemd journal.
# Specifying "logpath" is not valid for this backend.
# See "journalmatch" in the jails associated filter config
# auto: will try to use the following backends, in order:
# pyinotify, gamin, polling.
#
# Note: if systemd backend is chosen as the default but you enable a jail
# for which logs are present only in its own log files, specify some other
# backend for that jail (e.g. polling) and provide empty value for
# journalmatch. See https://github.com/fail2ban/fail2ban/issues/959#issuecomment-74901200
backend = systemd
Konfigurace fail2ban pro ochranu SSH
Ve výchozím nastavení nejsou v CentOS 7 povoleny žádné vězení. Chcete-li povolit ochranu SSH, musíte odkomentovat následující řádky v jail.local
soubor, jak je uvedeno níže:
# JAILS
# SSH servers
#
[sshd]
enabled =true# Chcete-li použít agresivnější filtr sshd (včetně sshd-ddos failregex):#filter =sshd-aggressiveport =sshlogpath =%(sshd_log)sbackend =%(sshd_backend)s
Parametr enabled je nastaven na hodnotu true, abychom poskytli ochranu, pro deaktivaci ochrany jej můžeme nastavit na hodnotu false. Parametr filtru kontroluje konfigurační soubor fail2ban sshd, který se nachází v cestě /etc/fail2ban/filter.d/sshd.conf
.
Parametr action se používá k odvození IP adresy, kterou je třeba zakázat pomocí filtru dostupného z /etc/fail2ban/action.d/firewallcmd-ipset.conf.
Port
:Tento parametr lze změnit na novou hodnotu, například port=2222, pokud jste přesunuli port na 2222 namísto výchozího. Pro výchozí port 22 není nutné tento parametr měnit.Logpath
:Poskytuje cestu, kde je uložen soubor protokolu. Tento soubor protokolu je zkontrolován Fail2Ban.Maxretry
:Používá se k nastavení maximálního limitu pro neúspěšné přihlášení.Bantime
:Používá se k nastavení doby trvání v sekundách, na kterou musí být hostitel zakázán.filter
:Název souboru umístěného v/etc/fail2ban/filter.d
který obsahuje informace failregex používané k náležité analýze souborů protokolu.
Povolení služby Fail2ban
Pro spuštění tohoto softwaru musíte povolit a spustit službu CentOS firewalld.
# systemctl enable firewalld
Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.
# systemctl start firewalld
# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2018-01-14 10:57:34 UTC; 9s ago
Docs: man:firewalld(1)
Main PID: 19493 (firewalld)
CGroup: /system.slice/firewalld.service
└─19493 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
Now we can enable and start our fail2ban service by executing these commands below:
#systemctl enable fail2ban
#systemctl start fail2ban
V případě jakýchkoli změn konfigurace restartujte službu a přidejte tyto změny pomocí příkazu níže:
#systemctl restart fail2ban
Použijte klienta Fail2ban
Fail2ban poskytuje příkaz fail2ban-client
které lze použít ke spuštění Fail2ban z příkazového řádku. Podívejte se na různé možnosti příkazového řádku níže:
fail2ban-client COMMAND
start
:spustí server a vězeníreload
:znovu načte konfiguracireload <JAIL>
:znovu načte vězenístop
:zastaví všechna vězení a ukončí serverstatus
:získá aktuální stav serveruping
:testuje, zda je server naživuhelp
:vrátit tento výstupversion
:vrátí verzi serveru
Chcete-li například zkontrolovat, zda běží Fail2Ban a zda je povoleno vězení SSHd, spusťte:
# fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
Pro více informací o tomto příkazu můžete spustit man fail2ban-client
.
Sledování neúspěšných pokusů o přihlášení
Pomocí následujícího příkazu můžeme zkontrolovat protokol SSH a zkontrolovat, zda nedošlo k nějakým neúspěšným pokusům o přihlášení k serveru přes port ssh. Můžeme získat seznam neúspěšných pokusů o heslo uživatele root z různých IP adres podobných tomuto výstupu.
Jan 14 05:08:58 li226-12 sshd[14786]: Failed password for root from 67.171.30.161 port 43374 ssh2
Jan 14 05:09:00 li226-12 sshd[14786]: Failed password for root from 67.171.30.161 port 43374 ssh2
Jan 14 05:09:02 li226-12 sshd[14786]: Failed password for root from 67.171.30.161 port 43374 ssh2
Jan 14 05:09:04 li226-12 sshd[14786]: Failed password for root from 67.171.30.161 port 43374 ssh2
Jan 14 05:09:06 li226-12 sshd[14786]: Failed password for root from 67.171.30.161 port 43374 ssh2
Jan 14 05:09:08 li226-12 sshd[14786]: Failed password for root from 67.171.30.161 port 43374 ssh2
Seznam zakázaných IP adres, které dosáhly maximálního počtu neúspěšných pokusů, můžete zobrazit příkazem níže:
#iptables -L -n
Zrušení zákazu IP adresy
Aby bylo možné odstranit IP adresu ze seznamu zakázaných, je parametr IPADDRESS nastaven na příslušnou IP, která vyžaduje whitelisting. Název "sshd" je název vězení, v tomto případě vězení "sshd", které jsme nakonfigurovali výše. Pro totéž můžeme spustit následující příkaz.
#fail2ban-client set sshd unbanip IPADDR
Koneckonců
Fail2ban funguje na pozadí a nepřetržitě prohledává soubory protokolu, zda neobsahují neobvyklé přihlašovací vzory a pokusy o narušení bezpečnosti. Tento článek vám poskytuje krátký úvod do tohoto tématu, více informací o tom můžete získat na této wiki Fail2ban. Doufám, že je to pro vás užitečné. Uveřejněte prosím své cenné komentáře a návrhy.