Fail2ban a phpmyadmin

¿En qué podemos ayudarte?
< Regresar
Estás aquí:
Imprimir

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
Table of Contents

Deja un comentario