Un phpMyadmin poco seguro es uno de los mayores riesgos de la mayoría de servidores. Pero para eso está nuestro amigo fail2ban que puede ayudarnos a reducir el riesgo. Nuestro objetivo es bloquear la IP de los usuarios que realicen varios intentos fallidos de acceso.

Lo primero que necesitamos es un log. Normalmente, phpmyadmin no loguea nada, pero como administramos nuestro propio servidor, podemos cambiarlo.

Pero antes de empezar debemos tener presente que LogFormat/CustomLog deben ser aplicados en el contexto Servidor o en el contexto VirtualHost. Por lo tanto nuestra instalación phpMyAdmin debe ser su propio VirtualHost. Un subdominio también funcionará.
phpMyAdmin utiliza la función apache_note de php para que esto funcione. Por lo que yo sé, esta función solo está disponible en modo mod_php. Por lo tanto, esto no funcionará con mod_fcgi.

Teniendo esto en cuenta, añadiremos estas lineas al virtualhost de nuestra configuración Apache, por ejemplo /etc/apache2/conf.d/phpmyadmin.conf.

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{userID}n %{userStatus}n" pma_combined
CustomLog /var/log/apache2/phpmyadmin_access.log pma_combined

No olvideis reiniciar apache:

service  apache2 reload

Ahora crearemos nuestro filtro.

/etc/fail2ban/filter.d/phpmyadmin.conf

[Definition]
denied = mysql-denied|allow-denied|root-denied|empty-denied
failregex = ^<HOST> -.*(?:%(denied)s)$
ignoreregex =

En este punto, podemos probar que se estén generando los logs, intentamos acceder con credenciales erroneas en nuestro phpmyadmin y comprobamos que funciona:

fail2ban-regex /var/log/apache2/phpmyadmin_access.log  /etc/fail2ban/filter.d/phpmyadmin.conf

Bien, no? Entonces sólo nos queda añadir el jail en /etc/fail2ban/jail.local

[phpmyadmin]
enabled = true
port = http,https
filter = phpmyadmin
logpath = /var/log/apache2/phpmyadmin_access.log

Para que los cambios hagan efecto reiniciamos fail2ban

service fail2ban reload