Categorías
Sen categorizar

fail2ban

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/