Quindi ho fatto molte ricerche su come farlo dopo aver visto lo stesso indirizzo IP colpire il mio cluster di server Web uno dopo l'altro. Dal momento che sto usando AWS ho pensato che potrebbe esserci un modo semplice e che funziona magnificamente nei miei primi due giorni di test di 5 server.
La prima cosa che raccomando è disabilitare temporaneamente SELinux, ci occuperemo alla fine. Non sono un esperto SELinux ma quello che ho fatto funziona finora.
Il requisito principale è una fonte di file condivisa, utilizzo AWS EFS. Una volta eseguito il provisioning e il montaggio della nuova unità, ho modificato logtarget all'interno di /etc/fail2ban/fail2ban.conf in una sottocartella nell'unità EFS.
logtarget = /efsmount/fail2ban/server1.log
Quindi ho scritto un filtro semplice e l'ho inserito in /etc/fail2ban/filter.d/fail2ban-log.conf
[Definition]
failregex = .* Ban <HOST>
ignoreregex =
Aggiunto il filtro a /etc/fail2ban/jail.local
[fail2ban-log]
enabled = true
port = http,https
findtime = 86400 ; 1 day
logpath = /efsmount/fail2ban/server1.log
/efsmount/fail2ban/server2.log
/efsmount/fail2ban/server3.log
/efsmount/fail2ban/server4.log
maxretry = 1
Quindi riavviato fail2ban
sudo fail2ban-client reload
Fin qui tutto bene! No, la parte dolorosa è SELinux. Dopo aver lasciato che fail2ban funzionasse per un po 'ho eseguito questo comando che avrebbe permesso fail2ban attraverso i filtri.
sudo grep fail2ban /var/log/audit/audit.log | sudo audit2allow -M fail2ban-nfs
Audit2allow ti dirà di eseguire questo comando
sudo semodule -i fail2ban-nfs.pp
Sto ancora controllando i miei registri SELinux qua e là per vedere se ci sono altri rifiuti. Se qualcuno ha un suggerimento su come ottenere SELinux chiaro con un altro metodo sarebbe fantastico.
sudo cat /var/log/audit/audit.log |grep fail2ban |grep denied
A questo punto stavo ancora riscontrando errori al riavvio di fail2ban. C'è un bug quando si utilizza action = action_mwl in jail.local. Dopo un po 'di ricerche su google ho trovato questo che funziona finora. Da quello che ho letto è a causa delle interruzioni di riga nella direttiva logpath che punta a più file. Ho provato con virgole, spazi, ecc. Nient'altro ha funzionato con action_mwl.
action_mwm = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
%(mta)s-whois-matches[name=%(__name__)s, dest="%(destemail)s", chain="%(chain)s"]
action = %(action_mwm)s
Non dimenticare di riaccendere SELinux!