В новых версиях MariaDB поменялся формат времени при записи логов. Из-за этого стандартный префикс в fail2ban в фильтре mysqld-auth.conf больше не распознает строки в error.log файле. Шаблон времени требуется указать вручную datepattern = ^%%Y-%%m-%%d\s+%%H:%%M:%%S
Рабочий фильтр:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | # 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 вносим такие правки:
1 2 3 4 | [mysqld-auth] port = 3306 logpath = /var/log/mysql/error.log backend = %(mysql_backend)s |
В /etc/fail2ban/jail.local включаем фильтр
1 2 | [mysqld-auth] enabled = true |
Перезапускаем сервис:
1 | systemctl restart fail2ban |
Наблюдаем в реалтайм за состоянием:
1 | watch fail2ban-client status mysqld-auth |
И пробуем авторизоваться:
1 | mysql -P3306 -h IP_СЕРВЕРА |
Не забудьте перед всей настройкой установить mysql переменную log-warning = 2, чтобы ошибки авторизации записывались, и проверить расположение самого error.log файла.