In tantissime installazioni server di Gnu/Linux si effettua una configurazione base del firewall di sistema IPTABLES, ma non si va ad alzare l’asticina della sicurezza e della prevenzione.
Fail2ban ci viene in aiuto integrandosi perfettamente con iptables andando a gestire in modo “dinamico” le regole di firewall per poter bloccare in tempo reale attacchi di brute force.
La logica di funzionamento è molto semplice, fail2ban effettua il parsing dei file di log di sistema o dei servizi, contando i tentativi di accessi non andati a buon fine ed applica le regole imposte, creando le rules per iptables con i relativi timeout.
Una volta effettuata l’installazione attraverso il package manager della distro, per esempio su debian:
1 2 |
sudo apt update sudo apt install fail2ban |
e dopo l’installazione basterà verificare se il servizio è attivo
1 |
systemctl status fail2ban |
L’output di systemd ci dirà se il servizio è attivo e funzionante.
Il sistema di default avrà caricato delle regole che da subito inizieranno a gestire i log di sshd.
Per vedere i filtri caricati a sistema, basterà digitare il comando:
1 2 3 4 5 |
root@localhost:/# fail2ban-client status Status |- Number of jail: 1 `- Jail list: sshd |
con il quale possiamo vedere che è attiva la JAIL per il servizio sshd.
Per visualizzare, invece, cosa si riscontra su iptables, basterà digitare iptables -L
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
root@localhost:/# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination f2b-sshd tcp -- anywhere anywhere multiport dports ssh Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain f2b-sshd (1 references) target prot opt source destination REJECT all -- xx.yy.zz.tt anywhere reject-with icmp-port-unreachable REJECT all -- yy.tt.zz.xx anywhere reject-with icmp-port-unreachable REJECT all -- 60-xx-yy-y.static.pippo.net anywhere reject-with icmp-port-unreachable REJECT all -- 60.xx.yy.y anywhere reject-with icmp-port-unreachable RETURN all -- anywhere anywhere |
Altri due comandi utili sono quelli per eliminare o aggiungere un ip in modo manuale su iptables tramite fail2ban, esempio:
1 2 3 |
root@localhost:/# fail2ban-client set sshd banip XX.YY.TT.ZZ root@localhost:/# fail2ban-client set sshd unbanip XX.YY.TT.ZZ |
Mi preme ricordare che il BAN avviene SOLO a livello di servizio e non di macchina, quindi l’ip bannato per sshd avrà la possibilità di interrogare altri servizi, per il quale magari non è attivo fail2ban.
Ecco il motivo per il quale è necessario customizzare fail2ban creando jail ad-hoc per ogni servizio, potendo eventualmente aggiungere anche delle regole custom di interpretazione dei log.
NOTA:
se il servizio fail2ban darà come output il seguente errore
ERROR Failed during configuration: Have not found any log file for sshd jail
essendo su SYSTEMD i log non saranno presenti su /var/log/auth.log (configurazione standard), ma all’interno del demone stesso di systemd, quindi si dovrà aggiungere l’opzione per indicare a fail2ban di leggere i log all’interno del demone di systemd; Per una distro DEBIAN, basterà editare il file jail:
1 2 3 4 5 |
$ sudo cat /etc/fail2ban/jail.d/defaults-debian.conf [sshd] + backend = systemd enabled = true |
Una volta inserita l’opzione che andrà a leggere i log dal backend di systemd, il gioco sarà fatto.
Comments are closed.