En mi búsqueda para bloquear los intentos de phpMyAdmin
inicio de sesión fallidos excesivos fail2ban
, he creado un script que registra dichos intentos fallidos en un archivo:/var/log/phpmyadmin_auth.log
Registro personalizado
El formato del /var/log/phpmyadmin_auth.log
archivo es:
phpMyadmin login failed with username: root; ip: 192.168.1.50; url: http://somedomain.com/phpmyadmin/index.php
phpMyadmin login failed with username: ; ip: 192.168.1.50; url: http://192.168.1.48/phpmyadmin/index.php
Filtro personalizado
[Definition]
# Count all bans in the logfile
failregex = phpMyadmin login failed with username: .*; ip: <HOST>;
cárcel phpMyAdmin
[phpmyadmin]
enabled = true
port = http,https
filter = phpmyadmin
action = sendmail-whois[name=HTTP]
logpath = /var/log/phpmyadmin_auth.log
maxretry = 6
El fail2ban
registro contiene:
2012-10-04 10:52:22,756 fail2ban.server : INFO Stopping all jails
2012-10-04 10:52:23,091 fail2ban.jail : INFO Jail 'ssh-iptables' stopped
2012-10-04 10:52:23,866 fail2ban.jail : INFO Jail 'fail2ban' stopped
2012-10-04 10:52:23,994 fail2ban.jail : INFO Jail 'ssh' stopped
2012-10-04 10:52:23,994 fail2ban.server : INFO Exiting Fail2ban
2012-10-04 10:52:24,253 fail2ban.server : INFO Changed logging target to /var/log/fail2ban.log for Fail2ban v0.8.6
2012-10-04 10:52:24,253 fail2ban.jail : INFO Creating new jail 'ssh'
2012-10-04 10:52:24,253 fail2ban.jail : INFO Jail 'ssh' uses poller
2012-10-04 10:52:24,260 fail2ban.filter : INFO Added logfile = /var/log/auth.log
2012-10-04 10:52:24,260 fail2ban.filter : INFO Set maxRetry = 6
2012-10-04 10:52:24,261 fail2ban.filter : INFO Set findtime = 600
2012-10-04 10:52:24,261 fail2ban.actions: INFO Set banTime = 600
2012-10-04 10:52:24,279 fail2ban.jail : INFO Creating new jail 'ssh-iptables'
2012-10-04 10:52:24,279 fail2ban.jail : INFO Jail 'ssh-iptables' uses poller
2012-10-04 10:52:24,279 fail2ban.filter : INFO Added logfile = /var/log/auth.log
2012-10-04 10:52:24,280 fail2ban.filter : INFO Set maxRetry = 5
2012-10-04 10:52:24,280 fail2ban.filter : INFO Set findtime = 600
2012-10-04 10:52:24,280 fail2ban.actions: INFO Set banTime = 600
2012-10-04 10:52:24,287 fail2ban.jail : INFO Creating new jail 'fail2ban'
2012-10-04 10:52:24,287 fail2ban.jail : INFO Jail 'fail2ban' uses poller
2012-10-04 10:52:24,287 fail2ban.filter : INFO Added logfile = /var/log/fail2ban.log
2012-10-04 10:52:24,287 fail2ban.filter : INFO Set maxRetry = 3
2012-10-04 10:52:24,288 fail2ban.filter : INFO Set findtime = 604800
2012-10-04 10:52:24,288 fail2ban.actions: INFO Set banTime = 604800
2012-10-04 10:52:24,292 fail2ban.jail : INFO Jail 'ssh' started
2012-10-04 10:52:24,293 fail2ban.jail : INFO Jail 'ssh-iptables' started
2012-10-04 10:52:24,297 fail2ban.jail : INFO Jail 'fail2ban' started
Cuando publico:
sudo service fail2ban restart
fail2ban
me envía un correo electrónico para decir que se ssh
ha reiniciado, pero no recibo ningún correo electrónico sobre mi phpmyadmin
cárcel. Los inicios de sesión fallidos repetidos phpMyAdmin
no provocan el envío de un correo electrónico.
¿Me he perdido alguna configuración crítica? ¿Es incorrecta la expresión regular de mi filtro?
Actualización: cambios agregados de la instalación predeterminada
Comenzando con una fail2ban
instalación limpia :
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Cambiar la dirección de correo electrónico a la mía, acción para:
action = %(action_mwl)s
Agregue lo siguiente a jail.local
[phpmyadmin]
enabled = true
port = http,https
filter = phpmyadmin
action = sendmail-whois[name=HTTP]
logpath = /var/log/phpmyadmin_auth.log
maxretry = 4
Agregue lo siguiente a /etc/fail2ban/filter.d/phpmyadmin.conf
# phpmyadmin configuration file
#
# Author: Michael Robinson
#
[Definition]
# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "<HOST>" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P<host>\S+)
# Values: TEXT
#
# Count all bans in the logfile
failregex = phpMyadmin login failed with username: .*; ip: <HOST>;
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
# Ignore our own bans, to keep our counts exact.
# In your config, name your jail 'fail2ban', or change this line!
ignoreregex =
Reiniciar fail2ban
sudo service fail2ban restart
PD: me gustan los huevos
fuente
Respuestas:
Eso está bien, pero ¿por qué no usar la funcionalidad de apache para registrar inicios de sesión fallidos?
Agregue estas líneas a su configuración de Apache (es decir: /etc/apache2/conf.d/phpmyadmin.conf) en la sección VirtualHost correspondiente:
Luego cree el filtro fail2ban:
/etc/fail2ban/filter.d/phpmyadmin.conf
Ahora agregue la cárcel a /etc/fail2ban/jail.local
Reinicie apache y fail2ban:
y ya está, no necesita scripts PHP, etc.
fuente
jail.conf
, cree en su lugar una copiajail.local
Debe cambiar su secuencia de comandos para incluir la marca de tiempo en los archivos de registro. Sin esto, fail2ban no funcionará
use
fail2ban-regex /var/log/phpmyadmin_auth.log /etc/fail2ban/filter.d/phpmyadmin.conf
para verificar su expresión regular primero.Podría iniciar fail2ban con éxito utilizando su configuración original (antes de jail.local)
Una vez que la expresión regular correcta esté en su lugar, puede usar la auditoría para ver si se accede a su archivo o no mediante fail2ban.
solía
auditctl -w /var/log/phpmyadmin_auth.log -p warx -k phpmyadmin_fail2ban
fuente