software fail2ban

Nejedná se o klasický firewall, který by aktivně filtroval síťový provoz. Fail2ban je služba, která prohledává autentizační logy a podle nastavených pravidel blokuje přes IPtables přístup z IP adres. Neomezuje se pouze na SSH, podporuje i další služby, které vytváří logy (Apache, Postfix, ...). Alternativou může být software DenyHosts, ten se však zaměřuje pouze na SSH.

Fail2ban dokáže zabránit DoS brute-force útoku nebo náhodným pokusům o přihlášení, nedokáže bránit DDoS brute-force útoku. Má absenci podpory protokolu IPv6, takže tyto adresy nebere v potaz a nedokáže je blokovat - o tom pak níže

Instalace & konfigurace

Samotná instalace je na většině Linuxových distribucí jednoduchá, protože software fail2ban se nachází v oficiálních repozitářích. V našem případě pro instalaci použijeme známý příkaz # apt-get install fail2ban. Fail2ban je napsán v Pythonu, proto si při instalaci stáhne a nainstaluje požadované závislosti. Po nainstalování se automaticky spustí, většinou může vyhovovat i výchozí konfigurace, ovšem doporučuji ji trochu upravit.

Konfigurace se provádí ve dvou souborech, a to v souboru fail2ban.conf a jail.conf. Oba soubory se nacházejí v adresáři /etc/fail2ban. První konfigurační soubor není až tak zajímavý - v něm se nastavují vlastnosti služby, v druhém se nastavuje již samotné banování.

Při otevření konfiguračního souboru jail.conf je v první části sekce [Default]. Zde se nastavují výchozí hodnoty, které pak používají ostatní služby. Najdeme tam možnosti nastavení jako ignoreip, bantime, findtime, maxretry.

[DEFAULT]
# "ignoreip" can be an IP address, a CIDR mask or a DNS host
ignoreip = 127.0.0.1/8
bantime = 600
findtime = 600
maxretry = 3

Dále v konfiguračním souboru jsou definovány akce a pod nimi již konečně jail pravidla pro jednotlivé služby. Nastavení pro SSH bude vypadat zhruba následovně:

[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
bantime = -1
maxretry = 2

Pro každou službu tedy můžeme nadefinovat parametry jako bantime, findtime a maxretry zvlášť. Pokud je nenadefinujeme, použijí se ty ze sekce [Default]. Po provedených změnách v konfiguračních souborech je nutné službu fail2ban restartovat, to se provede příkazem # service fail2ban restart.

Sledování provozu

Pokud si nejste jisti, zda služba fail2ban běží, je možno funkčnost zobrazit pomocí příkazu # service fail2ban status. Fail2ban samozřejmě svůj provoz loguje, ve výchozím nastavení do fail2ban.log (tohle se dá upravit v konfiguračním souboru fail2ban.conf). Takový log může vypadat následovně:

2017-04-19 18:55:14,857 fail2ban.actions [15556]: INFO Set banTime = 600
2017-04-19 18:55:14,859 fail2ban.filter [15556]: INFO Set findtime = 600
2017-04-19 18:55:14,895 fail2ban.jail [15556]: INFO Jail 'ssh' started
2017-04-20 04:40:07,972 fail2ban.filter [15556]: INFO [ssh] Found 61.152.91.20
2017-04-20 04:42:25,793 fail2ban.filter [15556]: INFO [ssh] Found 61.152.91.20
2017-04-20 04:45:03,654 fail2ban.filter [15556]: INFO [ssh] Found 61.152.91.20
2017-04-20 04:45:04,537 fail2ban.actions [15556]: NOTICE [ssh] Ban 61.152.91.20
2017-04-20 06:55:15,935 fail2ban.actions [15556]: NOTICE [ssh] Unban 82.194.76.6

Služba fail2ban má i vlastní statistiky. Ty si můžete zobrazit příkazem # fail2ban-client status anebo si zobrazit statistiku jail pravidla pomocí příkazu # fail2ban-client status ssh.

lukas@mujstroj ~ $ sudo fail2ban-client status
Status
|- Number of jail: 2
`- Jail list: ssh, ssh-ddos

lukas@mujstroj ~ $ sudo fail2ban-client status ssh
Status for the jail: ssh
|- filter
| |- File list: /var/log/auth.log
| |- Currently failed: 0
| `- Total failed: 1120
`- action
|- Currently banned: 29
| `- IP list: 94.102.53.182 221.208.170.164 77.88.123.53 162.213.25.67 123.30.190.56 211.100.70.54 ...
`- Total banned: 144

Jak jsem zmiňoval výše, fail2ban používá k banování IPtables. Pomocí příkazu # iptables -L si můžeme vypsat seznam pravidel, z kterých opět vyčteme seznam zablokovaných IP adres.

Chain fail2ban-ssh (1 references)
target prot opt source destination
DROP all -- 221.208.170.164 anywhere
DROP all -- 94.102.53.182 anywhere
DROP all -- 77.88.123.53 anywhere
DROP all -- 162.213.25.67 anywhere
DROP all -- 123.30.190.56 anywhere
DROP all -- 211.100.70.54 anywhere

Vadí absence podpory IPv6?

Ani ne...

Vycházím z dat z veřejně dostupného (pod IPv4 i IPv6) serveru, který neměl spuštěný fail2ban. Data jsou sesbírána za týden od 1. do 8. února 2015. Autentizační log je dostupný online. Grafy rozšířenosti IPv6 ve světě a stránek podporujících IPv6 jsou pak z VUT Brno.


Protokol Počet pokusů
IPv4 ~ 36 000
IPv6 0

Světová rozšířenost IPv6

Světová rozšířenost IPv6

Stránky podporující IPv6

Stránky podporující IPv6