W mojej phpMyAdmin
próbie zablokowania nadmiernej liczby nieudanych prób logowania fail2ban
utworzyłem skrypt, który rejestruje nieudane próby pliku:/var/log/phpmyadmin_auth.log
Niestandardowy dziennik
Format /var/log/phpmyadmin_auth.log
pliku to:
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
Filtr niestandardowy
[Definition]
# Count all bans in the logfile
failregex = phpMyadmin login failed with username: .*; ip: <HOST>;
Więzienie phpMyAdmin
[phpmyadmin]
enabled = true
port = http,https
filter = phpmyadmin
action = sendmail-whois[name=HTTP]
logpath = /var/log/phpmyadmin_auth.log
maxretry = 6
fail2ban
Dziennika zawiera:
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
Kiedy wystawiam:
sudo service fail2ban restart
fail2ban
e-maile z informacją ssh
o ponownym uruchomieniu, ale nie otrzymuję takiego e-maila na temat mojego phpmyadmin
więzienia. Powtarzające się nieudane logowanie phpMyAdmin
nie powoduje wysłania wiadomości e-mail.
Czy przegapiłem jakąś krytyczną konfigurację? Czy wyrażenie regularne mojego filtra jest nieprawidłowe?
Aktualizacja: dodano zmiany w stosunku do domyślnej instalacji
Począwszy od czystej fail2ban
instalacji:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Zmień adres e-mail na własny, wykonaj następujące czynności:
action = %(action_mwl)s
Dołącz następujące elementy do jail.local
[phpmyadmin]
enabled = true
port = http,https
filter = phpmyadmin
action = sendmail-whois[name=HTTP]
logpath = /var/log/phpmyadmin_auth.log
maxretry = 4
Dodaj następujące elementy do /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 =
Uruchom ponownie fail2ban
sudo service fail2ban restart
PS: Lubię jajka
źródło
Odpowiedzi:
W porządku, ale dlaczego nie użyć funkcji Apache do logowania nieudanych logowań?
Dodaj te wiersze do Apache Config (tj .: /etc/apache2/conf.d/phpmyadmin.conf) w odpowiedniej sekcji VirtualHost:
Następnie utwórz filtr fail2ban:
/etc/fail2ban/filter.d/phpmyadmin.conf
Teraz dodaj więzienie do /etc/fail2ban/jail.local
Zrestartuj apache i fail2ban:
i gotowe, nie potrzebujesz skryptów php itd.
źródło
jail.conf
, zamiast tego utwórz kopięjail.local
Powinieneś zmienić skrypt, aby dołączał znacznik czasu do plików dziennika. Bez tego fail2ban nie będzie działać
służy
fail2ban-regex /var/log/phpmyadmin_auth.log /etc/fail2ban/filter.d/phpmyadmin.conf
do weryfikacji najpierw wyrażenia regularnego.Mógłbym pomyślnie uruchomić fail2ban przy użyciu oryginalnej konfiguracji (przed jail.local)
Po wprowadzeniu poprawnego wyrażenia regularnego możesz użyć audytu, aby sprawdzić, czy dostęp do pliku jest wykonywany przez fail2ban.
użyłem
auditctl -w /var/log/phpmyadmin_auth.log -p warx -k phpmyadmin_fail2ban
źródło