failregex = ^%(_apache_error_client)s user .* (authentication failure|not found|password mismatch)\s*$
ganz Einfach ... in der error_log steht "MySQL user "falsch" not found
Eben war es auch noch der Apache. Was denn nun? So kann das nichts werden, Du musst erstmal den Stoff sortieren.
Für MySQL:
Ich zeige mal Konfigurationsabschnitte aus den Dateien.
/var/log/mysql/error.log habe ich benutzt, weil es von logrotate "behandelt" wird.
(sehe in /etc/logrotate.d/mysql-server o.ä. nach)
1.)
/etc/mysql/my.cnf den Abschnitt unter [mysqld] anpassen um das Logging einzuschalten:
#
# Error log - should be very few entries.
#
log_error = /var/log/mysql/error.log
log-warning = 2
Aktivieren und dabei auf Fehlermeldungen achten:
sudo service mysql restart
2.)
den Abschnitt unter mysqld-auth in /etc/fail2ban/jail.conf anpassen, damit das logfile auch genommen wird:
[mysqld-auth]
enabled = false
filter = mysqld-auth
port = 3306
logpath = /var/log/mysql/error.log
3.)
/etc/fail2ban/filter.d/mysqld-auth.conf PRÜFEN:
failregex = Access denied for user '\w+'@'<HOST>' (to database '[^']*'|\(using password: (YES|NO)\))*\s*$
4). test:
~> sudo service mysql restart
~> mysql -u gibtsnicht -p mysql
~> tail -n10 /var/log/mysql/error.log
Steht da (auch) etwas wie:
140109 19:49:02 [Warning] Access denied for user 'gibtsnicht'@'localhost' (using password: YES)
?
5.) Dann Feuer:
sudo service fail2ban restart
Nach dem 6. gescheitertem Einlogversuch in MySQL von außen(!), also von einem anderen (ggf. virtuellem) Rechner egal ob mit Passwort, ohne Passwort oder mit falschem Benutzername macht fail2ban den Port zu:
2014-01-09 20:22:48,971 fail2ban.actions: WARNING [mysqld-auth] Ban 192.168.1.52
(in /var/log/fail2ban.log)
Auf dem Rechner sieht man in der Konsole als Meldung des MySQL-Clients dann nur das hier:
ERROR 2003 (HY00): Can't connect to MySQL Server on '192.168.1.2' (111)
Geht also.