Dans ma quête pour bloquer les tentatives de phpMyAdmin
connexion infructueuses excessives avec fail2ban
, j'ai créé un script qui enregistre les tentatives infructueuses dans un fichier:/var/log/phpmyadmin_auth.log
Journal personnalisé
Le format du /var/log/phpmyadmin_auth.log
fichier est:
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
Filtre personnalisé
[Definition]
# Count all bans in the logfile
failregex = phpMyadmin login failed with username: .*; ip: <HOST>;
prison phpMyAdmin
[phpmyadmin]
enabled = true
port = http,https
filter = phpmyadmin
action = sendmail-whois[name=HTTP]
logpath = /var/log/phpmyadmin_auth.log
maxretry = 6
Le fail2ban
journal contient:
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
Quand j'émets:
sudo service fail2ban restart
fail2ban
m'envoie un e- ssh
mail pour me dire que j'ai redémarré, mais je ne reçois aucun e-mail de ce type concernant ma phpmyadmin
prison. Les échecs de connexion répétés phpMyAdmin
ne provoquent pas l'envoi d'un e-mail.
Ai-je manqué une configuration critique? L'expression régulière de mon filtre est-elle incorrecte?
Mise à jour: ajout de modifications par rapport à l'installation par défaut
Commencer par une fail2ban
installation propre :
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Changer l'adresse e-mail pour la mienne, l'action pour:
action = %(action_mwl)s
Ajoutez ce qui suit à jail.local
[phpmyadmin]
enabled = true
port = http,https
filter = phpmyadmin
action = sendmail-whois[name=HTTP]
logpath = /var/log/phpmyadmin_auth.log
maxretry = 4
Ajoutez ce qui suit à /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 =
Redémarrer fail2ban
sudo service fail2ban restart
PS: j'aime les œufs
la source
Réponses:
C'est bien, mais pourquoi ne pas utiliser la fonctionnalité Apache pour enregistrer les connexions qui ont échoué?
Ajoutez ces lignes à votre configuration Apache (par exemple: /etc/apache2/conf.d/phpmyadmin.conf) dans la section VirtualHost correspondante:
Créez ensuite le filtre fail2ban:
/etc/fail2ban/filter.d/phpmyadmin.conf
Maintenant, ajoutez la prison à /etc/fail2ban/jail.local
Redémarrez apache et fail2ban:
et vous avez terminé, pas besoin de scripts php ainsi de suite ..
la source
jail.conf
, créez plutôt une copiejail.local
Vous devez modifier votre script pour inclure l'horodatage dans les fichiers journaux. Sans cela, fail2ban ne fonctionnera pas
utiliser
fail2ban-regex /var/log/phpmyadmin_auth.log /etc/fail2ban/filter.d/phpmyadmin.conf
pour vérifier votre regex en premier.Je pourrais démarrer fail2ban avec succès en utilisant votre configuration d'origine (avant jail.local)
Une fois que les expressions rationnelles correctes sont en place, vous pouvez utiliser l'audit pour voir si votre fichier est accessible ou non par fail2ban.
j'ai utilisé
auditctl -w /var/log/phpmyadmin_auth.log -p warx -k phpmyadmin_fail2ban
la source