Cousa acabada para evitar que descoñecidos accedan ao teu sistema. Necesita saber como controlar os intentos de acceso e que facer en caso de que se cumpran os criterios definidos.
Neste caso funciona en Fedora 32, se o SO é CentOS hai que habilitar previamente os repositorios EPEL:
sudo dnf install epel-release
$ sudo dnf install fail2ban
No directorio /etc/fail2ban/filter.d/ aparecen unha chea de filtros preconfigurados como o de sshd, pero algún que pode ser interesante como o de Nextcloud non está.
O filtro para NextCloud pódese engadir de forma sinxela creando un arquivo co nome nextcloud.conf no mesmo directorio e co seguinte contido:
[Definition] _groupsre = (?:(?:,?\s*"\w+":(?:"[^"]+"|\w+))*) failregex = ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Login failed: ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Trusted domain error. datepattern = ,?\s*"time"\s*:\s*"%%Y-%%m-%%d[T ]%%H:%%M:%%S(%%z)?"
Feito na casa, o seguinte filtro pode ser válido para detectar os intentos de acceso a WordPress a través do log de Apache, cando teña o formato por defecto. O nome do arquivo que uso é wp-login.conf:
[Definition] failregex = ^<HOST> -.*"POST /wp-login.php.*$ datepattern = ^[^\[]*\[({DATE}) {^LN-BEG} # Author: 3s11
Necesítase configurar unha gaiola para habilitar a supervisión do servizo que se desexe. Para iso engadimos un arquivo no directorio /etc/fail2ban/jail.d No caso de sshd crease co nome sshd.local e o seguinte contido:
[sshd] enabled = true
Para Nextcloud hai que engadir algún parámetro máis porque hai que especificar a ruta onde está o arquivo de log do propio Nextcloud que dependerá de cada instalación. Nas instalacións por defecto atoparase en data/nextcloud.log dentro do directorio web. A maiores pódense engadir máis cousas para modificar os parámetros que veñen por defecto. Exemplo para Nextcloud:
/etc/fail2ban/jail.d/nextcloud.local
[nextcloud] backend = auto enabled = true port = 80,443 protocol = tcp filter = nextcloud maxretry = 3 bantime = 86400 findtime = 43200 logpath = /var/www/external/cloud.3s11/data/nextcloud.log
Exemplo para o filtro de WordPress:
[wp-login] enabled = true filter = wp-login logpath = /your/path/your_apache_wordpress_site.log port = 80,443 maxretry = 3 bantime = 86400 findtime = 120
Sempre é interesante lembrarse de iniciar e habilitar o servicio:
$ sudo systemctl enable --now fail2ban
E podes ver cousiñas, argallar mirando ou solucionar algún problema:
# sudo fail2ban-client status # sudo fail2ban-client status <nome da gaiola> # sudo tail -f /var/log/fail2ban.log
https://www.fail2ban.org
https://docs.nextcloud.com/server/19/admin_manual/