Introduzione a Fail2Ban
Per impostazione predefinita, un client si connette a SSH utilizzando la porta 22. Poiché si tratta di una porta ben nota, la configurazione predefinita è vulnerabile a molti attacchi di forza bruta. Fail2Ban è una soluzione per proteggere automaticamente un server da questi attacchi. Il programma viene eseguito in background, analizza i file di registro per rilevare quali IP stanno attaccando e li bandisce automaticamente dall'accesso a SSH.
Installazione di Fail2Ban
In questo tutorial, installeremo Fail2Ban su CentOS 6 tramite il repository EPEL. Esegui i seguenti comandi.
yum install epel-release
yum install fail2ban
Spiegazione
yum install epel-release: Installa il repository EPEL (pacchetti extra per Enterprise Linux).
yum install fail2ban: Installa Fail2Ban dal repository EPEL.
Configurazione delle impostazioni Fail2Ban
Apri il file di configurazione Fail2Ban.
nano /etc/fail2ban/jail.conf
Nel file, vedrai alcuni parametri come mostrato di seguito. Adatta uno qualsiasi dei valori alle tue esigenze.
[DEFAULT]
# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
ignoreip = 127.0.0.1
# "bantime" is the number of seconds that a host is banned.
bantime = 600
# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime = 600
# "maxretry" is the number of failures before a host get banned.
maxretry = 3
Spiegazione
ignoreip: Non vietare gli host che corrispondono a un indirizzo in questo elenco. Diversi indirizzi possono essere definiti utilizzando il separatore di spazio. Scrivi il tuo IP personale su questa riga.
bantime: Il numero di secondi in cui un host è bandito.
findtime: Un host viene bandito se è stato generato maxretrydurante l'ultimo findtime.
maxretry: Il numero di errori prima che un host venga bannato.
Configurazione di Fail2Ban per proteggere SSH
Innanzitutto, dobbiamo creare un file di configurazione.
nano /etc/fail2ban/jail.local
Copia le righe sottostanti e incollale nel file.
[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
# sendmail-whois[name=SSH, dest=root, sender=fail2ban@example.com]
logpath = /var/log/secure
maxretry = 5
enabled: Attiva la protezione. Se si desidera disattivarlo, modificare il valore su false.
filter: Per impostazione predefinita, è impostato su sshd che si riferisce al file /etc/fail2ban/filter.d/sshd.conf.
action: Fail2Ban vieterà l'IP che corrisponde al filtro /etc/fail2ban/action.d/iptables.conf. Se prima avevi cambiato la porta SSH, port=sshpassa alla nuova porta, ad esempio port=2222. Se si utilizza la porta 22, non sarà necessario modificare il valore.
logpath: Il percorso del file di registro utilizzato da Fail2Ban.
maxretry: Il numero massimo di tentativi di accesso non riusciti.
Avvio del servizio Fail2Ban
Eseguire questi due comandi di seguito per avviare il servizio Fail2Ban:
chkconfig --level 23 fail2ban on
service fail2ban start
Infine, controlla iptablesper vedere se ha le regole aggiunte da Fail2Ban.
iptables -L
Il risultato sarà simile a questo output.
Chain INPUT (policy ACCEPT)
target prot opt source destination
f2b-SSH tcp -- anywhere anywhere tcp dpt:EtherNet/IP-1
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain f2b-SSH (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Come tenere traccia dei tentativi di accesso non riusciti
È possibile utilizzare questo comando per verificare se il server ha avuto tentativi di accesso non riusciti (possibili attacchi).
cat /var/log/secure | grep 'Failed password'
Il risultato sarà simile a queste linee.
Dec 6 22:47:12 vultr sshd[7942]: Failed password for root from 43.229.53.67 port 23021 ssh2
Dec 6 22:47:15 vultr sshd[7944]: Failed password for root from 43.229.53.67 port 40996 ssh2
Dec 6 22:47:16 vultr sshd[7944]: Failed password for root from 43.229.53.67 port 40996 ssh2
Dec 6 22:47:18 vultr sshd[7944]: Failed password for root from 43.229.53.67 port 40996 ssh2
Dec 6 22:47:31 vultr sshd[7948]: Failed password for root from 43.229.53.67 port 29907 ssh2
Dec 6 22:47:34 vultr sshd[7948]: Failed password for root from 43.229.53.67 port 29907 ssh2
Dec 6 22:47:36 vultr sshd[7948]: Failed password for root from 43.229.53.67 port 29907 ssh2
Dec 6 22:47:39 vultr sshd[7950]: Failed password for root from 43.229.53.67 port 48386 ssh2
Dec 6 22:47:41 vultr sshd[7950]: Failed password for root from 43.229.53.67 port 48386 ssh2
Dec 6 22:47:43 vultr sshd[7950]: Failed password for root from 43.229.53.67 port 48386 ssh2
Dec 6 22:47:47 vultr sshd[7952]: Failed password for root from 43.229.53.67 port 62846 ssh2
Dec 6 22:47:49 vultr sshd[7952]: Failed password for root from 43.229.53.67 port 62846 ssh2
Per visualizzare quali IP sono stati vietati, utilizzare il seguente comando.
iptables -L -n
Per eliminare un indirizzo IP dall'elenco vietato, eseguire il comando seguente. Passa banned_ipall'IP che vuoi sbloccare.
iptables -D f2b-SSH -s banned_ip -j DROP