Normalerweise legt man einfach eine neue Datei nach /etc/fail2ban/jail.d/mysql.conf, aktiviert das richtige Jail und schon funktioniert alles. Leider nicht so im Falle von mysql 5.7 – scheinbar hat sich da der Logeintrag etwas geändert. Meine Datei sieht jetzt so aus:
[mysqld-auth] enabled = true logpath = /var/log/mysql/error.log
Und den Filter musste ich wie folgt anpassen:
failregex = ^%(__prefix_line)s(\d{6} \s?\d{1,2}:\d{2}:\d{2} )?\[Warning\] Access denied for user '\w+'@'<HOST>' (to database '[^']*'|\(using password: (YES|NO)\))*\s*$ ^%(__prefix_line)s(?:\d+ |\d{6} \s?\d{1,2}:\d{2}:\d{2} )?\[\w+\] Access denied for user '[^']+'@'<HOST>'
Die erste Zeile habe ich dabei nicht angefasst, sondern nur die zweite hinzugefügt. Statt einer Warning erscheint bei mySQL 5.7 nur noch „Note“. Der reguläre Ausdruck ist natürlich relativ allgemein, aber funktioniert für mich wunderbar. Endlich werden die ganzen Login-Versuche auf root entsprechend geblockt.
Testen kann man das ganze wie folgt:
fail2ban-regex /var/log/mysql/error.log /etc/fail2ban/filter.d/mysqld-auth.conf
Bei mir sieht die Ausgabe nun so aus:
Lines: 492 lines, 0 ignored, 54 matched, 438 missed [processed in 0.07 sec] Missed line(s): too many to print. Use --print-all-missed to print all 438 lines
Sieht also sehr gut aus!