In meinem Bestreben, übermäßige fehlgeschlagene phpMyAdmin
Anmeldeversuche mit zu blockieren fail2ban
, habe ich ein Skript erstellt, das die fehlgeschlagenen Versuche in einer Datei protokolliert:/var/log/phpmyadmin_auth.log
Benutzerdefiniertes Protokoll
Das Format der /var/log/phpmyadmin_auth.log
Datei lautet:
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
Benutzerdefinierte Filter
[Definition]
# Count all bans in the logfile
failregex = phpMyadmin login failed with username: .*; ip: <HOST>;
phpMyAdmin Gefängnis
[phpmyadmin]
enabled = true
port = http,https
filter = phpmyadmin
action = sendmail-whois[name=HTTP]
logpath = /var/log/phpmyadmin_auth.log
maxretry = 6
Das fail2ban
Protokoll enthält:
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
Wenn ich ausstelle:
sudo service fail2ban restart
fail2ban
E-Mails, von denen ich sage, dass ssh
sie neu gestartet wurden, aber ich erhalte keine solche E-Mail über mein phpmyadmin
Gefängnis. Wiederholte fehlgeschlagene Anmeldungen bei führen phpMyAdmin
nicht zum Senden einer E-Mail.
Habe ich ein kritisches Setup verpasst? Ist der reguläre Ausdruck meines Filters falsch?
Update: Änderungen gegenüber der Standardinstallation hinzugefügt
Beginnend mit einer sauberen fail2ban
Installation:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Ändern Sie die E-Mail-Adresse in meine eigene, Aktion in:
action = %(action_mwl)s
Fügen Sie Folgendes hinzu: jail.local
[phpmyadmin]
enabled = true
port = http,https
filter = phpmyadmin
action = sendmail-whois[name=HTTP]
logpath = /var/log/phpmyadmin_auth.log
maxretry = 4
Fügen Sie Folgendes hinzu: /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 =
Neu starten fail2ban
sudo service fail2ban restart
PS: Ich mag Eier
quelle
Antworten:
Das ist in Ordnung, aber warum nicht die Apache-Funktionalität verwenden, um fehlgeschlagene Anmeldungen zu protokollieren?
Fügen Sie diese Zeilen zu Ihrer Apache-Konfiguration (dh: /etc/apache2/conf.d/phpmyadmin.conf) im entsprechenden VirtualHost-Abschnitt hinzu:
Erstellen Sie dann den Fail2Ban-Filter:
/etc/fail2ban/filter.d/phpmyadmin.conf
Fügen Sie nun das Gefängnis zu /etc/fail2ban/jail.local hinzu
Starten Sie Apache und fail2ban neu:
und Sie sind fertig, Sie brauchen keine PHP-Skripte usw.
quelle
jail.conf
, sondern eine Kopie erstellenjail.local
Sie sollten Ihr Skript so ändern, dass der Zeitstempel in die Protokolldateien aufgenommen wird. Ohne dies funktioniert fail2ban nicht
Verwenden
fail2ban-regex /var/log/phpmyadmin_auth.log /etc/fail2ban/filter.d/phpmyadmin.conf
Sie diese Option, um Ihre Regex zuerst zu überprüfen.Ich konnte fail2ban erfolgreich mit Ihrer ursprünglichen Konfiguration starten (vor jail.local).
Sobald der richtige reguläre Ausdruck vorhanden ist, können Sie mithilfe der Prüfung feststellen, ob auf fail2ban auf Ihre Datei zugegriffen wird oder nicht.
ich benutzte
auditctl -w /var/log/phpmyadmin_auth.log -p warx -k phpmyadmin_fail2ban
quelle