Niestandardowy filtr fail2ban dla prób brutalnej siły phpMyadmin

9

W mojej phpMyAdminpróbie zablokowania nadmiernej liczby nieudanych prób logowania fail2banutworzyłem skrypt, który rejestruje nieudane próby pliku:/var/log/phpmyadmin_auth.log


Niestandardowy dziennik

Format /var/log/phpmyadmin_auth.logpliku 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

fail2banDziennika 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

fail2bane-maile z informacją ssho ponownym uruchomieniu, ale nie otrzymuję takiego e-maila na temat mojego phpmyadminwięzienia. Powtarzające się nieudane logowanie phpMyAdminnie 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 fail2baninstalacji:

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

Michael Robinson
źródło
1
Wygląda na to, że w konfiguracji nie odbiera się nowego więzienia. Podaj dokładnie, które pliki zmieniłeś.
mgorven
@mgorven Zaktualizowałem swoje pytanie kompleksowym przeglądem tego, co zmieniłem
Michael Robinson
Czy te rzeczywiste próby logowania do Twojej instancji phpmyadmin czy tylko skanery szukają phpmyadmin?
Scott Pack
Sądzę, że są tymi ostatnimi
Michael Robinson

Odpowiedzi:

8

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:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{userID}n %{userStatus}n" pma_combined
CustomLog /var/log/apache2/phpmyadmin_access.log pma_combined

Następnie utwórz filtr fail2ban:

/etc/fail2ban/filter.d/phpmyadmin.conf

[Definition]
denied = mysql-denied|allow-denied|root-denied|empty-denied
failregex = ^<HOST> -.*(?:%(denied)s)$
ignoreregex =

Teraz dodaj więzienie do /etc/fail2ban/jail.local

[phpmyadmin]
enabled = true
port = http,https
filter = phpmyadmin
logpath = /var/log/apache2/phpmyadmin_access.log

Zrestartuj apache i fail2ban:

service  apache2 reload
service fail2ban reload

i gotowe, nie potrzebujesz skryptów php itd.

Spacebiker
źródło
3
Nie edytuj bezpośrednio jail.conf, zamiast tego utwórz kopięjail.local
NineCattoRules
Masz rację @ Simone, zmodyfikowałem swoją odpowiedź, dzięki
Spacebiker
Mam problem z rozwiązaniem. Zobacz: serverfault.com/questions/815396/…
2
  1. Powinieneś zmienić skrypt, aby dołączał znacznik czasu do plików dziennika. Bez tego fail2ban nie będzie działać

  2. służy fail2ban-regex /var/log/phpmyadmin_auth.log /etc/fail2ban/filter.d/phpmyadmin.confdo weryfikacji najpierw wyrażenia regularnego.

  3. Mógłbym pomyślnie uruchomić fail2ban przy użyciu oryginalnej konfiguracji (przed jail.local)

    Oct  7 00:42:07 hostname yum: Installed: python-inotify-0.9.1-1.el5.noarch 
    Oct  7 00:42:08 hostname yum: Installed: fail2ban-0.8.4-29.el5.noarch
    Oct  7 00:42:10 hostname yum: Installed: phpMyAdmin-2.11.11.3-2.el5.noarch
    Oct  7 01:01:03 hostname fail2ban.server : INFO   Changed logging target to SYSLOG for Fail2ban v0.8.4
    Oct  7 01:01:03 hostname fail2ban.jail   : INFO   Creating new jail 'phpmyadmin'
    Oct  7 01:01:03 hostname fail2ban.jail   : INFO   Jail 'phpmyadmin' uses Gamin
    Oct  7 01:01:03 hostname fail2ban.filter : INFO   Set maxRetry = 2
    Oct  7 01:01:03 hostname fail2ban.filter : INFO   Set findtime = 600
    Oct  7 01:01:03 hostname fail2ban.actions: INFO   Set banTime = 600
    Oct  7 01:01:03 hostname fail2ban.jail   : INFO   Creating new jail 'ssh-iptables'
    Oct  7 01:01:03 hostname fail2ban.jail   : INFO   Jail 'ssh-iptables' uses Gamin
    Oct  7 01:01:03 hostname fail2ban.filter : INFO   Added logfile = /var/log/secure
    Oct  7 01:01:03 hostname fail2ban.filter : INFO   Set maxRetry = 5
    Oct  7 01:01:03 hostname fail2ban.filter : INFO   Set findtime = 600
    Oct  7 01:01:03 hostname fail2ban.actions: INFO   Set banTime = 600
    Oct  7 01:01:03 hostname fail2ban.jail   : INFO   Jail 'phpmyadmin' started
    Oct  7 01:01:03 hostname fail2ban.jail   : INFO   Jail 'ssh-iptables' started
    Oct  7 01:10:54 hostname fail2ban.jail   : INFO   Jail 'phpmyadmin' stopped
    Oct  7 01:10:55 hostname fail2ban.jail   : INFO   Jail 'ssh-iptables' stopped
    Oct  7 01:10:55 hostname fail2ban.server : INFO   Exiting Fail2ban
    Oct  7 01:10:56 hostname fail2ban.server : INFO   Changed logging target to SYSLOG for Fail2ban v0.8.4
    Oct  7 01:10:56 hostname fail2ban.jail   : INFO   Creating new jail 'phpmyadmin'
    Oct  7 01:10:56 hostname fail2ban.jail   : INFO   Jail 'phpmyadmin' uses Gamin
    Oct  7 01:10:56 hostname fail2ban.filter : INFO   Added logfile = /var/log/phpmyadmin_auth.log
    
  4. 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

Nehal Dattani
źródło
Mam problem z rozwiązaniem, zobacz: serverfault.com/questions/815396/…