Así que hice un montón de investigación sobre cómo hacer esto después de ver que la misma dirección IP golpeó mi clúster de servidores web uno tras otro. Como estoy usando AWS, pensé que podría haber una manera fácil y que funcionaba maravillosamente en mis primeros dos días de prueba de 5 servidores.
Lo primero que recomiendo es deshabilitar temporalmente SELinux, lo trataremos al final. No soy un experto en SELinux, pero lo que hice funciona hasta ahora.
El requisito principal es un origen de archivo compartido, yo uso AWS EFS. Una vez que se aprovisionó y montó la nueva unidad, cambié el objetivo de log dentro de /etc/fail2ban/fail2ban.conf a una subcarpeta en la unidad EFS.
logtarget = /efsmount/fail2ban/server1.log
Luego escribí un filtro simple y lo coloqué en /etc/fail2ban/filter.d/fail2ban-log.conf
[Definition]
failregex = .* Ban <HOST>
ignoreregex =
Se agregó el 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
Luego reinició fail2ban
sudo fail2ban-client reload
¡Hasta aquí todo bien! No, la parte dolorosa es SELinux. Después de dejar que fail2ban se ejecute por un momento, ejecuté este comando que permitiría a fail2ban a través de los filtros.
sudo grep fail2ban /var/log/audit/audit.log | sudo audit2allow -M fail2ban-nfs
Audit2allow le dirá que ejecute este comando
sudo semodule -i fail2ban-nfs.pp
Todavía estoy revisando mis registros SELinux aquí y allá para ver si hay más negaciones. Si alguien tiene un consejo sobre cómo obtener ese SELinux claro con otro método, sería increíble.
sudo cat /var/log/audit/audit.log |grep fail2ban |grep denied
En este punto, todavía recibía errores al reiniciar fail2ban. Hay un error al usar action = action_mwl en jail.local. Después de buscar un poco en Google, encontré esto que está funcionando hasta ahora. Por lo que leí es por los saltos de línea en la directiva logpath que apunta a múltiples archivos. Intenté con comas, espacios, etc. nada más funcionó 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
¡No olvide volver a encender SELinux!