Lo primero es que se requiere que el phpmyadmin sea un vhost, para que genere su propio log, para esto se tiene quitar el .conf del directorio /etc/httpd/conf.d y moverlo a /etc/httpd/conf/site-available.
- nano /etc/httpd/conf/sites-available/phpMyAdmin.conf
Se agregan las siguientes lineas al principio del archivo
<VirtualHost 144.91.108.30:80>
ServerName mariadbadmin.amorcitocorazon.net
ServerAlias mysql.amorcitocorazon.net
DocumentRoot /usr/share/phpMyAdmin
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %{userID}n %{userStatus}n" pma_combined (Este formato de log es necesario para que lo lea el fail2ban)
CustomLog /var/log/httpd/phpmyadmin_access.log pma_combined
Se comentan los alias
#Alias /phpMyAdmin /usr/share/phpMyAdmin
#Alias /mariadbadmin /usr/share/phpMyAdmin
</VirtualHost>
Se reinicia demonio httpd
- systemctl restart httpd
Se valida que se tenga acceso al nuevo vhost y que se haya creado el log para phpmyadmin
- ll /var/log/httpd/
ahora se crea un filtro para fail2ban
- /etc/fail2ban/filter.d/phpmyadmin.conf
[Definition]
denied = mysql-denied|allow-denied|root-denied|empty-denied
failregex = ^<HOST> -.*(?:%(denied)s)$
ignoreregex =
La siguiente linea hace un test del filtro si lo corremos la primera vez no deberia mostrar nunguna entrada fail2ban-regex /var/log/httpd/phpmyadmin_access.log /etc/fail2ban/filter.d/phpmyadmin.conf Arrojaria algo como esto
Results
=======
Failregex: 0 total
Ignoreregex: 0 total
Ahora intentemos 2 o 3 accessos fallidos y al correr nuevamente la prueba deberia generar algo como esto
Results ======= Failregex: 3 total |- #) [# of hits] regular expression | 1) [3] ^<HOST> -.*(?:mysql-denied|allow-denied|root-denied|empty-denied)$ Una vez probado agregamos la regla a la configuracion del fail2ban
- nano /etc/fail2ban/jail.local
[phpmyadmin]
enabled = true
port = http,https
filter = phpmyadmin
logpath = /var/log/httpd/phpmyadmin_access.log
bantime = 3600
findtime = 60
maxretry = 3
backend = polling (normalmente se usa systemd, pero esta opcion no se combina con el logpath)
journalmatch = (debe quedar en blanco)
banaction = iptables-multiport
action = %(action_)s
reiniciamos fail2ban
- systemctl restart fail2ban