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 :)