Como prevenir ataques de fuerza bruta en MariaDB/Mysql: guía de configuración de fail2ban

Amigos, en este post explicaré como prevenir ataques de fuerza bruta en MariaDB y/o Mysql, al igual que en el post anterior utilizaré la herramienta fail2ban.

Esta configuración puede resultar muy útil cuando se habilita el acceso remoto a MariaDB o MySQL.

Cómo habilitar el acceso remoto a MariaDB o MySQL

Para habilitar el acceso remoto se debe modificar el valor de » bind-address » en el archivo de configuración de MariaDB:

# nano /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address            = 0.0.0.0

Para aplicar los cambios es necesario reiniciar el servicio de MariaDB:

# /etc/init.d/mysql restart

Para habilitar el acceso remoto a un usuario específico, hay que entrar a la consola de administración de MariaDB o Mysql y ejecutar las siguientes instrucciones:

# mysql –u root -p
GRANT ALL PRIVILEGES ON *.* TO remoto@'%' IDENTIFIED BY 'p4ssw0rd'; FLUSH PRIVILEGES;

Con estos pasos tendremos habilitado el acceso remoto para un usuario de MariaDB o Mysql


Instalación de Fail2ban

En un post anterior escribí acerca de la instalación de Fail2ban, los pasos de instalación se pueden ver en el siguiente enlace: https://guidocutipa.blog.bo/sistema-deteccion-de-intrusos-fail2ban/

Fail2ban para MariaDB

Ahora vamos a configurar un Jail (un jail es una regla de penalización del host atacante) :

# nano /etc/fail2ban/jail.d/mysql.conf
[mysqld-auth]
enabled = true
filter = mysqld-auth
port = 3306
logpath = /var/log/mysql/error.log
maxretry = 3
bantime = 600

Esta configuración aplicará los filtros de fail2ban para MariaDB/Mysql en el puerto 3306, monitoreará el archivo /var/log/mysql/error.log, permitirá un máximo de tres intentos fallidos y bloqueará el IP atacante por 600 segundos.

Para aplicar los cambios será necesario reiniciar el servicio:

# systemctl restart fail2ban

Prueba de validación

Para probar la nueva configuración, desde un equipo diferente, intentaremos conectarnos al servidor MariaDB/Mysql con el usuario de base de datos creado anteriormente:

# mysql -h 192.168.1.201 -u remoto -p

Si todo sale bien se mostrará un mensaje similar a este:

El siguiente paso será intentar conectarnos al servidor con el mismo usuario, pero con un password erróneo:

Como se puede ver en la anterior imagen, después del tercer intento el mensaje de error devuelto por el servidor es diferente.

En el servidor podemos verificar que resultado se obtiene en fail2ban:

# fail2ban-client -i

fail2ban> status
fail2ban> status mysqld-aut

Referencias

https://www.fail2ban.org/wiki/index.php/Commands

Entradas relacionadas