Sicurezza · 6 min read · Dec 30, 2025
Prevenire Attacchi Brute Force Con Fail2ban Su OpenSUSE 10.3
Prevenire Attacchi Brute Force Con Fail2ban Su OpenSUSE 10.3
Versione 1.0
Autore: Falko Timme
In questo articolo mostrerò come installare e configurare fail2ban su un sistema OpenSUSE 10.3. Fail2ban è uno strumento che osserva i tentativi di accesso a vari servizi, ad es. SSH, FTP, SMTP, Apache, ecc., e se trova tentativi di accesso falliti ripetutamente dallo stesso indirizzo IP o host, fail2ban interrompe ulteriori tentativi di accesso da quell’indirizzo IP/host bloccandolo con una regola del firewall iptables.
Questo documento viene fornito senza garanzia di alcun tipo! Voglio dire che questo non è l’unico modo per impostare un sistema del genere. Ci sono molti modi per raggiungere questo obiettivo, ma questo è il modo che seguo. Non rilascio alcuna garanzia che questo funzionerà per te!
1 Nota Preliminare
Fail2ban è simile a DenyHosts di cui ho parlato in questo tutorial: https://www.howtoforge.com/preventing_ssh_dictionary_attacks_with_denyhosts, ma a differenza di DenyHosts che si concentra su SSH, fail2ban può essere configurato per monitorare qualsiasi servizio che scrive tentativi di accesso in un file di log, e invece di utilizzare solo /etc/hosts.deny per bloccare indirizzi IP/host, fail2ban può utilizzare iptables e /etc/hosts.deny.
In questo esempio configurerò fail2ban per monitorare i tentativi di accesso al server SSH, al server Proftpd, ai siti web protetti da .htaccess/.htpasswd, a Courier POP3 e Courier IMAP, e a SASL (per l’invio di email). Installerò il pacchetto fail2ban che è disponibile per OpenSUSE 10.3. Viene fornito con una configurazione predefinita, ma sfortunatamente quella configurazione non funziona correttamente per la maggior parte dei servizi sopra menzionati. Pertanto, creerò una configurazione fail2ban personalizzata che ho testato e che funziona per me.
2 Installazione di fail2ban
Fail2ban è disponibile nel repository Packman, quindi dobbiamo abilitarlo prima:
yast2 In YaST, vai su Software > Repository della Comunità:

Poi attiva il Repository Packman e premi [Fine]:

Esci da YaST:

Dopo, fail2ban può essere installato come segue:
yast2 -i fail2banPoi dobbiamo creare i collegamenti di avvio del sistema per fail2ban e avviarlo:
chkconfig –add fail2ban
/etc/init.d/fail2ban start
Troverai tutti i file di configurazione di fail2ban nella directory /etc/fail2ban.
3 Configurazione di fail2ban
Il comportamento predefinito di fail2ban è configurato nel file /etc/fail2ban/jail.conf. Dai un’occhiata, non è difficile da capire. C’è una sezione [DEFAULT] che si applica a tutte le altre sezioni a meno che le opzioni predefinite non vengano sovrascritte nelle altre sezioni.
Spiego alcune delle opzioni di configurazione qui:
- ignoreip: Questa è una lista separata da spazi di indirizzi IP che non possono essere bloccati da fail2ban. Ad esempio, se il computer da cui ti connetti al server ha un indirizzo IP statico, potresti volerlo elencare qui.
- bantime: Tempo in secondi in cui un host è bloccato se è stato catturato da fail2ban (600 secondi = 10 minuti).
- maxretry: Numero massimo di tentativi di accesso falliti prima che un host venga bloccato da fail2ban.
- filter: Si riferisce al file di filtro appropriato in /etc/fail2ban/filter.d.
- action: Si riferisce al file di azione appropriato in /etc/fail2ban/action.d.
- logpath: Il file di log che fail2ban controlla per i tentativi di accesso falliti.
Questo è come appare il mio file /etc/fail2ban/jail.conf:
vi /etc/fail2ban/jail.conf| # File di configurazione di Fail2Ban # # Autore: Cyril Jaquier # # $Revision: 611 $ # # Il DEFAULT consente una definizione globale delle opzioni. Possono essere sovrascritte # in ciascuna prigione successivamente. [DEFAULT] # "ignoreip" può essere un indirizzo IP, una maschera CIDR o un host DNS. Fail2ban non # banna un host che corrisponde a un indirizzo in questa lista. È possibile definire più indirizzi # utilizzando il separatore di spazi. ignoreip = 127.0.0.1 192.168.0.99 # "bantime" è il numero di secondi in cui un host è bannato. bantime = 600 # Un host è bannato se ha generato "maxretry" durante gli ultimi "findtime" # secondi. findtime = 600 # "maxretry" è il numero di fallimenti prima che un host venga bannato. maxretry = 3 # "backend" specifica il backend utilizzato per ottenere le modifiche ai file. Le opzioni disponibili # sono "gamin", "polling" e "auto". Questa opzione può essere sovrascritta in # ciascuna prigione anche (usa "gamin" per una prigione e "polling" per un'altra). # # gamin: richiede Gamin (un monitor di alterazione dei file) per essere installato. Se Gamin # non è installato, Fail2ban utilizzerà il polling. # polling: utilizza un algoritmo di polling che non richiede librerie esterne. # auto: sceglierà Gamin se disponibile e polling altrimenti. backend = auto # Questa prigione corrisponde alla configurazione standard in Fail2ban 0.6. # L'azione mail-whois invia una notifica via e-mail con una richiesta whois # nel corpo. [ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] sendmail-whois[name=SSH, [email protected], [email protected]] logpath = /var/log/messages maxretry = 5 [proftpd-iptables] enabled = true filter = proftpd action = iptables[name=ProFTPD, port=ftp, protocol=tcp] sendmail-whois[name=ProFTPD, [email protected]] logpath = /var/log/messages maxretry = 6 # Questa prigione forza il backend a "polling". [sasl-iptables] enabled = true filter = sasl backend = polling action = iptables[name=sasl, port=smtp, protocol=tcp] sendmail-whois[name=sasl, [email protected]] logpath = /var/log/mail # Qui usiamo TCP-Wrappers invece di Netfilter/Iptables. "ignoreregex" è # utilizzato per evitare di bannare l'utente "myuser". [ssh-tcpwrapper] enabled = false filter = sshd action = hostsdeny sendmail-whois[name=SSH, [email protected]] ignoreregex = for myuser from logpath = /var/log/messages # Questa prigione dimostra l'uso di caratteri jolly in "logpath". # Inoltre, è possibile fornire altri file su una nuova riga. [apache-tcpwrapper] enabled = true filter = apache-auth action = hostsdeny logpath = /var/log/apache2/error_log maxretry = 6 # Il percorso hosts.deny può essere definito con l'argomento "file" se non è # in /etc. [postfix-tcpwrapper] enabled = true filter = postfix action = hostsdeny sendmail[name=Postfix, [email protected]] logpath = /var/log/mail bantime = 300 # Non bannare nessuno. Solo riportare informazioni sull'host remoto. # Una notifica viene inviata al massimo ogni 600 secondi (bantime). [vsftpd-notification] enabled = false filter = vsftpd action = sendmail-whois[name=VSFTPD, [email protected]] logpath = /var/log/messages maxretry = 5 bantime = 1800 # Stesso di sopra ma con il ban dell'indirizzo IP. [vsftpd-iptables] enabled = false filter = vsftpd action = iptables[name=VSFTPD, port=ftp, protocol=tcp] sendmail-whois[name=VSFTPD, [email protected]] logpath = /var/log/messages maxretry = 5 bantime = 1800 # Banna gli host che l'agente identifica come robot spammer che esplorano il web # per indirizzi email. Le uscite email sono memorizzate in buffer. [apache-badbots] enabled = true filter = apache-badbots action = iptables-multiport[name=BadBots, port="http,https"] sendmail-buffered[name=BadBots, lines=5, [email protected]] logpath = /var/log/apache2/access_log bantime = 172800 maxretry = 1 [courierpop3] enabled = true port = pop3 filter = courierlogin action = iptables[name=%(__name__)s, port=%(port)s] logpath = /var/log/mail maxretry = 5 [courierimap] enabled = true port = imap2 filter = courierlogin action = iptables[name=%(__name__)s, port=%(port)s] logpath = /var/log/mail maxretry = 5 |
Il mio computer client ha l’indirizzo IP statico 192.168.0.99, e poiché non voglio essere bloccato, l’ho aggiunto alla lista ignoreip.
Voglio controllare i tentativi di accesso a SSH, Apache, Proftpd, Courier-POP3, Courier-IMAP e Sasl, quindi ho impostato enabled su true per questi servizi e su false per tutti gli altri servizi. Si prega di notare che alcuni servizi come SSH possono essere bloccati sia da iptables che da TCPWrappers (/etc/hosts.deny). Decidi tu stesso quale metodo preferisci.
Assicurati di sostituire l’indirizzo email [email protected] con il tuo indirizzo email in modo da essere avvisato quando qualcuno viene bloccato da fail2ban.
Se confronti il file con il predefinito /etc/fail2ban/jail.conf, noterai anche che ho cambiato alcuni file di log perché i file di log nel predefinito /etc/fail2ban/jail.conf non sono corretti per OpenSUSE 10.3.
Ogni volta che modifichiamo la configurazione di fail2ban, dobbiamo riavviare fail2ban, quindi questo è ciò che facciamo ora:
/etc/init.d/fail2ban restartEcco fatto. Fail2ban registra in /var/log/fail2ban.log, quindi puoi controllare quel file per scoprire se/qual è stato bloccato. Se un host è stato bloccato da fail2ban, appare così:
2007-10-07 17:49:09,466 fail2ban.actions: WARNING [apache-tcpwrapper] Ban 1.2.3.4
2007-10-07 18:08:33,213 fail2ban.actions: WARNING [sasl-iptables] Ban 1.2.3.4
2007-10-07 18:26:37,769 fail2ban.actions: WARNING [courierlogin] Ban 1.2.3.4
2007-10-07 18:39:06,765 fail2ban.actions: WARNING [courierimap] Ban 1.2.3.4
Puoi anche controllare il tuo firewall per vedere se ci sono host attualmente bloccati. Basta eseguire
iptables -L Per i servizi che utilizzano TCPWrappers per bloccare gli host, dai un’occhiata a /etc/hosts.deny.
Link
- Fail2ban: http://www.fail2ban.org
- OpenSUSE: http://www.opensuse.org
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.