В новых версиях MariaDB поменялся формат времени при записи логов. Из-за этого стандартный префикс в fail2ban в фильтре mysqld-auth.conf больше не распознает строки в error.log файле. Шаблон времени требуется указать вручную datepattern = ^%%Y-%%m-%%d\s+%%H:%%M:%%S
Рабочий фильтр:
# Fail2Ban filter for unsuccesfull MySQL authentication attempts # # # To log wrong MySQL access attempts add to /etc/my.cnf in [mysqld]: # log-error=/var/log/mysqld.log # log-warning = 2 # # If using mysql syslog [mysql_safe] has syslog in /etc/my.cnf [INCLUDES] # Read common prefixes. If any customizations available -- read them from # common.local before = common.conf [Definition] _daemon = mysqld failregex = Access denied for user '\w+'@'<HOST>' (to database '[^']*'|\(using password: (YES|NO)\))*\s*$ ignoreregex = [Init] datepattern = ^%%Y-%%m-%%d\s+%%H:%%M:%%S
Данный файл обзываем mysqld-auth.conf и кидаем в каталог /etc/fail2ban/filter.d/
В /etc/fail2ban/jail.conf вносим такие правки:
[mysqld-auth] port = 3306 logpath = /var/log/mysql/error.log backend = %(mysql_backend)s
В /etc/fail2ban/jail.local включаем фильтр
[mysqld-auth] enabled = true
Перезапускаем сервис:
systemctl restart fail2ban
Наблюдаем в реалтайм за состоянием:
watch fail2ban-client status mysqld-auth
И пробуем авторизоваться:
mysql -P3306 -h IP_СЕРВЕРА
Не забудьте перед всей настройкой установить mysql переменную log-warning = 2, чтобы ошибки авторизации записывались, и проверить расположение самого error.log файла.