WordPress/Joomla/404 + Fail2Ban = Ochrona przed brute force attacks

WordPress/Joomla/404 + Fail2Ban = Ochrona przed brute force attacks

O samym fail2ban już pisałem przy okazji postfix-a. Teraz czas przyszedł na WordPress i Joomle oraz inne dziwne wynalazki :)

Oczywiście fail2ban musi być zainstalowany :)

apt-get install fail2ban

To na początek. W przypadku obu skryptów musimy dodać odpowiednie dodatki które nam do logów wyplują info o nie udanej próbie logowania. Tak więc:

Joomla: http://extensions.joomla.org/extension/fail2ban
oraz
WordPress: https://pl.wordpress.org/plugins/wp-fail2ban/

Ważna informacja. Domyślnie plugin WordPress-a info leci do /var/log/auth.log natomiast plugin Joomli error.log danego virtualnego serwera, najmniej w moim przypadku tak było.

1. Joomla

edytujemy plik /etc/fail2ban/jail.conf

vi /etc/fail2ban/jail.conf

Dodajemy wpis:

[joomla-error]
enabled = true
port = http,https
filter = joomla-error
logpath = /web/*/log/error.log
maxretry = 1

Musimy dopasować logpath, w moim przypadku ma czytać z * czyli każdego podkatalogu plik error.log znajdujący się w podkatalogu log. Parametr maxretry to już mówi sam za siebie :) – dopasować też trzeba pod siebie

Teraz musimy utworzyć filtr:

vi /etc/fail2ban/filter.d/joomla-error.conf

wrzucamy:

[Definition]
failregex = [[]client []] .* user .* authentication failure.*

ignoreregex =

wsio :)

2. WordPess

Ponownie idziemy do edycji konfiguracji jail-a.

vi /etc/fail2ban/jail.conf

dodajemy:

[wordpress]
enabled = true
filter = wordpress
logpath = /var/log/auth.log
maxretry = 3
port = http,https

Następnie dorzucamy filtry:

vi /etc/fail2ban/filter.d/wordpress.conf

jak poniżej:

# Fail2Ban configuration file
#
# Author: Charles Lecklider
#

[INCLUDES]

# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf


[Definition]

_daemon = wordpress

# 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 "" can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P[\w\-.^_]+)
# Values:  TEXT
#
failregex = ^%(__prefix_line)sAuthentication failure for .* from $

# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =

Opis tego też znajduje się w plugin-ie.

3. Coś extra

Zdarza się, co miałem ostatnio, iż boty latały po stronie i szukały admina lub phpmyadmina w root strony lub w w kombinacji z url co dawało 404. Na takie zachowanie też jest prosta metoda, co znalazłem jakiś czas temu na gicie i lekko coś dodałem od siebie.

Więc idziemy do edycji konfiguracji i dorzucamy:

[apache-nokiddies]
enabled  = true
port     = http,https
filter   = nokiddies
logpath  = /web/*/log/access.log
maxretry = 1

Tutaj widać, że badany jest access.log witryny.

Tworzymy filtr:

vi /etc/fail2ban/filter.d/nokiddies.conf

i dodajemy:

[Definition]
failregex = ^ .*"GET .*w00tw00t
# try to access to admin directory
            ^ .*"GET .*admin.* 403
            ^ .*"GET .*admin.* 404
            ^ .*"GET .*administrator.* 404
            ^ .*"GET .*administrator.* 200
# try to access to install directory
            ^ .*"GET .*install.* 404
# try to access to phpmyadmin
            ^ .*"GET .*dbadmin.* 404
            ^ .*"GET .*myadmin.* 404
            ^ .*"GET .*MyAdmin.* 404
            ^ .*"GET .*mysql.* 404
            ^ .*"GET .*websql.* 404
            ^ .*"GET \/pma\/.* 404
# try to access to wordpress (we use another CMS)
            ^ .*"GET .*wp-content.* 404
            ^ .*"GET .*wp-login.* 404
# try to access to typo3 (we use another CMS)
            ^ .*"GET .*typo3.* 404
# try to access to tomcat (we do not use it)
            ^ .*"HEAD .*manager.* 404
# try to access various strange scripts and malwares
            ^ .*"HEAD .*blackcat.* 404
            ^ .*"HEAD .*sprawdza.php.* 404

ignoreregex =

I wrzucam link do oryginału :) co by nie było: https://github.com/miniwark/miniwark-howtos/wiki/Fail2Ban-setup-for-Apache.

Wszystko :)