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
Saludos.
Tuve un problema en la configuracion al agregar en el jail.conf la configuracion al reiniciar fail2band marca error.