Fail2ban, come suggerisce il nome, è un'utilità progettata per proteggere le macchine Linux da attacchi di forza bruta su porte aperte selezionate, in particolare la porta SSH. Per motivi di funzionalità e gestione del sistema, queste porte non possono essere chiuse mediante un firewall. In questa circostanza, è una buona idea utilizzare Fail2ban come misura di sicurezza supplementare per un firewall per limitare il traffico di attacchi di forza bruta su queste porte.
In questo articolo, ti mostrerò come installare e configurare Fail2ban per proteggere la porta SSH, la destinazione di attacco più comune, su un'istanza del server Vultr Debian 9.
Prerequisiti
- Una nuova istanza del server x64 Debian 9 (Stretch).
- Accesso effettuato come
root.
- Tutte le porte non utilizzate sono state bloccate con le regole IPTables appropriate.
Passaggio 1: aggiornare il sistema
apt update && apt upgrade -y
shutdown -r now
Dopo l'avvio del sistema, accedere nuovamente come root.
Passaggio 2: modificare la porta SSH (opzionale)
Poiché il numero di porta SSH predefinito 22è troppo popolare per essere ignorato, cambiarlo in un numero di porta meno noto, supponiamo che 38752sarebbe una decisione intelligente.
sed -i "s/#Port 22/Port 38752/g" /etc/ssh/sshd_config
systemctl restart sshd.service
Dopo la modifica, è necessario aggiornare le regole IPTables di conseguenza:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
iptables -A INPUT -p tcp --dport 38752 -j ACCEPT
Salvare le regole IPTables aggiornate in un file per motivi di persistenza:
iptables-save > /etc/iptables.up.rules
touch /etc/network/if-pre-up.d/iptables
chmod +x /etc/network/if-pre-up.d/iptables
echo '#!/bin/sh' >> /etc/network/if-pre-up.d/iptables
echo '/sbin/iptables-restore < /etc/iptables.up.rules' >> /etc/network/if-pre-up.d/iptables
In questo modo, le regole IPTables saranno persistenti anche dopo il riavvio del sistema. D'ora in poi, dovrai accedere dalla 38752porta.
Utilizzare aptper installare la versione stabile di Fail2ban che è attualmente 0.9.x:
apt install fail2ban -y
Dopo l'installazione, il servizio Fail2ban si avvierà automaticamente. È possibile utilizzare il comando seguente per mostrare il suo stato:
service fail2ban status
Su Debian, le impostazioni predefinite del filtro Fail2ban saranno memorizzate sia nel /etc/fail2ban/jail.conffile che nel /etc/fail2ban/jail.d/defaults-debian.conffile. Ricorda che le impostazioni in quest'ultimo file sovrascriveranno le impostazioni corrispondenti nel primo.
Utilizzare i seguenti comandi per visualizzare maggiori dettagli:
cat /etc/fail2ban/jail.conf | less
cat /etc/fail2ban/jail.d/defaults-debian.conf
fail2ban-client status
fail2ban-client status sshd
Per tua informazione, alcuni estratti di codice su SSH sono elencati di seguito:
In /etc/fail2ban/jail.conf:
[DEFAULT]
bantime = 600
...
maxentry = 5
[sshd]
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
In /etc/fail2ban/jail.d/defaults-debian.conf:
[sshd]
enabled = true
Poiché il contenuto dei due file di configurazione sopra potrebbe cambiare in futuri aggiornamenti di sistema, è necessario creare un file di configurazione locale per memorizzare le proprie regole di filtro fail2ban. Ancora una volta, le impostazioni in questo file sovrascriveranno le impostazioni corrispondenti nei due file sopra menzionati.
vi /etc/fail2ban/jail.d/jail-debian.local
Immettere le seguenti righe:
[sshd]
port = 38752
maxentry = 3
Nota: assicurarsi di utilizzare la propria porta SSH. Ad eccezione porte maxentrysopra menzionati, tutte le altre impostazioni utilizzeranno i valori predefiniti.
Salva ed esci:
:wq
Riavviare il servizio Fail2ban per caricare la nuova configurazione:
service fail2ban restart
La nostra installazione è completa. D'ora in poi, se una macchina invia credenziali SSH errate alla porta SSH personalizzata del server Debian ( 38752) più di tre volte, l'IP di questa macchina potenzialmente dannosa verrà bandito per 600 secondi.